thekonst.net разделы   пропаганда :: автор :: программизм :: писанина :: резюме :: фото :: ::
 
[26.05.03] неделя макинтош
[17.05.03] заговор и зеркало
[14.05.03] львовское путешествие
[25.04.03] вождь революции подло расстрелян
[07.04.03] работа, вирусы и C++
  [26.03.03] поиски хазики
[21.03.03] блоги и Ирак
[20.03.03] трансильванские реалии
[20.03.03] мерчендайзинг от Исаии
[11.03.03] харьковские новости
  [ подписка ]
[ архив .. ]
07 Oct 2001 :: Наконец-то я выпустил centericq 4.0.0. Этот релиз содержит массу новых возможностей, среди которых имеются invisible list, группы контактов и поиск white pages. Скачать можно здесь... [ дальше.. ]

30 May 2005 :: Отдыхать в Египте можно исключительно грея на солнце пузо и купаясь в Красном море. Однако, через несколько дней такой стиль начинается надоедать. Или, как это случилось со мной, начинает заедать любознательность... [ дальше.. ]

22 Dec 2002 :: Я чуть не помер от истерики. Какие познания!.. [ дальше.. ]

[ 7th Apr 2003 ] работа, вирусы и C++ | 15 комментариев | комментировать

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

Inside iSee Media

Ну, надеюсь, что понятно сразу о каком разработчике речь. Тем более, что я уже обещал поделиться первыми впечатлениями, которые, как известно, самые сильные в любом занятии. В течение предыдущих счастливых четырех лет непрерывного профессионального программирования под Unix-системы, на новой работе мне пришлось опять окунуться с головой в мир операционной системы от Microsoft и ее библиотек. Приятно, что направление, связанное с сетями и коммуникациями в моей карьере, сохранилось из здесь. Одной из первых задач на новой фирме стала реализация выкладывания панорамных изображений, генерируемых программой Photovista, на сервер, что занимается их хранением и показом клиентам, или по-простому, - Zoom Image Server. Оба продукта вместе с их возможностями описаны на сайте фирмы. Более того, по-моему, их там даже можно купить.

За месяц работы в офисе начала образовываться довольно приятная атмосфера юмора и взаимных незлобных подколов. Так, например, по инициативе администратора - румына, которому очень нравится все русское, всему остальному офису были даны имена-отчества. Причем, если румынское имя носителя не имело аналога в русском языке, брали похожее. Так, Михай сын Валера (Valer - имя такое) стал Михаилом Валерьевичем, а Раду сын Джорджиу - Родионом Георгиевичем (собственно, автор идеи). Когда остальные узнали, что и их будут так называть, узнать имя отца стало труднее, но нам все равно удалось. Хит сезона - Хорациу сын Мирчи, ставший Харитоном Макаровичем с легкой руки вашего непокорного :)

Еще одной интересной особенностью офиса является то, что в нем все говорят по-румынски, поэтому языковой практики у меня теперь -- хоть отбавляй. Даже тем двум коллегам, что знают русский, румынский приходится родным языком. Довольно ощутимое отличие от предыдущего места работы, куда иногда заезжали менеджеры-индусы, а ребята с Украины практически принципиально не интересовались румынским, общаясь с местными коллегами по-английски как могли. Нынешняя же языковая среда влияет и на названия разрабатываемых программных продуктов. Например, ковырясь в исходниках Photovista на предмет исправления какого-то хитрого MFC-шного бага (теперь я еще и в MFC специалист), и в течение долгого времени довольно безуспешно, я, естественно, рассердился и начал тихо материться. Вспоминая всех предыдущих авторов программы и их родственников, я добрался и непосредственно до названия, которое превратилось в Futovista, от румынского ругательства -- глагола a fute (е%ать).

MS Windows 2000 Professional

