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

Березень 19, 2010Загальне

Із радістю повідомляю, що з під мого пера вийшла програма-настільний клієнт для 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

JIRA plugin pack released!!!

Вересень 27, 2009Комп'ютери

Вийшла перша версія набору плагінів для системи управління заявками JIRA - JIRA Plugin pack.

Ось опис основних можливостей:

Issue hasn’t unclosed subtask (workflow condition) – allow to execute transition only if all issue’s subtasks are closed:

Add condition to workflow
View Condition

User in/not in specified group (workflow condition) – allow only users in (or not in) a given group to execute a transition:

user is in group JIRA plugin pack
user is in group 3 JIRA plugin pack
user is in group 2 JIRA plugin pack

User in/not in specified field (workflow condition) – allow only users in (or not in) a given field to execute a transition:

user in field JIRA plugin pack
 JIRA plugin pack
user in field 3 JIRA plugin pack

Assign to parent issue assignee (workflow post function) – The  issue (sub-task) will be assigned to the parent issue assignee:

assign to parent issue assignee function JIRA plugin pack

Regex replace field value (workflow post function) – The value of selected field will be replaced with regular expression (Supports Perl-style patterns - http://www.perl.com/doc/manual/html/pod/perlre.html):

reg replace field value JIRA plugin pack
reg replace field value 2 JIRA plugin pack

Set field value from User (User gets from field) Property value (workflow post function) – The value of selected field will be taken from Properties of User from field:

Add user to watcher list (workflow post function) – Add user (Assignee, Current, Reporter) to watcher list:

add user to watcherlist JIRA plugin pack
set-cfvalue-from-userprops

Assign issue to group member (workflow post function) – Issue is assigned to the first member of group from selected Group Select Custom Field:

assign from group customfield function JIRA plugin pack

Assign to parent issue reporter (workflow post function) – The issue (sub-task) will be assigned to the parent issue reporter;

Regular Expression Match Validator – The value of the field must mutch to the specified pattern (Supports Perl-style patterns – http://www.perl.com/doc/manual/html/pod/perlre.html)

regular expression match validator JIRA plugin pack

Compare Date Field With Current Date (workflow validator) -Compare date field with current date during a workflow transition. Based on JIRA Suite Utilities plugin:

dateCompareNow validator JIRA plugin pack
dateCompareNow validator 2 JIRA plugin pack

Administer user dashboards (webwork action) – allows to set custom dashboards to users or groups. After you have this plugin installed, in your administration menu appear link: User Dashboards

Завантажити плагін можна звідси: http://bytes.org.ua/downloads/jira-plugin-pack/

Офіційна сторінка: http://bytes.org.ua/products/jira-plugin-pack/

Сторінка на сайті виробника: http://confluence.atlassian.com/display/JIRAEXT/JIRA+Plugin+Pack

Підтримка сайту

Червень 6, 2008Загальне

Десь прочитав статтю (не пам’ятаю де) про підтримку сайтів. Хочу сказати про це декілька слів.

Якщо ви на сайті бачите рекламу (від Google чи ще від когось)  і вам цей сайт сподобався, то клікніть по рекламному оголошенню. У вас це не займе більше 15 секунд, а господарю сайту буде користь. Так ви можете підтримати сайт. Я завжди так роблю.

Зберігання файлів в стовпцях BLOB в СКБД Oracle за допомогою C++Builder

Травень 14, 2008C++Builder/Delphi, Oracle

Доброї ночі (ранку, дня, вечора)!

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

Зараз буду писати про те, як зберігати файли в СКБД Oracle за допомогою типу даних: BLOB (Binary Large Object). Програму буду розробляти на C++Builder6 з використанням компонентів ODAC версії 3.90(Oracle Data Access Components). Хоч в них є проблемка: не підтримується Oracle 10g, але цю проблему вирішую просто поставивши клієнт від Oracle 9i (~170 МБ)

Компоненти можна завантажити за цією адресою: http://customz.org.ua/data/odac390cb6net.exe(Клікаєте правою кнопкою й обираєте “Зберегти об’єкт як…”) .

І так, нам знадобиться приблизно така форма:

Форма

Потрібно дві кнопки, компоненти OraSession1, OraStoredProc1 з ODAC.

Створюємо таблицю для тестування й втавляємо один рядок:


CREATE TABLE blobTable (
Id NUMBER,
Name VARCHAR2(30),
Value bLOB
);

insert into blobtable(id,name) values(1,'test')

Ще потрібно створити дві процедури на сервері:


CREATE OR REPLACE
PROCEDURE ClobTableUpdate (p_Id NUMBER, p_Name VARCHAR2,
p_Value OUT bLOB)
is
begin
UPDATE blobTable
SET
Name = p_Name,
Value = EMPTY_bLOB()
WHERE
Id = p_Id
RETURNING
Value
INTO
p_Value;
end;

і таку:


CREATE OR REPLACE
PROCEDURE ClobTableGet (p_Id NUMBER, p_Value OUT bLOB)
is
begin
select value
into p_value
from blobtable
where id = p_id;
end;

В коді обробки першої кнопки (Write) пишемо код, який буде записувати в таблицю файл test.rtf, що знаходиться в одному каталозі, що й програма.


void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString FileName = ExtractFilePath(ParamStr(0))+"\test.rtf";
OraStoredProc1->StoredProcName = "clobTableUpdate";  //назва процедури

OraStoredProc1->Prepare();
OraStoredProc1->ParamByName("p_Id")->AsInteger = 1;     //id рядка

OraStoredProc1->ParamByName("p_Name")->AsString ="test";
OraStoredProc1->ParamByName("p_Value")->ParamType = ptInput; //Якщо ptInput - записуємо на сервер
OraStoredProc1->ParamByName("p_Value")->AsBLOBLocator->LoadFromFile(FileName);
OraStoredProc1->Execute();
OraSession1->Commit();
}

Читання файлу з серверу:


void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString FileName = ExtractFilePath(ParamStr(0))+"\savevvv.rtf";
OraStoredProc1->StoredProcName = "clobTableget";
OraStoredProc1->Prepare();
OraStoredProc1->ParamByName("p_Id")->AsInteger = 1;

OraStoredProc1->ParamByName("p_Value")->ParamType = ptOutput;
OraStoredProc1->Execute();
OraStoredProc1->ParamByName("p_Value")->AsBLOBLocator->SaveToFile(FileName);
OraSession1->Commit();
}

