Translate

пʼятниця, 29 березня 2013 р.

Шукаємо 4 на JeeConf 2013


Доброго дня.

Шукаємо 4 для поїздки в Київ, щоб купити все купе.

Також, якщо Вам треба, то можу поділитись назвою групи для отримання 10% знижки на квиток.

І невелике нагадування.
 4 квітня будем мати нашу зустріч, де буде розігруватись 50% знижка на JeeConf 2013:
 http://jug-lviv.blogspot.com/2013/03/jug-19-lets-play.html

середа, 27 березня 2013 р.

Особливості класів в Blueprint документах


Особливість (feature) класу - це група взаємозвязаних атребутів і операцій класу, що призначені для підтримання певної відповідальності.

Особливітсь класу записуєтся за допомогою тегу feature з атребутом name, який містить ім'я особливості. Дочірніми тегами для feature можуть бути слідуючі:

1. description - опис особливості класу.
2. responsibility - відповідальнісь яку несе дана особливість.
3. feature - під-особливості на які можу групуватись дана.
4. attributes - атрибути: типи даних, константи, змінні, елементи даних, інтерфейси, класи.
5. operations - операції: коструктори, деструктори, методи.
6. static - псевдокод який виконуєтся при загрузці класу.
7. thread - псевдокод потоку класу, якщо клас активний.
8. diagrams - UML діаграми які відображаются в бровзері при відкритті документу. 
9. test-procedures - тестові процедури, для тестування даної особливості.

Приклад використання включає клас PlainTextArea - компонент для редагування тексту і його особливість State knowing - знання стану. Тут згруповані функції призначені для повідомлення викликаючого коду про стан в якому перебуває текстовий компонент.

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/analysis.xslt"?>
<!DOCTYPE analysis SYSTEM ".blueprint/analysis.dtd">
<analysis>
    <architecture>
        <class id="PlainTextArea" name="PlainTextArea" visibility="public">
            <description>Text component for editing plain text.</description>
            <superclass name="JTextArea" />
            <feature name="State knowing">
                <description>Knowing in witch state is text</description>
                <responsibility>Knowing whether text is selected</responsibility>
                <responsibility>Knowing whether text is empty</responsibility>
                <responsibility>Knowing whether can all text may be selected</responsibility>
                <responsibility>Knowing whether can text may be printed</responsibility>
                <operations>
                    <method name="isTextSelected" visibility="public"><returns type="boolean" /></method>
                    <method name="isAllTextSelected" visibility="public"><returns type="boolean"/></method>
                    <method name="isTextEmpty" visibility="public"><returns type="boolean" /></method>
                    <method name="canSelectAll" visibility="public"><returns type="boolean"/></method>
                    <method name="canPrint" visibility="public"><returns type="boolean"/></method>       
                </operations>
            </feature>
        </class>
    </architecture>
</analysis>

Вигляд документу в бровзері:









Java Magazine - March/April 2013


до уваги шановної публіки вийшов новий номер Java Magazine


Одна з центральних тем випуску - розбудова локального ДЖУГ, усього 13 кроків на 15 сторінках журналу.

Також висвітлюютсья наступні теми:
  • як DARPA використовує Java для створення повністю автономних автомобілів
  • початок занять з практичного використання Java Compiler API (того самого, що ховається в пакеті javax.toоl)
  • для тих, хто з якихось причин не долюблює груві, вже багато років пропонуєтсья альтернатива під назвою Jython - ввідна стаття до вашої уваги
  • створення музики, яка надикатиме на TDD, разом з JFugue Music NotePad :)





JEEConf


24-25 травня відбудеться одна з небагатьох українських джава конференцій. Всім хто має таку можливість рекомендую відвідати цю подію. Більше деталей можна дізнатись на офіційній сторінці
 Нагадую що на наступній зустрічі JUG Lviv  ми розіграємо 50% знижку на JEEConf  квитки.



вівторок, 26 березня 2013 р.

JavaOne Moscow


JavaOne Russia returns to Moscow 23–24 April. As usual a lot amazing speakers and many interesting talks.
Registration opened so hurry up.