Начальство выбрало именно этот вариант ОС как платформу для разработки, и это звучало логично. Поэтому, вооружившись дистрибутивом, я приступил к установке. Винчестер объемом в 40Gb был поделен на две равные части для Windows и .. правильно, Linux. Несмотря на то, что работы под последний у меня нет, кто знает что будет? К тому же, после дня работы в графическом монстре всегда приятно перезагрузиться и поделать что-нибудь в командной строке bash. Это как медитация. Это успокаивает.

Инсталлировался Windows быстро и красиво. После первой перезагрузки что-то подтянул, пошуршал винтом и, пожалуйста -- подсказка по использованию с чекбоксом "show tips on next start". Uncheck, close -- спасибо, не надо.

Настроилось все с пол-пинка, настройки сети приехали из DHCP, Windows network с домен-контроллером.. Понаставил программ, настроил почту. Все удобно и красиво. Особенно Outlook.

Освоил работу с мышью. Забавно.

Два дня работы без проблем -- и я думаю, что не так уж все и плохо, как говорят. На третий день началось веселье: заглянув как-то раз в каталог WINNT, я обнаружил там кучу странных файлов EXE. Их имена выглядели сгенерированными случайно, но на фоне груды остальных, названных явно не с бОльшей фантазией, разобраться, свои они или не свои было трудно. Конечно, все это очень похоже на вирус. А когда система начала еще и зависать, а вход в нее начал начинаться с ошибки в программе explorer.exe, стало ясно, что пора лечиться.

Прием медикаментов оказался не самой простой процедурой. Стандартные инсталляторы, на которых построены дистрибутивы антивирусов, завершались резко и без предупреждения, так и не успев установиться. Может, к ним на запуске что-то прицеплялось и срабатывала встроенная защита -- проверка с немедленным exit(), а может и баг в вирусе не давал им отработать до конца, трудно сказать. Сканирование диска по сети показало, что практически все программы инфицированы, включая по старой доброй традиции и служебные EXE-шники Винды. Так что следующие полдня работы ушли на переустановку.

AIDS alert

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

После переустановки системы я первым делом поставил антивирь, который при чтении очередного спамоподобного письма обнаружил попытку вируса Klez самозапуститься. Операционная система, которая может пострадать только от того, что пользователь, не обладающий правами администратора, читает почту -- это дырявый унитаз, а не программный продукт, которому можно доверить результаты своего труда.

В общем, опыт показывает, что работать в Windows без установленного антивирусного монитора нельзя. Совсем не хочется ввязываться в спор Windows vs Linux, который вообще не имеет смысла. Живые факты из жизни -- вот действительно любопыная информация. Очевидно, что дизайнеры интерфейсов в Microsoft, как и заведующие маркетинговой частью не зря едят свой хлеб. Чего нельзя сказать о технических архитекторах. Наверняка из какой-нибудь спецификации следовало, что javascript или vbscript в электронных сообщениях имеет право запускать прикрепленные программы без ведома пользователя.

А выбор между Linux и Windows для настольной системы состоит только лишь в том, чему именно отдается предпочтение: удобству или стабильности. Опыт показывает, что это обратно пропорциональные вещи. Не знаю как вас, а меня это не удивляет. Просто естественная закономерность.

Visual C++

Большинство моих знакомых программистов на C++ любят STL. Я тоже люблю STL. И вовсе не из-за темплейтов, которыми я в повседневном программировании не очень-то пользуюсь, и не из-за высоты полета мысли товарища, что ее придумал. Просто не охота изобретать велосипед. Принцип таков: если существует какой-то код, делающий то, что мне нужно, и этот код доступен везде, где мне может понадобиться скомпилировать программу, то на кой черт мне писать свое? Писать аналогичный код, делающий то же самое, попросту бессмысленно. Поэтому моя любовь к STL не знает границ. Да что там -- если бы я однажды встретил девушку, которую зовут STL, женился бы не раздумывая.

