recoder: (Default)

Недавно коллега [livejournal.com profile] sigizmund напомнил о богатом выборе разнообразных языков программирования. Засиделся я что-то в нашей Java-shop'e... И задумался - чего бы ещё такого полезного изучить:

  • Может Ruby, который мне в первый заход активно не понравился? Как раз пока разберусь - тут и рельсы новые должны выйти... И JRuby опять же недалеко от Жабы.
  • Может Groovy, который судя по рассказам - гибрид Джавы с Перлом, что очень даже интригует!
  • Может Scala попробовать понять? Сломать себе мозг и уйти в просветлённое состояние...

coding

NoSQL

Apr. 8th, 2010 07:03 pm
recoder: (Default)

Смотрю я вот издалека на бучу вокруг NoSQL хранилищ, и вижу два разных взгляда.

Один - это народ, отчаявшийся выучить SQL со всеми его разными диалектами, и уверенный что наконец-то появился silver bullet, что спасёт всех. В ту же кучу можно покидать и всех маркетоидов, раздувающих ненужную шумиху и только укрепляющий мнение насчёт той самой пули.

А другой взгляд - это народ, которому надоело иметь пару лишних прослойки для удобного доступа к своим данным. Одна прослойка - это всяческие ORMы, транслирующие метаинформацию в SQL. А вторая прослойка - это собственно сам SQL, транслирующийся каким-то неочевидным образом (сдобренным разнообразными хинтованиями в разных диалектах) в последовательность операций доступа к собственно хранилищу данных. Обычно к тому моменту, как понимаешь что сделает цепочка API→ORM→SQL→Optimizer→DB, уже можешь и сам составлять тот самый последний уровень, имея в результате более чёткий и компактный код.

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

Надо бы в свободное время поизучать всё это поглубже...

Другие о том же: 1, 2. 3.

coding

recoder: (Default)

Нельзя ждать милостей от Гугла, взять их - вот наша задача!

Так подумал я, сел на выходных с любимым Перлом и написал себе утилитку для формирования памятных дат в календаре по данных из Google Contacts, которую так давно хотелось. (Увы, встроеная фича меня устраивает сильно меньше чем на 100%.)

Оказалось всё очень даже несложно (если не заморачиваться с OAuth). Теперь на очереди - довести утилитку к релизному виду и переходить к другим своим мечтам - data mining например начать писать...

Part2: Кстати нашёл Google App'овский сервис для синхронизации контактов между несколькими аккаунтами: Share You Contacts.

coding

recoder: (Default)

Отец [livejournal.com profile] gaperton написал крайне занятную статью "Читай код" о том, что лучшая документация - это хороший код. И в своём посте высказывает ещё много интересных идей (с которыми я однозначно соглашусь):

Читай код! )

Главная мысль такова: если код в порядке и есть умные люди - то документация не нужна. А если нету первого или второго - то документация уже не поможет. Вывод для многих неочевидный.

Читай код, сука! )

coding management

recoder: (Default)

Поэкспериментировав на праздниках с Perl'ом и Catalyst'ом, испытал чувство глубокого удовлетворения. После прокуривания всех мануалов и сырцов всё пишется быстро, код получается компактный и мощный. Как завещал дедушка Ленин - буквам тесно, а мыслям просторно! Любая типичная задача уже решена на CPAN'е, причём обычно несколькими способами, так что приходится концентрироваться только на своих собственных проблемах. И это чертовски приятно.

А потом подумалось, что как это не прискорбно, perl никогда не станет распространённой enterprise platform. Нет, на нём конечно создавались и будут создаваться большие проекты типа del.icio.us, LiveJournal или Amazon. Но это будут оставаться проекты небольших групп увлечённых разработчков, а не традиционных корпоративных команд. С обычным корпоративным духом perl, увы, не совместим, причём по многим причинам:

  • Enterprise Software - это не технологии, это религия. Религия большого, дорогого и сложного. Требующего больших бюджетов, сложных процессов, множества сейлзов, менеджеров, консультантов и IT-инженеров. Perl с его мощностью и лаконичностью сюда вписывается плохо.
  • Perl умеет выражать мощные задачи в крайне компактной форме, что привносит сложности в процесс менеджмента, делая последнюю понятную метрику LoC совсем бесполезной.
  • Perl и его TMTOWTDI (плавно переходящее в TAFTMWTDI) не позволяют решать задачи методом "больших батальонов". То есть набирать толпу народа на проект и добавлять свежее мясо по мере роста потребностей или увольнений утомившихся.
  • Признаемся - Perl спокойно даёт любому программисту даже не пистолет для простреливания ноги, а огромный арсенал вплоть до ядерных боеголовок. (В отличие от Java, дающей каждому по игрушечному пистолету с войлочными пульками.) Так что пускать к разработке кого попало - это верный путь к полному развалу.
  • Наверное, его open-source'ная натура тоже плохо совместима с традиционными корпоративными концепциями

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

