Заметки программиста

среда, 30 марта 2011 г.

Я переехал

Внимание! Теперь мой блог находится по адресу http://programador.ru/!

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

P.S.:  Запустил сайт-визитку на Google App Engine для нашей команды: www.programmisty.com

среда, 24 февраля 2010 г.

Показатели разрабатываемых систем

Краткий справочник по  Non-functional QoS

Внимание! Я перенес свой блог. Дальнейшее редактирование и обсуждение этой статьи будет осуществляться по адресу programador.ru

    Перед разработкой архитектуры системы или на ранней стадии ее проектирования,
всегда следует уделять внимание так называемым нефункциональным показателям (Non-functional QoS). Они определяют характеристики, которые не связаны с конкретным поведением системы, но при этом задают требования с точки зрения бизнеса.
Как и для любых показателей, которые определяются на этапе проектирования, кроме  желаемых характеристик, следует также, в первую очередь, выявить их минимально допустимые значения. Например, если система будет доступна в рабочем состоянии меньше 100 часов в неделю (Availability = 100/168 ~ 59.52%), то такая система для бизнеса будет не интересна (убыточна, не приносить никакой пользы). Зачем это нужно?
    Дело в том, что далеко не все базы данных, сервера приложений или технологические платформы могут обеспечить необходимые показатели доступности (availability), масштабируемости, надежности и т.д.. Выбор тех или иных решений должен зависеть от этих характеристик.

Краткий список нефункциональных показатели системы (Non-functional QoS): 
    Scalabitlity - Масштабируемость. Возможность увеличивать производительность системы пропорционально выделенным ресурсам. Бывает горизонтальная и вертикальная. Вертикальная - докупаем более быструю память, более шустрый жесткий диск или переносим всё на один еще более мощный сервер. Горизонтальная - покупаем еще один сервер и запускаем приложения  в кластерном режиме, в случае необходимости - докупаем еще один сервер и втыкаем к двум уже работающим и так далее.
    Extensibility - Расширяемость. Возможность добавление дополнительного функционала.
    Flexibility - Гибкость. Возможность менять существующую архитектуру (например в зависимости от ценовой политики). В отличие от Extensibility, речь идет только об изменениях без дополнительного функционала. Например у заказчика нет денег на нормальную СУБД (допустим ORACLE). Наша задача сделать систему настолько гибкой, чтобы в случае необходимости мы смогли её подпилить так, чтобы она смогла  бы обойтись чем-нибудь бесплатным (MySQL или PostgreSQL).
     Насколько должна уметь прогибаться система, желательно, по мере возможности, определить по-раньше...
    Maintainablity - Поддерживаемость, ремонтопригодность. Способность поддерживать систему в работоспособном состоянии. Показатель определяет насколько легко (или сложно) вносить исправления в работающую систему, возможно ли повторное развертывание и запуск системы после сбоя, возможность восстановить из резервных хранилищ и т.д.
    Availability - коэффициент доступности(готовности). Процент времени проведенного  системой в работоспособном состоянии к общему времени работы системы.


часто высоко доступные (High Availability) системы меряются девятками:
  • 99,9 % ("три девятки") = система недоступна не более 8,76 часов/год
  • 99,99 %  ("четыре девятки")= не более 52,6 минуты/год
  • 99,999 % ("пять девяток") = не более 5,26 минуты/год
    Manageability - управляемость. Возможность отслеживать и предотвращать возможные сбои в системе. Это в первую очередь наличие логирование (журналирование), системы оповещения о сбоях, возможность предотвратить возникновения ошибки.
    Reliability - надежность. Вероятность без ошибочного выполнения операций в определенный период времени в определенном окружении.

воскресенье, 7 февраля 2010 г.

Удаляем .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]
 

среда, 23 декабря 2009 г.

Диаграмма последовательности (Sequence Diagram)

Диаграмма последовательности (Sequence Diagram)

Внимание! Сейчас блог находится по адресу: programador.ru

Тематика осталась такой же - UML, Java, программирование и т.д. Дальнейшее редактирование и обсуждение этой статьи здесь осуществляться не будет. 


