Впихнуть невпихуемое, или смоделировать мозг.

Мозг
Мозг

Превед тебе, дражайший читатель.

Любопытное дело — как-то так сложилось, что в последнее время мне всё чаще попадаются материалы по моделированию живых мозгов компьютерными всякими средствами. Ну там например нашумевший проект IBM по моделированию колонки неокортекса, он же Blue Brain Project. Или тот же Коннектом… Аналогичной проблеме посвящена целая глава книги «Физика Будущего«, за авторством Митио Каку. А вчера случайно зацепился глазом за передачу на Discovery Science — где тоже говорили об этой области исследований… Как-то с завидным упорством учёные пытаются смоделировать живое на неживом. Митио Каку, например, описывает, как он бродил по огромному залу, заполненному рядами черных шкафов, в которых помещался один из самых больших суперкомпьютерных кластеров на планете. Кластер потребляет мегаватт энергии, требует нехилой инфраструктуры для охлаждения, и вообще — пиздец какой мощный. И при этом на нем моделируется мозг мыши. Да и тот, на несколько секунд и без выполнения каких-либо серьёзных задач. Так, связи между смоделированными нейронами. Никаких функций, присущих живому мозгу мышки, помещающегося в её маленьком черепе — этот гигантский кластер не выполнял.

Читать далее Впихнуть невпихуемое, или смоделировать мозг.

Das ist Schroedinbug

Господин Шрёдингер. Возможно убийца котов и трололольщик программиздов
Господин Шрёдингер. Возможно убийца котов и трололольщик программиздов

Второй раз за время своей практики программизма встречаюсь с такой хренью как гейзенбаг… Развесёлая пакость тут приключилась — чтобы отловить шрединбаг внедрили логгировщик, выкатили, а через некоторое время всё упало. Искал полдня. Нашли — логгировщик, призванный следить за нештатными ситуациями, валил весь комплекс)) Забавно. Кстати шрединбляг так и не нашли, ага… Как гласят работающие здесь подольше, оный проявляется нелинейно, непредсказуемо, а главное в течении последних двух лет точно. Прямо не баг, а призрак, летящий на крыльях полуночного онанизма — в зависимости от кучи параметров он может либо выстрелить, либо не выстрелить. И смыслов в этой фразе куда больше чем два. Причем задача решить проблему — переходит от программиста к программисту, от менеджера к менеджеру, да, уже два года — невольно вспоминается маяковский, с его «гариком»:

Я живу в Париже как денди
Женщин имею до ста
И мой хуй, как сюжет в легенде
Переходит из уст в уста.

Гарики, правда, владимир владимирович не писал, то больше к Губерману, однако же… Вообще конечно прикольно оно — чем больше мы наблюдаем за системой, тем меньше она показывает нам свои интимные подробности, ага. Как опять же рассказывают старожилы — когда в первый раз всё сломалось, понаставили логгировщиков, ввели анальный досмотр, и вообще, усложнили жизнь серверу. Результат не заставил себя долго ждать — в течении месяца, пока работала система логгирования, всё шло хорошо, и даже работало как надо. Скрипты показывали себя пай-мальчиками, и не устраивали вынос мозга. Однако всё волшебно изменилось, как только кому-то пришла в голову мысль забыть о багах. Что характерно, логгирование не убирали, однако в логах — пустота и треш. До сих пор ищут (ищем)…

Грустно это всё…

Магический Highload, или о высокой нагрузке.

Титан. Фото с сайта proza.ru
Титан. Фото с сайта proza.ru

И таки здравствуй, дражайший читатель.

