понедельник, 12 сентября 2016 г.

[prog.flame] Теплая ламповая сишечка, говорили они...

Довелось заглянуть в исходники одной сишной библиотеки. Что за библиотека и зачем я туда полез -- дело десятое, к теме сегодняшнего разговора отношения не имеющее. А вот то, какой код обнаруживается в нее в потрохах, заслуживает пристального внимания. Ибо код этот является отличным образчиком тщательно написанного обычного кода на C. Подчеркну -- обычного кода. Написанного обычными разработчиками, а не гуру калибра Линуса Торвальдса. Посему выглядит обычный код на C вот так:

int 
ub_ctx_add_ta(struct ub_ctx* ctx, const char* ta)
{
   char* dup = strdup(ta);
   if(!dup) return UB_NOMEM;
   lock_basic_lock(&ctx->cfglock);
   if(ctx->finalized) {
      lock_basic_unlock(&ctx->cfglock);
      free(dup);
      return UB_AFTERFINAL;
   }
   if(!cfg_strlist_insert(&ctx->env->cfg->trust_anchor_list, dup)) {
      lock_basic_unlock(&ctx->cfglock);
      free(dup);
      return UB_NOMEM;
   }
   lock_basic_unlock(&ctx->cfglock);
   return UB_NOERROR;
}

Классно, не правда ли? Прилежанию автора можно только позавидовать.

А потом настучать по рукам. За то, что не использует хотя бы идиому goto cleanup. Если уж перейти на C++ ума не хватило.

Если вам кажется, что это что-то из ряда вон, то это вы еще не видели следующей функции, которая в коде идет прямо вслед за только что показанной:

воскресенье, 11 сентября 2016 г.

[life.photo] Впечатления от Fujifilm x30 после года работы с ним

Прошло чуть больше года с того момента, как я стал владельцем замечательной маленькой камеры Fujifilm x30. Можно в очередной раз подвести некоторые итоги. По большому счету практически все, что я описывал в конце 2016-го года, осталось актуальным. Так что за основной порцией информации отсылаю читателей к предыдущему отчету. Здесь же опишу некоторые изменения, которые произошли за прошедшее время + добавлю несколько сделанных на x30 кадров, которые нравятся лично мне.