Желание Microsoft изобрести свои стандарты и сделать несовместимыми с другими платформами программы написанные под Windows довольно очевидно. Посмотрим на класс CString -- широко использующуюся в программировании под Windows альтернативу std::string из STL. Мне непонятна причина, почему здесь поставлено все с ног на голову: для создания строки из char* используется макрос с чертовски интуитивным названием _T(), а вот обратное преобразование (CString -> const char*) делается автоматически (в std::string для этого есть специальный метод c_str). Видимо, чтобы почаще мешали C и C++. Самый эффективный подход, ничего не скажешь. Сколько при такой неаккураной мешанине вылазит проблем вроде некорректного обращения к памяти или memory leak, вообще говорить не приходится.

Мысль по поводу первого слова в названии Visual Studio. Линейка Builder от Borland плюс Delphi -- это visual, а среда от Microsoft -- Resource Editor Studio, не более. Просто из предлагаемой функциональности и терминологии.

И напоследок о Visual C++, моя самая любимая вещь -- константа ERROR_SUCCESS, которая наряду с такими, например, как ERROR_PROC_NOT_FOUND и ERROR_INVALID_PARAMETER говорит сама за себя. Успешное завершение по мнению этих ребят -- всего лишь разновидность ошибки :)

Open Source и Windows: the жопа

В самом начале заметки я уже упомянул свою первую задачу на новой работе. Технически это представляло собой передачу по HTTP протоколу методом POST пары полей для авторизации плюс файл с изображением. На стороне сервера все это обрабатывалось небольшим написанным за полчаса JSP скриптом. На стороне клиента Photovista -- программа для обработки изображений, должна была такой запрос сформировать, реализуя тривиальный HTTP клиент. То, что обычно делает браузер, когда посетитель сайта заполняет какие-то поля в форме, выбирает файл кнопкой "Browse..", после чего нажимает Submit и форма отправляется на веб-сервер. Единственная нетривиальность такого клиента состояла в пересылке файлов, которая почему-то оказалась слишком экзотической как для стороны JSP (пришлось ставить дополнительную библиотеку), так и для библиотек Visual C++, которые хоть и имели какие-то клиентские классы для HTTP, но их стандартная функциональность на пересылку файлов не распространялась.

Учитывая приближающийся дедлайн, отсутствие такой нужной вещи в библиотеках в готовом виде не внушало оптимизма. Поэтому, прежде чем начать разбираться самому в склеивании multipart POST запросов, я решил поискать готовые решения. Так как софт мы пишем коммерческий, использование исходников, распространяющихся под лицензией GNU, отпадало, что значительно сокращало мои шансы что-то найти. Я даже подумал об использовании внешнего wget, но слепливать вызов программы из командной строки с графическим интерфейсом в Windows -- не самая хорошая идея. Бредовая идея.

Тем не менее, вскоре я нашел библиотеку, которая меня поразила настолько, насколько это вообще было возможно. С ее названием, libcurl, в румынском языке тоже выходит довольно очевидный каламбур. Дело в том, что слово "cur" (кур) в оном языке означает "жопа", а определенный артикль единственного числа для существительных мужского рода образуется добавлением к слову окончания "ul" ("curul" == "the жопа"). Так что, убирай последнюю букву, или вставляй предпоследнюю "u", все равно жопа получается.

Тем не менее, несмотря на такое название, нельзя сказать, что libcurl написана через жопу. Вовсе нет. Бибилиотека являет собой редкое сочетания поразительной простоты использования с мощнейшей функциональностью, охватывающей практически все, что можно сделать с помощью протоколов HTTP и FTP. "Все" означает следующее: POST, GET и PUT в HTTP с возможностью передачи файлов, работы с cookies и авторизация по логину/паролю, чтение списков, закачка и скачивание файлов по FTP, использование proxy (в т.ч. тунеллинг), поддержка защищенных соединений по SSL, и черт еще знает чего. Кроме того, для любой операции можно определить функцию, вызывающуюся при посылке или получении данных. Поддерживается работа в режиме multithread. Мне трудно представить себе задачу с HTTP или FTP, которую нельзя было бы решить с помощью нескольких вызовов этой библиотеки. Качество кода иллюстрирует тот факт, что компилируется libcurl практически на любой платформе стандартным C компилятором и входит во многие дистрибутивы Linux. Также без проблем он собирается и под Windows. Я пользовался DLL вариантом.