coding perl

Part2: кстати - с LISP'ом всё должно быть примерно так же...

recoder: (Default)

Любой программер, кто работал с большой и старой системой знает что с возрастом в ней накапливается некоторое количество хаков и недоделок, на которые так и не хватило времени. (См.: bit rot.) И сожалению, реальность данная нам в ощущениях обычно не позволяет полностью избавиться от этого мусора. Причём обычно из-за того, что удаление хаков потребует либо сокращения функциональности, либо уже системной реализации аналогичной функциональности, а это обычно грозит потерей человеко-часов без положительных внешних изменений. Ни то ни другое обычно не проходит через менеджмент. А избавиться от мусора в коде всё равно хочется.

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

В результате мы имеем относительно "чистые" компоненты, которые опять могут развиваться и использоваться без оглядки на хаки. А также имеем отдельный контейнер для всей излишней энтропии системы, который надо или искоренять в будущем или просто особенно тщательно тестировать. В общем - все довольны, yo!

coding

recoder: (Default)

Намедни прочитал отличный текст "If programming languages were religions...", в котором расклад по языкам и религиям получился такой:

  • C — Judaism
  • Java — Fundamentalist Christianity
  • PHP — Cafeteria Christianity
  • C++ — Islam
  • C# — Mormonism
  • Lisp — Zen Buddhism
  • Haskell — Taoism
  • Erlang — Hinduism
  • Perl — Voodoo
  • Lua — Wicca
  • Ruby — Neo-Paganism
  • Python — Humanism
  • COBOL — Ancient Paganism
  • APL — Scientology
  • LOLCODE — Pastafarianism
  • Visual Basic — Satanism

Попрограммировав пару вечеров на Perl могу заявить, что так оно и есть! Разрабатывая на Перле - реально чувствуешь себя магом voodoo. Пишешь много непонятных закорючек страшной силы, похожих на заклинания. Иногда они срабатывают, иногда нет... Периодически обращаешься к Великому Божеству CPAN'a - и он иногда тебе помогает, а иногда и нет. Но рано или поздно ты собираешь все нужные ингридиенты для вызова финального заклинания - и оно собирается и работает.

И это прекрасно!!! Ради этого и стоит программировать!..

coding perl

recoder: (Default)

Дописав восемь лет назад последние строки на C++ для NetСracker Designer я практически перестал интересоваться C++, MFC и прочим. А оказывается-то, жизнь кипит!

Microsoft Visual Studio 2008 вышла. MFC оказывается, продолжают поддерживать! И даже новые компоненты прикупила у питерских BCGsoft.

А я уже думал, что .NET и C# заколотили последние гвозди в гроб MFC и C++ (как UI-языка). Поторопился наверное немного...

coding

HTML test

Nov. 20th, 2007 02:02 pm
recoder: (Default)

Попробовал честно пройти тест на знание названий HTML-тегов (via [livejournal.com profile] avva). Позорно провалился: в суете забыл даже такие теги как полезные теги )

. Мораль: не надо беспокоиться и суетиться и всё будет намного лучше...

coding

recoder: (Default)

Похоже, со своей текущей работой я совсем отстал от современных трендов софтостроения. Не могу врубиться - на чём сейчас пишутся нормальные клиентские приложения.

Ну вот допустим, я решил написать прогу. Ну например, персональный мед.архив или редактор ЖЖ-групп по [livejournal.com profile] kukutz'уили свой собственный CRM... В общем - надо написать приложение с развитым UI, из которого иметь простой доступ к разным API (+ web APIs было бы полезно). И какие сейчас есть варианты?

  • С++/MFC: в плюсе мой семилетний опыт, а всё остальное - в минусах.
  • C#/WinForms: перспективно, приятный язык, удобная среда. Но Microsoft'ом пахнет.
  • Java/Swing: типа круто и переносимо (write once, debug everywhere). Но не люблю Жабу.
  • VisualBasic.NET: пошло.
  • Delphi: а он вообще жив? PHP-Delphi не предлагать!
  • HTML+JS/HTA: привычный web UI, но по-моему тупиковый вариант.
  • QT|TK|GTK и прочие тулкиты вместе с Python|Perl|Ruby - какие-то они просто неудобные...
  • а кстати - удобных гибридов FF и perl'a так ещё и не нашлось?

