technix

Забавная багофича 64-битной Windows

Как-то раз наткнулся я на забавную багофичу, связанную с особенностями работы Windows. Эта заметка - о ней и о том чем она вызвана :)

Мне нужно было запустить команду «query session» из перлового скрипта.
Вот так работает:
C:\>query session
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
services                                    0  Disc
>console           smozhayskiy               1  Active
rdp-tcp                                 65536  Listen

Теперь пробуем из перла:
C:\>perl -e "print `query session`;"
'query' is not recognized as an internal or external command,
operable program or batch file.
 
C:\>perl -e "print `cmd /c query session`;"
'query' is not recognized as an internal or external command,
operable program or batch file.
 
C:\>perl -e "print `C:\\Windows\\System32\\query.exe session`;"
'C:\Windows\System32\query.exe' is not recognized as an internal or external command,
operable program or batch file.

Что за хрень? Ведь просто из консоли работает! И файл существует и лежит по правильному пути:
C:\>dir c:\Windows\System32\query.exe
Volume in drive C has no label.
Volume Serial Number is 0217-D54C
 
Directory of c:\Windows\System32
 
14.07.2009  03:39            16 384 query.exe
               1 File(s)         16 384 bytes
               0 Dir(s)  13 338 664 960 bytes free

После недолгого исследования удалось выяснить причину столь необычного поведения.
Сама Windows у нас была 64-битная, а Perl, который в ней установлен - 32-битный.
Ну так вот, когда из 32-битного приложения на 64-битной системе вызываются системные приложения из папки System32, они на самом деле вызываются из папки SysWOW64 (об этом написано вот здесь: http://msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29.aspx).
Но тут Microsoft подложила нам баальшую свинью – не все приложения, которые есть в папке System32, есть и в папке SysWOW64! И вот этот query.exe присутствует только в 64-битной версии, а из 32-битных приложений его вызвать нельзя. Ну, вернее, почти нельзя – в статье по ссылке описано как обойти это ограничение:
C:\>perl -e "print `C:\\Windows\\Sysnative\\query.exe session`;"
SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
services                                    0  Disc
>console           smozhayskiy               1  Active
rdp-tcp                                 65536  Listen

JFYI. Может, пригодится когда-нибудь.
technix

OSDN 2012 - впечатления

В очередной раз посетил киевскую OSDN-конференцию. Целью визита в этот раз было просто увидеть старых знакомых, ну и заодно посмотреть как поживает opensource-движение сейчас. Как обычно, я постил самые интересные моменты в твиттер, их можно найти по тэгу #osdn.

Мои впечатления от докладов:

* "Технические" доклады про pf-kernel, 0MQ и т.п. прослушал без особого интереса, поскольку уже далек от этих вещей. А вот рассказ про обновление Linux с минимальным даунтаймом очень понравился. И живая демонстрация удалась, ничего не сломалось, как обычно бывает при демонстрации работающей системы :)

* Понравился рассказ про историю мобильных ОС - обожаю скриншоты раритетных интерфейсов :) Вспомнили и Newton, и Palm, и Psion, и других ветеранов, а также попытки СПО вылезти на этот рынок.

* Доклад про "особенности использования запросов в объектной СУБД db4o" я пропустил, и как выяснилось - зря. Наглядная демонстрация того, насколько наше образование оторвано от реалий современного IT-мира. Хотя я и сам писал похожие "статьи ни о чем" в сборники научных работ :(

* Презентация Firefox OS была сделана, конечно же, в Firefox. Как оказалось, Mozilla со своей ОС планирует занять сегмент между "тупофонами" и дешевыми Андроидными телефонами, и в этом году в Бразилии поступят в продажу смартфоны с Firefox OS. Радует, что порог вхождения для разработчиков очень низкий - достаточно знаний стандартного стека веб-технологий HTML5, CSS3 и Javascript. Интересно будет понаблюдать за ее развитием.

* Самым интересным лично для меня был доклад Алексея Новодворского из ALT Linux. Он заслуживает того, чтобы поговорить о нем поподробнее, поскольку Алексею удалось четко сформулировать мои смутные соображения по поводу современного состояния opensource.

На OSDN-конференцию я езжу с 2002 года (т.е. с самого начала) и прекрасно помню, каким было opensource-сообщество в то время. "Linux можно и нужно использовать на десктопе", "Свободный софт лучше потому что есть доступ к исходникам", "Microsoft - наш общий враг", ну и так далее.
За десять лет изменилось многое.
Пока Linux боролся за десктоп, выяснилось, что сам по себе десктоп никому уже и не нужен - война теперь идет за мобильные платформы. Общего врага вроде как и не стало - Microsoft участвует в разработке opensource (как он это делает - другой вопрос), да и не монополист он больше, в мобильной сфере фактически идет борьба между модифицированными Linux и BSD :) Факт наличия исходников, как оказалось, не является 100% аргументом в споре "какое ПО лучше - свободное или коммерческое". Ну и наконец, очередной дистрибутив Linux сейчас никому особо и не нужен. В качестве примера вспомнили о пресловутой BolgenOS - если бы он появился лет 10 назад, реакция сообщества была бы совершенно иной.
На мобильном рынке стало наглядно видно, что важен не продукт, а инфраструктура. Кому нужен андроидный планшет без Маркета и интеграцией с гугловскими сервисами? Кому нужен iPad без AppStore, iCloud и iTunes? В одном из докладов упоминалось о существовании планшета под управлением Linux с KDE. Но сам факт наличия там СПО делает его привлекательным разве что для гиков, которых совсем немного.
Тем не менее, сейчас свободный софт вполне себе в мейнстриме - он живет и развивается как "часть комплексного продукта". А вот цельного "продукта" opensource-сообщество пока предложить не может. Посмотрим, что будет в следующие 10 лет :)
technix

