Hosting Host-UA for ukrainians!
zymnavoda | zanachka | house m.d.

Архів

Архів для категорії ‘Програмування’

Регулярні вирази – це просто

Серпень 2nd, 2010 admin Прокоментувати
В цій замітці хочу поділитися про програму, яка значно спрощує розуміння і роботу регулярних виразів – Expresso До знайомства із цим продуктом, регулярні вирази давалися мені важко, хоча працювати доводилося і не часто. Але від часу початку роботи автоматизатором тестування, хочеш-не-хочеш, але рег. вирази потрібно розуміти. І на допомогу прийшла саме ця програма. Expresso 3.0
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark

Побачила світ програма-настільний клієнт для сервісу перекладів Google Translate (gDesktop Translator)

Березень 19th, 2010 admin 1 коментар
Із радістю повідомляю, що з під мого пера вийшла програма-настільний клієнт для on-line перекладача від Google. Перш за все вона цікава двома можливостями: Вам більше не потрібно йти на сторінку Google  Translate для перекладу, крім цього, ви можете перекладати виділений текст у будь-якому вікні, що підтримує копіювання за допомогою комбінації клавіш  Ctrl+C. Основні можливості цієї програми такі:
  • переклад текстів із однієї мови на іншу;
  • автоматичне визначення мови тексту;
  • переклад виділеного фрагменту тексту за допомогою натиснення комбінації клавіш Ctrl+C+C
  • підтримка великої кількості мов;
  • програма згортається в системний лоток;
  • можливість роботи через проксі-сервер;
  • автозавантаження;
  • мова інтерфейсу користувача: англійська та українська;
Більш детально ознайомитися із цим продуктом можна тут. Там же ви зможете знайти посилання для завантаження, а також розташування початкових кодів програми. Буду радий відгукам та побажанням щодо роботи.

Знімки екрану

 gDesktop Translator   Google Translate Desktop Client
 gDesktop Translator   Google Translate Desktop Client
 gDesktop Translator   Google Translate Desktop Client
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: -1 (from 1 vote)
  • Share/Bookmark

Різниця між перевизначенням та перевантаженням в Java

Лютий 8th, 2010 admin Прокоментувати
Вітаю всіх! Давненько я вже не писав нічого, і ось настав момент наявності часу і натхнення :) . В цій статті я хочу дати вичерпний опис різниці між перевизначенням та перевантаженням в Java. Далі…
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Categories: Java Tags: ,

Два методи “поламати” ваш Singleton

Грудень 28th, 2009 admin Прокоментувати
Сьогодні хочу написати про ще декілька нюансів при роботі із шаблоном проектування Одинак (англ. Singleton). У статті про деякі проблеми при його реалізації наведено найпоширеніший підхід за допомогою використання приватного поля із модифікатором final та статичної фабрики  (static factory).
Зазначу, що існує ще також подібний метод реалізації – за допомогою публічного final-поля:
// Singleton with public final field
public class Singleton{
public static final Singleton INSTANCE = new Singleton();
private Singleton() { ... }
}
Але виграшу цей метод майже не дає: сучасні віртуальні машини Java вміють робити inline-виклики методи статичних фабрик (static factory methods)
Але дана реалізація може не виконувати своєї основної функції – не дозволяти створення більше одного екземпляру класу. Це може статися у двох випадках. На них і зупинимося :) Далі…
VN:F [1.6.3_896]
Rating: 8.0/10 (1 vote cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark

Незмінні об’єкти в Java (immutable objects)

Грудень 26th, 2009 admin Прокоментувати
Незмінні об’єкти – (англ.: immutable objects) це просто об’єкти, стан яких (їх внутрішні дані) не може змінюватися після його конструювання. Прикладами таких класів у JDK є String та Integer.

Значення незмінних об’єктів

Незмінні об’єкти мають дуже переконливий список позитивних якостей. Без сумніву, вони відносяться до числа найбільш простих і надійних класів, які програміст може створити. При використанні незмінних класів зникає цілий ряд проблем при створенні програм (наприклад, скорочуються затрати на синхронізацію і забезпечення цілісності даних). Незмінні об’єкти виявляються особливо корисними для паралельних програм. Оскільки вони не можуть змінити стан, вони не можуть бути пошкоджені якимось потоком і перебувати у нецілісному стані. Програмісти часто неохоче використовують такі класи, оскільки вважають, що затрати на створення нового об’єкта не дадуть виграшу в порівнянні із модифікацією об’єкта на місці.  Хоча затрати на створення об’єкта часто переоцінюють і забувають, що це може бути з лихвою компенсовано ефективнішою роботою із незмінними об’єктами – сюди входить зниження накладних витрат на збирання сміття (garbage collection) і зменшення кількості коду, необхідного для забезпечення цілісності змінюваних об’єктів. Далі…
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Categories: Java Tags: , ,

Захисне копіювання (Defensive copying)

Грудень 26th, 2009 admin Прокоментувати
Захисне копіювання об’єктів застосовується тоді, коли клас містить об’єктні поля, стан яких може модифікуватися тільки даним класом. Наприклад, розглянемо приклад:
package defencivecopyingsample;
 
import java.util.Date;
 
 
class NotImmutable {
 
    private Date dt = new Date();
 
    public long getTime() {
        return dt.getTime();
    }
 
    public Date getDate(){
        return dt;
    }
}
 
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        NotImmutable obj = new NotImmutable();
        Date d = obj.getDate();
        System.out.println(obj.getTime());
        d.setTime(1);
        System.out.println(obj.getTime());
    }
}
Результат виконання:
1261782744531
1
В цьому прикладі маємо клас NotImmutable, яки має приватний член Date dt. За допомогою методу getDate() можна отримати доступ до приватного поля dt, оскільки метод повертає посилання на об’єкт dt, а не його копію. Клієнтський код створює об’єкт типу NotImmutable, отримує посилання на приватний член і модифікує його. Оскільки це посилання,зміни зачіпають і приватне поле. Програміст, який пише клієнтський код навіть може і не знати того, що він змінив стан об’єкта obj (він просто працював із іншим об’єктом). Це може призвести до неузгодженості даних та помилок в роботі програми. Щоб цього уникнути, потрібно використовувати так зване захисне копіювання. Розглянемо це на прикладі:
package defencivecopyingsample;
 
