Просто. Ссылка. Гибкая методология разработки

https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%B1%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8

"Примечательно, чтоAgile Manifesto не содержит практических советов."

:-)

https://plus.google.com/u/0/113567376800896602748/posts/8pG2gJNkG7F

"Один из повторяющихся пунктов критики: при agile-подходе часто пренебрегают созданием плана («дорожной карты») развития продукта, равно как и управлением требованиями, в процессе которого и формируется такая «карта». Гибкий подход к управлению требованиями не подразумевает далеко идущих планов (по сути, управления требованиями просто не существует в данной методологии), а подразумевает возможность заказчика вдруг и неожиданно в конце каждой итерации выставлять новые требования, часто противоречащие архитектуре уже созданного и поставляемого продукта. Такое иногда приводит к катастрофическим «авралам» с массовым рефакторингом и переделками практически на каждой очередной итерации.
Кроме того, считается, что работа в agile мотивирует разработчиков решать все поступившие задачи простейшим и быстрейшим возможным способом, при этом зачастую не обращая внимания на правильность кода с точки зрения требований нижележащей платформы (подход — «работает, и ладно», при этом не учитывается, что может перестать работать при малейшем изменении или же дать тяжёлые к воспроизводству дефекты после реального развёртывания у клиента). Это приводит к снижению качества продукта и накоплению дефектов."

четверг, 19 февраля 2015 г.

Черновик. Вариации на тему TDD

https://bitbucket.org/ingword/mindstream/src/8991728832609ee5d7003fde81e04c74d16e8825/Drafts/LineCross.txt?at=B158_lulin

Задача:
 Сделать чтобы объект на который указывает Connector, "привязался" не к центру фигуры, а к границе
  https://bitbucket.org/ingword/mindstream/issue/158/connector

Список литературы:
 Скалярное произведение
  https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5
 Векторное произведение
  https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5
 Координаты точки пересечения двух прямых - примеры нахождения.
  http://www.cleverstudents.ru/line_and_plane/intersection_point_of_straight_lines.html
 Коллинеарность векторов, условия коллинеарности векторов.
  http://ru.onlinemschool.com/math/library/vector/colinearity/
 Структуры геометрических данных, основные операции
  http://algolist.manual.ru/maths/geom/datastruct.php
   int Edge::cross(Edge &e, double &t)
 Пересечение: Прямая(отрезок) и прямая (отрезок)
  http://algolist.manual.ru/maths/geom/intersect/lineline2d.php

Будем действовать в духе:
 Пишем простой интерпретатор на C++ с помощью TDD
  http://programmingmindstream.blogspot.ru/2014/08/c-tdd.html

Алгоритмы от Мишы Костицына:

Ищем точку пересечения прямых:

procedure FindCross(X1, Y1, X2, Y2, Xa, Ya, Xb, Yb: Extended; var aX, aY: Extended);
begin
 aY := ((X2 - X1) * (Yb - Ya) * Y1 - (Xb - Xa) * (Y2 - Y1) * Ya + (Xa - X1) * (Y2 - Y1) * (Yb - Ya)) /
      ((X2 - X1) * (Yb - Ya) - (Xb - Xa) * (Y2 - Y1));
 aX := (X2 - X1) * (Y - Y1) / (Y2 - Y1) + X1;
end;

Проверяем, пересекаются ли отрезки:

function LinesCross(X1, Y1, X2, Y2, Xa, Ya, Xb, Yb: Extended; var aX, aY: Extended): Boolean;

 function Btwn(Value, One, Two: Extended): Boolean;
 begin
  Result := (Value >= Min(One, Two)) and (Value <= Max(One, Two));
 end;

begin
 FindCross(X1, Y1, X2, Y2, Xa, Ya, Xb, Yb, aX, aY);
 Result := Btwn(aX, X1, X2) and
           Btwn(aX, Xa, Xb) and
           Btwn(aY, Y1, Y2) and
           Btwn(aY, Ya, Yb);
end;

Осталось перебрать стороны прямоугольника и аккуратно проверить граничные значения, чтобы исключить деление на ноль.

--------

Поправка:

18.02.2015 14:38, Alex W. Lulin пишет:
> procedure FindCross(X1, Y1, X2, Y2, Xa, Ya, Xb, Yb: Extended; var aX, aY: Extended);
> begin
>  aY := ((X2 - X1) * (Yb - Ya) * Y1 - (Xb - Xa) * (Y2 - Y1) * Ya + (Xa - X1) * (Y2 - Y1) * (Yb - Ya)) /
>       ((X2 - X1) * (Yb - Ya) - (Xb - Xa) * (Y2 - Y1));
>  aX := (X2 - X1) * (Y - Y1) / (Y2 - Y1) + X1;
> end;
aX := (X2 - X1) * (Y - Y1) / (Y2 - Y1) + X1;

заменить на

aX := (X2 - X1) * (aY - Y1) / (Y2 - Y1) + X1;

--------

Коммиты:
 - пишем вводную, раз уж задача оказалась сложной.
  https://bitbucket.org/ingword/mindstream/commits/3be48b26139c972ddf3f7761763a77333de66f50
 - добавляем тест TmsLineCrossTest.
  https://bitbucket.org/ingword/mindstream/commits/e396a5980bf62e7a8794c2d21db25873d0873c47
 - упавшие тесты для недоделанной функциональности - меня лично НЕРВИРУЮТ, поэтому я предпочитаю писать в лог 'failed'. Хотя это конечно "не в духе классического TDD".
  https://bitbucket.org/ingword/mindstream/commits/d7c4e0089d840d9d2af67d5b2e489043f537072a
 - определяем структуру данных с которой мы будем работать.
  https://bitbucket.org/ingword/mindstream/commits/40fcaf126d8dd8e7a627c4cf442c212e4a35bd39
 - делаем заготовку вывода линии в лог.
  https://bitbucket.org/ingword/mindstream/commits/e1415e763e20de27e080960c62c26c2a3e4b8298
 - добавляем вспомогательную структуру данных TmsPointF.
  https://bitbucket.org/ingword/mindstream/commits/7491b441ddda404155325f223ec5dda36434c003
 - добавляем метод TmsPointF.ToLog.
  https://bitbucket.org/ingword/mindstream/commits/ca9963413efac6be5d33a71d248a357b670e6bbc
 - сортируем результаты тестов по папкам.
  https://bitbucket.org/ingword/mindstream/commits/fd73855a0395fe229eac12e6236e3b6ab66b2ac5
 - добавляем метод TmsPointF.N.
  https://bitbucket.org/ingword/mindstream/commits/0601a8ccd21b9b8400894f16d2c6237a8c96827f
 - параметризуем имя теста.
  https://bitbucket.org/ingword/mindstream/commits/7a40847b7f5d1cfeb7bb54c7d3de5fb74ff3136c
 - добавляем метод TmsLineF.Cross.
  https://bitbucket.org/ingword/mindstream/commits/e783606f38d8e22bd3aa008c828aa6ac9ca79a7a
 - используем TmsLineF.Cross.
  https://bitbucket.org/ingword/mindstream/commits/66541b8c42dec45ec081def7fc028190d4b3c6f3
 - добавляем класс TmsLineCrossTestSuite.
  https://bitbucket.org/ingword/mindstream/commits/0fe04024c35118ba39ff7b4996238a6b1610a487
 - используем TmsLineCrossTestSuite.
  https://bitbucket.org/ingword/mindstream/commits/0c37f6219b555a615d17fd4e7e8ffa739ef015d2
 - добавляем структуру TmsLineFPair.
  https://bitbucket.org/ingword/mindstream/commits/62de8f85c47b40f30b65e045ff4107a876287b85
 - добавляем структуру TmsLineFPairs.
  https://bitbucket.org/ingword/mindstream/commits/5c805d11c30568f8fd6c4820c820ae70accf56fc
 - используем TmsLineFPairs.
  https://bitbucket.org/ingword/mindstream/commits/2e2d8d92ce5340b4423f09cce840281b2a730e57
 - добавляем конструкторы классу TmsLineF.
  https://bitbucket.org/ingword/mindstream/commits/032c9ef6c0c4fd63e8f22a721ed4d5b39b16db8b
 - используем TmsLineFPair.
  https://bitbucket.org/ingword/mindstream/commits/743150bf75865f09c512bd740bbb6a52b0ec710d
 - расширяем класс TmsLineFPair.
  https://bitbucket.org/ingword/mindstream/commits/5f4d3a754da09a7af37e9de4d3ee1524fbf082ba
 - параметризуем TmsLineCrossTest.
  https://bitbucket.org/ingword/mindstream/commits/e22652caa8da8da452fd766343633f3d08dc1011
 - расширяем набор тестов.
  https://bitbucket.org/ingword/mindstream/commits/44f632dd83d9033953b6028996974e76a2eb39fd
 - добавляем методы TmsLineF.dX, TmsLineF.dY, TmsLineF.Length.
  https://bitbucket.org/ingword/mindstream/commits/77f01ae7d9ce223a765b0374baa3d046d5a2171e
 - используем метод TmsLineF.Length.
  https://bitbucket.org/ingword/mindstream/commits/7345401615c304973a9f06e3c81dc355c3538fe6
 - дифференцируем тот случай когда и вторая линия имеет нулевую длину.
  https://bitbucket.org/ingword/mindstream/commits/36211d3324863fe5647560c6dad6e39bd32e20be
 - отсекаем тот случай, когда вторая линия имеет нулевую длину, а первая - ненулевую.
  https://bitbucket.org/ingword/mindstream/commits/3c00c60030a3ba2c8c8fd070f81ef539d62cca41
 - добавляем рандомные тесты.
  https://bitbucket.org/ingword/mindstream/commits/c27bbda41ca7803a891d71dd5e99c5b3ceef573c
 - добавляем ещё один граничный случай.
  https://bitbucket.org/ingword/mindstream/commits/56c534339f0c8dcd025d9312e1fa3881bfaef162
 - добавляе ещё один вариант перепендикулярности.
  https://bitbucket.org/ingword/mindstream/commits/388e8742abc2153a5324ff35aaaee25eace7c2b4
 - расширяем тестовый набор.
  https://bitbucket.org/ingword/mindstream/commits/49cc737be83b044934e3bb2aa1e98609f088f87c?at=B158_lulin
 - вводим понятие скалярного произведения.
  https://bitbucket.org/ingword/mindstream/commits/6dfb9db45fa76b46fe56dd1cc5ad3bd446116253?at=B158_lulin
 - добавляем функцию определения косинуса угла между векторами.
  https://bitbucket.org/ingword/mindstream/commits/c40af8783866017619813986ae96d70022f8d9aa
 - проверяем параллельность прямых.
  https://bitbucket.org/ingword/mindstream/commits/71d6f36b91a8dbdf9f799a3bacbb0d61c195757f
 - добавляем тесты параллельности.
  https://bitbucket.org/ingword/mindstream/commits/2297de81f97ee774eeda7875c96972407a84a607
 - пишем комментарии.
  https://bitbucket.org/ingword/mindstream/commits/1e200b5df639744ceed58e15fddb58546cdffe97
 - СНАЧАЛА проверяем параллельность прямых.
  https://bitbucket.org/ingword/mindstream/commits/350f4a2c7523ea77e536629dc23144089a66bcfb
 - Далее тесты прямой параллельной X и диагональной.
  https://bitbucket.org/ingword/mindstream/commits/f3c585e68d01261ed96b9df3cfcceac595be0c2c
 - Далее тесты прямой параллельной Y и диагональной.
  https://bitbucket.org/ingword/mindstream/commits/49790ac333f57308a69f92adc6076e5b27c51938
 - выделяем процедуру DoCross.
  https://bitbucket.org/ingword/mindstream/commits/1f44125d9cdb313d93acb493589163a106f007c0
 - вытаскиваем процедуру DoCross в правильное место.
  https://bitbucket.org/ingword/mindstream/commits/6e3f995e9b8df763368f89cdcfcfbd40174b19a4
 - упрощам код.
  https://bitbucket.org/ingword/mindstream/commits/76680457ac57f6cdd8d22398cc4dbbb0088fefb8
 - вставляем проверку на граничный случай.
  https://bitbucket.org/ingword/mindstream/commits/391d31676bfb5a641b0c7124651f703454eaee8f
 - при граничном случай меняем линии местами.
  https://bitbucket.org/ingword/mindstream/commits/a2a8afa66752665eea22a56d67d262b94d7c2370
 - добавляем ещё тест на тот же граничный случай.
  https://bitbucket.org/ingword/mindstream/commits/170a47e4a0808193191f02d557d4c64262bcc00b
 - добавляем ещё тест прямой параллельной Y и диагональной.
  https://bitbucket.org/ingword/mindstream/commits/2dcdcb8a61c793ec1d8fdcb9b57f35ebc0ce5fb0
 - возвращаем результат, про который забыли.
  https://bitbucket.org/ingword/mindstream/commits/45a3e7f6fea771098d05f9fe426e30996562855b
 - упрощаем код.
  https://bitbucket.org/ingword/mindstream/commits/5310dad62e65480851cd6dda9adb41dd538f95d7
 - упрощаем код.
  https://bitbucket.org/ingword/mindstream/commits/e25b3e0ca989a97e2a26cd1bd69d175e12501c38
 - упрощаем код.
  https://bitbucket.org/ingword/mindstream/commits/cf8155d5664d1150e73762a8ff27e59a526e9286
 - выделяем заготовочку для обобщения.
  https://bitbucket.org/ingword/mindstream/commits/9f40ab6e5c902407cb4663d582ffe1b80e588ad6

