Yahoo, Google, Microsoft… Четверг, Фев 7 2008 

Я, конечно, не специалист. Но кто мне объяснит вот что в связи с грядущим слиянием Microhoo. Утверждают, что гугл не прочь бы подсобить яхушникам, прикупив у них занедорого (или даже задорого) их поисково-рекламные подразделения, потому что боится образования великой почтово-мессенджеровой империи под знаменем микрософта. Но, мол, купить он не может, потому что антимонопольщики не позволят — и так у гуглоидов слишком большая доля рынка.

Так а почему они (гугель с яху) не могут вступить в коммерческие отношения на почве контент-сервиса? Та же почта, тот же мессенджер, тот же flickr и прочее — ни в одной из этих областей у гугла и рядом нет доминирующего положения на рынке; при этом он, судя по наличию gmail и youtube, вовсе не против диверсифицировать свой бизнес за пределы одного только поиска.

Наверно, это глупость, но всё-таки хочется понять: что тут настолько неправильного, что никто даже не обсуждает такой возможности?

IE8 — шаг куда? Среда, Янв 23 2008 

Горячая тема! Все обсуждают переключатель режимов рендеринга, который появится в грядущем Internet Explorer 8. (Здесь слово «все» означает нескольких нерусских людей, занимающихся разработкой веб-стандартов и браузеров.) Я, хоть давно не занимаюсь вёрсткой, но браузерные войны — это святое, так что вкину свою пару копеек.
(далее…)

Мал ещё по интернетам шастать!.. Четверг, Дек 6 2007 

И к слову о личной информации в Сети.

Сегодня хотел зарегистрироваться на Yahoo, посмотреть сервис Yahoo.Pipes. При регистрации — здоровенная анкета: где живёшь, как зовут, день рождения, почтовый индекс… Меня такие анкеты всегда бесят — какое ваше дело? Чего-то заполнил, чего-то не заполнил, жму «создать», ругается — обязательно, говорит, заполни дату рождения. Твою мамашу, думаю, ну что ты привязался. Набил какую-то ерунду типа 1999-го года. И тут он мне выдаёт дословно следующее (в вольном переводе):

Мал ты, брат, ещё в Yahoo регистрироваться! Позови маму или папу [sic!], пусть он(а) залогинится и подтвердит, что тебе можно!

Я даже не стал звать маму или папу, а просто выпал в осадок. Чего-то наши заокеанские коллеги совсем с катушек соскочили. Я понимаю, им надо со всех сторон окопаться, чтоб их кто в суд не потащил ненароком. Но какое они имеют право мне указывать, можно мне или нельзя на них аккаунт заводить? Опять-таки, ладно, сегодня я могу ещё написать там любой год рождения и пролезть, будь мне хоть десять, хоть пять лет. Ну а потом что? Паспорт надо будет предъявлять при входе в Сеть? Номер кредитки?

Вообще, конечно, сложный вопрос, как защищать детей от «опасностей Интернета». Явно нехорошо, если, например, на солидном информационном сайте вертятся баннеры с голыми бабами. Но вот если малолетний хулиган намеренно ищет в Яндексе «порево голые школьницы», то как следует с ним поступать? Может ли сервис (или операционка, и т.д.) брать на себя обязанности цензора? Вряд ли такие меры могут гарантировать что-то. И уж явно, чтобы обезопасить ребёнка от internet predators, надо не запрещать ему пользоваться аськой и почтой, а обсуждать с ним его похождения, рассказывать, что следует и что не следует делать. То же и со взрослыми, собственно говоря. Никакие фаерволы и антивирусы не спасут вас, если делать глупости. А надёжнее всего вообще комп выключить и спать идти.

Не пиши ты, дурак, процедурами и идентификаторами… Среда, Окт 3 2007 

Иногда нужно бежать изо всех сил, чтобы просто удержаться на месте.

Что я ненавижу в программировании, что можно написать гору кода, и никто этого не оценит. Ну, что там — второй раз за три месяца смайлики выкатили? А сколько сил, сколько умища потрачено на невидимую работу, вы знаете? Удивительно, что вообще что-то работает!