Удобное средство для обозначения очередности следования друг за другом различных стимулов (сообщений), с помощью которых объекты взаимодействуют между собой.
Например, когда нужно проработать буквально по шагам какой-то очень важный участок выполнения программы.
Главный акцент - порядок и динамика поведения, т.е. как и в каком порядке происходят события.
Отличие от диаграммы классов:
Диаграмма классов дает статическую картинку, т.е. описание которое не меняется во время выполнения программы.
Отличие от диаграммы коммуникаций (или как она раньше называлась colaboration):
Диаграмма последовательности фокусирует наше внимание на очередности выполнения по времени, а диаграмма коммуникаций - на составляющих элементах.
Обычно нормальные люди стараются описывать одной диаграммой только один определенный кейс (UseCase, вариант использования), например: "оставить коммент к сообщению в блоге", "стать постоянным читателем" и т.д...
Диаграммы последовательности,
которые описывают всю систему сразу, представляют из себя монстра, пожирающего внимание, сознание, силы, время и мозг разработчика.

Итак, предлагаю рассмотреть простенькую диаграмму последовательности.
Возьмем банальный пример:



суббота, 12 декабря 2009 г.

Вики-Тики-Тави... Небольшой обзор различных wiki-движков

Внимание! Я перенес свой блог. Дальнейшее редактирование и обсуждение этой статьи будет осуществляться по адресу programador.ru 

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

