Для генерации нового maven проекта
плагина для Liferay
необходимо выполнить ряд шагов. В качестве примера будем делать это в
интерактивном режиме, в дальнейшем можно будет уместить все в одну команду с
параметрами.
суббота, 4 июля 2015 г.
суббота, 30 мая 2015 г.
Валидация по схемам в веб-сервисе Apache CXF
По умолчанию проверка по схемам (SchemaValidation) в веб-сервисе на основе каркаса Apache CXF, как оказалось, отключена. Это сделано для увеличения производительности.
Для включения этой возможности достаточно добавить аннотацию к реализации интерфейса сервиса:
org.apache.cxf.annotations.SchemaValidation
После этого, если на сервис придет сообщение, не соответствующее схемам, генерируется исключение.
Подробнее:
По умолчанию, например когда проверка отключена сервис пропускал сообщения с отсутствующими обязательными элементами.
пятница, 28 сентября 2012 г.
понедельник, 9 января 2012 г.
Алгоритм шифрования Эль-Гамаля (Elgamal) на C++
Собственно рабочая версия
int power(int a, int b, int n){// a^b mod n
int tmp=a;
int sum=tmp;
for(int i=1;i<b;i++){
for(int j=1;j<a;j++){
sum+=tmp;
if(sum>=n){
sum-=n;
}
}
tmp=sum;
}
return tmp;
}
int mul(int a, int b, int n){// a*b mod n
int sum=0;
for(int i=0;i<b;i++){
sum+=a;
if(sum>=n){
sum-=n;
}
}
return sum;
}
/*****************************************************
p - простое число
0 < g < p-1
0 < x < p-1
m - шифруемое сообщение m < p
*****************************************************/
void crypt(int p,int g,int x, string inFileName,string outFileName){
ifstream inf(inFileName.c_str());
ofstream outf(outFileName.c_str());
int y=power(g,x,p);
wcout<<"Открытый ключ (p,g,y)="<<"("<<p<<","<<g<<","<<y<<")"<<endl;
wcout<<"Закрытый ключ x="<<x<<endl;
wcout<<"\nШифруемый текст:"<<endl;
while(inf.good()){
int m=inf.get();
if(m>0){
wcout<<(char)m;
int k=rand()%(p-2)+1; // 1 < k < (p-1)
int a= power(g,k,p);
int b= mul(power(y,k,p),m,p);
outf<<a<<" "<<b<<" ";
}
}
wcout<<endl;
inf.close();
outf.close();
}
void decrypt(int p,int x,string inFileName,string outFileName){
ifstream inf(inFileName.c_str());
ofstream outf(outFileName.c_str());
wcout<<"\nДешифрованый текст:"<<endl;
while(inf.good()){
int a=0;
int b=0;
inf>>a;
inf>>b;
if(a!=0&&b!=0){
//wcout<<a<<" "<<b<<endl;
int deM=mul(b,power(a,p-1-x,p),p);// m=b*(a^x)^(-1)mod p =b*a^(p-1-x)mod p - трудно было найти нормальную формулу, в ней вся загвоздка
char m=static_cast<char>(deM);
outf<<m;
wcout<<m;
}
}
wcout<<endl;
inf.close();
outf.close();
}
int main(){
srand(time(NULL));
crypt(593,123,8, "in.txt","out_crypt.txt");
decrypt(593,8,"out_crypt.txt","out_decrypt.txt");
return 0;
}
Описание алгоритма на википедии без волшебной формулы
int power(int a, int b, int n){// a^b mod n
int tmp=a;
int sum=tmp;
for(int i=1;i<b;i++){
for(int j=1;j<a;j++){
sum+=tmp;
if(sum>=n){
sum-=n;
}
}
tmp=sum;
}
return tmp;
}
int mul(int a, int b, int n){// a*b mod n
int sum=0;
for(int i=0;i<b;i++){
sum+=a;
if(sum>=n){
sum-=n;
}
}
return sum;
}
/*****************************************************
p - простое число
0 < g < p-1
0 < x < p-1
m - шифруемое сообщение m < p
*****************************************************/
void crypt(int p,int g,int x, string inFileName,string outFileName){
ifstream inf(inFileName.c_str());
ofstream outf(outFileName.c_str());
int y=power(g,x,p);
wcout<<"Открытый ключ (p,g,y)="<<"("<<p<<","<<g<<","<<y<<")"<<endl;
wcout<<"Закрытый ключ x="<<x<<endl;
wcout<<"\nШифруемый текст:"<<endl;
while(inf.good()){
int m=inf.get();
if(m>0){
wcout<<(char)m;
int k=rand()%(p-2)+1; // 1 < k < (p-1)
int a= power(g,k,p);
int b= mul(power(y,k,p),m,p);
outf<<a<<" "<<b<<" ";
}
}
wcout<<endl;
inf.close();
outf.close();
}
void decrypt(int p,int x,string inFileName,string outFileName){
ifstream inf(inFileName.c_str());
ofstream outf(outFileName.c_str());
wcout<<"\nДешифрованый текст:"<<endl;
while(inf.good()){
int a=0;
int b=0;
inf>>a;
inf>>b;
if(a!=0&&b!=0){
//wcout<<a<<" "<<b<<endl;
int deM=mul(b,power(a,p-1-x,p),p);// m=b*(a^x)^(-1)mod p =b*a^(p-1-x)mod p - трудно было найти нормальную формулу, в ней вся загвоздка
char m=static_cast<char>(deM);
outf<<m;
wcout<<m;
}
}
wcout<<endl;
inf.close();
outf.close();
}
int main(){
srand(time(NULL));
crypt(593,123,8, "in.txt","out_crypt.txt");
decrypt(593,8,"out_crypt.txt","out_decrypt.txt");
return 0;
}
Описание алгоритма на википедии без волшебной формулы
воскресенье, 27 ноября 2011 г.
среда, 24 августа 2011 г.
Книга Архитектура корпоративных программных приложений(Шаблны корпоративных приложений)