import java.util.Date;
 
class NotImmutable {
 
    private Date dt = new Date();
 
    public long getTime() {
        return dt.getTime();
    }
 
    public Date getDate() {
        return new Date(dt.getTime());
    }
 
    public void setDate(Date dt) {
        this.dt = new Date(dt.getTime());
    }
}
 
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        NotImmutable obj = new NotImmutable();
        Date d = obj.getDate();
        System.out.println(obj.getTime());
        d.setTime(1);
        System.out.println(obj.getTime());
    }
}
Виведення даного прикладу:
1261783307000
1261783307000
Зверніть увагу на реалізацію методів getDate() та setDate(Date dt). Замість копіювання посилань на об’єкти і створюються нові об’єкти. Це гарантуватиме те, що приватні члени ваших класів не будуть змінені із назовні.
VN:F [1.6.3_896]
Rating: 1.0/10 (1 vote cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Categories: Java Tags:

Від класів із приватним конструктором по замовчуванню не можна наслідуватися

Грудень 26th, 2009 admin Прокоментувати
Як відомо, в Java щоб заборонити успадкування від даного класу потрібно використати ключове слово final. Наприкла, наступний клас не може мати нащадків:
final class CantHaveChildren{
 
    public final int x;
 
    public CantHaveChildren() {
        x = 0;
    }
 
    public CantHaveChildren(int x) {
        this.x = x;
    }
}
У даному пості я хочу сказати, що можна також заборонити успадкування від класу просто зробивши конструктор приватним:
package privateconstructors;
 
/**
 *
 * @author <a href="http://bytes.org.ua/">Vitaliy Ganzha</a>
 */
class Parent {
 
    public final int x;
 
    private Parent() {
        x = 0;
    }
 
    public Parent(int x) {
        this.x = x;
    }
}
 
public class Main extends Parent {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
}
При спробі компіляції даного коду отримаємо помилку:
cannot find symbol
symbol  : constructor Parent()
location: class privateconstructors.Parent
public class Main extends Parent {
Цей факт потрібно враховувати при використанні статичних фабрик створення об’єктів (static factory methods,[Effective Java Second Edition by Joshua Bloch]). При використанні даного підходу неможливо створити об’єкт безпосередньо (всі вони приватні). Створення об’єктів здійснюється за допомогою статичних методів класу.
VN:F [1.6.3_896]
Rating: 10.0/10 (1 vote cast)
VN:F [1.6.3_896]
Rating: +1 (from 1 vote)
  • Share/Bookmark
Categories: Java Tags: ,

Ключове слово transient у Java

Грудень 23rd, 2009 admin Прокоментувати
Вітаю всіх! Дана публікація буде присвячена ключовому слову мови  Java - transient. Щоб зрозуміти для чого призначене це слово, потрібно розуміти, що таке серіалізація (Serialization). Далі…
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Categories: Java Tags: ,

Публічні члени vs. Getter/Setter у Java

Грудень 10th, 2009 admin Прокоментувати
Вітаю всіх читачів! У цій статті хочу показати різницю між двома підходами до написання класів Java:
  • Використання публічних членів класів;
  • використання приватних членів класів та відкриття доступу до них за допомогою getters/setters.
В самому простому випадку можна дозволити собі обрати той метод, який тобі до вподоби, але при створенні ієрархії класів ситуація змінюється. Далі…
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Categories: Frameworks, Java Tags: , ,

Доступна для завантаженя версія 0.0.3 набору додаткових функцій для JIRA – JIRA Plugin Pack

Листопад 18th, 2009 admin Прокоментувати
Сьогодні світ побачила версія 0.0.3 набору плагінів для ДжириJIRA Plugin Pack. Основні нововведення такі:
  • Assign issue to group member (workflow post function) - тепер ця пост-функція при модифікації значення поля цю зміну записує в історію роботи по заявці;
  • Add user to watcher list (workflow post function) – додано можливість встановлювати спостерігачами вибраних користувачів. Раніше список був обмежений поточним виконавцем/автором/поточним користувачем. Але тепер для роботи плагіну потрібно також втсановлений JIRA Watcher Field.
     Доступна для завантаженя версія 0.0.3 набору додаткових функцій для JIRA   JIRA Plugin Pack
    Альбом: Додані
  • Початкові коди проекту було модифіковано під використання Maven та Atlassian  Plugin Development Kit 3.0.
Значний внесок в цей реліз зробив Lon Binder (Vice President of Technology at Folica Inc.), за що йому окрема подяка! Додаткові інформацію можна отримати на офіційній сторінці
VN:F [1.6.3_896]
Rating: 0.0/10 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Hosting Host-UA for ukrainians!
zymnavoda | zanachka | house m.d.