Тепер ми записуємо файл з БД в файл savevvv.rtf.

Бажаю успіхів.

Хеш-функція md5 в Oracle

Травень 13, 2008Oracle

Навожу невеликий пакет, над яким почав працювати й хочу на його прикладі продемонструвати один зі способів як розраховувати хеш-значення (hash-value, http://en.wikipedia.org/wiki/Hash_function) за допомогою алгоритму одностороннього шифрування md5. Привожу текст пакету:


create or replace package ADM_SERVICE is

function md5(StrToCode varchar2) return varchar2;

end ADM_SERVICE;
/
create or replace package body ADM_SERVICE is

function md5(StrToCode varchar2) return varchar2  is
code_source CLOB;
md5hash     VARCHAR2(32);
BEGIN
code_source := StrToCode;
md5hash     := RAWTOHEX(SYS.DBMS_CRYPTO.HASH(typ => DBMS_CRYPTO.hash_md5,
src => code_source));
return md5hash;
END;
end ADM_SERVICE;
/

Оскільки непривілейовані користувачі не мають права на виконання пакету SYS.DBMS_CRYPTO, то даємо їм таке право:


create public synonym dbms_crypto for dbms_crypto;
create public synonym ADM_SERVICE for SYS.ADM_SERVICE;

grant execute on dbms_crypto to adm_user;
grant execute on adm_service to adm_user;

Тепер можна простим способом рахувати хеш-значення:


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select adm_service.md5(’test’) from dual;

ADM_SERVICE.MD5(’TEST’)
——————————————————————————–
098F6BCD4621D373CADE4E832627B4F6

SQL>  

Різниця між автоматичним й ручним керуванням PGA

Травень 8, 2008Oracle

Однією з найбільш важких задач для адміністратора є налаштування окремих параметрів в init.ora. Особливо це стосується таких параметрів, як sort_area_size, hash_area_size, і подібних. Дуже часто зустрічаються системи, які працюють при надзвичайно малих значеннях для цих параметрів; значення наскільки невеликі, що продуктивність роботи системи дуже і дуже знижується.

Існує багато спорів і думок з приводу того, наскільки великими або малими мають бути вищезгадані параметри. Крім цього, параметри розподілу пам’яті можуть варіюватися протягом часу. Наприклад, у 8 годин ранку з 2-ма користувачами може вистачити 50 МБ області сортування даних. Але в полудень з 500-ми користувачами цього достатньо не буде. У цьому випадку ви можете скористатися можливістю, яка з’явилася в Oracle9i release 1 – параметру workarea_size_policy = AUTO, а також pga_aggregate_target (розмір пам’яті, яка використовується PGA, де Oracle проводить сортування, хешування та ін.)

Раніше, адміністратори проводили конфігурацію пам’яті використовуваної Oracle шляхом встановлення розміру SGA (the buffer cache, the log buffer, the shared/large/java pools). Пам’ять, що залишилася, використовувалась поділяємим або виділеним сервером в області PGA, і називалася пам’яттю процесу. Адміністратори мали невеликий контроль над розміром цієї пам’яті, яка могла б використовуватися, а могла б і ні. Вони могли встановити параметр sort_area_size, ае якщо в системі виконується 10 одночасних сортувань, тоді Oracle використовує 10 *sort_area_size байтів пам’яті. Якщо 100 сортувань, то 100*sort_area_size. Враховуючи і той факт, що в PGA знаходяться такі області, як hash_area_size, bitmap_merge_area_size та ін.., ви реально не маєте достатнього контролю над максимальним використанням PGA в системі.
Як би ви хотіли використовувати пам’ять при різних завантаженнях системи? Відповідь: чим більше користувачів, тим менше пам’яті вони мають використовувати, і навпаки, чим більше користувачів, тим більше пам’яті можна їм виділити. Встановлення workarea_size_policy = AUTO – це просто шлях досягнути цього. Адміністратору достатньо встановити один параметр, pga_aggregate_target, - максимальний розмір PGA, який Oracle має намагатися використовувати. Потім Oracle буде просто розподіляти пам’ять між активними сесіями як найбільш вигідно. Крім того, в Oracle9iR2 система дає рекомендації по оптимальному розміру PGA, на подобі рекомендацій для буферного кешу. Через деякий час, система порекомендувати оптимальний розмір pga_aggregate_target. Ви можете змінити цей параметр динамічно (якщо розмір ОЗП достатній), або визначити, що вам потрібно більше оперативної пам’яті щоб досягнути максимальної швидкодії.

І останній момент. На операційних системах, що дозволяють це зробити, PGA фізично звільняється й віддається назад операційній системі. На відміну від використання традиційної кучі процесу, розміщеної через прийнятий в мові С запит на виділення пам’яті malloc(), робочі області PGA можуть виділятися за допомогою викликів map() і unmap(). Це дозволяє віддавати пам’ять назад явно коли вона непотрібна. Цей процес відбувається швидше, ніж очікування на запит операційної системи про повернення пам’яті.

Як під’єднатися до Oracle через SQLPlus без tnsnames.ora

Травень 7, 2008Oracle

Інколи виникає необхідність під’єднатися до СКБД Oracle без наявності файлу tnsnames.ora або тоді, коли вам не потрібно редагувати цей файл, а просто перевірити правильність настройок мережі чи ще чого вам заманеться. Для цього рядок з’єдніння tns можна вказати як параметр для програми sqlplus. Розглянемо приклад для ОС Linux. Створюємо файл приблизно такого змісту:

$ more test.sh
sqlplus ‘apps/apps@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=local
host)(PORT=1541)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=work)))’

Змінюєте параметри з’єднання відповідно вашому випадку, параметри вказуються в одному рядку. Змінюєте права доступу до файлу:

$ chmod 777 test.sh

Для перевірки зроблених дій запускаємо скрипт:

$ ./test.sh

SQL*Plus: Release 8.0.6.0.0 - Production on Thu May 8 11:39:56 2008

(c) Copyright 1999 Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

SQL> select * from dual;

D
-
X

SQL> quit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

Тепер для Windows (заміняємо одинарні лапки на подвійні):

C:>more test.bat
sqlplus “apps/apps@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dev.m
albi.dp.ua)(PORT=1541)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=work)))”

Перевіряємо роботу:

SQL*Plus: Release 8.0.6.0.0 - Production on ╫Єт ╠рщ 8 11:47:17 2008

(c) Copyright 1999 Oracle Corporation. All rights reserved.

╧Ёшёюхфшэхэ ъ:

Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.8.0 - Production

SQL> select * from dual;

D

-

X

SQL>

Бажаю успіхів!

До обговорення запрошую відвідати мій форум: http://customz.org.ua/forum/index.php

Увага, шахрайство, або подвійне поповнення рахунків.

Квітень 25, 2008Загальне

Блукаючи просторами Інтернету я знайшов доволі цікаву статтю:

http://smih.org.ua/index.php?option=com_content&task=view&id=40&Itemid=32 .

Там говориться, що можна без всякого ризику подвоювати номінали карток поповнення рахунку у всіх популярних в Україні операторів мобільного зв’язку (МТС, Jeans, Djuice, Kyivstar) . Для цього, ніби, використовуються дирка в GSM-протоколі. Просто потрібно відправити смс-ку на номер оператора спеціального змісту (tAAA*uni.de [код поповнення] [штрих-код картки]
де ААА - це код оператора, тобто або 097 або 067 або 098 або 050/066/і ще який завгодно), почекати добу, й потім поповнивши звичайним чином рахунок, ви замість 25 (50,100) отримуєте 50 (100, 200) гривень. На перший погляд - нічого підозрілого: відправляється смс на номер оператора, а не якимось іншим особам. Крім того, який уркаїнець не любить шари?

Але стоп! Яка дирка в протоколі? Протоколом GSM користуються по всьому світі! Як там може бути така дирка? Потім, для чого абонентам Київстару відправляти смс-ку на номер 7021? Щоб активувати в оператора послугу подвоєння рахунків? Дуже сумніваюся. Виявляється, що це активація послуги e-mail у Київстара. А символ “*” в старих телефонах заміняв символ ат (@). І що виходить? Ви відправляєте на скриньку tAAA@uni.de листа, де вказуєте код поповнення купленої вами картки поповнення, й чекаєте добу, поки ваш лист прочитають і поповнять ним їхній телефон.

Тому якщо ви зустрінете десь такі статті, де розповідається про шарове подвоєння сум,  знайте: це - лохотрон.Не попадайтеся, й пам’ятайте: безкоштовний сир - тільки в мишоловках.

Кодування теґів і AmaroK

Квітень 8, 2008Linux

При переході на Лінукс після вінди у вас, напевне, музика закодована в mp3 форматі і з кодуванням теґів Windows cp1251. Як відомо, Лінукс працює по-замовчуванню з кодуванням UTF8, і тому більшість програмного забезпечення орієнтуються на це.

Популярний програмач музики Amarok до виходу версії 1.45 підтримував різноманітні кодування, але згодом розробники відмовилися від реалізації цієї можливості. Тому при завантажені музике в амарок ви отримаєте замість кирилиці ієрогліфи. Пропоную простий вихід з цієї ситуації. Якщо ви серйозно перейшли на Лінукс, то можете сміливо перекодувати всі теґи в кодування UTF8.

Тут в пригоді стане програма EasyTAG. Головне вікно програми приведено на малюнку:

ІзіТег

Для того, щоб кодування читалися в кодуванні cp1251, а записувалися в UTF8, потрібно зайти в меню Settings->Preferences і поставити такі параметри:

Парам

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

Автентифікація в phpbb і ваш проект

Березень 15, 2008Програмування

Ця коротка замітки присвячена тому, як у вашому проекті користуватися даними сесії користувача, який здійснив вхід на ваш форум на движку phpbb. Ну, наприклад, вам потрібно щоб в чаті користувачам, які ввійшли на форум не доводилося входити і на чат, або відображати ім’я цього користувача. Для цього достатньо включити до ваших сценаріїв на мові php такий код:



define('IN_PHPBB', true);
$phpbb_root_path = './forum/';                          //Шлях до phpbb
require_once($phpbb_root_path . 'extension.inc');
require_once($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);

Тепер вам доступні такі змінні:

  • $userdata[’session_logged_in’] - true - якщо користувач ввійшов в систему, false - в протилежному випадку;
  • $userdata[’session_id’] - ідентифікатор сесії;
  • $userdata[’user_level’] - ранг користувача. Наприклад, перевірка чи користувач має права адміністратора на форумі: if ($userdata[’user_level’] == ADMIN)
  • $userdata[’username’] - логін користувача

Copyright © 2007 Блоґ Ганжі Віталія. All rights reserved.