Highload, или проекты с высокой нагрузкой, это, на мой взгляд, естественный этап развития любого профессионального программиста, работающего с современным web. Рано или поздно мы приходим к этому (а точнее, учитывая что мы в массе своей всё-таки не бизнесмены, а специалисты — нас находят те самые бизнесмены в лице HR-отделов корпораций). Так получилось, что вот и я попал в эту струю, и по правде сказать весьма доволен — highload вещь интересная и нетривиальная. Однако, интернеты довольно бедны именно технической информацией по хайлоаду. Почему так? Отчасти оттого, что выделить общие принципы построения высоконагруженных систем довольно сложно. Сколько уникальных пользователей / хитов надо, чтобы считать ресурс высоконагруженным? А какая архитектура системы подпадает под это определение? Какие хоть требования к этой архитектуре? Ответить на эти вопросы сложно, но я всё-таки попытаюсь.

И для начала хочется сделать небольшой экскурс в область высокой нагрузки, принципы построения, и так далее. Сразу скажу, я не истина в последней инстанции — highload это продукты как правило уникальные, и реализуемые под конкретные потребности, особенно учитывая шаткий баланс динамика/скорость. Я имею ввиду соотношение динамического (но «тяжёлого») содержимого, и статического — «лёгкого». Рассматривать предмет мы будем на примере абстрактного портала, скажем новостного.

Итак, с чего начинается высокая нагрузка? Эмпирическое правило (вроде сам придумал, да :) ) это когда с нагрузкой перестаёт справляться один физический сервер (сферический, в вакууме). Ну, не хватает его мощностей для обработки существующего потока посетителей. Даже если на нём 24 гигабайта оперативки, два четырёхядерных проца и SCSI накопители в RAID, плюс 100 МБит канал. К слову сервер такой способен вынести очень неплохую нагрузку, только он зараза дорогой. Попроще это схема 4 ядра + 4 гига, Sata диски, и всё тот же канал в 100 МБит. В принципе, учитывая цены, может оказаться дешевле купить пару серверных лезвий за 35 тысяч рублей каждое, чем одного монстра за 250 тех же деревянных килорублей. Да, дражайший читатель, оценка потенциальной нагрузки и железа под неё — тема необъятная.

Читать далее Магический Highload, или о высокой нагрузке.

О студентах, программировании и промышленной разработке

Здравствуйте, дражайший читатель.

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

Читать далее О студентах, программировании и промышленной разработке

Freenet, i2p, Java…

Не так давно, я скачивал и устанавливал систему Freenet. По некоторым причинам (больше время отклика, отсутствие динамического контента, низкая скорость загрузки, отсутствие нормального интерфейса, и т. д.) она удалена с моего компьютера, ибо на данный момент меня больше заинтересовал проект i2p (о том, что это такое, можно прочитать на вики, и на официальном сайте). Оба этих проекта объединяет то, что они OpenSource (который в последнее время всё больше и больше интересует меня), и то, что они написаны на Java. Меня заинтересовал этот язык, дело в том, что он очень похож на C# (а точнее, си-шарп похож на java, так как проектировался с оглядкой на него). А шарп я более-менее знаю, по крайней мере разрабатывал приложения контроля состояния распределённой сети серверов именно на нём. Но на данный момент у явы, как языка прикладного программирования приложений, есть огромное преимущество: он спокойно исполняется на линукс-системах. Т.е. исполняемый файл, в отличие от .NET exe, одинаково выглядит и работает на той же убунту, и на той же винде едва ли не любых версий. Это преимущество стало решающим в определении моего интереса к нему.

Чем же обеспечивается успех и живучесть Java в конкурентной борьбе с .NET? Тут надо сделать оговорку. Вообще, зависит от того, для какой платформы будет вестись разработка — для MS Windows, *Nix, или иных платформ. Если основным целевым сегментом является windows, то тут, безусловно, стоит выбирать .NET разработку, ибо она наилучшим образом интегрирована с системой, предоставляет массу платформо-зависимых инстументов, и писать на ней windows-приложения намного правильнее. Но у OpenSource проектов, как правило, целевые задачи совершенно другие. Зачастую приложения пишутся для бесплатного использования максимальным количеством пользователей (ибо от количества людей, у которых установлено то или иное приложение, зависит работоспособность сервиса, это и freenet, и i2p). И ввиду этого, привязывать к платформе приложение совершенно недопустимо. А поддержка .NET на той же линукс — практически отсутствует (да, я в курсе, что существует порт .NET на Linux, но я даже не проверял его работоспособность).