Паттерн - контекст, и в целом

Паттерны - очередное англоязычное слово.

В среде программистов наиболее часто используемое.

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

Паттерн - это просто какая-то абстрактная фишка(технология, знание, умение),  что угодно что позволяет вам делать вашу “работу” - эффективней.

Паттерн - контекст, не зря выбран для названия заметки.

Прятать детали внутрь “записи”(record в Pascal) для меня знакомая “фишка” лет 15. Я не всегда её применяю, но знаком я с ней лет 15.

Я не когда не считал, владение умением, прятать детали внутрь записи, каким-то супер прогрессом. Однако, точно помню что после одной из статей, я стал это применять намного чаще.

В общем. Подытожу.

Паттерн, есть - абсолютно абстрактная форма, умения. В каком виде это будет выражено, в коде, или в вашем профессионализме в общении с клиентом. По сути не важно(может, я тут и ошибаюсь).

В программировании, нас не интересуют общения с клиентами, нас интересует - “хорошо пахнущий код”.

Немного комита из жизни контекста:
https://bitbucket.org/ingword/mindstream/commits/ea270b1fea0c76821db3119ed447ddfa1226b64f

constructor TmsConnector.CreateInner(const aCtx: TmsMakeShapeContext);
begin
 inherited;
+ if (aCtx.rShapesController <> nil) then
+  f_LeftShape := aCtx.rShapesController.ShapeByPt(aCtx.rStartPoint);
end;