Похоже, что из этих вариантов придётся выбирать C#.NET...

coding ask_lj

recoder: (Default)

Для домашнего проекта поставил себе задачку: по форматной строке вида "Я [сразу|немедленно] [пошёл|поехал|пополз|попёрся] разбираться с [делами|братками]." сгенерировать полный список всех возможных вариантов такой строки. Посидел с карандашиком минут 20, наваял примерно такой код:

Много загогулин )

Добравшись до компа, втоптал. И - заработало всего после двух исправлений. Старею видать... Надо посидеть помедитировать - можно ли всё это проще или изящнее изобразить? Всё-таки люблю я perl.

perl coding

recoder: (Default)

Дивлюсь я на небо та й думку гадаю…

Вот есть такая замечательная штука как FireFox. Кроссплатформенная причём! А замечательная тем, что позволяет строить всякие удобные интерфейсы — как через XUL [?], так и через обычный DHTML.

А ещё есть такой замечательный язык Perl. И кроссплатформенный, и мощный, и удобный, и с громаднейшей библиотекой модулей практически для всего. (Ну и вообще я его люблю.)

Так почему же нету чего-нибудь такого, что бы их поженило в инструмент для создания кроссплатформенных приложений (и без потребности в веб-сервере)? Типа майкрософтовского HTA, только done right. Я конечно в курсе про десятки всяких GUI toolkits, но хочется именно объединить Мозиллу с Перлом. Это было бы так рулёзно…

coding

recoder: (Default)

Делюсь полезной страницей для ЖЖ-юзеров - как новичков, так и старожилов:

URL: http://recoder.andrewz.org/start/lj.html

Предложения и конструктивная критика приветствуются!

lj coding

recoder: (Default)

Решил поделиться несложной, но полезной страницей для поиска:

URL: http://recoder.andrewz.org/search/

  • Интерфейс к разным самым поисковикам
  • Поиск по Сети, блогам и википедиям
  • Авто-режим, умеющий выбирать разные поисковики в зависимости от языка
  • Пытается определить веб-адреса и перейти на них (так что подходит в качестве start page)
  • Понимает параметры для линкования, например: http://recoder.andrewz.org/search/?felching
  • Знает три шортката - Enter для авто-поиска, Alt+W для поиска в Википедиях и Alt+M для поиска по картам

То есть использовать страницу очень просто: загрузил, втоптал слова (или Copy-Paste), нажал Enter. Если это URL, то произойдёт переход по нему, если русские слова - то выполнится Яндекс-поиск, если английские - Google-поиск. Если этого мало - есть ещё много разных кнопок...

Enjoy!

Себе в ToDo: 1) Переписать на чистом XHTML+CSS без таблиц, 2) Навесить шорткаты на закладки, 3)Сделать версию для загрузки в Sidebar к FireFox

Update: Эта страница решает достаточно узко-специфичную задачу: служить стартовой страницей на тех компах, на которых я работаю. Отсюда требования: 1) отсутствие зависимости от других файлов, 2) минимальный размер, 3) функционирование под IE 5.5/6.0 и FireFox. Это не полноценный web app и даже не CGI-скрипт (всё хостится на сервере без CGI). Это набор хаков, эффективно решающий мой основной use case: запустить браузер имея в клипборде нужную строку, нажать Shift+Ins и Enter и получить результат с максимальной скоростью. Другие задачи типа поиска в блогах или маршрутов на картах - решаются уже в несколько кликов, но всё равно быстро.

internetcoding

recoder: (Default)

Уфф... Разобрался наконец с Catalyst'ом. За что большое спасибо [livejournal.com profile] il_duco и бесчисленным блоггерам в Сети.

Это конечно чистая магия и шаманство в его лучшем виде. Документации практически нет, how-to нет, примеров очень мало. Причём большинство примеров расчитано на такой уровень, который объектности Catalyst'а скорее всего и не поймёт. А настоящему перлофилу нужно что-то другое. Написать что ли самому?

Пока разбирался в Catalyst'e, обнаружил кучу вкусностей (о которых наверное все кроме меня знали):

  • AnnoCPAN
    Такой CPAN с подробными аннотациями к каждому модулю и возможностью всем писать комменты.
  • Class::DBI и Class::DBI::Sweet
    Лёгкие и удобные ORM: на базе данных накрывает таблицы удобным абстрактным интерфейсом, в котором можно определять всякие фичи типа триггеров, поддержки целостности, каскадных удалений и пр.
  • Class::DBI::Loader
    Модуль для автоматического создания классов для Class::DBI по схеме базы. Pure magic!