Лицензирование библиотек с открытым кодом

Но что меня поразило еще больше, так это лицензия, с которой поставляется библиотека. Я должен был убедиться, что она не запрещает использование libcurl в коммерческих продуктах с закрытым исходником, к которым относится Photovista. То, что я прочитал в FAQ, порадовало меня не меньше, сам чем код.

6. License Issues

Curl and libcurl are released under a MIT/X derivate license *or* the MPL, the Mozilla Public License. To get a really good answer to your license conflict questions, you should study the MPL and MIT/X licenses and the license you are about to use and check for clashes yourself. This section is just a brief summary for the cases we get the most questions. (Parts of this section was much enhanced by Bjorn Reese.)

6.1. I have a GPL program, can I use the libcurl library?

Yes!

Since libcurl may be distributed under the MIT/X derivate license, it can be used together with GPL in any software.

6.2. I have a closed-source program, can I use the libcurl library?

Yes!

libcurl does not put any restrictions on the program that uses the library.

6.3. I have a BSD licensed program, can I use the libcurl library?

Yes!

libcurl does not put any restrictions on the program that uses the library.

6.4. I have a program that uses LGPL libraries, can I use libcurl?

Yes!

The LGPL license doesn't clash with other licenses.

6.5. Can I modify curl/libcurl for my program and keep the changes secret?

Yes!

The MIT/X derivate license practically allows you to do almost anything with the sources, on the condition that the copyright texts in the sources are left intact.

6.6. Can you please change the curl/libcurl license to XXXX?

No.

We have carefully picked this license after years of development and discussions and a large amount of people have contributed with source code knowing that this is the license we use. This license puts the restrictions we want on curl/libcurl and it does not spread to other programs or libraries that use it. The recent dual license modification should make it possible for everyone to use libcurl or curl in their projects, no matter what license they already have in use.

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

Жопа и Tomcat

А вот с настоящей жопой я столкнулся совершенно неожиданно -- там, где казалось бы ее ожидать совсем не следовало, -- на стороне сервера, в популярном продукте Tomcat, который используется в нашем решении как application server. Дело в том, что в поставку Zoom Image Server была включена версия 3 оного представителя семейства кошачьих. И, поэтому, когда я заметил, что соединение с браузером закрывается при попытке подачи POST запросов длиной более 100kb, я сразу начал думать плохо о браузере, вирусах и Windows. Полдня у меня ушло на проверку этого в разных условиях, с разных машин и разным софтом, дабы, локализовав проблему, понять кто виноват. Решение оказалось простым -- апгрейд Tomcat до версии 4, ибо невозможность подачи запросов POST длиной более 100kb оказалась багом, о котором, впрочем, я не нашел никакой информации в сети. А один хороший друг-джавист посоветовал мне вообще быть начеку с разными версиями продуктов Apache Group, потому как это не первая проблема, о которой он слышал.

Такое вот лето..

Случаи, приносящие такое количество новых впечатлений, -- одна из тех особенностей, за которые я люблю свою профессию. А упоминание Open Source еще больше разогрело во мне желание наконец возобновить написание своих GNU проектов как можно быстрее. Станет это возможным после установки минимального интернет-соединения в моей новой квартире. Будем надеяться, что вчерашний дождь, перешедший сегодня в снег (sic! 6 апреля), не помешает прийти ребятам из кабельной компании, чтобы подключить мой домашний компьютер к интернет. Ибо дом без интернета -- не дом, а конура.



дизайн и содержимое сайта © , 2001-2017 | ~ 5822 посещений в день | статистика