четверг, 12 февраля 2015 г.

MindStream. Затравочка. Паттерны проектирования использованные при разработке нашего приложения

Собственно про сам проект:

http://programmingmindstream.blogspot.ru/2014/11/mindstream.html
https://bitbucket.org/ingword/mindstream/overview

Теперь - "вводная":

Пришла мне тут в голову мысль - почему бы не привести "каталог примеров паттернов" которые уже были использованы при разработке нашего приложения.

Примеры от GoF или "синтетические примеры" это конечно хорошо, но "реальные" примеры - по-моему - лучше.

Тем более, что они - есть у нас.

Посему - я начинаю новый цикл статей - "Паттерны проектирования использованные при разработке нашего приложения".

Он не претендует на академичность, а призван показать - "как я это вижу".

Итак.

Паттерны будем брать отсюда:

Шаблон проектирования
Software design pattern

Мы будем брать оттуда по одному паттерну и будем находить примеры их использования в нашем приложении.

Посмотрим - сколько паттернов удастся описать.

Пока я нашёл вот что:

Паттерны проектирования использованные при разработке нашего приложения:

0. Введение в архитектуру приложения. Тут мы введём понятия и определения и основные концепции (http://habrahabr.ru/post/232955/).

1. Proxy (?).
2. Publisher/Subscriber (https://bitbucket.org/ingword/mindstream/commits/5d11d8d3b3047a8200e02ca2d562679f425b5afd).
3. Фабрика (https://bitbucket.org/ingword/mindstream/commits/5b23f798f23fe400f66e157c2182e4624fc51e98?at=B57).
4. Декоратор (https://bitbucket.org/ingword/mindstream/commits/e07225dd7a50df2dc4a078717bdea398b0d75a0d).
5. Синглетон (https://bitbucket.org/ingword/mindstream/commits/834de9280c082dd7803d9812854eb2daea96079b).
6. Inversion of control (Service Locator?) (https://bitbucket.org/ingword/mindstream/commits/991e1393409e661f7b01d90bd233c107fbe76c3e?at=B57).
7. Builder (?).
8. Command (?).
9. Iterator (?) (https://bitbucket.org/ingword/mindstream/commits/27eb90646d7c6896442d68b703efbc63c81a1fdb).
10. Immutable interface.
11. Lazy initialization.
12. Null object.
13. State (Контекст) (https://bitbucket.org/ingword/mindstream/commits/1a20a3b6d9108c1c96393598d9a1f77628de90de?at=B57) (http://programmingmindstream.blogspot.ru/2015/02/blog-post_41.html) (http://programmingmindstream.blogspot.ru/2015/02/blog-post_42.html).
14. Composite (Компоновщик) (https://bitbucket.org/ingword/mindstream/commits/13781dd096dccb5ee7befba462a789f748b61fbf).
15. MVC. У нас ВСЁ приложение это - MVC. Ну или "по мотивам" MVC. (https://ru.wikipedia.org/wiki/Model-View-Controller).
16. Strategy (Стратегия).

В этом списке есть ссылки на коммиты - классы, которые являются претендентами на описание того или иного шаблона проектирования.

Список - не полный. Он будет пополняться. По мере работы над статьями.

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

Те паттерны у которых стоят знак вопроса (?) - мне кажется реализованы в "отходе от классики". Посему просьба - относиться снисходительно и "не бить ногами".

Если в результате этой деятельности получится что-то стоящее, то я планирую переместить информацию сюда - https://bitbucket.org/ingword/mindstream/wiki/Home (https://bitbucket.org/ingword/mindstream/wiki/%D0%9F%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B8%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5%20%D0%BD%D0%B0%D1%88%D0%B5%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F)

В виде уже wiki-справочника.

И создать там описание архитектуры приложения и проектную документацию. В том виде в котором по-моему мнению она должна быть.

Первый паттерн, который я хочу описать это - Декоратор.

"Следите за обновлениями".

Коротко. Коммиты. Параллельный перенос линии. Размышления

Пока только коммиты:

https://bitbucket.org/ingword/mindstream/commits/a216fb52dd6d9fc7d5d2cec8e3ab66e27de1a3b0
https://bitbucket.org/ingword/mindstream/commits/e9c7ea1e5103e09117b3642be010c6e8cd694e2e
https://bitbucket.org/ingword/mindstream/commits/1514c4ef88690088badc7fea2607c2a079d47be3
https://bitbucket.org/ingword/mindstream/commits/2f3b388da5f30bec49dbafccaf914702749cbff8
https://bitbucket.org/ingword/mindstream/commits/4993c789a68f436c5fd425802a3f6468328cd607
https://bitbucket.org/ingword/mindstream/commits/f823b519ceed0af5887fdc6ae1e1ad207eb0ae45
https://bitbucket.org/ingword/mindstream/commits/ecb4ad46986c770762f8d4b0d35a96a7412393e3
https://bitbucket.org/ingword/mindstream/commits/4e39e35a45e2973b33fdaad076e7ea9e8e9c9e82
https://bitbucket.org/ingword/mindstream/commits/8637c0e47e07563dc1c14969be778ebc7ff0e4fd
https://bitbucket.org/ingword/mindstream/commits/e3c29fcc74ad0efcc6cd492ff4d80eddba6acde3
https://bitbucket.org/ingword/mindstream/commits/0d77051f80a69c238f8644d28ba9cf1dd15f7447
https://bitbucket.org/ingword/mindstream/commits/be598d8141e65c1c3a66664cab7293bb4dbd8b35
https://bitbucket.org/ingword/mindstream/commits/8b4d77403c1ad7be2250fbd22429d9e367962f56
https://bitbucket.org/ingword/mindstream/commits/b9cf895f4761166ffe596de3c054bfdcb4232983
https://bitbucket.org/ingword/mindstream/commits/1d3dafc35225aad6996f82b5e7f8f693f61b96ac

Потом - может быть что-то напишется.

Пока - от параллельного переноса я решил отказаться. Ибо пока не очень понимаю - зачем он нам. Пока сделал таскание концов линии.

Offtop. Уметь смеяться

Уметь смеяться над собой.

Я считаю одним из этапов.

Как-то так...

вторник, 10 февраля 2015 г.

Коротко. Ссылка. "Проблемы" у людей

https://plus.google.com/u/0/+MagnoLima/posts/Wze5DCKQHMg

Мда... В чём проблема то? Стиль назначить. Я чего-то не понимаю?

Прям хоть "статью пиши"...

Offtopic. Цитата из думающего человека

Не хочу "разжигать", но (!) мне показалось, что он во многом прав.

Надеюсь, что он не обидится на цитирование.

https://plus.google.com/u/0/100903871335644471614/posts/U6rqzcGfoQm

"Забавно... "Они" не знают, что делать с RT...
Мы вот знаем, что делать с "Эхом" и "Дождём" - периодически заглядывать, фильтровать пропаганду и узнавать о вещах, которые "федеральные СМИ не находят существенными". А они - не знают... Пичалька (c) :-)
Особенно умилило вот это:

«Вдобавок к новостям RT также превратился в место, где выражают своё мнение американские диссиденты, включая крайне левых вроде Ноама Хомски, крайне правых вроде Патрика Бьюкенена и либертарианцев-маргиналов вроде Рона Пола. И хотя подобные мнения провокационны и непопулярны, RT позволяет американской аудитории с ними знакомиться.»
-- Ах-ах! Они видите-ли "провокационные" и "непопулярые" вещи излагают... Ну понятно, вещи "пристойные" и "популярные" зритель/слушатель может получить на Fox News, NBC и прочих "федеральных СМИ" :-D Ах ну да, на RT получают голос "маргиналы" - ну у нас тоже Немцов, Касьянов и прочие, примкнувшие к ним шахматисты иначе как маргиналами большинством не воспринимаются. Но почему не дать им слова (Немцов регулярно в федеральный "телеящик" попадает) и зачем ещё раз называть их маргиналами? Да и кто их маоргиналамии сделал? Ну про Немцова и К я знаю - они сами на свой маргинальный имидж пахали не покладая рук в 90-е. А вот г-н Робертс чем не угодил? Говорит не то? Ну извините, не знали, что у вас такая свобода слова... :-)

«В данной ситуации RT ведёт себя как хитрый продавец: сначала заманивает американского зрителя на трезвое отношение к происходящему в США, а потом подсовывает ему бессовестную российскую пропаганду»
-- А это - вообще многого стоит :-) Достаточно включить любой оппозиционный канал - сразу возникает ощущение, что в ГД все идиоты, что промышленности у нас нет, что кроме как качать нефть "русское быдло" ничего не умеет. А все талантливые, умные и красивые (!) люди - они думают что "паравалить". Не в этом ли суть "оппозиционности" - навязать зрителю/слушателю определённое мнение о своей стране? Посеять недовольство, вызвать ненависть к власти?

Господа, Вы просто столкнулись с тем, с чем нам приходится жить уже более 20 лет. Мы уже привыкли, у нас выработался иммунитет. Когда мы слышим что-либо в СМИ мы задаёмся сакраментальным вопросом: "кому это выгодно" (чтобы мы узнали о предмете именно в такой форме и именно в такой интерпретации)? Да не у всех развился этот навык, но рискну предположить, что эти 10%, у которых он выработался - они и есть те умные, кто "валить" не сподобился, и кто хочет сделать жизнь лучше здесь и, возможно, не только для себя.
Так что привыкайте господа. RT оттуда не уйдёт. По своей воле, во всяком случае. А пропаганда... Без неё никакое государство не может существовать - ни "кровавый режим", ни ваши "демократии". Разница только в направленности этой пропаганды. Но у нас, по крайней мере, так не врут :-) Врут, врут конечно, но по-другому.

Например, крайний "Бесогон" "царя нашего" ;-) Там знаменитый "правообладатель" и бенефициар от налога на технику, своим проникновенным голосом представил материал некоего ополченца. - Симпатичный молодой человек, с характерным восточно-украинским говором, с псевдонимом "фотограф" комментировал своё видео, которое "наш царь" окрестил не иначе как "пронзительное" и мегаправдивое. К видео претензий нет никаких, к молодому человеку-ополченцу и даже к "царю" - тоже. Но так уж вышло, что крупную ложь наших СМИ их совместная работа элементарно вскрыла. А именно: почему ВСУ наносят удары из тяжёлого вооружения по жилым кварталам Донецка. - Да просто потому, что из этих жилых кварталов по ним наносят удары ополченцы.
А сколько было болтовни в центральных СМИ, что это "варварство" ничем не мотивировано, что ополченцев в жилых кварталах нет? - Ну как же нет? Вот, в материале молодого человека, в хорошем качестве видим, что есть. Более того, он прямо говорит, почему ВСУ превратили "девятиэтажку" в "нежилой дом" с ужасными разрушениями. - Потому, что они базировались за этой девятиэтажной, потому, что их позиции располагались на её крыше и не только там.
Осуждаю ли я наши СМИ? - Да нет, кто я такой. Но враньё - фиксирую. Не могу я без этого.
Но у нас не обвиняют голословно в чём угодно кого угодно. Если говорят, что ВСУ использует иностранное оружие - то предъявляют его. Если говорят об иностранных наёмниках - предъявляют соответствующие видеоматериалы, если говорят о жертвах среди мирного населения - то показывают их.


Или вот, отсюдаhttp://www.svoboda.org/content/article/26836320.html (один из "голосов", которые вполне в трэнде "пристойных СМИ"):
«- В памяти у многих, думаю, просто визуально осталось, как Петр Порошенко продемонстрировал доказательства того, что российские военнослужащие присутствуют на территории Украины и активно участвуют в конфликте, воюя против украинских сил. Он с трибуны продемонстрировал захваченные военные билеты и паспорта российских военнослужащих - это очень запоминается…»
-- Я так и не понял: со слов Поршенко на Донбассе тысячи российских военнослужащих. Неужели никто не попал в плен? Неужели единственным подтверждением своих тезисов г-н Порошенко может предъявить только корочки российских паспортов? Почему нет в прямом эфире "помятых" российских военнослужащих, рассказывающих о том, как "преступное командование российских ВС" ставило перед ними преступные задачи? - Думаю потому, что таких "российских военнослужащих" в распоряжении ВСУ просто нет. Иначе об этом "звонили бы во все колокола", и не на "вшивых" "5-м канале" или "Iнтере", а на "гламурных" Fox News, NBC и прочих "центральных СМИ". - Интересно, что бы тогда сказали на RT... :-)"

Но! Добавлю "от себя" ещё одну цитату:

""Разговор со свидомитом
- а почему вы не отвоюете Крым, а только кричите, что Крым- Украина?
- Так потому, шо там российские войска стоят!
- Так вы ж говорите, что на Донбассе тоже российские войска, воюете же на Донбассе то!
- А-а! Так то, шо, на Донбассе российские войска, это ж мы говорим! А в Крыму они реально стоят!""

пятница, 6 февраля 2015 г.

Жёсткий Offtopic. О "вкусах"

Пятница. Сегодня можно.

Тут один "адепт Мака" мне бросил фразу:

"Виндоус 7.. Не упущу возможности потроллить тех идиотов, что проектировали ее интерфейс".

Не могу удержаться. Жёстко парирую:

"Мак.. Не упущу возможность потроллить тех идиотов, которые проектировали его интерфейс.

Среда разработки xCode. Cmd-F - ищу MyProcedure. Нашёл.

Переключаюсь на TextEdit. Cmd-F. Там MyProcedure. Ввожу 10003000. Нашёл.

Переключаюсь в xCode. Cmd-F. Там 10003000. Какого чёрта!!!! Я кого-нибудь об этом ПРОСИЛ?

РУКАМИ набиваю MyProcedure. Потому что ИСТОРИИ поиска - НЕТ. (Дебилы) Нашёл СЛЕДУЮЩЕЕ вхождение. Рад.

Переключаюсь на TextEdit. Cmd-F. Там MyProcedure. Какого чёрта!!! ГДЕ МОЙ 10003000???!?! ПРИДУРКИ.

Хочется откопать Джобса и посадить на кол."

Простите. Не сдержался :-( Но поведение Cmd-F - РЕАЛЬНО БЕСИТ.

Вывод?

На вкус и цвет все фломастеры разные. Не стоит никого называть идиотами.

Возможно эти "идиоты" руководствовались благими намерениями.

И нет, ни серебряной пули, ни идеального интерфейса. Люди - РАЗНЫЕ.

Извините, если кого задел.

Про Джобса я конечно в запале написал.

(+) http://programmingmindstream.blogspot.ru/2015/09/1154.html

"Вот на мой вкус в качестве примера "неудобной" разработки можно привести iOS: меня заставляют ради простейшего функционала лепить какие-то заумные вундервафли, без которых все вполне спокойно обходятся в андроиде при реализации аналогичного функционала.
Простые вещи обязаны делаться просто и быстро.
Добавление кнопки - простая операция. Добавление контекстного меню - тоже. Добавление пункта в контекстное меню - еще проще."

вторник, 3 февраля 2015 г.

Ссылка. Рекомендую к прочтению. Примеры тестовых работ

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

http://www.auslogics.com/ru/about/examples