Frenzy 1.4

Тихо, незаметно и совершенно неожиданно для меня вышла Frenzy 1.4. Спасибо Егору за то, что нашел время и собрал-таки исошники. Конечно, многие ожидали и перехода на 9.0, и полной версии "как раньше" (1.4 выпущена только в лайт-версии с минимумом софта). Но если учесть, что версия 1.3 вышла два года назад - то это все-таки прогресс. Значит, проект не забыт и не заброшен :)

Подробности, как обычно, здесь: http://frenzy.org.ua/ru/releases/1.4/

К тому же я перетащил исходники Frenzy с SourceForge на Github в надежде, что кто-то еще заинтересуется проектом либо форкнет его :)
technix

Демосцена: номинанты Scene.org 2011 года

Неожиданно узнал, что выложен список номинантов на Scene.org awards за 2011 год. Немного о том, что мне понравилось:

Chaos Theory 4k (KK remix) by DMA

Переделка известной демки Chaos Theory, но вместо 64 килобайт оригинала эти умельцы умудрились уместить практически те же эффекты и музыку в 4 килобайта, не особо потеряв в качестве.

смотреть на Youtube | скачать | pouet.net

Michigan by Loonies

Просто красивые эффекты с частицами, и всего 4 килобайта. Завораживающее зрелище.

смотреть на Youtube | скачать | pouet.net

Numb Res by CNCD & Fairlight

Здесь имется еще более красивые эффекты с частицами, но на этот раз черно-белые. Цифры появляются и исчезают, в то время как закадровый голос их озвучивает. Затягивает :)

смотреть на Youtube | скачать | pouet.net

Shake off the dust by Elude

Понятно, что качество графики на Amiga не выдерживает никакой конкуренции с PC. Но здесь этот недостаток превращен в достоинство - демо смотрится очень стильно. Лично мне очень нравится фрагмент с 1:30 по 2:00 =)

смотреть на Youtube | скачать | pouet.net

Spin by Andromeda Software Development

Привет из 80-х. Подсветка людей, машин и животных, в стиле "Трона", простые текстуры, из колонок звучит синтпоп. По стилю совсем непохоже на предыдущие работы ASD. Не самая лучшая их работа, но однозначно самая оригинальная.

смотреть на Youtube | скачать | pouet.net

Struct by Outracks

Кубики!!! Много разноцветных кубиков! К тому же они еще и переливаются! В общем, красиво, и даже не надоедает после просмотра.

смотреть на Youtube | скачать | pouet.net

We Crave Sustenance by PlayPsyCo

Загадочная четырехлапая конструкция шагает по планете. В наличии много спецэффектов и отличная синхронизация с музыкой. Рекомендуется к просмотру.

смотреть на Youtube | скачать | pouet.net

DUBrovnik by Gammel Opland af 1891

Честно говоря, демка скучновата, но эффекты местами очень хороши. Один только морфинг надписей в начале чего стоит.

смотреть на Youtube | скачать | pouet.net

Azathioprine by Alcatraz