Вообще Catalyst оказался мечтой меня-вебдевелопера: среда для сервлетов на perl'е. Теперь его бы ещё проверить на устойчивость под нагрузками, посмотреть производительность. И - можно будет заниматься делом!

Так что рано меня ещё в менеджмент списывать! Я ещё кой-чего руками умею делать и новое изучать.

perl coding

recoder: (Default)

Все уши уже прожужжали с этими Рельсами… Ну а что делать мне, если я не люблю Ruby? Понятное дело — искать perl’овые аналоги. Пошёл, поискал, нашёл. Даже несколько: Maypole, Catalyst и всякие поделки вроде Jifty, Perl-on-Rails и пр.

Catalyst действительно оказался рулезом о котором я мечтал всю webdev’ную жизнь. Вот только поиметь его оказалось делом довольно непростым.

Первая проблема, он не захотел вставать на мой Denwer. Ну не захотел — не беда, поставлю самого по себе, благо у него и встроенный http-сервер имеется. Тут встаёт вторая проблема — он не ставится с ActiveState’овских репозиториев. Уж не знаю почему, лениво разбираться было. Пошуршал по Гуглу, нашёл умельца, который знает тайные удары в бубен для установки. Вроде бы как поставился. Но работать не захотел.

Орешек знаний твёрд, как говорится. Я уже даже начал подумывать над советом ’поставьте себе Ubuntu и не мучайтесь’. Но тут обнаружился замечательный дистрибутив Cat-In-A-Box. Встал с пол-пинка и заработал слёту.

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

А пока буду продолжать заниматься самообразованием.

perlcoding catalyst

recoder: (Default)

[livejournal.com profile] korw1n подкинул замечательный текст ’Как не надо программировать’. Красочно описывается текущее невесёлое состояние софтверной индустрии, что называется, ’глядя изнутри’. Я сам, со своим тоже немаленьким прграммерским опытом, склонен согласиться с автором по всем пунктам. Недостаток статьи только один — автор явно забыл русский язык (что для него вполне естественно) и это местами усложняет понимание.

Забавные цитатки )

Так что «в общем по software development’у» состояние мрачное, тенденции не меняются, будущее туманное. И непонятно, откуда ждать каких-нибудь перемен. Даже и не в новом году.

coding

recoder: (Default)

Пришло время дать Вторую Программерскую Клятву. (Первая Клятва была больше года назад…)

Непрограммистам неинтересно )

И да будет так. Отныне и пока у меня не отнимутся руки от карпального туннельного синдрома.

coding
work

recoder: (Default)

Я кажется понял, почему некоторые люди, пытающиеся программировать, хронически не могут делать это хорошо. И это даже не потому, что они непроходимые мчудаки.

Обычно, когда сделаешь правильный дизайн, то из него логически следует реализация. И когда воплощаешь это в код, чувствуешь, что делаешь The Right Thing™. Ты не борешься с системой, ты строишь новое, складывая из продуманных блоков. При грамотных абстракциях и новые фичи реализуются логичным способом, и опять же появляется то же чувство. А вот когда делаешь грязные хаки или даже хаки на хаки - чувствуешь, как у тебя карма безнадёжно портится. Понимаешь, что ты в отладчике третий день сидишь именно за это, за сделанную Wrong Thing™. Тобой или нет - дело уже другое.

Так вот - по-моему, есть люди просто-напросто лишённые этого чувства. Они не чувствуют угрызений совести меняя приватные переменные через reflection или реализуя свою конкретную задачу в глубинах абстрактной библиотеки. Более того, они не чувствуют момента, когда всё сделано правильно и процесс идёт почти сам собой. Это люди без мотивации. Они не способны вообще чувствовать удовольствия от программирования, для них любой кодинг - это борьба с силами природы. Печальная картина...

Такая вот программистично-гуманистическая теория...

coding

recoder: (Default)

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

Вот хороший пример из блога майкрософтовца по имени Raymond Chan:

Задача: вычислить размер директории в Windows. Просто, правда? Подумайте немножко, прикиньте алгоритм и запишите на листочек список спорных вопросов...

Посмотреть ответ )

coding

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425 262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 13th, 2025 09:57 pm
Powered by Dreamwidth Studios