Единственной платформой, которая позволяет вести разработку для практически всех существующих операционных систем, обладает официальной поддержкой и довольно серьёзным финансированием, а как бонусы — имеет несколько открытых и бесплатных средств разработки (к примеру NetBeans IDE), является Java. Её разрабатывает компания Sun, которая, как можно видеть на их официальном сайте спонсирует и поддерживает также множество известных open source продуктов, среди которых MySQL, OpenOffice, NetBeans, Java… Ввиду этого, Java остаётся едва ли не единственным выбором для программиста, решившего написать прикладное приложение, и которое должно работать на многих платформах. За счёт чего это возможно? Дело в том, что Java-приложения исполняются не напрямую через вызов системных функций целевой системы (к примеру windows-API), а на промежуточном звене, так называемой «Java-машине). Условно, можно назвать это интерпретатором, а ещё точнее — JIT-компилятором. Исполняемый Java-файл не привязан к платформе, а состоит из так называемого «байт-кода», который исполняется на java-машине, которая, в свою очередь, переводит байт-код в исполняемые инструкции для процессора. Сама Java-машина уже привязана к платформе, т.е. машина для Linux не может быть запущена на windows, но прикладного программиста это не должно волновать. К слову, по быстродействию java-код, в настоящее время, не намного проигрывает чисто компилированным приложениям, за счёт применения JIT. Таким образом, лично для меня эти особенности стали поводом для знакомства с языком.

Также, если вас заинтересовала статья, рекомендую почитать ещё и вики: Java и сравнение Java и C#.

Для изучения же языка рекомендую вначале двухтомник Хорстмана и Корнелла «Java 2«, А затем трёхтомник Дейтела, «Технологии программирования на Java». Эти книги отличаются систематизированным изложением материала и по первому впечатлению вполне достойные представители технической литературы по Java. Единственный недостаток — цена бумажных версий, все книги обойдутся в сумму от 2,5 до 5 тысяч рублей. Но ведь мы в России живём, господа! :) И KAD с торрентами (1), (2), (3) ещё никто не отменял.

Если руки растут из жопы…

Когда не так давно я искал работу, мне бросилось в глаза то, что в объявлениях практически пестрят фразы «нужно знание Smarty», требуется умение работать с фреймворками (symfony, zend, etc), и так далее. Я тогда ещё думал – зачем?

Сейчас разбираю движок сайта писаного нам одной фирмой ещё до того, как я пришёл на эту работу (да и остальные прогеры-коллеги, думаю, тоже). Вообще пару слов по поводу двигателя. Это сборная солянка, иначе не скажешь. Как говорит мой начальник – есть два способа вырасти в глазах окружающих: первый это забраться повыше, второй – втоптать в грязь остальных. В общем-то, как я выгляжу в глазах окружающих меня волнует в последнюю очередь, потому с чистой совестью втопчу в грязь то, что приходится мучать ежедневно.

Читать далее Если руки растут из жопы…

Как отправить POST, GET запросы, а также сымитировать браузер на сайтах с авторизацией…

В общем, недели две назад передо мной встала перспективная задача. Неважно, в чем она заключалась, но смысл в том, что в процессе работы программы (на PHP) она должна была обращаться к разным сайтам, авторизоваться, и прочим образом извращаться с его контентом. Вручную это писать довольно таки долго. Порыскав по сети, нашёл любопытную вещь: snoopy. Это класс на 1200 где-то строчек, который позволяет имитировать веб-браузер. Отправлять формы, получать ответ, авторизоваться, и так далее. Короче говоря это уже выполненная задача на 50%. Если перед вами вдруг встала подобная задача, и поисковик привёл вас на этот сайт — то надеюсь, вы нашли что искали — ссылка на проект выше :) Пролистайте исходники, методы класса интуитивно понятны.