Ещё хуже — с написанием игр. Я несколько раз в своей полной страданий жизни начинал писать игру, обычно — одну и ту же: римейк Warlords. Существующий их клон Freelords уродлив и страдает ползучим фичуритом, распространённым в open-source среде заболеванием; да и вообще — клон нужен не чтобы играть, а чтобы писать. Так или иначе, в последнюю свою попытку я, скрипя зубами, решился делать графическую версию (!) (в отличие от предыдущих ASCII-шных попыток), и даже успел запрограммировать поиск пути (!!) (А* с переменной стоимостью, если кому интересно), но как только начал кодировать зачаточную интерфейсную систему, тут же и сдох. Было это, что ли, с год назад — значит, после Нового Года пора будет начинать снова.

И это при том ещё, что в нашей индустрии считается сравнительно легко воплощать замыслы в жизнь. А если б я был архитектором? Авиаконструктором? Генетиком-евгеником, в конце концов? И то прогресс, что ныне Кони…

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

Возьмём для примера то же Я.Ру. Функциональность вся достаточно понятная, проверенная годами. Человеку, немного знакомому с SQL и PHP, дай в руки долото — он к послезавтрашнему утру настрогает если не столько же, то уж половину наверняка. Причём он, если обучен, даже сделает всё красиво, по уму: с нормализацией, с иерархией классов, с, не дай бог, паттернами. Но когда дойдёт дело до запуска в массы — даже на таких умеренных нагрузках, как Я.Ру, — тут-то и выяснится, что все его классы и нормализация идут лесом, а надо полпроекта переписать на ассемблере и plain-text файлах вместо базы, половину динамических страниц генерировать в статику уродливым скриптом на перле, а поверх всего поселится мозговой слизень нейронная сеть, самостоятельно определяющая, куда именно пойти очередному пользователю.

И оказывается, что на курсе «Стань вебмастером за 24 часа» учили не так и не тому. И что рисовать в Фотошопе и устанавливать Апач на Винду почему-то не надо, а как опимизировать расход памяти или распараллеливать приложение между серверами, никто не говорил.

Работа ведётся. Трубы Сроки горят, но почти не срываются. Люди стирают руки по локоть (об клавиатуру). Система работает. И когда некоторые, не буду тыкать пальцем, жалуются, что, мол, новых фич мало, или какие-то баги не фикшены, то вспоминаются слова Пронина-дедушки из мультика: «Если б не я, внучок, тебя б вообще на свете не было». А фичи — они придут…

Кто умеет, не учит Среда, Сен 26 2007 

По итогам прошедшего HighLoad-2007.

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

Во-вторых, я разжился футболкой Рамблера.

В-третьих, Ваня Сагалаев удивляется, зачем разработчикам вообще нужны конференции. Почему они не могут общаться виртуально.

С детства нам твердят, что «кто не умеет — учит», и что хороший человек должен синтезировать, а не анализировать. Между тем, никто не спорит, что лучший способ набраться понимания технологий — это общаться с более знающими товарищами. Но они норовят стыдливо прикрыться рукавом и сбежать обратно к монитору. Кроме того, они часто не умеют не только связно излагать мысли, но даже и просто грамотно писать. Увы. То ли они такие закоченные технари, то ли слишком давно не видели ничего, кроме скверно переведённой документации, но результат несомнен: мало, мало технарей, которых можно читать.

К тому же, большинство блоггерствующих пишут какую угодно бурду, только не про дело. Даже не пишут обычно, а распространяют чужой контент — youtube, bash.org и фотки. Фотки, ладно, свои. Но всё равно — процесс написания букв не доставляет им удовольствия (наверно, программируют на перле 🙂 ). С одной стороны лень, с другой NDA, с третьей — надоедает за день компьютерная дребедень. Понимаю. Но кто взрастит новое поколение?

Испокон веку знания передавались от мастера к ученику. Сейчас растить смену стало как никогда просто: мастеру не нужно обязательно находиться в одном с учениками месте. Весь мир открыт! Но почему-то наши знатоки запираются в своей тесной конуре и носа не кажут. Есть, конечно, исключения.