P.S.
Можливо ми будемо мати безкоштовний квиточок, так що коли є бажаючі зїздити в Моску озвіться зараз



Атрибути вимог в Proposal - документі


Вимоги записуются з допомогою тегу requirement у форматі: назва системи - повинна (shall) - дія яка має бути виконана

Атрибут priority - визначає значення вимоги порівняно з іншими. Можливі значення:
1. must_have (необхідно мати) - обовязкові вимоги які є фундаментальними для системи.
2. should_have (повинен мати) - важливі вимоги які можуть бути пропущені
3. could_have (міг би мати) - необовязкові вимоги (реалізуются якщо є на це час)
4. want_to_have () - вимоги, які можуть почекати до слідуючих версій системи

Атребут status може приймати одне із слідуючих значень:
1. proposed (запропоновано) - вимоги які знаходятся в стані обговорення і ще не затверджені.
2. approved (одобрені) - вимоги, затвердженя для реалізайії.
3. rejected (відхилені) - вимоги, які вирішено нереалізувати
4. incorporated (включені) - вимоги, які були реалізовані в певній версії

Атребут benefit може приймати одне із слідуючих значень:
1. critical (критично) - вимога повинна бути реалізована, в інакшому випадку система не буде принята заінтересованими сторонами.
2. important (важливо) - вимога може бути пропущена, но це неблагополучно відобразится на зручності використання системи і задоволенні заінтересованих сторін
3. useful (корисно) - вимога може бути пропущена без відчутного впливу на прийнятність системи.

Атребут effort - відображає оцінку часу і ресурсів, необхідних для реалізації вимоги, виражений в людино-годинах чи іншими методами.

Атребут risk - ризик повязаний з реалізацією вимоги: high (високий), medium (середній), low (низький)

Атребут stability - оцінка ймовірності того, шо по якимось причинам вимога буде змінена: high (висока), medium (середня), low (низька)

Атребут target-release - версія програми у якій вимога має бути реалізована

понеділок, 25 березня 2013 р.

33rd Degree Conference report


Мені пощастило відвідати 33rd Degree Conference.
Перша за все, дякую JUG Lviv за безкоштовний квиток!

33rd Degree - це одна з найбільших Java конференцій в Польщі. Цього року вона проходила у Варшаві, 13-15 березня. Масштаби можна оцінити за такими цифрами: ~1000 учасників, 56 доповідачів, 91 сесія + тренінги.
Доповідачі були, як кажуть - Java-rockstars. Серед них представники Oracle, Attlassian, JetBrains, Plumbr, а ще фріланс-консультанти, які заводили публіку так, ніби на концерті :).

Графік був дуже щільний - 6 паралельних потоків, тому відвідати вдалось тільки якусь частину.

Кілька слів про доповіді та авторів:


Sven Peters, 7 things how to make good team great

Чудова, не технічна доповідь від посла Attlassian - Sven Peters. Він поділився моментами організації робочого процесу у них в компанії. Ось кілька з них:
  •  Flow time (4 години в день діє правило, яке забороняє відволікати людей від написання коду)
  •  Report robot (є окремі люди, які відповідають за звітність і статистику - вся команда бачить, як перетинаються чарти виконаних робіт і продажів)
  •  Eat your dog food (спробуйте користуватись тим, що ви пишете)
  •  Do a special day (в цей особливий день люди роблять виключно ті задачі, які самі вважають за потрібне)
  •  Experimentation day (щось схоже на special day, от тільки вони працюють над своїми проектами) - деякі продукти Attlassian виросли якраз з experimentation days.


Reza Rahman

Дуже цікаві доповіді були від GlassFish-євангеліста - Reza Rahman. Його виступи були популярні, і треба було пропустити кофібрейк, щоб зайняти місце в залі. Ті, хто кофібрейк не пропускав - слухали його стоячи. Кому цікаво, Reza виклав слайди тут.






Venkat Subramaniam

Теж Rockstar. Розповідав про практичні прийоми використання Lambda, альтернативні мови для JVM та NoSQL.
Про NoSQL, цитую: "It does not mean “no sql at all” in fact most NoSql dbs have some sort of SQL support. It is more about “no schema”, but there is a schema, which is implicitly embedded in the application."

