• Практика функционального программирования №5

      Анонсы новых выпусков журналов или обновлений сайтов — это не то, о чём обычно пишут. Мы не видели объявлений новых номеров Компьютерры (когда она ещё была) или Vogue на страницах Хабра. Тем интереснее наблюдать, как небольшой, весьма специализированный журнал для программистов «Практика функционального программирования» регулярно привлекает живой отклик у читателей даже таких в некотором роде особенных сообществ как Linux.Org.Ru или Хабрахабр.

      Недавний выпуск последнего, пятого номера журнала ПФП уже вызвал множество интересных споров. А всё потому, что в конкурсе, объявленном журналом в конце прошлого года, вместо запланированной безоговорочной победы языков Haskell и OCaml, победили Python и C#.

      Неожиданно обнаружилось, что один из дизайнеров C#, Eric Meijer признался, что Visual Basic — это функциональный язык (http://mr-aleph.livejournal.com/255073.html)

      А еще обнаружилось, что...
    • TEDxKyiv 2010


        24 апреля в Киеве пройдет вторая конференция TEDxKyiv. В этот раз в Доме Учителя. Больше 15 выступлений будут посвящены столь разнообразным темам, как: природные материалы в строительстве, аутизм, нанотехнологии и возможности человеческого организма,— и объединены пятью основными темами: новые технологии, экология, инновационный бизнес, образование и искусство. Предполагаемый возраст докладчиков — от 20 до 80 лет. Языки выступлений (по количеству докладов): русский, украинский, английский. Подробнее с программой можно ознакомиться на сайте: http://tedxkyiv.com/program-2010. А в этой теме я как один из организаторов готов ответить на все интересующие вас вопросы.

        Наконец, последнее, но немаловажное. Участие платное — 200 грн. Для студентов и учителей/преподавателей — 100. Есть возможность получить бесплатный билет, если активно участвовать в сообществе (например, переводить ролики на украинский, задать хороший вопрос спикеру и т.п.). Подробнее — на сайте.

        PS. User-generated отчет о предыдущем событии — http://tedxkyiv.com/blog/2009/10/reaction/. Все видеоролики — http://bit.ly/tedxkyiv09-talks
      • GUI в Common Lisp — еще один миф

          Бытует расхожее мнение, что в Common Lisp нет или же плохая поддержка графики. Это еще один миф из серии, что Lisp — это язык только для подсчета факториалов. На самом деле, как и в большинстве других прикладных сфер общего назначения (например, веб, форматы передачи данных, взаимодействие с БД и т.д.) в Lisp-среде есть полный спектр библиотек и тулкитов для всех основных платформ с разными уровнями абстракции.

          Linux/Unix


          Базовой библиотекой для графики из Common Lisp под Unix является CLX. Это аналог xlib, т.е. низкоуровневый клиент, напрямую общающийся по X-протоколу.

          Кроме того, есть обертки для основных графических фреймворков разной степени зрелости: LTK, CL-GTK2, CommonQt, CL-CAIRO2. Лично мне доводилось иметь дело с LTK, и работа с ним тривиальна. Хороший пример приложения, его использующего — простой и удобный Lisp-редактор/REPL ABLE.
          ABLE screenshot

          Windows


          Кроме возможности использовать кросс-платформенные фреймворки из прошлого раздела, есть еще LispWorks CAPI, о котором только положительные отзывы. Единственная особенность заключается в том, что, как и большинство профессиональных сред разработки на любых языках под Windows, LispWorks стоит довольно дорого (ок. 1200 $), а CAPI доступна только в профессиональной версии. (Впрочем, попробовать его можно и в trial версии).

          Также есть CL-OPENGL, которая, разумеется, кросс-платформенная.

          Читать дальше →
        • Изучай Haskell ради… Haskell'а

            Я долго (несколько лет) не решался составить окончательное мнение о Haskell'e: слишком противоречивы были мысли. И вот, наконец, благодаря этой записи о разборе программки определения двудольности графа я могу это сделать :)

            Я понял, что Haskell-программисты — в основном, нужно сказать, хобби-программисты — это те, кто программирует не решение задачи, алгоритм, систему, а Haskell! [1] Посмотрите, какой простой алгоритм описан в заметке, а сколько вокруг него нагромождено языковых конструкций, объяснений и дискуссий. (Чтоб понять, насколько алгоритм прост, можете посмотреть в комментариях варианты на Lisp'е, Python'е).

            Мне хорошо знакомо это умонастроение — когда в погоне за максимальным использованием мощи языка забываешь о самой задаче,— поскольку в Lisp-мире оно тоже часто встречается: есть языки, которые способны действительно увлечь. И выражение «это взорвало мне мозг» часто звучат и по поводу Lisp'а, и по поводу Haskell'а. Но это же — фигня! Конечно, не может не радовать узнать что-то новое, но не нужно же радоваться этому, как ребенок новой игрушке. Хороший язык программирования должен быть максимально понятен и прост, должен давать человеку свободу самовыражения. Честно говоря, именно этому я обрадовался, когда открыл для себя Lisp: что нашел то, что искал. А не тому, что увидел какую-то конструкцию или изворот, который не доводилось встречать раньше.

            Вывод
          • Мыслекарты для планирования трат

              Инструмент Mind Map довольно нов: настолько, что у него нет даже устоявшегося русского названия. Обычно его называют интеллект-картами, картами памяти, сознания или мозга, и даже ментальными картами. Как по мне, довольно громоздкие и не удобные имена, в которых, что самое главное, не четко передается суть понятия (мне в них слышатся какие-то анатомические оттенки: вот тут левое полушарие, тут правое, а тут мозжечок… :) А ведь это, если максимально упростить, картинки, изображащие понятия и логические связи между ними. Можно было бы сказать карты понятий, но тоже звучит громоздко, а вот карты мыслей — проще. Ну и, следуя по традиции словообразования в русском языке: мыслекарты![1]

              Мыслекарты помогают лучше осознать какие-то сложные и/или состоящие из многих компонентов системы за счет подключения визуального канала восприятия и, соответственно, образного мышления. Говорят, что в среднем человек может удерживать в оперативной памяти лишь 7 отдельных объектов. Но это в том случае, если эти объекты слабо связаны в сознании друг с другом. А вот, если добавить ассоциации, то потенциальные возможности работы с ними в уме и запоминания неимоверно расширяются. В книге «Основы практики на пианино» утверждается, что именно на этом построены методы людей, практикующих фотографическую память…

              Но я отвлекся. При чем мыслекарты к личным финансам? Не считая, конечно, того, что оба эти явления как-то касаются темы личного развития :), связь нам подсказал один из пользователей нашего сервиса по учету финансов[2]. А что если применить эти карты к планированию трат на ближайшее будущее? Например, можно задумать траты, которые могут потенциально выйти за рамки семейного бюджета, но чтобы это понять, нужно посидеть с карандашом и блокнотом и прикинуть свои будущие расходы и доходы, добавить ингридиенты сбережений и незапланированных трат, и щепотку везения, а на выходе получить прогноз, удастся ли осуществить запланированное. В общем-то, в этом может неплохо помочь учетная система: ведь в ней есть уже почти вся нужная информация. Другой вопрос, что ее нужно показать так, чтобы человек не утонул в этом океане цифр. Вот тут на помощь и приходит наглядность и простота мыслекарт. Но, как говорится, «лучше один раз увидеть, чем сто раз услышать», поэтому попробую показать, что имеется в виду.

              немного конкретики
            • О самоподписных сертификатах

                В связи с моим участием в проекте fin-ack.com постоянно сталкиваюсь с подобными замечаниями:
                я не доверяю вашому самоподписному сертификату, почему вы не купите «нормальный» сертификат?

                Как по мне, это один из случаев недопонимания и предрассудков, которых так много в отношении безопасности в Интернете. (Вроде знаменитых «Хакеров, крекеров, спамов, куки» :). Хочу разобрать его с двух точек зрения: как человека, некоторое время проработавшего в сфере защиты информации в банке и имевшего дело с большинством аспектов информационной безопасности, и как человека, занимающегося разработкой и развитием интернет-сервиса.

                Но сперва отвечу на вопрос, почему у нас нет «нормального» сертификата? (На самом деле, с недавнего времени есть :) Самая главная причина в том, что в нашем списке приоритетов этот пункт стоял на N-ном месте, и только сейчас все N-1 предыдущих пунктов были выполнены. Когда работаешь над новым проектом, всегда приходится от чего-то отказываться, потому что ресурсы, прежде всего временные, ограничены…

                А почему же он стоял аж на N-ном месте?
                Во-первых, зачем вообще нужен сертификат SSL? Для того, чтобы зашифровать HTTP-соединение между браузером и сайтом, по которому будет передаваться пароль и какие-то другие конфиденциальные данные. Что изменится, если сертификат не подписан доверенным центром сертификации? Ничего! Соединение все равно будет зашифрованно точно также. Единственная возможная проблема: атака человек-посредине, которая в Интернете обычно является phishing'ом или pharming'ом.
                • При фишинге пользователя перенаправляют на сайт с похожим URL. При этом в браузере обязательно появится предупреждение про сертификат (такое же предупреждение появляется и при первом заходе на реальный сайт с самоподписным сертификатом).

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

                Но это только начало...
              • fin-ack.com: учет личных финансов

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

                  1. Кому нужен учет личных финансов? и 2. Наш подход и принципы, на которых построен сервис
                • Shell — секретное оружие Unix :)

                    Как я уже написал как-то:
                    если не хотите знать про коммандную строку, то в линуксе вам делать нечего. Будет вам та же винда, только вместо одних проблем получите другие…
                    --comment605950


                    С другой стороны, как раз в shell заключается одно из кардинальных отличий Unix-систем, то, что делает эти системы открытыми

                    В чем же основные особенности Unix shell, которых нет в Windows?
                    1. Весь процесс конфигурации и администрирования Unix построен на работе с текстовыми файлами. Shell — это полноценный язык программирования, заточенный для манипуляции строками и работы с тектсовыми файлами. К тому же, именно как расширение возможностей shell по обработке строк и возник Великий язык PERL!.
                    2. Благодаря п.1 shell — это отличный инструмент для постепенного изучения самой операционной системы.
                    3. Наличие shell способствует реализации важного принципа создания любых программ:
                      Если это простая программа, которая предназначена для выполнения ограниченного числа операций, ее нужно реализовывать как набор команд, родных для платформы, на которой она работает (как правило, платформой является ОС). Если же имеем дело со сложной интерактивной программой с потенциально неограниченным набором операций — ее нужно реализовывать как язык опять же на родном для платформы носителе (сейчас наиболее родным и удобным носителем при взаимодействии с компьютерами все же является текст, а не звук, графика или что-либо еще).
                      Примерами 1-го и 2-го подхода могу служить tcpdump, реализованный полностью в текстовом режиме, над котором не представляет труда надстроить интерфейс (по сути, Ethereal — и есть подобный интерфейс), и emacs — самый расширяемый текстовый редактор.
                      В этом проявляется основное отличие философии Unix и Windows: в Win интерфейс програм по умолчанию делается на графическом языке, из-за чего программы практически невозможно сопрягать или строить на их основе новые. Потому что для этого нет поддержки на уровне ОС. И для того, чтобы сделать программы расширяемыми, все равно приходится использовать текст (пример — тот же VBA в Word и Excel).
                    4. Автодополнение команд и, что самое главное, путей. Трудно даже представить, сколько времени и сил экономит эта небольшая возможность!
                    5. Полный набор утилит для всех возможных задач администрирования.


                    Стоит также перечислить утилиты shell, которые обязательно нужно использовать в повседневной работе с системой:
                    • man — это справка по ОС, которая включает не только описание работы всех команд, но также и что должно быть в большинстве из конфигурационных файлов, а также много другой полезной информации;
                    • less — просмотр текстовых файлов;
                    • grep (программистов, не знающих о grep, не берут на работу в Amazon.com :);
                    • locate — быстрый поиск файлов.


                    а еще можно вспомнить группы утилит, использование которых намного удобнее и эффективнее их графических аналогов:
                    • настройки сети (позаимствованные Windows);
                    • управления пакетами;
                    • управления пользователями;
                    • монтирования томов...


                    Можно только повториться, что для тех, кто не хочет работать в shell, Linux или другая Unix-based ОС — во многом такая же неудобная и непонятная система, как и Windows. Но стоит все-таки попробовать разобраться с shell — хотя бы для того, чтобы посмотреть, как правильно администрируются информационные системы.
                  • Технология надежной и удобной аутентификация для web


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

                      В чем именно неэффективность каждого из существующих способов?
                      • Простой пароль: удобно, но есть несколько угроз, и самая главная даже не столько несанкционированное ознакомление с ним, сколько то, что примерно одна и та же комбинация логин/пароль может быть использована для множества разнообразных сервисов, часть из которых может быть недостаточно защищена.
                        Одноразовые пароли: безопасно и относительно удобно (но, все-таки, добавляется лишнее устройство), но довольно дорого.
                        Сертификаты цифровой подписи: безопасно, но очень неудобно (проблемы с кросс-платформенной поддержкой токенов), а также дорого.
                        Использование второго канала связи для подтверждения (обычно, мобильного телефона): относительно безопасно, относительно удобно, относительно масштабируемо (пока...).
                        OpenID: безопасно, но на данный момент труднодоступно из-за того, что у 99% людей нет доверенного веб-сервера.


                        Однако, сейчас уже можно замахнуться на глобальную систему аутентификации, если использовать сочетание ставших уже реальностью 3 феноменов:
                        • IPv6;
                          OpenID;
                          стабильное интернет подключение с мобильного телефона/коммуникатора.

                          Вот она:
                      Читать дальше →