Ум один.
Контролировать его деятельность - строить дорогу в ад.
Ум проявляет себя также как слух или зрение.
Любое проявление ума естественно!
суббота, 26 марта 2011 г.
пятница, 25 марта 2011 г.
Попс
В вашем мозге жиреет попс!
Именно, так! Сижу значит и думаю: какого х... эти ублюдки придумывают всякие хитровые..ные схемы задра...ия людей. Ведь, с..а, если ты без врожденных отклонений, то с первого взгляда отличаешь хорошего человека от плохого. Как много г...а в нас. Лживые обвинения честных людей. Это просто п...ц.
Скоро я расскажу о решении проблемы совместимости uniqueidentifier MS SQL SERVER и GORM(base on hibernate).
Именно, так! Сижу значит и думаю: какого х... эти ублюдки придумывают всякие хитровые..ные схемы задра...ия людей. Ведь, с..а, если ты без врожденных отклонений, то с первого взгляда отличаешь хорошего человека от плохого. Как много г...а в нас. Лживые обвинения честных людей. Это просто п...ц.
Скоро я расскажу о решении проблемы совместимости uniqueidentifier MS SQL SERVER и GORM(base on hibernate).
суббота, 19 марта 2011 г.
Редактор для groovy
Для того, чтобы начать написание groovy-скриптов достаточно перейти а каталог lib и выполнить команду:
~/apps/grails-1.3.7/lib$ java -cp ./groovy-all-1.7.8.jar groovy.ui.Console
В результате мы получим среду разработки для groovy без лишних движений:
~/apps/grails-1.3.7/lib$ java -cp ./groovy-all-1.7.8.jar groovy.ui.Console
В результате мы получим среду разработки для groovy без лишних движений:
пятница, 18 марта 2011 г.
Grails - первый шаг
JDK 1.6 установлен. Grails скачан и распакован.
Создаем первое приложение:~/projects$ /../../apps/grails-1.3.7/bin/grails create-app blog
Приложение готово(!),переходим в каталог приложения запускаем:
...grails-1.3.7/bin/grails run-app
Смотрим, что получилось:
http://localhost:8080/blog/
Создаем первый класс(сущность):
~/projects/blog$ /../../apps/grails-1.3.7/bin/grails create-domain-class note
Пока класс пуст, найдем его и дополним(blog/grails-app/domain/blog):
blog$ /../../apps/grails-1.3.7/bin/grails generate-all blog.Note.
Запускаем командой grails run-app:
Поздравляю, самое трудное позади. теперь все работает. Не забудьте, по умолчанию используется Hibernate Database In Memory. Все введенные данные сохраняются до перезагрузки грааля:
Итак, не считая времени написания статьи ;-) создание простенького блога заняло примерно(1-2 минуты!), если я соврал - поправьте меня. Java foreva!
Создаем первое приложение:~/projects$ /../../apps/grails-1.3.7/bin/grails create-app blog
Приложение готово(!),переходим в каталог приложения запускаем:
...grails-1.3.7/bin/grails run-app
Смотрим, что получилось:
http://localhost:8080/blog/
Создаем первый класс(сущность):
~/projects/blog$ /../../apps/grails-1.3.7/bin/grails create-domain-class note
Пока класс пуст, найдем его и дополним(blog/grails-app/domain/blog):
package blog
class Note {
String title
String text
Date bithDay
static constraints = {
}
}
Генерируем контроллер, представления и прочее:blog$ /../../apps/grails-1.3.7/bin/grails generate-all blog.Note.
Запускаем командой grails run-app:
Поздравляю, самое трудное позади. теперь все работает. Не забудьте, по умолчанию используется Hibernate Database In Memory. Все введенные данные сохраняются до перезагрузки грааля:
Итак, не считая времени написания статьи ;-) создание простенького блога заняло примерно(1-2 минуты!), если я соврал - поправьте меня. Java foreva!
Grails против Rails
На самом деле, я бы не стал так противопоставлять эти два каркаса(платформы?) для создания Web-приложений. Дело видимо в привычке. Главное отличие java-технологий от всех остальных это девиз компании Sun Microsystem(снимаю шляпу): "скомплировано один раз - работает везде". Конечно, сторонники php увидев RubyOnRails воскликнут:"Вау!!!". Не отрицаю, ruby и rails качественно и гармонично. Но, есть одно "но" - чтобы установить последнюю 3-ю версию rails нужен интернет(так и не нашел gem-ов для 3-ки). А 2-я версия так и не встала на мой MS Windows XP в режиме off-line.
Помню, когда я только начал изучать java, я сразу по достоинству оценил приятное свойство java - я перестал обращать внимание на операционную систему в которой программировал(благо редакторов и интегрированных сред разработки больше чем достаточно под обе ОСи).
Grails даже не нужно инсталировать - распаковал и запустил. Grails обновился и теперь я могу полностью обновленный и рабочий Grails запустить на другой машине без интернета.
Ну а язык Groovy - серьезный конкурент Ruby. Особенно если вы привыкли к специфике java. В следующих статьях я постараюсь наглядно продемонстрировать возможности Groovy и грааля ;-).
Grails или Rails(грааль или рельсы) решать вам!
Помню, когда я только начал изучать java, я сразу по достоинству оценил приятное свойство java - я перестал обращать внимание на операционную систему в которой программировал(благо редакторов и интегрированных сред разработки больше чем достаточно под обе ОСи).
Grails даже не нужно инсталировать - распаковал и запустил. Grails обновился и теперь я могу полностью обновленный и рабочий Grails запустить на другой машине без интернета.
Ну а язык Groovy - серьезный конкурент Ruby. Особенно если вы привыкли к специфике java. В следующих статьях я постараюсь наглядно продемонстрировать возможности Groovy и грааля ;-).
Grails или Rails(грааль или рельсы) решать вам!
пятница, 11 марта 2011 г.
ruby on rails
Случайно зашел на сайт rubyonrails.org и посмотрел ролик о разработке web-приложений. Често скажу: я офигел! Так просто и при этом кроссплатформенно. Да еще сообщество! Салют! Почитал отзывы зубров - отпад! Сейчас ставлю на свою ubuntu. Хотя можно и netbeans поиграть, но хочется начистую. Пока проблема с gem - типа системы управления пакетами только для ruby. Если ставить с сайта, то бинарник ставится не как gem, а как gem1.8. Учтите это пытаясь выполнить установку rails. sudo gem1.8 install rails
четверг, 10 марта 2011 г.
Обобщение
Обобщение(или абстракция) - способность программиста увидеть существенные для модели свойства. Пример: дверь лифта. Если слишком детализировать модель получим 2 объекта: дверь и лифт. Но если подумать в модели лифта нас лишь интересует состояние двери и достаточно в объект ЛИФТ добавить логическое поле ДВЕРЬОТКРЫТА:
Чрезмерная детализация модели:
Чрезмерная детализация модели:
class Lift
{
public Door;
}
class Door
{
public boolean isOpen;
}
Оптимизированая модель:class Lift
{
public boolean isOpenDoor;
}
Строитель
Шаблон позволяет уменьшить связь клиентского кода и логики создания сложного объекта при помощи цепочки интерфейсов: управляющий класс - практически не меняется, затем строитель описывающий методы и собственно сложный объект. Также позволяет задать порядок построения частей как в этом примере, что может быть очень важно, а пользователь объекта может об этом не знать. Так задать тип человека(ребенок, взрослый или старик) нельзя не зная возраста!
public class app
{
public static void main(String[] args)
{
LifeCircle lc=new LifeCircle();
lc.setHumanBuilder(new ManBuilder());
lc.build(13);
System.out.println(lc.getResult().type);
lc.build(20);
System.out.println(lc.getResult().type);
lc.build(100);
System.out.println(lc.getResult().type);
}
}
abstract class Human
{
public int age;
public String type;
}
class Man extends Human{}
interface HumanBuilder
{
public void buildAge(int age);
public void buildType();
public Human getResult();
}
class LifeCircle
{
private HumanBuilder humanBuilder;
public void setHumanBuilder(HumanBuilder builder)
{this.humanBuilder=builder;}
public void build(int age)
{
this.humanBuilder.buildAge(age);
this.humanBuilder.buildType();
}
public Human getResult()
{return this.humanBuilder.getResult();}
}
class ManBuilder implements HumanBuilder
{
private Human human=new Man();
public void buildAge(int age){human.age=age;}
public void buildType()
{
if(human.age>0 && human.age<=15) human.type="children";
if(human.age>15 && human.age<=55) human.type="man";
if(human.age>55) human.type="grand man";
}
public Human getResult(){return this.human;}
}
Абстрактная фабрика
Обеспечивает общий способ создания родственных или связанных объектов без указания конкретных классов:
public class app
{
public static void main(String[] args)
{
Secretar secretar=new Secretar();
DocumentFactory factory=new MSOFactory();
secretar.setDocumentFactory(factory);
secretar.makeTableDocument().print();
secretar.makeTextDocument().print();
factory=new OOOFactory();
secretar.setDocumentFactory(factory);
secretar.makeTableDocument().print();
secretar.makeTextDocument().print();
}
}
class Secretar // - Client
{
private DocumentFactory docFactory;
public void setDocumentFactory(DocumentFactory factory)
{
this.docFactory=factory;
}
public TextDocument makeTextDocument()
{
return docFactory.createTextDocument();
}
public TableDocument makeTableDocument()
{
return docFactory.createTableDocument();
}
}
abstract class DocumentFactory
{
abstract TextDocument createTextDocument();
abstract TableDocument createTableDocument();
}
abstract class TextDocument
{
abstract void print();
}
abstract class TableDocument
{
abstract void print();
}
class WordDocument extends TextDocument
{
public void print(){ System.out.println("MS Word Document");}
}
class ExcelDocument extends TableDocument
{
public void print(){ System.out.println("MS Excel Table");}
}
class OpenDocument extends TextDocument
{
public void print(){ System.out.println("Open Office Document");}
}
class OpenTableDocument extends TableDocument
{
public void print(){ System.out.println("Open Office Table");}
}
class MSOFactory extends DocumentFactory
{
public TextDocument createTextDocument()
{
return new WordDocument();
}
public TableDocument createTableDocument()
{
return new ExcelDocument();
}
}
class OOOFactory extends DocumentFactory
{
public TextDocument createTextDocument()
{
return new OpenDocument();
}
public TableDocument createTableDocument()
{
return new OpenTableDocument();
}
}
Простая реализация итератора
Одним из паттернов проектирования является итератор - организация определенного порядка извлечения элементов из списка. Здесь показана реализация программного интерфейса, из спецификации java:
apublic class app
{
public static void main(String[] args)
{
List<Human> lst=new List<Human>();
lst.add(new Human("Jerry"));
lst.add(new Human("Mary"));
lst.add(new Human("Jon"));
lst.add(new Human("Bluz"));
lst.add(new Human("Jon"));
java.util.Iterator iter= lst.getIterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
class Human
{
String name="";
public Human(String name)
{
this.name=name;
}
public String toString()
{
return super.toString()+"@name="+this.name;
}
}
class List<T> implements java.util.Iterator
{
private Object[] list=null;
private int index=-1;
private int capacity=2;
private int size=0;
public List()
{
init();
}
public List(int capacity)
{
this.capacity=capacity;
init();
}
private void init()
{
list=new Object[capacity];
size=capacity;
}
private void resize()
{
int oldsize=size;
size=size+capacity;
Object[] lst=new Object[size];
for(int i=0;i<oldsize;i++)
{
lst[i]=list[i];
}
list=lst;
//System.out.println("===resize===");
}
public void add(T obj)
{
//System.out.println(index);
//System.out.println(size);
index++;
if(index>=size)
resize();
list[index]=obj;
}
public boolean hasNext()
{
if (cursor == -1)
return list.length > 0;
return cursor < list.length;
}
private int cursor;
public java.util.Iterator getIterator()
{
cursor = -1;
return (java.util.Iterator)this;
}
public Object next()
{
System.out.println(cursor);
if(cursor==-1) cursor=0;
Object nxt=list[cursor];
cursor++;
return nxt;
}
public void remove(){}
}
среда, 9 марта 2011 г.
За и против
Вы уже выбрали свой путь? Определились с тем, кто вы? Поздравляю! Потому что, я сколько не стараюсь никак не могу отрешиться от поисков правильного в кавычках пути, хотя, давно уже понял, что нет ни правильного ни неправильного. Есть лишь болезнь ума. Кто-то сказал, что бог дав человеку разум наказал его, дав ему также безумие (вроде как обезьяны не страдают шизофренией).
воскресенье, 6 марта 2011 г.
UML
Сегодня случайно зашел в книжный магазин и (случайно) купил книжку Пола Киммела "UML Основы визуального анализа и проектирования(раскрытие тайн)". Вообщем-то, отличная книга. Довольно просто объясняется UML. Единственное замечание - издательство при переводе допустило слишком много опечаток при переводе надписей в диаграммах(часто просто пропущены надписи описываемые автором). Прочитав пару глав, я решил набросать пару диаграмм. Для этого использую открытое ПО argoUML. Написано на java. И тут я понял, что для использования uml нужно больше чем знание семантики. Нужно уметь проектировать: выделять значимое, деталезировать процессы и т.п. Хотя я только начал изучение. И диаграмма прецендентов не такая уж сложная. Имея ее под рукой легче ориентироваться при разработке проекта.
суббота, 5 марта 2011 г.
Редактор файла свойств
Начав изучать интересный фреймверк javaswingbuilder, позволяющий декларативно описать пользовательский интерфейс и привязку данных к элементам я натолкнулся на одну проблему: если ключи содержат русские буквы, то билдер просто их не воспринимает или выдает исключение при попытке считать файл. Собственно он пытается читать в кодировке utf-8, но в стиле java, т.е. ему нужны коды типа /u001 и т.д. В общем, в итоге родилась идея простого редактора, который сохраняет так как надо(в кодах):
Редактор файла свойств.
Редактор файла свойств.
Подписаться на:
Комментарии (Atom)