Ну вот мы и дожили до момента, когда полноценные демо можно писать на JavaScript. Спасибо Mozilla Foundation за изобретение WebGL :) Честно говоря, смотря это демо в браузере, с трудом верится что это не флеш и не встроенное в страницу видео. Так что лучше смотрите онлайн-версию этой демки в Chrome или FF - впечатлений хватит надолго =)

онлайн-версия | смотреть на Youtube | скачать | pouet.net
technix

PHP: фрактал плохого дизайна

Наткнулся на огромную статью, посвященную разбору недостатков PHP:
http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
Увлекательное чтение. Вот небольшой фрагмент из статьи (о, как знакомо :)

Взгляните на этот код, взятый из какой-то документации по PHP:

@fopen('http://example.com/not-existing-file', 'r');

Что он делает?
  • Если PHP был скомпилирован с --disable-url-fopen-wrapper, это не заработает. (В документации не говорится, что значит "не заработает" - возвращает null, вызывает исключение?). Обратите внимание, что этот флаг был удален в PHP 5.2.5.
  • Если в php.ini отключен параметр allow_url_fopen, это тоже не заработает.
  • Поскольку там есть @, предупреждение о несуществующем файле не будет выдано.
  • Но оно будет выдано если в php.ini установлен параметр scream.enabled.
  • Или же если параметр scream.enabled установлен вручную через ini_set.
  • Но только не в случае, когда не выставлен нужный уровень error_reporting.
  • Если предупреждение все же будет выдано, то, куда оно попадет, зависит от параметра display_errors, опять-таки в php.ini. Или ini_set.
Я не могу сказать, как будет вести себя вызов этой безобидной функции, не изучив флаги компиляции, конфигурацию сервера и конфигурацию в моей программе. И все это - стандартное поведение.
technix

Вроде бы о FreeBSD, но не совсем



Я так думаю, все уже успели обсудить довольно провокационный пост о миграции Рамблера с FreeBSD на Linux, и другой, менее провокационный, но не менее интересный.

Ну и как ожидалось, практически все комментаторы доказывают что автор неправ, FreeBSD готовить в Рамблере не умеют и все такое прочее (что подтверждает старую истину - что бы ты ни делал, тебя всегда найдут за что раскритиковать). Однако если отбросить в сторону эмоции, получаем следующее:
1. В FreeBSD действительно есть проблемы, описанные в этом посте. Возможно, для кого-то они проблемами не являются, но они есть.
2. Решение этих проблем (а они на 90% решаемы) занимает неоправданно много времени и сил.
3. В других ОС этих проблем нет (хотя естественно есть другие, но они некритичны в конкретном случае).
4. В результате выбирают ту систему, которая дешевле в обслуживании, что выгоднее для бизнеса в целом.

Когда в нашем университете ставился вопрос о переводе факультета информатики на свободный софт (для справки: это было 6 назад), рассматривались как различные Linux-дистрибутивы, так и FreeBSD. И несмотря на то, что я был большим фанатом FreeBSD, настаивал я именно на том, чтобы установить везде Linux. Причина весьма простая - после установки "из коробки" популярный на тот момент ASP Linux 10 требовал минимум доводки, чтобы обеспечить 90% необходимой нам функциональности.
Кому интересно, может ознакомиться с подробностями здесь: http://lists.linux.ru.net/pipermail/freeschool/2005-October/000820.html

По той же самой причине на рабочем ноуте у меня теперь стоит Ubuntu - мне стало жаль времени, затрачиваемого на "допиливание" системы под себя (даже с учетом того, что все конфиги у меня были готовые), а уж про обновление приложений и говорить нечего. К тому же программисту под Linux живется намного комфортнее.

Похоже, что единственное место, где FreeBSD еще долго не будет сдавать позиции - это сетевые шлюзы, маршрутизаторы и прочая сетевая инфраструктура. Сетевой стек и сопуствующий софт в FreeBSD всегда были на высоком уровне, проблемы с обновлением софта на таких машинах совершенно неактуальны, ну и большой простор для тюнинга. Даже при беглом просмотре планов на будущее FreeBSD 9 видно, что именно в этом направлении сосредоточены основные усилия разработчиков.

В общем, что я сказать-то хотел? Не стоит упираться только в одну операционную систему (или язык программирования, или еще что-нибудь). Для каждой задачи стоит подбирать наиболее оптимальный инструмент и не тратить свое драгоценное время.

P.S. Почему все время выводы у меня получаются в стиле Капитана Очевидность? Ну а с другой стороны, что еще тут скажешь?
technix

I love GIT

