Рубрика: 4. Полезняшки

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

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

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

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

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

    (далее…)

  • Звездочка (*) в шестёрке и хитрые bat-файлы

    Запуск java-программы из командной  строки.

    Представим такую ситуацию

    В результате вашей работы в качестве java программиста у вас получился один JAR-файл (для простоты назовем его mytools-1.0-SNAPSHOT.jar). Кроме него вы планируете использовать более десятка других jar-файлов.

    Ваша программа должна запускаться из командной строки, а не из супер-пупер IDE которую вы обычно используете в работе. Например Вашу программу нужно отправить другому человеку, у которого нет такой же как у вас среды разработки (Eclipse, NetBeans, IDEA и т.д.) или запустить на удаленном сервере доступ к которому осуществляется только через SSH. Таким образом, для запуска вашей программы вам нужно собрать все требуемые для работы jar-файлы, прописать их  в CLASSPATH и для удобства написать простой runme.bat файл или (runme.sh для линукса).

    Рецепт 1.

    Требуется: maven, maven-assymbly-plugin

    Если вы используете maven, то возможно Вам будет удобно воспользоваться  maven-assymbly-plugin. Найти информацию по нему можно здесь: http://maven.apache.org/plugins/maven-assembly-plugin/

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

    Для этого:
    1. добавляем в pom.xml настройки для maven-assymbly-plugin.

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
            [...]
    </project>

    2. Запускаем сборку

    mvn assembly:assembly

    3. Получаем jar файл со всеми зависимостями:

    target/mytools-1.0-SNAPSHOT-jar-with-dependencies.jar

    Подробную информацию как работать со сборками можно получить открыв ссылку приведенную выше.

    Дальше, я предпочитаю копировать jar-файл в отдельную папку lib. После этого остается только создать простой BAT-файл в котором будет содержаться строка:

    java -cp mytools-1.0-SNAPSHOT-jar-with-dependencies.jar com.programmisty.Main %*

    %* – означает что все аргументы командной строки будут переданы в main-класс.

    Минусы: Если необходимо заменить только одну зависимость, приходится распаковывать и перепаковывать весь этот монолитный jar-файл.

    Рецепт 2

    Собираем все необходимые jar-файлы в одну директорию. Например с помощью maven это можно сделать командой

    mvn dependency:copy-dependencies

    Если вы не используете maven, можно просто скопировать руками все необходимые вам файлы.
    Затем копируем наш mytools-1.0-SNAPSHOT-jar и все дополнительные jar-файлы в папку lib.

    Если у нас windows, создаем BAT-файл runme.bat. В итоге у нас получается что-то вроде этого:

    .
    |_lib
    | |_mytools-1.0-SNAPSHOT-jar
    | |_commons-lang-2.4.jar
    | |_commons-logging-1.1.1.jar
    | |_commons-httpclient-3.1.jar
    | |-...
    |_runme.bat

    Теперь, возможно старым java программистам будет интересно узнать, что в Java 6 наконец-то в classpath можно использовать звездочку (*).
    Раньше многие делали так:

    set CP=lib/mytools-1.0-SNAPSHOT-jar
    set CP=%CP%;lib/commons-lang-2.4.jar
    rem "и так до самого конца"
    java -cp %CP% com.programmisty.Main %*

    Те кто похитрее делал так:

    setlocal ENABLEDELAYEDEXPANSION
    set CP=
    for %%i in (lib/*.jar) do set CP=!CP!lib/%%i;
    java -cp %CP% com.programmisty.tools.Main %*

    Если вы работаете в Linux, то для настоящего линуксоида получить список jar-файлов в директории и присвоить значение переменной — задачка “школьного” уровня. По этой ссылке можно найти несколько способ ее решения http://www.sql.ru/Forum/actualthread.aspx?bid=38&tid=569498

    Но теперь, если у вас java 6 это вообще не проблема, файл runme.bat может выглядеть следующим образом:

    java -cp "lib/*" com.programmisty.tools.Main %*

    Под линуксом wildcard (то есть звездочка) также успешно работает. Подробнее можно прочитать здесь: http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html в разделе “Understanding class path wildcards”

  • Camel Case

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

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

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

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

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

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

  • мини-справочник по PKCS-ам

    Мой мини-справочник по PKCS-ам:

    PKCS#7 – Подпись и сертификаты  (Cryptographic Message Syntax Standard)

    PKCS#8 – Секретные ключи

    PKCS#10 – Запрос к УЦ на выпуск сертификата (Certification Request Standard)

    PKCS#11 – API для криптотокенов

    PKCS#12 – Хранилище секретных  ключей и сертификатов (Personal Information Exchange Syntax Standard)

    Как работать с подписью, ключами и сертификатами  в Java можно прочитать в официальном туториале

    Если лень, то готовые примеры можно взять на java2s.com

  • jenabean id (hashCode)

    В одной из предыдущих статей я уже писал об использовании связки: jena + jenabean. Следует обратить особое внимание на генерацию идентификаторов объектов в jenabean.

    Вот цитата с официального сайта:

    WhatsUpWithThat

    Questions about Jenabean

    Q: Why do I need to annotate my beans with an Id?

    Jenabean will create a URI for you, but it needs to know what makes your bean instance unique. Its class path and class name are useful, but it’s still necessary to distinguish between multiple instances of the same class. In the absence of an @Id annotated field or method, Jenabean will use the object’s hash code value (via the hashCode() method of java.lang.Object) but be warned, this is no unique, and will change when the bean is reconstituted from the triple store.

    Таким образом, если явно не указать идентификатор, то он будет генерироваться далеко не самым  надежным способом – через hashCode()!


  • Как считается 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: Все описанные в тексте  эффекты являются субъективными, эффект от их применения сугубо индивидуален. Проконсультируйтесь с врачом. */

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

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

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

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

  • Удаляем .svn папки. Linux или Windows+FAR

    Всем добрый вечер!

    Иногда возникает задача удалить все папки “.svn” в какой-то директории.
    Конечно можно сразу получить “чистую версию” используя “svn export”.
    Но иногда в силу лени или отсутствия возможности подключиться к SVN-серверу,
    можно поступить по-другому.

    Linux
    $rm -rf `find . -type d -name .svn`
      
    Перевод на человеческий
    rm значит удаление
    ключ  -r удалять рекурсивно, f - "force" не спрашивать подтверждения.
    т.е. rm -rf  -удалять втихую файлы рекурсивно.
     `find . -type d - name .svn` 
    find - искать файлы
    . - в текущей директории
    -type d - искать только директории (поэтому d)
    -name .svn - искать с именем ".svn"
    т.к. мы обернули find в апострофы - `find ...`, то rm будет удалять то, что ей придет от комманды
    из апострофов.
    Полностью команда означает следующее. Удалить без лишних вопросов 
    в текущей директории и ее поддиректориях всё, что найдется в поисковом запросе, 
    который будет искать все директории с именем ".svn" в текущей директории.
     
    Windows+FAR
    Жмем поиск [Alt]+[F7]
    Вводим .svn
    В полученном списке выбираем [Панель] (два нажатия стрелочки вправо)
    Выделяем все - [NumPad *]
    Нажимаем удалить [F8]
    
    
  • Вики-Тики-Тави… Небольшой обзор различных wiki-движков

    Всем добрый день!

    Переключаю режим протоколирования своих записей в WebLog-е ,в  режим DEBUG…
    Внимание! Количество публикуемой информации будет на два порядка больше.
    Изначально я планировал использовать этот блог в качестве замены блокноту.
    Очень часто в работе нужно записать на скорую руку различные советы, чтобы потом можно было их быстро найти и прочитать.

    В ближайшие несколько месяцев, планирую перейти на использование для этих целей онлайновых блокнотов. Сейчас выбираю между luminotes и ubernote(Google Notebook, к сожалению, сдулся…)
    Пока не выбрал буду использовать этот блог в двух вариантах – как для написания полноценных обзоров, так и для небольших заметок “чтоб не забыть” .

    Полноценные обзоры (инструкции), всё-таки оказались нужны, т.к. накапливается множество информации, которую хранить в виде небольших записок уже не получается.
    В данном топике попробую рассмотреть вики-движки: MediaWiki, JAMWiki, XWiki и MoinMoin.
    Начнем с двух главных аспектов:

    1. Какая от них польза?
    2. Какие они бывают?

    Польза
    Создание базы знаний  различных сообществ, рабочих групп и организаций. В целом, я вижу два основных UseCase’a использования Wiki.
    Case 1. Организация и ее внутренний рабочий беспорядок.
    Контекст
    Допустим существует компания (например кол-во сотрудников > 5 чел). Раз в два-три месяца в компанию приходят или уходят новые сотрудники. Деятельность компании лежит в технологически ёмких областях – IT, телеком и т.д.
    Проблема
    В компании существует огромное количество различных правил и инструкций,  которые либо никак не задокументированы, либо отражены в бумажном виде и покрыты толстым слоем пыли.  Периодически сотрудником приходиться проводить целое детективное расследование, чтобы понять  как собрать версию XXX для ООО “ГАЗМЯСБЫТ, где находится волшебный скрипт перезапускающий сервер или когда поздравить с днем рождению Машу из отдела продаж.

    Польза от wiki

    1. Не нужно держать в голове всю справочную информацию (настройки роутеров, дни  рождения сотрудников, “хитрые” правила сборки и выкладки программных продуктов, телефоны, адреса и т.д.)
    2. Делает информацию открытой внутри компании. Таким образом аннигилируются зависимость от “человека знания“, который единственный в радиусе 1 светового года знает, что где лежит и как это работает.
    3. Это просто интересно и модно. Некоторым это важно.

    Case 2. Фан-клуб, радио кружок, небольшой городок.
    (далее…)

  • JAD

    Используем JAD (JAva Decompiler)
    Очень удобно использовать в связки с FAR

    1. Качаем JAD http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html
    2. Устанавливаем, т.е. тупо разархивируем
    3. Прописываем в PATH (если нужно)
    4. Запускаем FAR
    5. Нажимаем F9
    6. Открываем Комманды –> Ассоциации Файлов
    7. Жмем “Ins”
    8. Добавляем. Маска файла – *.class, команда для редактирования – edit:<jad -p !.!

    Все ОК.