madf: (Default)
У OpenSSL багато критиків, і уже багато форків. Раніше мені якось не доводилось стикатися з цією бібліотекою, але останній рік я працюю з нею майже щоденно, точніше з криптографічною її частиною. Тож є кілька думок з цього приводу.
1. У OpenSSL офігенна архітектура у тому що стосується криптографії (EVP_-stuff, BIO_-stuff).
2. У OpenSSL гівняна документація. Точніше у них дофіга документації на функції, але майже немає прикладів їх використання. Доводиться багато гуглити і шукати по stackoverflow про те як саме користуватись їх функціями.
3. У роботі з OpenSSL варто мати версію зібрану зі зневаджувальною інформацією і не треба боятися лізти у джерельні коди — там усе більш-менш доступно.
4. Варто розуміти як саме працює RSA і алгоритми на еліптичних кривих. Так, наприклад, я тільки вчора узнав що цифровий підпис зроблений за допомогою ECDSA кожного разу різний для одно і того ж набору даних. Причина у тому що у процесі підпису один із параметрів обирається випадково і саме його випадковість захищає від підбору приватного ключа за підписом. Існує RFC 6979 який описує алгоритм обирання цього параметру для детермінованого підпису, але він наразі не імплементований у OpenSSL. Це суттєво зменшує можливості до тестування коду що працює з ECDSA.
5. Варто знати що таке ASN.1 і як з ним працювати. Наприклад, я тільки сьогодні узнав що DER вимагає мінімально можливого кодування цілих чисел, і тому підпис може мати різний розмір — у мене він коливався від 69 до 72 байт для SHA256 digest і кривої prime256v1. При чому EVP_DigestVerifyFinal повертав коректну довжину підпису тільки після фактичного підпису.
6. У OpenSSL погано з повідомленнями про помилки. Фактично, жодне з тих що я отримав мені не допомогло.
madf: (Default)
Я досить часто зустрічаю думку що для написання безпечного з точки зору memory management коду на C++ треба його „обмазати“ std::shared_ptr. Мене ця точка зору дико бісить, бо насправді std::shared_ptr означає що у програміста просто не залишилось іншого виходу. std::shared_ptr дуже складна і доволі небезпечна штука, тому я вважаю що для використання саме цього smart pointer треба чітко розуміти його природу, призначення і вміти відповідати на наступні запитання:


Junior level:

  • Що таке std::smart_ptr?

  • Для чого він потрібен?

  • Які відносини між std::shared_ptr і std::weak_ptr?

  • Навіщо потрібен std::weak_ptr?

  • Чи можна вважати std::weak_ptr smart pointer?

  • Чи можна вважати std::weak_ptr вказівником?

  • Що ж тоді таке std::weak_ptr?



Middle level:

  • Що таке std::enable_shared_from_this?

  • Для чого він потрібен?

  • Як std::enable_shared_from_this взаємодіє з наслідуванням?



Senior/Lead/Architect level:
  • PIMPL і std::enable_shared_from_this — як їх помирити?


Насправді, у 80% випадків достатньо value/reference/std::unique_ptr. До речі, raw pointer, про який кажуть шо його ніколи-ніколи, навіть під дулом автомату не можна використовувати насправді можна використовувати для імітації maybe-семантики (коли std::/boost::optional з якихось причин не підходить). Нічого страшного у ньому немає. Треба просто запам'ятати кілька правил:


  1. Ссилка і вказівник не передають володіння (за винятком new, але від нього треба відмовлятись на користь std::make_shared/std::make_unique). Нам не треба хвилюватись про знищення ресурсу.

  2. Значення робить копію або передає володіння (якщо повертаємо локальний об'єкт із функції). Нам не треба хвилюватись про знищення ресурсу.

  3. std::unique_ptr передає володіння. Знищення ресурсу на нашій совісті (але std::unique_ptr потурбується про це).



Я стверджую що слідування цим правилам ніколи не призводить до проблем з пам'яттю і покриває 80% випадків, коли треба обирати вид smart pointer. Для 20% що залишились все ж доводиться використовувати std::shared_ptr. Один із таких випадків — Boost.ASIO. std::shared_ptr у цьому випадку не потрібен тоді і тільки тоді коли ваші об'єкти гарантовано живуть довше за boost::asio::io_service.
madf: (Default)
А на роботу так не хочеться!
Чи не ознака це того що пора її міняти?
madf: (Default)
Продовження історії.

Read more... )
madf: (Default)
Злітав ще раз у Нью Йорк. Подробиці і трохи фото під катом.