Слайдів я на жаль не знайшов.




Tomek Kaczanowski



Девелопер з Польщі, автор книжки Practical Unit testing. Мав доповідь, як не дивно, про Unit тести. Ще казав, що практикує BDD (Blog Driven Development) - це коли ви щоразу, коли робите задачу, думаєте який класний блог пост з неї вийде. Слайди і кілька слів від Tomek'a тут.



Nikita Salnikov-Tarnovski

Один з засновників Plumbr розповідав про memory-leaks та технічні перешкоди при побудові Plumbr. Слайдів теж чомусь немає.


Geertjan Wielenga




Geertjan - Principal Product Manager в Oracle developer tools. Розповідав про нові інструменти для HTML/CSS в NetBeans. Особливість новинки - плагін для Chrome, який перетворює браузер та NetBeans в один суцільний інструмент. Більше тут.




P.S. Було ще багато цікавих доповідей.
Шкода, що організатори не влаштували запис відео.
Цей факт викликав невдоволення публіки, я таки бачив хлопця, який бігав з відеокамерою та штативом, в останній день. Тому, можливо щось з останнього дня з'явиться десь в мережі.

Про організаційні моменти та розважальну програму напишу окремий пост :)


Коли змінювати роботу


Коли змінювати роботу?


Коли все дістало і набридло хочеться змінити роботу. Проте потрібно зважувати дуже багато причин при прийнятті такого рішення. Нижче попробуємо розглянути основні випадки, які спонукають до такого рішення:




пʼятниця, 22 березня 2013 р.

JUG - 19 Let's Play


Радий запросити Вас на 19 зустірч JUG L'viv.

Цього разу нас гостинно запрошує Globallogic 4 квітня 19.00
За адресою вул.Федьковича 60а

На зустрічі будем слухати призентацію "Play Framework overview".
Розповідь про детілі використання Play 1 і Play 2
Призенторм виступить:  Nazarii Shymanskyi

Також будуть розповіді про проходження співбесід на таких відомих компаніях як Google, facebook, Amazon  etc.

Увага !!!
Розіграш знижки на JEEConf 2013. Не пропустіть можливісь отримати 50% знижку!!!!

І як завжди велике прохання зареєструватись!


JEEConf 2013


JUG Lviv став інформаційним партнером щорічної конференції Java практиків JEEConf 2013

Деталі на сайті jeeconf.com

JEEConf 2013

ПС. Спішіть зареєструватись.
ПС2. Відпишіться тут - спробуємо організуватись в групу.

Fridays Fun


Когда я потратил много часов на нахождение бага и сдался




вівторок, 19 березня 2013 р.

Enterprise Architect certification


If you've considered pursuing the Enterprise Architect certification in the past, but hadn't quite gotten around to it, this is a great opportunity to attempt to get certified in a highly cost-effective manner.  The cost to take the beta version of the exam is only $50, and would usually cost at least $300 plus the cost of taking a certified course if you haven't previously passed the SCEA certification.  The certification process is fairly rigorous, as you'll need to take a lengthy multiple-choice test, submit an assignment, and then write an essay explaining the decisions you made in your assignment.

If you are already SCEA certified, you can upgrade by taking the multiple choice test now or when the exam is live, but you are exempted from submitting the assignment and essay.

If you are a consultant, this certification comes with the added benefit of gaining access to the Oracle Partner Network and the customer implementation opportunities that Oracle shares with this group of partners.  This is the only Java certification Oracle offers the opportunity to gain access to the Oracle Partner Network.

If you decide to pursue this certification, it will require a fairly significant investment of your time but could certainly open up new career opportunities for you.  A few resources that you will likely find useful are:

Announcement:


If you are already developing Java EE 6 based applications, you will likely have an easier time studying, but don't let it stop you if you're not


Best of luck!
Jim Bethancourt


Розробка пропозиції програми з використанням технології Blueprint


Для створення пропозиції програми існує окремий тип документу : Proposal.
Розробка пропозийії починаєтся з формулювання проблеми яку має вирішувати програма. Проблема записуєтся в тезі problem. В контексті того що потрібно замовнику. Слідуючим кроком є описання бачення програми яке записуєтся в тезі vision. Для опису проблеми і бачення можна використовувати HTML теги, а також тег stylesheet-link з атребутом href на початку документу для підключення CSS стилів до документу.

