Метка: программирование

  • Книги о программировании

    Cписок книг,  которые возможно будут интересны другим программистам

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

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

    Итак, приступим к обзору.

    (далее…)

  • Test-driven development (TDD) и Постпозитивизм

    Давным-давно, когда я учился в аспирантуре физтеха по специальности “Моделирование, численные методы и комплексы программ”, одним из предметов которые нужно было изучать была философия. Лично для меня предмет не самый интересный, но благодаря  нашему преподавателю философии после пары лекций  учение Сэра Карла Раймунда Поппера вызвало  парадигм_шифт в сознании…

    Краеугольным камнем этого сдвига является критерий Поппера или фальсифицируемость (принципиальная опровержимость утверждения, опровергаемость).  Цитируя википедию, привожу следующее определение: “Критерий фальсифицируемости требует, чтобы теория или гипотеза не была принципиально неопровержимой.”

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

    Следуя правилам TDD мы с помощью набора тестов создаем условия, при которых наша программа ( “гипотеза“) может быть опровергнута! Далее,  в процессе разработки ПО мы добиваемся состояния, когда все тесты выполняются успешно  и “загорается зеленый свет”!

    А дальше у многих в голове происходит страшное…

    Люди начинают путать фальсифицируемость и верифицируемость(то есть доказуемость). Если все тесты прошли успешно, это не доказывает, что наша программа работает корректно. Соблюдение критерия Поппера — есть необходимое условие, но не достаточное.  Другими словами, если все тесты прошли успешно, этого недостаточно! Нельзя   утверждать, что программа работает корректно.

    Зачем же тогда писать юнит-тесты? Затем, чтобы в тех случаях когда тест не срабатывает мы точно знали — у нас есть ошибки. Это важно знать, иначе в программировании будет торжествовать мистика и мракобесие.

  • Camel Case

    camel caseCamel Case, он же — Верблюжий Регистр, он же — Горбатый Стиль.

    Определение из википедии — “стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с заглавной буквы. Стиль получил название CamelCase, поскольку заглавные буквы внутри слова напоминают горбы верблюда

    Такой стиль используется в языке программирования  Java. Для названия классов используют UpperCamelCase (верблюд поднял голову – первая буква большая),  для методов и объектов класса — lowerCamelCase (верблюд опустил голову).

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

    Не будь верблюдом, не плюй на других, используй верблюжий регистр!

    Пожалуйста, соблюдайте доброжелательное отношение к другим людям!

  • Как программисты видят друг друга. Java, C, PHP, Ruby, Haskell

    Как программисты видят друг друга:

    как программисты видят друг друга

    Авторство, к сожалению, определить не смог, картинка сильно разошлась в интернете. Изначально, наткнулся на подобную картинку в комментариях к посту в блоге Алены С++ про программистов различных специальностей.  Еще интересная картинка,  которая меня порадовала как бывшего LISP-программиста: (далее…)

  • Как считается TIOBE индекс?

    Прочитал новость на слэшдоте о новых данных по TIOBE индексу языков программирования за Апрель 2010 года (оригинальную статью можно прочитать здесь):

    Position
    Apr 2010
    Position
    Apr 2009
    Delta in Position Programming Language Ratings
    Apr 2010
    Delta
    Apr 2009
    Status
    1 2 C 18.058% +2.59% A
    2 1 Java 18.051% -1.29% A
    3 3 C++ 9.707% -1.03% A
    4 4 PHP 9.662% -0.23% A

    В итоге, разница в индексе популярности языков программирования (по методике TIOBE) между С и Java составляет около 0.007, что на мой взгляд незначительно (по сравнению Java – PHP = 8.389)

    Индекс считается очень интересно. (далее…)

  • Стимуляторы

    Приготовление стимуляторов мозговой активности программиста в офисных условиях (кроме эспрессо)…

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

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

    /* NOTE: Все описанные в тексте  эффекты являются субъективными, эффект от их применения сугубо индивидуален. Проконсультируйтесь с врачом. */

    кунг-фу чайник
    кунг-фу чайник

    Тегуаньинь + Кунг-фу чайник.

    Зелёный чай, как мне кажется, является одним из самых мягких стимуляторов по воздействию на сознание, а тегуаньинь – один из лучших, и к сожалению один из самых дорогих.

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

  • Хранение семантических данных. Связка: Jena / Jenabean + Sparql

    1. Jena

    В поисках средств для работы с семантическими данными (semantic web) на java можно наткнуться на  следующие решения:

    1. Jena
    2. JRDF
    3. Sesame

    В данной статье я хочу рассмотреть работу только с  Jena.  Этот фреймворк достаточно богат по набору  полезных фишек, например

    • он позволяет работать с RDF, RDFS, OWL,
    • осуществлять запросы через  SPARQL,
    • есть возможность читать и писать из N3 и RDF-XML форматов,
    • работать с базами данными Oracle, MySQL, PostgreSQL, HSQLDB, MS SQL Server и Derby.

    Исторически, jena является разработкой выращенной в лаборатории Hewlett-Packard в рамках исследований по семантик вебу. Приблизительно с октября 2009 года HP-шники прекратили активные работы над этим проектом и стали его активно опенсорсить (под BSD-подобной лицензией).  Думаю сейчас  разработчики могут спокойно и бесплатно использовать  его без особых проблем.

    Для Jena имеется неплохой набор учебных материалов как на самом сайте, так и на других различных ресурсах (например на ibm-ком developerWorks: Introduction to Jena). Структура базовых классов простая и интуитивно понятная. Для примера, привожу краткий набор некоторых основных сущностей в библиотеке:

    • RDFNode – базовый интерфейс для ресурсов или литералов
    • Resource – RDF-ный ресурс (например <http://somewhere/JohnSmith>)
    • Literal – RDF литерал (“John Smith”)
    • Property – свойство или предикат (VCard.FN)
    • Statement – триплет “субъект” – “предикат” – “объект”
    • Model – множество триплетов

    Неплохую вводную по работе с Jena, можно прочитать на сайте  www.semantictools.ru. Также этом на сайте находится множество полезной информации для людей увлеченных семантическими технологиями.

    2. Jenabean

    Для связки между JavaBean и RDF хранилищем можно использовать библиотеку jenabean . Способ привязки базируется на аннотациях и чем-то напоминает работу с JPA — аннотациями даются указания каким образом связываются поля класса и данные в хранилище.

    Примеры, документацию и саму библиотеку можно скачать на официальной странице  проекта – http://code.google.com/p/jenabean

    Также там имеется замечательный скринкаст, в котором показано по шагам (с нуля) работа под NetBeans’e с этой библиотекой. Так что здесь какие-либо мои пояснения по установке и работе библиотеки уже не нужны, достаточно просмотреть видео на сайте.

    Далее хотелось уделить особое внимание работе  Jenabean и SPARQL.

    SPARQL – язык запроса для выгребания данных из RDF.  С его помощью можно осуществлять довольно хитрые выборки.

    Для работы через SPARQL в jenabean можно использовать класс Sparql, который может получать данные из Jena-вской модели (Model – множество триплетов) .

    Важно! В jenabean-овском  SPARQL-запросе обязательно должна быть переменная ?s, которая ссылается на требуемый вами объект. Зачем они решили сделать такую жесткую завязку  на ?s мне не понятно, может в следующих версиях придумают что-нибудь покрасивее.

    В качестве примере, можно рассмотреть кусок кода — получение списка из 10 (LIMIT 10) статей в порядке их публикации (ORDER BY ?d)  начиная с 20-ой (OFFSET 20) .

    String query = "SELECT ?s ?d WHERE " +
    "{ ?s a  . ?s  ?d } " +
    "ORDER BY ?d LIMIT 10 OFFSET 20";
    LinkedList
    list = Sparql.exec(model, Article.class, query);
  • Сортировка за O(N)-время

    Случайно наткнулся на статью на java.dzone.comFast O(n) Integer Sorting Algorithm!

    Всегда считал что O(n*log(n) ) это очень хороший показатель.  Например, стандартная реализация сортировки в Java 6 является слегка модифицированным вариантом merge sort, которая  соответственно дает время n*log(n).  Получить ультра ускорялку сортировки можно используя дополнительные хитрости: используя дополнительные знания о самих объектах которые мы сортируем + ограничения на возможные их значения.

    Если верить википедии Гарольд Сьюард (Harold H. Seward) в 1954 году из MIT изобрел ультра крутой способ сортировки  – radix sort (поразрядная сортировка), а также разработал counting sort (сортировка подсчетом).
    При такой сортировки мы не используем Comparator, т.е. сравнение и перестановка элементов как в обычной сортировки не происходит. С другой стороны, такой метод требует дополнительной памяти и
    особо эффективен в тех случаях, когда мы сортируем большое количество натуральных чисел ограниченных по возможным принимаемым значениям. Например: массив из 1000000 целых чисел, которые принимают значения от 0 до 1000.
    (далее…)

  • jsecurity

    Разобрался с jsecurity (который сейчас Апач Ки – apache ki)

    документация слабая.
    Лучше делать так:

    1. Смотреть исходники, запустить под дебагом и вкуривать
    2. Просмотреть что написано здесь
  • Scala и Netbeans

    для того чтобы заработала scala в нетбинсе нужно указать в
    “C:\Program Files\NetBeans 6.1\etc\netbeans.conf”

    netbeans_default_options= .. -J-Dscala.home=< Путь_к_скале>

    сам плагин можно скачать здесь