Read more... )

Хотів зробити все одним постом, але часу немає зовсім. Так що буду по мірі можливості викладувати.
madf: (Default)
Значить, є у мене прокт карвош. Там автоматизація помивки машин, як виходить із назви. Проект старий, почався ще десь у 2007-му, або навіть раніше. Рулить там всім „тіпа промисловий комп“ — ebox-2300sx. Ну він, звісно, ніфіга не промисловий, зате маленький, крутенький і x86.
Read more... )
madf: (Default)
Помітив на роботі що стаю кавовим наркоманом. Так я її не дуже люблю, тільки дбайливо заварену у затишній атмосфері (згадується кафешка у Кам’янці Подільському). На роботі у нас автомат, при чому досить старий. Кава із нього гидка. Але дивлюся що якщо раніше я випивав 2-3 чашки на місяць, то тепер, буває, п’ю щодня. Іноді навіть подвійну порцію. Задоволення від неї мало, плюс думки розлітаються, перетворюються на хмару і зосередитись на одній із них стає важко. Але тягне.

Шинок

Mar. 29th, 2015 06:53 pm
madf: (Default)
— Куме, а знаєш як вони наш шинок називають?
— Як?
— "Коуфі рум"!
— Повбивав би!

madf: (Default)
Якщо ви у своїй програмі запровадили кеш — готуйтесь відгрібати.
Якщо ви запровадили кеш у розподіленій системі — ви вже двічі відгребли авансом.

Перевірено досвідом. На роботі в одному місці був 2-рівневий кеш який, нібито, мав прискорювати доступ до даних. Я просто прибрав цей кеш і тим самим прискорив роботу програми щонайменше у 10 разів.
madf: (Default)
Стає вже традицією збирати по зимі таблички.
career
madf: (Default)
Цього разу я вирішив не розписувати у подробицях кожен день і не розтягувати все на кілька постів. Ліниво, та і не так багато матеріалу.
Read more... )
madf: (Default)
Тиждень пролетів швидко...
Read more... )

Дибр

Oct. 23rd, 2014 03:46 pm
madf: (Default)
Другий день поспіль холодно і йде дощ. Звісно, місцеві +11°C не йдуть ні у які порівняння з українськими +2°C, але у поєднанні з ураганним вітром і дощем... Так що писати толком немає про що.
Обіцяють покращення життя вже сьогодні погоди до вечора. Подивимось.
Цього разу поїздка виходить досить рутинною, NYC уже не викликає такого захоплення як минулого разу. Зате все більше починає подобатись Jersey City. Тут якось менше біганини й галасу.
madf: (Default)
sunrise

Ну і як тепер модно, селфі:
me
madf: (Default)
Проект CarWash тепер і в Грузії! Поки, правда, тільки у Тбілісі.
Проект NTRIP Caster тепер обслуговує і Польщу.
Проект Stargazer не вмер, він просто так пахне :)

З 17 по 26 жовтня буду знову у NYC. Треба подивитись чи можна буде там проголосувати.
madf: (Default)
За останні пару тижнів.
Read more... )

Profile

madf: (Default)
madf

April 2017

S M T W T F S
      1
2345678
9101112131415
1617 1819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 03:26 pm
Powered by Dreamwidth Studios