Слідуючим етапом є виробка вимог до програми. Вимога - це опис того що має бути реалізовано. Вимога описуєтся тегом requirement. Є два види вимог :
1. Функціональні, перечисляются в тезі functional-requirements - яку поведінку повинна мати програма.
2. Нефункціональні, перечисляются в тезі non-functional-requirements - особлива властивість чи обмеження яке накладаєтся на систему.
Вимоги можуть групуватись в пакети за допомогою тегу package.

Для опису глосарію проекту використовуєтся тег glossary. Терміни описуются тегом term, в форматі : слово - опис - синоніми - омоніми.

Приклад пропозиції проекту текстового редактора:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/proposal.xslt"?>
<!DOCTYPE proposal SYSTEM ".blueprint/proposal.dtd">
<proposal>
  <problem>The program for editing plain text is needed.</problem>
  <vision>The program with a text panel supports operation like open and save a text file.
  Supports the editing operations like undo and cut text. Support find and replase capability. 
  Also supports options on changing the view of the text in window.
  Seleveral files for editing can be opened</vision>
  <functional-requirements>
      <package name="file operations">
        <requirement priority="mast_have">The program shall creates new empty text for editing</requirement>
        <requirement priority="mast_have">The program shall opens the existing file for editing</requirement>
        <requirement priority="mast_have">The program shall saves the text in file</requirement>
        <requirement priority="should_have">The program shall saves the text as another file</requirement>
        <requirement priority="should_have">The program shall reloads the current file from the file system</requirement>
        <requirement priority="should_have">The program shall restores the text changes from the backup</requirement>
        <requirement priority="should_have">The program shall prints edited text.</requirement>
      </package>
    <requirement priority="mast_have">The program shall manage tabs with opened files</requirement>
    <requirement priority="should_have">The program shall cuts, copies and pasts the text</requirement>
    <requirement priority="should_have">The program shall undos and redos the text changes</requirement>
    <requirement priority="should_have">The program shall finds the fragment in text.</requirement>
    <requirement priority="should_have">The program shall replases the fragment in text.</requirement>
    <requirement priority="should_have">The program shall saves the options after quitted</requirement>
  </functional-requirements>
  <non-functional-requirements>
      <requirement>The program shall uses the swing library for creating GUI</requirement>
      <requirement>The program shall uses the javahelp library for viewing a help</requirement>
      <requirement>The program shall uses the ant util for building</requirement>
  </non-functional-requirements>
  <glossary>
    <term>
      <word>text component</word>
      <description>the component in a window that contain the text</description>
    </term>
    <term>
      <word>file</word>
      <description>the current edited file</description>
    </term>
    <term>
        <word>tab</word>
        <description>component that con show or hide the text panel</description>
    </term>
  </glossary>
</proposal>

неділя, 17 березня 2013 р.

Проектування функції сортування чисел методом "бульбашки" з використанням технології Blueprint


При сортуванні методом "бульбашки" числа в масиві міняются місцями, якщо дві сусідні величини розташовані не по зростанню. В цьому методі відбуваєтся перегляд масиву поки всі можливі пари елементів не будуть переглянуті і можливо переставлені.

Алгоритм сортування в псевдокоді:

  1. K = кількість елементів масиву - 1
  2. ЦИКЛ-ПОКИ K >= 1
    1. Перемістити найбільше ціле в останні елемент масиву
    2. Зменшити К на 1
  3. КІНЕЦЬ-ЦИКЛУ 
Деталізація кроку 2.1 :
  1. J = 1
  2. ЦИКЛ-ПОКИ J <= K
    1. Порівняти чергову пару і переставити при потребі
    2. Збільшити J на 1
  3.  КІНЕЦЬ-ЦИКЛУ
Деталізація кроку 2.1 :
  1.  ЯКЩО елемент масиву (J) > елемент масиву (J + 1)
    1. Тимч = елемент масиву (J)
    2. Елемент масиву (J) = елемент масиву (J + 1)
    3. Елемент масиву (J + 1) = Тимч
  2.  КІНЕЦЬ-ЯКЩО