Сейчас, когда git безумно популярен, писать в очередной раз о том что "git - это круто" как-то совсем не круто и напоминает "откровения Капитана Очевидность". Но тем не менее мне есть что сказать :)

Я познакомился с git-ом всего год назад, на хакатоне во время Perl Mova, но пользоваться им в дальнейшем почему-то не стал. Второе знакомство с ним состоялось, когда начал изучать Rails - в весьма хорошем туториале было недвусмысленно сказано, что без git делать в мире рельс нечего. И только тогда я все-таки оценил его преимущества. С тех пор практически во всех моих софтовых проектах я использовал git в качестве системы контроля версий (даже если сам проект хранится в другой VCS - для локальных модификаций я все равно пользуюсь гитом).

Что же стало для меня killer features?
  • Разделенность удаленного и локального репозитория. Я могу сколько угодно коммитить и откатывать код, а потом отправить на сервер только финальный вариант (вместе со всей историей)
  • Бранчи. Мало того, что создавать их очень просто, между ними очень легко переключаться, что открывает массу возможностей. Например, в данный момент в проекте у меня три ветки - одна основная, одна с экспериментальной фичей и еще одна, в которой эта фича разрабатывается. Изменения вносятся в devel-ветку, как только они успешно проходят тесты - они вливаются в экспериментальную ветку, и потом в конце концов я волью эту ветку в основную. Из-за этого в графическом интерфейсе к git история версий напоминает карту метро :)
  • "Машина времени" - возможность вернуться к любому коммиту в дереве. Я пользовался этой штукой неоднократно, когда выяснялось что поломана фича не покрытая тестами - делал новый тест, затем откатывался постепенно до места, начиная с которого была поломана фича, делал там новый бранч, в нем работал и затем вносил фикс опять в основную ветку.

А еще я из палок и веревок cygwin и gitosis соорудил git-сервер на Windows (да, мне приходится работать не только в юникс-системах). Сначала я хотел написать и об этом, но какой смысл, если все делалось вот по этой инструкции? Правда, не все прошло так гладко, пришлось делать rebaseall в cygwin (см. подробнее здесь) и немного править PATH, чтобы пользоваться не cygwin-овским гитом, а MSysGit (виндовым портом git, который содержит в себе в том числе и графическую оболочку)

В общем git - это круто, если вы еще им не пользуетесь - попробуйте :)
technix

HTC против Linux Core Dev - 0:1

Это краткий пересказ вот этой заметки.

Все, я полагаю, в курсе, что Android выходит под свободной лицензией, и все изменения, которые производители телефонов вносят в ядро системы, должны быть опубликованы сразу же после выпуска телефона, согласно требованиям GPLv2. Для разработчиков это имеет большое значение, однако производители, похоже, относятся не слишком серьезно к требованиям лицензии и затягивают выкладывание исходников на неопределенный срок.

Сообществу такое поведение не очень-то нравилось, поэтому в октябре 2010 года, когда HTC "забыла" выложить ядро для G2, Стивен Шульц решил напомнить им об этом. Что же ответили в HTC?

Спасибо, что связались с Центром Технической Поддержки HTC. Наша компания выкладывает на developer.htc.com исходные тексты ядра для недавно выпущенных устройств так быстро, насколько это возможно. Мы выкладываем их в течение 90-120 дней. Этот срок вполне согласуется с требованиями open source сообщества.

Стивен не сдался и в ответ привел цитаты из GPLv2, где ясно было сказано - исходники должны публиковаться вместе (т.е. одновременно) с выпущенным программным продуктом. Спустя несколько дней HTC все-таки выполнили требования лицензии.

История эта сама по себе не новость - она произошла давно и не привлекла особого внимания, но... дальше было интереснее :)

Через несколько дней после публикации того самого ответа "90-120 дней" Мэтт Мэкколл, разработчик ядра Linux, наткнулся на сообщение от некого Мартина с email-адресом из домена @htc.com. Сообщение было отправлено в группу Linux.kernel и касалось низкоуровневой проблемы, которая для нас значения не имеет. Нас больше интересует ответ Мэтта:

Дорогой Мартин.

А вы случайно не из того ли HTC, который упоминается здесь?

Если да, пожалуйста, повторите вопрос через 90-120 дней. А пока вы уж как-нибудь сами.

Такая вот история :)

P.S. Вы думаете, к следующим моделям телефонов они стали выкладывать ядро сразу же? Наверное, стоит спросить у HTC, где ядро от Thunderbolt, без которого довольно сложно, если не сказать невозможно, начинать делать собственные ROM-образы.