И необязательно быть лучшим в описываемом вопросе. Пусть на свете есть сто тысяч человек, которые лучше меня программируют на питоне или понимают судьбы человечества, мне всё равно есть смысл писать о том, что и как я понимаю — потому что найдётся пять-шесть моих друзей, которые никого из тех ста тысяч не читают, а меня прочтут, и — прозреют.

Мур против оптимизации Среда, Сен 19 2007 

Ну и раз у нас сегодня пошла такая пьянка, напишу-ка я и насчёт программирования немного.

Сегодня утром обнаружил свежую осмысленную статью Джоэла Спольски (Спольского? Та же хрень, что и с Чонтофальски; anyway…), посвящённую перспективам развития веб-приложений. Так, для справки: Джоэл — программист (руководил разработкой MS Excel), предприниматель, израильский десантник и кибуцник, а главное — отличный эссеист на околокомпьютерную тематику. У него вышла пара книжек, и блог его читают, наверно, миллионы. Правда, последнее время он пишет мало (кроме как о своём гешефте), но вот, наконец, разродился.

(тут я, стесняясь, ставлю кат. Кто читает по RSS, не судите строго — уж больно много букв получилось!..)
(далее…)

О криведках и протоколах Среда, Сен 19 2007 

Недавно пробегала по рунету «шуточка» для тех, кто «в контакте»: прислать товарищу ссылку, которая меняет его имя на «я креведко». Я и сам попался на эту дурацкую подколку, да и не заметил, пока братец не подсказал. Было запаниковал, думал — какое-то серьёзное хакерство, но потом разобрался и успокоился: просто кто-то подсунул ссылку типа vkontakte.ru?что-то-там.php?name=ya+krevedko. Действительно, кажется, ерунда — надо смотреть, на что давишь. Однако не так просто.

Не везде ожидаешь подвоха. В аське или в почте, увидев что-нибудь неожиданное якобы от знакомого человека, призадумаешься. С другой стороны, если тот же знакомый оставит тебе ссылку в комментарии к твоему блогу, обычно ничего не опасаешься и смело по ней переходишь. Я, как любой разумный человек, пользуюсь таким браузером, в котором можно ходить по любым ссылкам без опасения словить трояна, и потому не очень внимательно смотрю, на что нажимаю. Так что, на мой взгляд, к попавшимся на этот подкол не стоит предъявлять больших претензий в неосторожности. Это явно вина сервиса, на котором возможны такие косяки.

Ладно, пошутили. Но ведь так можно и сильнее подгадить. Написать что-нибудь совсем нехорошее, например. Как-нибудь скомпрометировать человека. А если запостить что-то в его дневник таким макаром? Взлом! А если так почту можно рассылать? Спамерская дыра! Разговоры о том, что надо каждый раз вылогиниваться, попользовавшись сервисом — в пользу бедных. Не для того делают галочку «запомнить меня на этом компьютере».

Но что же, спрашивается, должен делать сервис, чтоб защититься? На каждое действие подтверждения спрашивать? Не обязательно, есть и другие варианты. Некоторые, например, говорят о проверке referer-а (ссылающейся страницы) — чтобы сервер следил, что человек действительно пришёл со страницы редактирования профиля, а не фиг знает откуда. Но это, разумеется, дурной вариант. Неудобно, требует дополнительного программирования для каждого действия. Существует правильное решение, которое куда проще и изящнее. И, что важно, предписано свыше.

Как известно, HTTP-запросы бывают GET и POST (не говоря о прочих). Говоря простым языком, GET — это запрос, при котором параметры (данные формы ввода), если они есть, появляются в адресной строке, например: http://www.google.com/search?hl=en&client=opera&q=http+GET+length. Всё, что идёт после search?, — это параметры. А при POST-запросе параметры передаются в теле запроса (что бы это ни значило). Если вы где-то встретили ссылку и нажали на неё, запрос будет отправлен методом GET. Невозможно сделать ссылку, которая отправляла бы POST-запрос (хотя бы уже потому, что негде указать параметры для запроса). Поведение формы ввода можно задать в HTML-коде страницы — это на усмотрение вебмастера.

