Ум один.
Контролировать его деятельность - строить дорогу в ад.
Ум проявляет себя также как слух или зрение.
Любое проявление ума естественно!
суббота, 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)