madf: (Default)
BoostCon-2010:
Functional Programming in C++ (on chalkboard) by David Sankel
Functional Programming in C++ by David Sankel

C++Now!-2013 (свіжачок, конфа ще йде — сьогодні останній день!):
The Intellectual Ascent to Agda by David Sankel

Перші дві презентації спираються на C++03, так що деякі речі зараз можна виразити значно простіше. У останній презентації наводиться приклад коли дизайн розробляється у агдочці а потім на його базі пишеться код на C++. Якщо не помиляюсь, [livejournal.com profile] zamotivator колись писав про те що дизайнив шаблонні метапрограми у Scheme (чи іншому ліспі) а потім кодував на плюсах.
madf: (Default)
Bartosz Milewski підняв цікаву тему: як функтори, аплікативні функтори і монади допомагають боротися з інверсією управління при використанні асинхронного API (в контексті C++).
Відео: „Вступ і про функтори“, „Аплікативні функтори“, „Монади“.
Слайди: https://www.fpcomplete.com/wp-content/uploads/2012/09/Functional-Patterns.pdf
Read more... )

Піна

Apr. 1st, 2013 08:56 pm
madf: (Default)
Знайшов пекельно круту бібліотечку: http://snawaz.github.com/foam.html
Отак вміє:
auto names =  from (participants)                                      //bind to source
           | filter([](person p) { return p.age >= 13 && p.age <=19 }) //filtering
           | transform([](person p) { return p.name; } );              //transformation

Read more... )
madf: (Default)
Прекрасне відео про нутрощі XMonad:

Продовження: http://www.youtube.com/watch?v=ivdyLaH3PhY&list=PLxj9UAX4Em-IBXkvcC3MycLlcxyoi7v8B&index=4
В основному мова йде про StackSet, структуру даних що керує вікнами і workspace'ами, і про Zipper. Показано принципи зневадження на реальному прикладі. Про Zipper зовсім трохи, поверхнево. Про нього краще почитати у Дона Стюарта (один із співавторів Real World Haskell і XMonad): https://donsbot.wordpress.com/2007/05/17/roll-your-own-window-manager-tracking-focus-with-a-zipper/
Там же є посилання на оригінальну працю Gerard’а Huet’а, який і придумав Zipper.
А у джерельних кодах XMonad можна знайти цитату самого Олега:
--    A Zipper is essentially an `updateable' and yet pure functional           
--    cursor into a data structure. Zipper is also a delimited                  
--    continuation reified as a data structure.                                 
--                                                                              
--    The Zipper lets us replace an item deep in a complex data                 
--    structure, e.g., a tree or a term, without an  mutation.  The             
--    resulting data structure will share as much of its components with        
--    the old structure as possible.                                            
--                                                                              
--      Oleg Kiselyov, 27 Apr 2005, haskell\@, "Zipper as a delimited continuation"
madf: (Default)
Є одна кльова софтинка, яку я давно використовую. Але мене задовбували у ній два дуже неприємних баги: хтозна-чого вона жерла CPU як не в себе, і її вікно іноді ховалось під інші вікна (хоча завжди повинне бути on top).

Спочатку я думав пофіксити швиденько баги (у мене були ідеї щодо high CPU consumption) і відправити патчі автору, але коли я глянув код... Коротше кажучи, простіше було її тупо переписати. Тому я форкнув її (GPL v. 3) і почав корячити. Відучити її жерти проц було нескладно, мої підозри підтвердились (колись давно я таке саме робив для Psi). І здавалось що і ховання під іншими вікнами вдалось виправити. Я „причесав“ код, трохи відрефакторив, зробив єбілд у локальному оверлеї і почав радіти життю.

Але виявилось що бага з хованням під вікнами так і залишилась. При чому я ніяк не міг визначити що саме викликає цю багу: одразу після старту все працює як треба, і тільки з часом вікно починає „ховатись“ — неначе соромиться... Я витратив купу часу намагаючись побороти цей баг, але марно. Тоді у мене закралась підозра що проблема у віконному менеджері — XMonad.
Якщо вам не страшний код на Haskell можете зазирнути під кат )
madf: (Default)
Я вважаю що за використання „wtf“ або „cutestuff“ у джерельних кодах треба вішати на стовпах вздовж дороги. Щоб іншим наука була.
madf: (Default)
Цілий тиждень, починаючи з минулої неділі, я кожного вечора після роботи сідав за комп, логінився через два шелла на віддалений сервер і боровся з багом.
Є у мене один секретний проект який потихеньку починає виходити у люди, і от треба було запустити його на FreeBSD. На лінуксах все працювало нормально і нічого не віщало біди...
hall of shame )
Вся ця історія коштувала мені недосипання, червоних очей зранку і відчуття власного безсилля. Реалізація exceptions у C++ на низькому рівні досі для мене є загадкою.
Все, завтра поїду до друга сніг кидати і варити глінтвейн у казанку.
А з нового тижня займусь проблемою Boost + Clang + C++11.
madf: (Default)
Колупаю сьогодні говнокод на роботі, бачу таке:
// REURNS: a pointer to the frame.
Frame Foo::createFrame()
{
...

Останніми словами лаю розробників — код змінили а коментар забули! Потім випадково у gdb бачу що насправді Foo::createFrame все-таки повертає вказівник! Думаю: „От негідники, замаскували тайпдефом вказівник під звичайним типом, і навіть суфікс Ptr чи префікс P не додали!“. Видумую нову ненормативну лексику, бо всі слова вже витратив. Починаю шукати той тайпдеф. А то і не тайпдеф зовсім:
#define Frame FrameType*

Тут я навіть не зміг нових слів придумати. Хотів просто головою по столу — але колеги не зрозуміли б. Я взагалі сьогодні таке розгрібав, таке — і словами не передати. Борони вас боже з таким зіткнутись.
Говнокод всюди, він мене оточує. Здається, він навіть проник мені у голову!
Не пишіть поганого коду, пишіть хороший код. Другого шансу не буде.

C++, Maybe

Dec. 23rd, 2012 08:46 pm
madf: (Default)
Колись, якщо я не помиляюсь, [livejournal.com profile] ivan_gandhi писав що методи get це зло. На жаль, я того посту знайти не можу. Пам’ятаю тільки що у коментарях хтось як альтернативу запропонував методи with. Я тоді не звернув увагу.
Не знаю, не знаю... )
madf: (Default)
Ще нещодавно звали розробляти „Принципово нову операційну систему“ ©™®. Мобільну.
Linux, C++, Qt, OpenGL, HTML, CSS, JS
Я тут подумав, чи не Jolla вирішила зааутсорсити? А то я б пішов!
madf: (Default)
Сьогодні на роботі винайшов прикольний трюк що дозволяє скоротити запис конструювання об’єктів.
Read more... )
Я ще не певен щодо доцільності такої нотації, але вона реально допомагає скорочувати код, особливо коли тип сидить десь глибоко у просторах імен.
madf: (Default)

Rvalue References і Move Semanics, мабуть, одні із найскладніших найпростіших нововведень стандарту C++11. Про них усі говорять, про них написано багато статей і туторіалів. Я уже принаймі чотири рази все прояснив для себе але кожного разу коли стикаюсь з цими поняттями — виникає відчуття що я нічорта не розумію. Судячи із кількості туторіалів, я такий не один :)

Ух! )

На цьому, нарешті, байку закінчено, дякую за увагу, не хворійте.

Післямова: підозрюю що я ще довго не зможу "на автоматі" правильно використовувати цей підхід.

madf: (Default)
Маєте non-copyable and non-movable class і хочете його засунути в контейнер? Нема джерельних кодів щоб додати copy- або move-семантику? Не хвилюйтесь, рішення є! Засуньте свій клас у unique_ptr! Не дуже ефективно зате ефектно!
Власне, я сьогодні як раз стикнувся із такою ситуацією. Треба було у movable class використати boost::signals2::signal який досі не вміє move і зовсім не copyable. З unique_ptr компілятор успішно згенерував default move constructor і дозволив засунути клас у контейнер.
madf: (Default)

Зацікавитись проблемою partial application у C++ мене заставила оказія на роботі і оця стаття на хабрі: "Частичное применение и каррирование в C++". Ну про статтю говорити багато не буду — візьміть та прочитайте. Скажу тільки що автор використовує новий стандарт лише частково, у рамках підтримки його Microsoft Visual Studio 2010. Не використовує навіть variadic templates. На робочій оказії ж зупинюсь детальніше.


В рамках впровадження на роботі Boost.Signal2 замість дерев’яного велосипеду на паровій тязі я стикнувся з проблемою втикання методів класів у слот. Проблема стара як світ і полягає у наявності неявномого параметра this який треба передати явно. Всі, мабуть, знають що методи класів у плюсах це, насправді, звичайнісінькі функції яким неявно першим параметром передається вказівник на об’єкт якому вони належать. Невільні функції, страждають на панщині, що тут поробиш. Якщо мислити на рівні старого-доброго C чи мови ассемблера (від якої він не далеко відкотився) — все в порядку. Втикаємо вказівник на об’єкт (чи, пардон, на структуру) у перший параметр (чи кладемо його у стек, чи записуємо у регістр) і ніяких проблем. Та у плюсах все не так. Не проста у нас функція.


Картинок не буде )
madf: (Default)

А я підбивав колегу з’їздити на Kiev::fprog, та так і не зібрались.
madf: (Default)
read виявився вельми небезпечним. На ньому "лажає" строга типізація.
Prelude> (read "1.0") :: Double
1.0
Prelude> (read "1.0") :: Maybe Double
*** Exception: Prelude.read: no parse

Логічно, в принципі. Але фіг відловиш таку помилку. А через таку дрібничку більше доби не працював сервіс :(

PS: Зате зробив нормальне журналювання.
madf: (Default)
Хто читав Алєксандреску той знає, а хто не читав - картинко під катом:
Read more... )
У наступному пості напишу про те, нафіга все це потрібно. Яке воно має практичне застосування. Окрім fun, звісно :)

Boost.MPL

Jul. 30th, 2012 09:46 pm
madf: (Default)
У середу відкрив ля себе Boost.MPL. Четвер, п’ятниця і обидва вихідних тупо випали і спробувати її не було нагоди. Зате читав багато документації і уявляв як усе буде круто і як наступить щастя на планеті.
Реальність виявилась не такою чарівною. Variadic Templates у Boost.MPL досі не підтримуються. А значить щоб зробити apply вектора типів треба його рекурсивно розгортати. Тим часом мій Sort працює з Variadic Templates і apply'їться без проблем.
Постав перед вибором: красиво і стандартно чи коротко і зрозуміло.
В принципі, мені-то тільки boost::mpl::sort і потрібен, а значить можна обійтись своїми "велосипедами".
PS:
typedef boost::mpl::vector<B, D1, D2, DD>::type types;                    
                                                                                
typedef boost::mpl::sort<types, boost::mpl::not_<std::is_base_of<boost::mpl::_1, boost::mpl::_2>>>::type sortedTypes;
                                                                                
typename apply<HContainer, sortedTypes>::type data;

apply стібрив звідси: https://github.com/scientific-coder/Computer-Languages/blob/master/interpreting/apply.hxx
Бо мене трошки запарило розгортати ці рекурсивні типи даних.

Одним словом: розчарування.
madf: (Default)
Отзывы о книге "David Abrahams, Aleksey Gurtovoy - C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond"

Книга производит приятное впечатление и оставляет, после прочтения, позитивные воспоминания.

Автору замечательно удалась историческая часть книги - описание морей, кораблей и жизни моряков начала 18 века. Понравились и действующие герои данной книги.

Часть "современная", на мой взгляд, неплохая, но эту книгу приобретаешь, в первую очередь, ради ощущения солоноватого привкуса океана и порывов теплого карибского ветра - эти ощущения данному роману передать удается.

Один из лучших образцов романов для женщин, смешная (но не глупая), добрая, позитивная книга! Побольше бы таких. Автор с юмором описывает жизненные ситуации, истории и проблемы с детьми, мужем, внуками, свекровью. Пересказывать сюжетные линии не буду. Если хотите приятно провести время - рекомендую!

Это первый том, так что действие тут только начинается. Главный же недостаток издания (но не текста) в том, что это нигде не указано, что есть продолжение. Оттого и кажется, что космодесантники выпили, закусили, немного поприключались - и всё, конец на самом интересном месте. Окончательную оценку ставить рано.

Редко пишу отзывы, но эта книга достойна того, чтобо ее поставить в ряд значимых. Так вот, коротко, 5 причин прочитать ее:

1. судьбы, истории, реальные события и лица - я правда узнала многое об Афганистане с другой стороны.
2. книга очень отличается от современного "чтива"
3. но очень легко читается,
4. книга о мире и войне, дружбе, настоящей любви и обмане, о преступлении и истинном раскаянии, о жизни....
5. ...которая не оставит тебя равнодушным.


Знайшов на одному сайті.
madf: (Default)
Або сортування типів.
Read more... )
А от нафіга все це мені потрібно - розкажу пізніше.

Profile

madf: (Default)
madf

April 2018

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

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 26th, 2025 09:43 am
Powered by Dreamwidth Studios