Запис функції з використанням технології Blueprint :

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/model.xslt"?>
<!DOCTYPE model SYSTEM ".blueprint/model.dtd">
<model name="Buble sorting">
    <description>Buble soritng of the array in increasing sequence</description>
    <classes>
        <class name="Sorter">
            <parameterized-types>
                <parameterized-type name="Type" class="Comparator" type="Comparator" />
            </parameterized-types>
            <attributes>
                <types>
                    <array of-type="Type" name="Array" />
                </types>
            </attributes>
            <operations>
                <method name="sort" visibility="public">
                    <description>Buble sort of the array</description>
                    <parameters>
                        <parameter name="array" type="Array"></parameter>
                    </parameters>
                    <data>
                        <variable name="k" primitive="integer" />
                        <variable name="j" primitive="integer" />
                        <variable name="temp" type="Type" />
                    </data>
                    <algorithm>
                        <doing>set k to size of array</doing>
                        <while condition="k >= 1">
                            <step>
                                <action>move greater value in the tail of array</action>
                                <detailing>
                                    <doing>set j to 1</doing>
                                    <while condition="j &lt;= k">
                                        <step>
                                            <action>compare next pair and replace when necessary</action>
                                            <detailing>
                                                <if condition="array[j] &gt; array[j+1]">
                                                    <then>
                                                        <doing>set temp to array[j]</doing>
                                                        <doing>set array[j] to array[j+1]</doing>
                                                        <doing>set array[j+1] to temp</doing>
                                                    </then>
                                                </if>
                                            </detailing>                                       
                                        </step>
                                        <increase variable="j" />
                                    </while>
                                </detailing>
                            </step>
                            <decrease variable="k" />
                        </while>
                    </algorithm>
                </method>
            </operations>
        </class>
    </classes>       
</model>

Вигляд документу в бровзері :





пʼятниця, 15 березня 2013 р.

Fridays Fun






що подивитися на вихідних



Event Sourcing архітектура для вас не пустий звук? черги з java collections занадто повільні? хочете дізнатися як опрацьовувати 1 мільйон транзакцій в секунду на одному сервері? тоді вас напевно зацікавіть ось цей запис колег з jug.ru




середа, 13 березня 2013 р.

What’s in a name : Reason behind naming of few great projects


Why name GIT :

According to WikiPedia:
Linus Torvalds[The creator of git] has quipped about the name git, which is Irish slang for a child born out of wedlock, and British English slang for a stupid or unpleasant person. Torvalds said: ‘I’m an egotistical bastard, and I name all my projects after myself. First ‘Linux’, now ‘git’.'The man page describes git as ‘the stupid content tracker’

Why Name Android:

Meaning of Android is ‘(in science fiction) A robot with a human appearance. all the android versions[Jelly Bean,Ice Cream Sandwich,Honeycomb,Gingerbread,Froyo,Eclair,Donut] till date , are named after popular sweets.

Why Name Hibernate:

Its name seems logical because hibernate mean ‘ Remain inactive or indoors for an extended period’. Similarly the hibernate entities remains inactive for the period they are in database. There is no official reason about naming. Source

Why Name Spring :

According to Blog by Rod Johnson spring was coded with name ‘Interface21 framework’ , but later changed to spring suggested by yann . The reason was one is association to nature and two it represents a fresh start after the “winter’ of traditional J2EE.


вівторок, 12 березня 2013 р.

Spring Expression Language (SpEL)


Spring пропонує шикарні можливості для декларатовного опису параметрів, а вершиною можливостей є Spring Expression Language. По суті, це потужня мова, що надає динаміку до конфігурування бінів, у тому числі можливість працювати графом об"єктів під час виконання. Хто знайомий з OGNL - то це дуже подібно і вшито в спрінг контекст.

Найпростіший приклад: припустимо, ви маєте проперті файл у якому даєте можливість корисутвачу задавати якийсь інтервал часу в годинах (тобто з точки зору користвувача мінімальний крок в налаштуваннях є година), але самі в коді потребуєте секунди, можна інджектати це ось таким чином:
 