Переключаю режим протоколирования своих записей в WebLog-е ,в  режим DEBUG...
Внимание! Количество публикуемой информации будет на два порядка больше.
Изначально,этот блог я планировал использовать как замена блокноту.
Очень часто в работе возникает необходимость записать на скорую руку различные советы, чтобы потом можно было их быстро найти и прочитать.
В ближайшие несколько месяцев, планирую перейти на использование для этих целей онлайновых блокнотов. Сейчас выбираю между luminotes и ubernote(Google Notebook, к сожалению, сдулся...)
Пока не выбрал, этот блог буду использовать в двух вариантах - для написания полноценных обзоров, так и для небольших заметок "чтоб не забыть".
Полноценные обзоры (инструкции), всё-таки оказались нужны, т.к. накапливается множество информации, которую хранить в виде небольших записок уже не получается.
В данном топике попробую рассмотреть вики-движки: MediaWiki, JAMWiki, XWiki и MoinMoin.
Начнем с двух главных аспектов:
  1. Какая от них польза?
  2. Какие они бывают?
    малоко.

    суббота, 28 ноября 2009 г.

    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:
    Все ОК.

    воскресенье, 15 ноября 2009 г.

    изменение размера картинок

    mogrify -resize 640 *.jpg
    mogrify -resize x768 *.jpg
    mogrify -resize 30% *.jpg

    пятница, 23 октября 2009 г.

    создание пользователя для MySQL

    GRANT ALL PRIVILEGES ON .* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password';
    Подробнее читать тут и тут
    
    команда GRANT создает пользователя
    my_user - имя пользователя
    IDENTIFIED BY - задает пароль my_password (он потом хэшируется)
    
    чтобы подключаться не только с локального хоста вместо
    'my_user'@'localhost' пишем 'my_user'@'%'
    
    Если хотим чтобы пользователь мог добавлять других добавляем
    WITH GRANT OPTION
    т.е. так ... IDENTIFIED BY 'my_password'  WITH GRANT OPTION;
    
    Пример JDBC URL jdbc:mysql://host:3306/database
    
    Если нужен SSL и X509. Смотрим сюда:
    Как настроить MySQL для SSL
    Как настроить JDBC коннектор
    
    
    

    вторник, 20 октября 2009 г.

    svn resolve

    svn resolve --accept=...

    base - откатить на то, что в репозитории
    working - перекатать текущим файлом, который в раб директорииmine

    понедельник, 12 октября 2009 г.

    GWT+Maven

    Самый эффективный способ работы с GWT
    1. Ставим maven. Как всегда, прописываем путь в PATH к mvn.bat

    2. Читаем про maven. Читать тут
    Мануал довольно кривой, но разобраться можно...

    3. Читаем про плагин к maven'у для работы с GWT. Читать здесь

    Там же можно прочитать как создать проект:
    Например так:
    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo -DarchetypeArtifactId=gwt-maven-plugin -DarchetypeVersion=1.1 -DgroupId=myGroupId -DartifactId=myArtifactId

    воскресенье, 11 октября 2009 г.

    новый модуль в svn

    я делаю по тупому
    1. логинюсь на сервак и делаю
    svn import ./projectName file:///path/to/svn/rep/projectName -m "my message"

    2. захожу в конфиг-файл:/path/to/svn/rep/conf/authz
    и добавляю себе права
    [/projectName]
    boss=rw

    3. на рабочей тачке делаю
    svn co svn://myserver.ru/projectName
    проверяю что всё четко

    4.копирую нужные исходники
    5.делаю svn add
    6.делаю svn commit -m "my second message"
    7. создаю в другом месте папку, туда svn co svn://myserver.ru/projectName и проверяю что все ОК

    четверг, 8 октября 2009 г.

    svn бранч

    Делаем новый бранч:

    1. навсякий случай делаем чистинькую версию
    svn co svn://example.com/project/trunk

    2. копируем все в отдельную ветку:
    svn copy svn://example.com/project/trunk svn://example.com/project/branches/helloween

    пятница, 2 октября 2009 г.

    создаем базу

    запускаем консоль
    ./mysql -u пользователь -p

    список существующих баз
    mysql>show databases;

    создаем свою
    mysql>create database MYDATABASE character set utf8;

    пятница, 21 августа 2009 г.

    UML справочник

    мини-справочник для UML!

    пятница, 7 августа 2009 г.

    opencms

    Debian lenny+mysql+tomcat5.5+opencms
    1. редактируем /etc/apt/sources.list - добавляем non-free
    что-то вроде:
    deb http://mirror.yandex.ru/debian lenny main non-free
    deb-src http://mirror.yandex.ru/debian lenny main non-free

    2. aptitude install sun-java6-jdk
    3. aptitude install tomcat5.5
    4. aptitude install mysql-server

    5. открывем /etc/tomcat5.5/policy.d/50user.policy
    грантим права
    grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
    permission java.io.FilePermission "${catalina.base}/webapps/opencms/WEB-INF/classes/logging.properties", "read";
    };
    grant codeBase "file:/var/lib/tomcat5.5/webapps/opencms/-" {
    permission java.security.AllPermission;
    };

    Важно! не забыть добавть ';' в конце

    четверг, 6 августа 2009 г.

    vsftpd

    Если нужно быстро поднять ftp-сервер под debian
    apt-get install vsftpd
    конфиг файл как всегда в /etc/vsftpd.conf и включаем
    anonymous_enable=YES
    write_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    создаем в /home/ftp папку tmp, делаем ее доступной для записи,
    например так chmod +w /home/ftp/tmp
    все... и никогда не делаете это на доступных из вне серверах

    понедельник, 29 июня 2009 г.

    Чтобы заработал enhancer от DataNucleus нужно в NetBeans
    Project Properties -> Build / Compiling -> Turn Off "Compile on Save"

    четверг, 25 июня 2009 г.

    jsecurity

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

    документация слабая.
    Лучше делать так:
    1. Смотреть исходники, запустить под дебагом и вкуривать
    2. Просмотреть что написано здесь

    среда, 17 июня 2009 г.

    hibernate+mysql+autocommit

    Отключаем AUTOCOMMIT

    1. в файле hibernate.cfg.xml указываем:
    false

    2. когда создаем табличку указываем тип InnoDB

    CREATE TABLE (...) TYPE=InnoDB;

    суббота, 7 июня 2008 г.

    отключить бип в терминале по табу
    открываем
    /etc/inputrc

    ставим

    set bell-style none

    четверг, 5 июня 2008 г.

    Scala и UTF-8

    При работе со Scala в Netbeans возникают проблемы с русскими буквами.
    Нужно
    1. *.scala должны быть в UTF-8
    2. в C:\Program Files\NetBeans 6.1\etc\netbeans.conf
    добавить к параметру netbeans_default_options значение: -J-Dfile.encoding=UTF-8

    среда, 4 июня 2008 г.

    Чтобы пользоваться gwt-ext http://gwt-ext.com/
    нужно еще скачать extjs - http://extjs.com/products/extjs/download.php
    и положить его в нужное место

    суббота, 31 мая 2008 г.

    Парсер для SWIFT'а

    Для разбора SWIFT сообщений можно использовать opensource реализацию WIFE

    четверг, 29 мая 2008 г.

    setReadOnly vs setDisabled

    в gwt-ext у текстовых полей можно вызывать setReadOnly(true), он покрайне мере эстетичней отрисовывает поля по сравнению setDisabled(true)

    среда, 28 мая 2008 г.

    интересный блог...

    Интересный блог про командостроение - тут

    вторник, 27 мая 2008 г.

    blogspot

    Для того, чтобы изменить ширину сообщения в blogspot
    Макет -> Изменить HTML

    Меняем в CSS-ке для outer-wrapper, main-wrapper, sidebar-wrapper аттрибут width...

    Потом попробую поиграть со стилями для форматирования java-кода

    Scala и Netbeans

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

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

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