Почему для отправки форм иногда используют GET, а иногда POST? Обратимся к первоисточнику, сиречь спецификации протокола HTTP.

RFC 2616, sect. 9.3 GET:

The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process.

RFC 2616, sect. 9.5 POST:

POST is designed to allow a uniform method to cover the following functions:

  • Annotation of existing resources;
  • Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
  • Providing a block of data, such as the result of submitting a form, to a data-handling process;
  • Extending a database through an append operation.

Что тут существенно? Сама спецификация велит нам использовать GET для получения данных, и POST — для их изменения. Действительно, известны страшные истории о том, как робот гугла стёр целый сайт, пройдясь по ссылкам вида «удалить страницу». Никакая модификация данных не должна производиться GET-запросом.

Дальше остаётся только заметить, что хотя авторы сайта могли указать метод POST для формы, они не исключили возможности прислать те же данные через GET. Ублюдочный язык PHP (на котором написано ВКонтакте.Ру) — по крайней мере, в некоторой конфигурации — собирает все параметры запроса в одну большую кучу, чтобы ленивому программисту не надо было задумываться, через какой метод приходят данные. Хотя проверка заняла бы одну строчку (а при правильном написании кода вообще произошла бы сама собой), на сайте её сделать поленились, или забыли. В результате получается как всегда: чем удобнее, тем менее безопасно. В данном случае удобно программистам фконтакта, а опасно для нас, пользователей.

О сложных системах Пятница, Авг 24 2007 

Легко видеть, что создание сложных инструментов для решения простых проблем порождает другие, более сложные проблемы. Которые в общем случае решаются дальнейшим усложнением тех же инструментов, и т.д.
(далее…)

Аццкие вирусы Четверг, Апр 5 2007 

Сегодня чуть не попался на асечный вирус; он меня так поразил, что спешу поделиться.

Появляется в аське одна знакомая:

18:00:37: Привет!
18:00:40: Тебе ещё не присылали...
эээ 
погоди найду...

18:00:45: Вот http://ifolder.ru/1581856
Если нет - очень советую посмотреть

Меня сразу насторожило то, что барышня эта, в общем-то, не из числа друзей, и кроме вирусов я от неё нечасто получаю сообщения. Ссылку всё-таки открыл, благо пользуюсь Оперой, и риск словить что-нибудь, просто перейдя по ссылке, невелик. По ссылке лежит файл, неизобретательно названный flash.exe, что тоже вызвало подозрения. Скачивать его я, разумеется, не стал, а спросил, что же там:

Я:   18:01:45: привет
Я:   18:02:08: что это?
Она: 18:02:08: Это флешка интересная. Жизненно очень :)
Я:   18:02:46: Точно не вирус??
Она: 18:02:46: Да нету там вирусов. Проверено ;)

Но тут у проклятого вируса сразу два прокола: во-первых, слишком быстро отвечает (буквально мгновенно!), а во-вторых, едва ли «интересная флешка» может находиться в файле с таким именем и расширением. Вредитель изобличён, общественность предупреждена, администратор сайта принформирован.

Однако, будь автор заразы чуть хитрее, и я мог бы купиться. Не говоря о более широких массах. Никогда не открывайте ссылок, не зная наверняка, что там безопасный контент. А уж скачивать исполняемые файлы можно, только если вы сами специально их искали или о них просили.

Когда я был маленьким, ходили слухи про вредителей, которые раздают детям на улице ядовитые конфеты. Но встретить такого отравителя мне пока не доводилось; в Сети же — совсем другое дело, опасность повсюду. Будьте бдительны!

Страдания по OpenID Пятница, Мар 16 2007 

Кажется, небеса услышали мои жалобы по поводу ЖЖ, и всё заверте… Шучу, конечно. Так или иначе, но сегодня я обнаружил следующее: с начала марта WordPress предоставляет своим пользователям OpenID.