Фаулер. М."Архитектура корпоративных программных приложений"("Patterns of Enterprise Application Architecture"), 2006. - 544 с.
Книга об архитектурных шаблонах проектирования для приложений, применяемых в масштабах предприятий.
Автором вводится понятие "корпоративное приложение" и чем оно отличается от других программ, какие проблемы необходимо решить при построении данного вида систем.
Рассматриваются конкретные шаблоны для решения наиболее стандартных задач встречающихся при разработке корпоративных приложений.
Автором вводится понятие "корпоративное приложение" и чем оно отличается от других программ, какие проблемы необходимо решить при построении данного вида систем.
Рассматриваются конкретные шаблоны для решения наиболее стандартных задач встречающихся при разработке корпоративных приложений.
Ярлыки:
архитектура,
Книги,
Проектирование,
Java,
patterns
суббота, 2 апреля 2011 г.
Новая книга GoF
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес "Приемы объектно-ориентированного проектирования. Паттерны проектирования", 2010. - 366 с.
Книга "банды четырёх" - это скорее справочник, чем книга для чтения от корки до корки. Но читать ее приходится от корки до корки, так как в описании отдельных паттернов встречаются названия новых, которые в свою очередь находятся в следующих разделах и главах. Но после полного прочтения, для закрепления материала нужно еще не раз возвращаться к описанию отдельного паттерна.
Сами паттерны предназначены для решения часто встречающихся задач, возникающих при проектировании и разработке объектно-ориентированного программного обеспечения. Правильное применение паттрена в большинстве случаев решает поставленную задачу, но не гарантирует что задача будет решена наилучшим способом. Также паттерны предназначены для упрощения внесения последующих изменений в код, в связи с новыми или изменившимися требованиями.
Ярлыки:
Книги,
Проектирование,
Технологии,
C++,
patterns
четверг, 17 марта 2011 г.
Ошибка expected constructor, destructor, or type conversion before ‘*’ шаблнный метод, вложенный класс
template< class T >
class DblLinkedList{
...
private:
class Node{
...
...
};
Node* getNodeByIndex(int index);
};
...
template<class T>
DblLinkedList<T>::Node* DblLinkedList <T>::getNodeByIndex(int index){}
Компилятор выдает ошибку следующего содержания:
expected constructor, destructor, or type conversion before ‘*’
Решение:
template<class T>
typename DblLinkedList<T>::Node* DblLinkedList <T>::getNodeByIndex(int index){}
В данном случае необходимо "подсказать" компилятору что DblLinkedList::Node* это определение указателя на тип, а не ошибочное определение конструктора для класса Node
четверг, 30 сентября 2010 г.
Еще книги которые я прочитал...
Гудлиф П. "Ремесло программиста.
Практика написания хорошего кода." , 2009. – 704 с.
Советы бывалого программиста по работе в реальных условиях "фабричного" производства программного обеспечения. При этом по сравнению с "Совершенным кодом" главы построены от простого к сложному, начиная с форматирования исходного кода и правил именования, заканчивая архитектурой и технологиями разработки ПО.
Э. Хант, Д. Томас "Программист-прагматик. Путь от подмастерья к мастеру", 2007. - 288c.
Авторы рассматривают программирование со стороны прагматизма. В книге рассмотрен ряд советов и принципов взятых из практического опыта авторов. По мнению авторов соблюдение данных принципов позволит улучшить профессиональные навыки и умения читателя.
Авторы предлагают такие подходы как принцип DRY(Don't Repeat Yourself), ортогональность при разработке подсистем и модулей, самокритика, постоянное обучение.
четверг, 16 сентября 2010 г.
Как востановить стандартные настройки gnome
После обновления
Из этого я сделал вывод что испорчены какие-то конфигурационные файлы gnome в домашнем каталоге пользователя.
Ubuntu 9.10 Netbook Remix до 10.04 произошел казус в виде сменившегося рабочего стола Gnome на стол NBR. Не долго думая я полез в программу desktop-switcher чтобы вернуть все обратно, но после ее работы возникла какая-то проблема и пропала панель задач gnome-panel и не желала загружаться.
Переустановка gnome-desktop не помогла.
Но при входе в систему под другим пользователем все работало без проблем.
Из этого я сделал вывод что испорчены какие-то конфигурационные файлы gnome в домашнем каталоге пользователя.
В итоге помогли следующие команды:
mkdir gnome-backup
mv .gnome2 .gconf .gconfd gnome-backup/
После дальнейшего входа в систему под этим пользователем в сеанс GNOME
все настройки возвращаются к первоначальным и все работает.
пятница, 3 сентября 2010 г.
Ошибка компиляции 'undefined reference to `vtable for Class'
Вопрос:
Как исправить 'undefined reference to `vtable for Class'?
Ответ:
Реализовать для 'Class' все виртуальные методы, и не грешить на конструкторы, MOC или g++.
ИЛИ
В родительском классе объявить виртуальные методы чистыми виртуальным, то есть сделать родительский класс абстрактным.
ИЛИ
Скорее правильнее, реализовать все виртуальные функции которые не объявлены чистыми виртуальными в родительском или объявить их таковыми.
Как исправить 'undefined reference to `vtable for Class'?
Ответ:
Реализовать для 'Class' все виртуальные методы, и не грешить на конструкторы, MOC или g++.
ИЛИ
В родительском классе объявить виртуальные методы чистыми виртуальным, то есть сделать родительский класс абстрактным.
ИЛИ
Скорее правильнее, реализовать все виртуальные функции которые не объявлены чистыми виртуальными в родительском или объявить их таковыми.
воскресенье, 8 августа 2010 г.
Книги которые я прочитал...
Р. Лафоре "Объектно-ориентированное программирование в C++" 928 стр.
Книга скорее для начального уровня, легко читается, содержит минимум сложных терминов, много примеров кода, всего понемногу и в достаточном количестве для ознакомления с новым языком, в общем золотая середина.
С. Макконнелл "Совершенный код" 896 стр.
Сборник различных методик разработки программного обеспечения, основанных на многолетнем опыте и статистических исследований в данной области. При этом речь идет в отрыве от какого-либо языка или среды программирования. Большое внимание уделяется принципам написания простого для понимания и легкого в сопровождении кода. Рекомендуется для прочтения всем в независимости от возраста и профессиональных навыков.
Ярлыки:
Книги,
мышление,
Проектирование,
развитие,
Технологии,
C++
воскресенье, 2 мая 2010 г.
Artistic Style - утилита для автоматического форматирования исходного кода
Навеяно книгой "Совершенный код" С. Макконнелл
На пути к совершенному коду мною была найдена утилита облегчающая форматирование исходных текстов.
Моему стилю подходит следующая строка:
astyle --style=java --indent=tab *.cpp *.h
Данная строка быстро добавляется в Makefile и легко используется в дальнейшем.
Официальный сайт
http://astyle.sourceforge.net/
На пути к совершенному коду мною была найдена утилита облегчающая форматирование исходных текстов.
Моему стилю подходит следующая строка:
astyle --style=java --indent=tab *.cpp *.h
Данная строка быстро добавляется в Makefile и легко используется в дальнейшем.
Официальный сайт
http://astyle.sourceforge.net/
суббота, 1 мая 2010 г.
BASH скрипт для создания HTML-файла с подсвеченными исходными кодами
1 #!/bin/bash 2 3 OUTDIR="out_source/" 4 OUT="out_source.html" 5 6 mkdir "$OUTDIR" 7 8 echo -e "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n</head>\n<body>\n" > "$OUT" 9 10 for f in $( ls -r | grep '.*\.\(cpp\|h\)$' ) 11 do 12 echo ${f%.*}_${f#*.} 13 code2html -l cc -H -n $f ${f%.*}_${f#*.}.html 14 echo -e '<p><b>'$f'</b>\n' >> "$OUT" 15 echo -e '<pre>\n' >> "$OUT" 16 cat ${f%.*}_${f#*.}.html >> "$OUT" 17 echo -e '</pre>\n' >> "$OUT" 18 mv ${f%.*}_${f#*.}.html "$OUTDIR" 19 done 20 21 echo -e "</body>\n</html>\n" >> "$OUT" 22 23 mv "$OUT" "$OUTDIR"
Используется утилита code2html.
Создается папка out_source/ с файлом out_source.html в котором содержаться подсвеченные исходные коды файлов *.cpp *.h находящихся в текущей директории.
суббота, 13 марта 2010 г.
Direct Connect & Linux
Клиент для сетей Direct Connect предназначенный для ОС Linux основанный на клиенте DC++.
По своей сути является портированным для Linux клиентом DC++ для Windows. Интерфейс GTK+.
Больше недостатков чем достоинств:
- нет поддержки скачивания файлов с нескольких пользователей(существует сборка 2.0.0-alfa-0.705 поддерживающая мульти-скачивание);
- нет поддержки передачи magnet-ссылок из внешних приложений(Например из браузера);
- медлителен, я бы даже сказал что очень-очень медлителен;
Официальный сайт проекта:
FreeDC++
DC++ клиент основан на исходном коде LinuxDC++.Из достоинств:
- поддержка мульти-скачивания, хотя и кривая, потому что в этом режиме клиент из тормоза превращается в еще более жуткого тормоза, что работа с программой становиться мучением;
- поддержка передачи magnet-ссылок из других приложений.
Официальный сайт проекта:
Valknut
Открытый кросс-платформенный клиент файлообменной сети Direct Connect. Интерфейс Qt 3, Qt 4.
Из достоинств:
- поддержка мульти-скачивания;
- не столь медлителен как LinuxDC++;
- поддержка множества языков;
- кросс-платформенный(поддержка Linux, FreeBSD, Mac OS X, OS/2).
Из недостатков:
- в стандартной версии нет поддержки передачи magnet-ссылок из других приложений(есть отдельная сборка для включения данного режима).
EiskaltDC
Проект ответвление Valknut.
Отличия:
- Множество готовых пакетов для различных дистрибутивов Linux;
- В стандартной версии есть поддержка получения magnet-ссылок от других приложений.
Есть инструкция для настройки браузеров Opera и Firefox на передачу magnet-ссылок Valknut/Eiskalt
Официальный сайт проекта:
воскресенье, 7 марта 2010 г.
Screencast #1 Утилита Make и ее использование
Утилита Make и ее использование
Скринкаст на rpod

Рассмотрены следующие темы:
Литература по теме:
Скринкаст на rpod
Рассмотрены следующие темы:
- Проблемы которые решает make для написания больших проектов
- Формат Makefile
- Зависимости
- Правила
- Макросы
- Множественные цели
- Встроенные правила
- Альтернативный вариант использования make
Литература по теме:
- Мэтью Н., Стоунс Р. "Основы программирования в Linux. 4-е издание", 2009
- http://ru.wikipedia.org/wiki/M…
воскресенье, 21 февраля 2010 г.
воскресенье, 14 февраля 2010 г.
Больше читать, думать, меньше смотреть телевизор и серфить интернет
Телевидение - это враг четкого и трезвого мышления. Проводя много времени у телевизора не получишь знания, а только остановишься в мыслительных способностях.
Читать книги и быть в курсе самых последних изменений в своей области деятельности. Иначе случиться тоже что и с телевизором - погрязнешь в устаревших методах и технологиях, нет развития, как результат остановка в развитии.
Интернет - источник информации, но не всякая информация полезна и нужна. Интернет может превратиться в тоже средство убивание времени и мышления как и телевизор.
Интернет - источник информации, но не всякая информация полезна и нужна. Интернет может превратиться в тоже средство убивание времени и мышления как и телевизор.
Больше думать, размышлять, тренировать свой мозг...
Технология - это не цель а лишь средство для ее достижения
Технология лишь средство.
Сначала проектирование, затем выбор технологии.
Как пример это выбор языка программирования.
Язык должен выбираться под задачу, а не задача подстраиваться под конкретный язык.
- C - скорость, но низкоуровневое программирование на гране прямой работы с памятью, чистый процедурный подход;
- C++ - не лишен свойств и достоинств C, но может оперировать абстракциями объектов реального мира, объектно-ориентированный подход с примесью процедурного.
- Java - предназначен для решения разнообразных задач, и поэтому уступает предыдущим в скорости и не предоставляет низкоуровневых функций как С/C++, но зато освобождает программиста от возникновения возможных ошибок при работе с памятью и указателями. Чистый объектно-ориентированный подход.
Лучше разбираться в диаграммах и схемах, чем в куче не понятно как работающего кода и кучи технологий перемешанных в винегрет.
понедельник, 4 января 2010 г.
Плачевное положение с Flash
Я считаю что на сегодняшний день cамая медленная мультимедийная технология, которая повсеместно используется во многих веб проектах - это технология Flash.
Главный недостаток этой технологии - большая нагрузка на процессор. При воспроизведении сложной flash-анимации на маломощных системах, производительность этих систем из-за нагрузки на процессор моментально падает, что приводит к либо к неверным результатам работы самого flash приложения, либо зависанию компьютера в целом.
Поэтому данная мультимедиа технология не выходит за рамки рекламы, интерактивных приложений или мини-игр.
В интернете существует множество популярных сервисов использующих данную технологию.
Существует множество реализаций воспроизведения flash, но основным продуктом является Adobe Flash Player, который распространяется в виде бесплатного плагина к популярным веб-браузерам.
С недавних пор я задался вопросом, а существуют ли альтернативы воспроизведения flash контента, которые возможно избавлены от проблем медлительности технологии в целом.
Мои поиски привели к 2-м альтернативным проектам GNU.
Gnash (слово образовано от GNU и Flash) — проект, нацеленный на создание свободного плеера и плагина для браузера для формата Adobe Flash и замену несвободных программ в нише, занимаемой сейчас Adobe Flash Player.
swfdec (произносится «суиф дек») — свободный проигрыватель файлов формата Adobe Flash; распространяется под лицензией GNU LGPL.
Я опробовал оба плагина для firefox, и оба плагина не порадовали ни в чем. Ни в плане производительности ни в плане правильности отображения информации они уступают проприентарному плагину от Adobe. Gnash не смог отобразить плеер youtube и потоковое видео на моей системе, а swfdec отобразил плеер но уже в другом виде, не похожем на обычный, ну да ладно, но проигрывание видео ввело мой компьютер и firefox в жуткий ступор.
Конечно я ожидал большего от этих проектов, но видимо данные проекты не могут тягаться с закрытой технологией от Adobe.
Есть ли надежда и будущее у этой технологии? Я считаю до тех пор пока сама корпорация Adobe не предпримет мер по улучшению и оптимизации технологии, все останется в том же виде в каком оно есть на сегодняшний момент. Но наверняка adobe не выгодно улучшать технологию, а выгодно ее поддерживать и добавлять новые возможности поверх старого медленно работающего механизма. Этот путь развития я считаю не продуктивным и тупиковым, по тому что он в конечном счете приведет к появлению более новой и продвинутой технологии и умиранию flash.
Подписаться на:
Сообщения (Atom)












