Архив за 20 февраля 2017 - 9

Union Type, TPT, DDD, ORM и RDBMS - 1
Объединения и pattern-matching широко используются в функциональном программировании для повышения надежности и выразительности программ.

Классический пример удачного использования объединений для моделирования бизнес-процессов – корзина и состояние заказа. Пользователь в праве добавлять и убирать товары, пока не оплатил заказ. Но сама операция модификации оплаченного заказа лишена смысла. Также лишена смысла операция Remove для пустой корзины. Тогда логично вместо общего класса Cart определить интерфейс ICartState и объявить по одной реализации для каждого состояния. Более подробно данный подход изложен текстом здесь и в видео-формате вот тут.

Недавно у нас возникла задача спроектировать структуру БД для специализированной CRM/ERP. Первый подход к моделированию договоров оказался не удачным, из-за того что сторонами договоров могут выступать как физические и так и юридические лица из России и других стран мира. ИНН необходим продавцу, чтобы получить оплату, но не всегда нужен полкупателю (для идентификации личности чаще используются паспортные данные). Формат реквизитов отечественных и зарубежных юр.лиц не совпадает. Не помогало делу и то, что ИП являются физическими лицами, но «прикидываются» юридическими.

На ретроспективе мы разобрали ошибки первоначального дизайна и наметили направление рефакторинга. Всех, заинтересовавшихся нашей историей, прошу под кат.
Читать полностью »

В прошлом году компания SpaceX заявила о намерении отправить к Марсу космический корабль Dragon 2 уже в 2018 году. Речь шла вовсе не о пилотируемой миссии, но планы всё равно казались очень смелыми.

В ноябре прошлого года стало известно, что Samsung покупает компанию Harman за 8 млрд долларов. Однако не всем эта сделка пришлась по душе. Дошло до того, что некоторые акционеры Harman подали в суд на компанию, считая, что 8 млрд долларов — недостаточно большая сумма.

Читать полностью »

routine tasks automation

Введение

Машины всегда будут быстрее, независимо от того насколько мы продуктивны и как быстро мы набираем команды. Суровая правда жизни. С другой стороны, если мы выполняем одно и тоже действие множество раз, то почему бы не заставить машины страдать. Написать скрипт на bash (ваш любимый язык программирования) и каждый раз вызывать этот скрипт, а не набирать монотонные команды, которые забирают так много времени, сил и энергии. А мы, пока скрипт будет выполнять свою работу, можем помечтать о том, как космические корабли бороздят просторы нашей Вселенной.

В прошлой статье мы рассмотрели основы программирования на bash. Сегодня мы будем применять полученные знания на практике.
Читать полностью »

Шутка NASA о том, что на Юпитере «не бывает Дня сурка» оказалась неудачной. Зонд «Юнона», который должен был провести на промежуточной 53-дневной орбите только два витка, застрял на ней окончательно — на днях в NASA приняли решение не принимать попыток перейти на научную 14-суточную орбиту. Официальный пресс-релиз написан настолько оптимистично, что миссия на 53-дневой орбите выглядит чуть ли не лучше изначально запланированной. Самое время поговорить о том, что произошло, какие варианты действий были у команды управления миссией, и чем заняться нам, простым зрителям.

«Юнона» останется на промежуточной орбите Юпитера - 1
Южное полушарие Юпитера, фото NASA, обработка C.Harvey
Читать полностью »

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

Однако, когда кресло президента США занял Дональд Трамп, несмотря на положение и финансовые возможности, он продолжил использовать свой старенький смартфон Samsung Galaxy S3.

Энное время назад в одной XMPP-комнате, посвященной C++, один посетитель спросил, нет ли какого способа в современных плюсах без лишнего кода передать указатель на функцию-член класса в качестве коллбека в C API. Ну, что-то вроде

// C API
void doWithCallback (void (*fn) (int, void*), void *userdata);

// C++ code
struct Foo
{
    void doFoo (int param);
};

int main ()
{
    Foo foo;
    doWithCallback (MAGIC (/* &Foo::doFoo */), &foo);
}

Понятно, что в качестве MAGIC можно использовать свободную функцию, статическую функцию-член или вообще лямбду (2017-й год на дворе, всё-таки), но писать соответствующую конструкцию каждый раз для каждой функции руками несколько лениво, а препроцессор, как мы все, конечно, знаем — моветон.

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

Читать полностью »

Многозадачность. Как справиться с призраками посторонних дел - 1 Автор иллюстрации: John Kenn

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

О многозадачности, а точнее о том как с ней справиться, в статье и пойдет речь.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js