суббота, 17 мая 2014 г.

[prog.c++] Работа над SObjectizer идет...

Месяц назад я сказал, что собираюсь работать над SObjectizer. Но прошел уже целый месяц, а видимых следов этой работы не было. Просто в качестве подтверждения "мужик сказал -- мужик сделал" приятно сообщить, что все-таки я не бил баклуши. Не смотря на некоторые сложности, удалось вернутся к вопросу производительности SO5. Идея, которую я описывал около полугода назад мне не понравилась, начал искать что-то другое. И это другое было зафиксировано сегодня в виде первого прототипа. Пока еще очень абстрактного и не привязанного к конкретной версии SObjectizer, но лиха беда начало :)

пятница, 16 мая 2014 г.

[life.writing] Это только я плохо воспринимаю подобным образом составленные фразы?

Вот есть фраза:

Можно выделить четыре основных, используемых организациями при выборе принципов группирования должностных позиций и организационных единиц критерия...

Лично до меня ее смысл дошел не сразу. Пришлось перечитывать еще пару раз. Когда же смысл до меня дошел, то я подумал, что ее можно было бы очень просто переформулировать так, чтобы смысл был понятен сразу. На мой взгляд, достаточно переставить слово "критерия":

Можно выделить четыре основных критерия, используемых организациями при выборе принципов группирования должностных позиций и организационных единиц...

Т.е. в начале предложения мы сразу указываем читателю, что речь идет о критериях. А затем уже уточняем, для чего эти критерии используются. И при таком расположении слов читатель меньше отвлекается на "выборе принципов", "должностных позиций" и "организационных единиц". У меня были проблемы именно с этими словосочетаниями: каждое из них обозначает значимую сущность и по ходу чтения не понятно, к чему именно эти сущности "пристегиваются". Лишь в самом конце фразы становится понятно, что к критериям.

Кстати говоря, полностью предложение, из которого я выделил этот пример, было более объемным. Это было предложение на целый абзац и целиком оно воспринималось еще хуже:

Можно выделить четыре основных, используемых организациями при выборе принципов группирования должностных позиций и организационных единиц критерия: зависимости, связанные с рабочим потоком, рабочим процессом, масштабом деятельности и социальными отношениями относительно труда.

Как по мне, так без бутылки и не разберешься. Я бы написал так:

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

PS. ИМХО, между тем, чтобы просто сделать что-то и тем, чтобы сделать что-то хорошо, разница очень небольшая, различия зачастую обнаруживаются в каких-то совсем мелких деталях. Но разница эта, в реальности, очень существенная :(

[prog.c++] Поосторожнее нужно с auto из C++11 :)

В C++11 появилась классная штука -- возможность автоматического вывода типа переменной при ее декларации, для чего используется ключевое слово auto вместо указания типа переменной. О полезности auto и о степени читаемости кода, в котором auto активно используется, можно спорить. Но в ряде случаев, например, когда речь идет об итераторах или о лямбда-функциях, этот механизм однозначно полезен.

Однако, как с любым полезным механизмом, с auto нужно научиться правильно обращаться и запомнить некоторые граблимоменты, которые могут привести к неожиданным открытиям. Как у меня вчера :)

В упрощенном варианте суть можно представить вот таким примером (места, на которые нужно обратить внимание, выделены):

#include <iostream>
#include <string>

class demo_t
   {
   public :
      demo_t()
         :  m_content( "Demo" )
         {}

      void
      modify()
         {
            auto s = writeable_content();
            s += " Hello, world!";
         }

      const std::string &
      content() const { return m_content; }

   private :
      std::string m_content;

      std::string &
      writeable_content() { return m_content; }
   };

int
main()
   {
      demo_t d;
      d.modify();

      std::cout << "Result: " << d.content() << std::endl;
   }

Как вы думаете, после модификации переменной s в методе demo_t::modify(), какое значение окажется в demo_t::m_content, если метод writeable_content() возвращает ссылку на m_content?

Так вот, правильный ответ: значение demo_t::m_content не изменится. Т.к. в методе modify() будет происходить изменение не m_content, а локальной переменной типа std::string.

Для того, чтобы s имел тип std::string& нужно декларировать s вот так: auto & s = writeable_content().

среда, 14 мая 2014 г.

[prog.c++] Бартош Милевский об иммутабельных структурах данных в C++

Собираю информацию о реализации иммутабельных структур данных в C++. Нашел серию заметок в блоге Бартоша Милевского:

Functional Data Structures in C++: Lists

Functional Data Structures in C++: Trees

Functional Data Structures in C++: Leftist Heaps

А так же одна обзорная статья: Functional Data Structures and Concurrency in C++

PS. Просмотрел все это крайне поверхностно, так что о качестве судить не могу. Но, в качестве отправной точки выглядит привлекательно.

PPS. Буду признателен читателям за аналогичные ссылки на другие идеи или готовые реализации иммутабельных структур данных для C++.

понедельник, 12 мая 2014 г.

[prog] Поверхностные впечатления от Internet of Things и Machine-2-Machine

В связи с образовавшимся наличием свободного времени и дабы немного развеяться решил оглядеться по сторонам и посмотреть, что же происходит в других областях. Случайно внимание привлекла такая штука, как Internet of Things. Немного покопался в этой теме и дошел до другой штуки, на мой взгляд, более приземленной и реальной: Machine-2-Machine. Какое-то поверхностное, наверняка не объективное, впечатление сложилось. Интересно будет затем проверить, насколько права оказалась моя интуиция.

Internet of Things

На мой взгляд, Internet of Things на данный момент -- это миф. Это что-то вроде российских нанотехнологий, хорошая площадка для распила средств и проедания грантов. Или чего-то похожего на cloud computing шести или семилетней давности: много разговоров, много обещаний, но к чему все это придет так никто и не знал, и что затем трансформировалось в более-менее осязаемые понятия SaaS, PaaS и IaaS.

Internet of Things -- это мечта соединять все со всем. Ну, типа, у нас же есть Интернет, в котором есть куча сайтов и сервисов, на которые можно заходить с разных компьютеров (смартфонов, планшетов). И все это классно и здорово, и работает. А раз есть Интернет, в котором пользователь может найти или организовать для себя то, что ему нужно, то почему бы на место пользователя не поставить какое-то устройство. Да тот же смартфон, например. Или умный счетчик воды в квартире. Или умный холодильник. Или умную коробку с таблетками, которая напоминает о необходимости очередного приема лекарств и извещает о том, что таблетки заканчиваются. Или умную стиральную машину, которая сама выбирает программу стирки, когда в нее помещают "умную" одежду (это всего лишь одежда, на которой есть специальные маркеры, вроде RFID чипа). Или...

воскресенье, 11 мая 2014 г.

[life.photo] Выставка собак в Гомеле: питомцы и владельцы

Буквально пару дней назад случайно узнал, что в Гомеле будет проходить выставка собак (точнее, в рамках одной выставки, вроде бы проходило сразу несколько, но я не собаковод, так что мне было все равно). Т.к. к собакам я неравнодушен, да к тому же, чем больше узнаю людей, тем больше... В общем, решил сходить, посмотреть, в очередной раз поупражняться в фотографии.