Что такое OpenID? Это механизм, позволяющий удостовериться, что некто (посетитель сайта) имеет какое-то отношение к некоему URL’у — например, блогу. OpenID был придуман Брэдом Фитцпатриком и долгое время оставался, по-видимому, исключительно околоЖЖшной приблудой — во всяком случае, я, пару месяцев назад обнаружив такую возможность регистрации при комментировании в ЖЖ, повыяснял, кто его поддерживает, и убедился, что практически никто. Для меня же вопрос регистрации в комментах стоит исключительно остро, потому что заводить свой ЖЖ я категорически не собираюсь, а анонимное комментирование для меня невозможно, потому что наш рабочий выход на просторы Интернета (сервер, расположенный где-то в Голландии, из-за чего Яндекс всегда предлагает мне поискать «в регионе: Нидерланды«) определяется лайвджорналом как an open proxy (a common source of spam) и блокирует комментирование. Итак, я убедился, что OpenID мне не помощник и забыл о нём до поры.

Обнаружив, что теперь у меня сам собой появился этот благословенный идентификатор, я тут же попробовал им воспользоваться. И тут началось веселье. Наша контора — цирк тот ещё…

Начнём с того, что у нас где-то (на том самом шлюзе, который open proxy, надо полагать), установлен какой-то фильтр, блокирующий доступ к отдельным сайтам, и ЖЖ в их число попадает. Правда, попадает он туда частично: фильтр настроен на доменное имя и блокирует http://www.livejournal.com, а, например, vze.livejournal.com блокировать не догадывается. Поскольку все пользователи ЖЖ давным-давно получили в своё распоряжение именные домены третьего уровня, читать дневники этот фильтр не мешает, а мешает только заходить на вспомогательные страницы сайта. И это, казалось бы, небольшая проблема, поскольку вместо доменного имени можно вставить IP-адрес, и фильтр, опять-таки, ничего не поймёт. Но с несчастным айдишником ничего не вышло всё равно! Регистрация по OpenID предполагает переадресацию меня на «мой» сервер (в данном случае — на адрес моего блога), некие манипуляции там, и обратную переадресацию на http://www.livejournal.com/что-то-там. И вот тут возникает затыка, потому что на обратной переадресации фильтр меня блокирует, а когда я пытаюсь вписать IP, это уже не помогает. В результате хочу теперь выяснить, как написать пользовательский javascript для Оперы, который бы подставлял айпишник автоматически при всяком запросе. Это, конечно, изврат, но посылать комментарии к жжшным постам друзьям по почте — куда больший изврат, и, главное, нехакерский 🙂

Другой вопрос, позволит ли ЖЖ писать с моего «спамерского» IP-адреса, если мне всё-таки удастся зарегистрироваться. Если я пишу комментарий и тут же ввожу свой OpenID, ЖЖ сразу меня отпинывает и проверки моей личности не происходит вообще. Но если я сначала войду в ЖЖ под своим айдишником (есть такая опция), а уже потом попробую что-то написать, поведение, в принципе, может быть иным. Узнаю, когда разберусь, как доменное имя подменять…

P.S. Да, и третий вопрос — насчёт куда более насущной проблемы подзамочных постов. В принципе, ничто не мешает разработчикам ЖЖ сделать возможность брать во други не только жжшных пользователей, но и опен-айдишников. Реализована ли такая функция на самом деле — это надо у владельцев живых журналов спрашивать. Хотя для меня не многое изменится: за лентами друзей я слежу через RSS (посредством Google Reader), поэтому, чтобы я видел закрытые посты в своей ленте, надо, чтобы:

  1. Я мог ввести свой OpenID в Google Reader;
  2. Он передавал его как-то ЖЖ-серверу при запросе RSS;
  3. ЖЖ генерировал RSS с учётом переданного ему идентификатора и списка OpenID-друзей этого пользователя

На такое, конечно, рассчитывать не приходится никогда — слишком много тонких мест. Хотя вообще вопрос дифференцирования RSS-потоков в зависимости от запрашивающего стоит перед миром давно, и в какой-то момент должно появиться более-менее общепринятое решение этой проблемы.

Следующая страница →