<bean class="com.blogspot.jug-lviv.Test" id="test">
  <property name="testField" value="#{${time.interval.hours}*60*60}">
</property></bean>

Наступний приклад, це можливість викликати вашу кастомну функцію, припустимо ви маєте пропертю, до користувач задає якусь відносну директорію, а ви хочете в біні отримати вже абсолютний шлях. Ваший абсолютний шлях = спецефічний для хосту шлях + відносний шлях.

Ви пишет клас що реалізую інтерфейс:

 
interface PathUtil {
   String getRealPath(String relativePath);
}
і тепер у вашій спрінг конфігурації ви можете писати, отримуючи одразу абсолютний шлях інджектнутим в бін:
 
<bean class="com.blogspot.jug-lviv.Test" id="test">
  <property name="testField" 
    value="#{ T(com.blogspot.jug-lviv.PathUtilImpl).getRealPath(${metrics.storage}) }">
</property></bean>

Ну і варіант з інджектанням дефолтного значення, коли воно не доступне серед пропертів:

 
<bean class="com.blogspot.jug-lviv.Test" id="test">
  <property name="topGrade" 
        value="#{${top.grade} == null ? '100' : ${top.grade} }}">
</property></bean>

Всі зазначені праиклади працюють також для конфігурацій через анотації.
Більше читаємо тут http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch07.html

SPRING TOOL SUITE 3.2.0 RELEASED + Webinar


11 березня Spring випустив в світ нову версію добре відобї надбудови над екліпсом.
Деталі обновлення і посилання на скачування можна знайти тут:
http://www.springsource.org/node/4247

Також 14 березня о 17,00 відбудиться вебінар:MULTI CLIENT DEVELOPMENT WITH SPRING
Реєстрація і деталі можна знати ось тут:
http://www.springsource.org/node/4033



четвер, 7 березня 2013 р.

HelloWorld in Java


Чудовий пост на StackOverflow
I came across this piece of code, and found it rather interesting. The following print statement would print "hello world". Could anyone explain this?
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
And randomString() looks like this
public static String randomString(int i)
{
    Random ran = new Random(i);
    StringBuilder sb = new StringBuilder();
    for (int n = 0; ; n++)
    {
        int k = ran.nextInt(27);
        if (k == 0)
            break;

        sb.append((char)('`' + k));
    }

    return sb.toString();
}


середа, 6 березня 2013 р.

Проектування програми додавання двох чисел з використанням технології Blueprint


Опис програми:
Програма працює в консольному режимі. Користувач запускає програму з консолі.
Програма чекає введення двох чисел обчисляє і виводить на екран результат.

Є один варіант використання програми - Start. Цей варінт використання включає запуск програми і додавання чисел. Актором який ініціює варіатн використання є User. Передумовою початку прецеденту є те що програма не запущена. Післяумовою прецеденту є вихід з програми.
Розповідь взаємодії користувача з програмою є слідуючою :
1. Користувач запускає програму
2. Користувач вводить два числа
3. Програма виводись суму введених чисел

Псевдокод для прецеденту Start є слідуючий:
1. Читати перше число з консолі.
2. Читати друге число з консолі.
3. Додати два числа.
4. Вивести результат.

Запис прецедента з використанням технології Blueprint:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href=".blueprint/model.xslt"?>
<!DOCTYPE model SYSTEM ".blueprint/model.dtd">
<model name="Adding program model">
    <description>Model of the program of the adding two numbers</description>
    <use-case name="Start">
        <description>Start the program and add two numbers</description>
        <actors>
            <primary-actors>
                <actor name="user"></actor>
            </primary-actors>
        </actors>
        <preconditions>Program is not started</preconditions>
        <narrative>
            <doing>The user launchs the program</doing>
            <doing>The user enters two numbers</doing>
            <doing>The program prints sum of two numbers on the screen</doing>
        </narrative>
        <postconditions>Program is quitted</postconditions>
        <thread>
            <doing>get first number from console</doing>
            <doing>get second number from console</doing>
            <doing>sum two numbers</doing>
            <doing>print result</doing>
        </thread>
    </use-case>
</model>

Вигляд документу в бровзері: