qia-1.4.1

Dec. 11th, 2011 09:40 pm
madf: (Default)
[personal profile] madf
З релізом мене!
Останні два тижні пройшли під девізом "ні дня без комміту". Один день всього пропустив, зате в інші по десятку коммітів робив.
Переписав майже повністю клієнтську бібліотеку на C++ (до цього це були C-з-класами), додав у неї автоматичне перекодування усіх текстових повідомлень (назви напрямків тарифікації, повідомлення, помилки) в UTF-8, засунув її у PIMPL, PIMPL засунув в інтерфейсний клас, клас засунув у Factory :)
Зробив це для того щоб ініціалізація об’єкту відбувалась тільки в конструкторі. Справа у тому що крім параметрів з’єднання, логіну і паролю, які можна передати у конструктор є ще п’яток коллбеків. Їх, в принципі, можна було б встановлювати у runtime, але мені було дуже впадлу навішувати туди м’ютекси чи контролювати що з’єднання наразі немає. Тому я всі параметри тримаю у Factory, а в момент створення екземпляру відбувається конструювання приватного об’єкту, встановлення колбеків і засовування його у PIMPL. Конструктори приватного класу і інтерфейсу до нього, звісно, зробив приватними щоб ніхто не поліз їх використовувати.
Там ще залишилось трохи оригінального коду, зв’язаного із розбором пакетів, їх генерацією і шифруванням, ну і робота з мережею ведеться у стилі C. Можна було б переписати мережевий код на Boost.Asio, а шифрування винести в окремий клас, але поки і так працює.
Додав також ведення історії повідомлень. Пишу у текстовий файл (ібо нєфіг пхати всюди SQLite чи Berkeley DB), читати можна прямо очима. Додав тільки контроль цілісності кожного повідомлення на базі CRC, щоб бути певним що я не читаю всяку лабуду. Вийшло приблизно так: спочатку йдуть кілька числових параметрів (таймстемпи створення і прийняття, тип, час показування), потім йде довжина тексту повідомлення (знову таки число), за нею сам текст (тут можна зафігачити і HTML) і в кінці crc32 від тексту. В процесі читання спочатку роблю базову валідацію числових параметрів по допустимим діапазонам, потім читаю сам текст, його crc і перевіряю чи не прийшла лабуда. Якось так. Історія поки що тільки пишеться і читається, навігацію по ній ще не зробив. Треба буде прикинути дизайн.
Усі ці бодання з кодом зайняли у мене не так багато часу, від сили тиждень. А ще тиждень я бодався із CMake. На скільки він здається зручним у простих проектах, на стільки ж він стає убогим в процесі реального використання. З одного боку, начебто, є документація. З іншого, приклади у документації на стільки примітивні, що у реальному світі їм немає застосування. Щоб заставити його нормально генерувати переклади у потрібному мені місці довелось пошукати по десятку проектів, подивитись як це роблять люди, а потім плюнути і написати по своєму. Потім ще кілька днів бодання з генерацією bundle для мака. Там теж все сумно. Можна робити Pakage для встановлення, а можна робити просто dmg. Я так зрозумів, pakage робиться коли потрібна тісна інтеграція в систему. Майже в усіх open-source проектах де я "підглядав" як вони роблять bundle для маків про package було написано що це overhead. І я теж так подумав. В кінці кінців знайшов проект у якому білд-система була досить охайною щоб із неї було хоч щось зрозуміло: HDRITools. До речі, розроблено у Коренлівському Університеті. У нас на більшість коду що вийшов з ВУЗів без сліз дивитись не можна, а тут все красиво, охайно. Принаймні у білд-системі. Ну ще по іншим проектам пошукав-подивився. В результаті добився-таки нормальної генерації bundle, а сьогодні добив включення у нього фреймворків. Boost-то лінкується у мене статично, а от Qt...
Ще одна засада була із шляхами. Ну у Linux є XDG Base Directory Specification, а от у віндах і маках усе якось туманно з цього приводу. Та і на лінуксах теж можуть забивати на XDG. Наприклад у мене із усіх змінних оточення що є у специфікації визначено лише XDG_CONFIG_DIRS та XDG_DATA_DIRS. Благо є класний проект Swift з офігенним кодом, по якому можна вчитися писати програми на C++. Звідти я трошки поцупив ідею Path Providers частину шляхів.
Дякую компанії Vikos за наданий у тимчасове користування MacBook і своїй сестричці [livejournal.com profile] oxymona за тестування отриманих dmg. Код і пакунки, як завжди, лежать тут: http://code.google.com/p/qia. Є українська і російська локалізація.

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 24th, 2025 09:33 am
Powered by Dreamwidth Studios