Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2016-04-27

KISS

Keep It Simple, Stupid

Занятное выступление Maciej Cegłowski: The Website Obesity Crisis
http://idlewords.com/talks/website_obesity.htm
https://vimeo.com/147806338

  1. The Crisis
  2. Fake Fixes
  3. Fat Ads
  4. Fat Assets
  5. Chickenshit Minimalism
  6. Interface Sprawl
  7. Heavy Clouds
  8. Stirring Conclusion

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

Интересные наблюдения, живое изложение. СтОит ознакомиться.



original post http://vasnake.blogspot.com/2016/04/kiss.html

2016-04-15

left-pad

Да (задумчиво, растягивая гласные), господа-товарищи, мда.
Перефразируя, это было бы смешно, если бы не реакция публики.

Цитирую, с купюрами

... React, Babel и куча других популярных пакетов на NPM сломались. Причина довольно удивительная.

Простой пакет NPM под названием left-pad был установлен как зависимость в React, Babel и других пакетах. ... Весь пакет состоит из 11 простых строчек, которые реализуют примитивную функцию вставки пробелов в левой части строк
...
Узнав о бедствии, которое случилось из-за left-pad, я начал исследовать экосистему NPM. И вот что обнаружил, среди прочего:

    Есть пакет под названием isArray, который скачивают 880 000 раз в день, 18 млн скачиваний в феврале 2016 года. У него 72 зависимых NPM-пакета. И вот его целая 1 строчка кода:

    return toString.call(arr) == '[object Array]';

    Есть пакет под названием is-positive-integer ..., который состоит из 4 строчек и которому на вчерашний день требовалось 3 других пакета для работы. ...
    Свежая установка Babel включает 41 000 файлов
    Чистый шаблон приложения на базе jspm/npm начинается c 28 000+ файлов

Всё это заставляет задать вопрос…

http://www.haneycodes.net/npm-left-pad-have-we-forgotten-how-to-program/
https://habrahabr.ru/post/280099/

Вопрос автора, изложенный моими словами: говнокодеры, вы охуели в атаке?

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

Лично меня беспокоит только одно: когда уже наша цивилизация накроется ЖПП (ака медный таз)?
Запас прочности ниибацца, раз живы до сих пор.

P.S.
Вот, на близкую тему
http://blog.jdevelop.com/software/2016/04/07/opensource.html





original post http://vasnake.blogspot.com/2016/04/left-pad.html

2016-04-14

Колеса

Колеса в смысле шины, автомобильные.

Блин, что-то с погодой не то. Сижу, учу алгоритмы, десять минут, двадцать, … глазки начинают закатываться, голова падает на клавиатуру, раздается мощный храп.
Надо что-то бодрящее забацать. Вот, про шины псто.

Есть проблема: на переднеприводной машине образовалось два колеса относительно свежих и два относительно походивших.
Вопрос: на какую ось (переднюю али заднюю) ставить свежие шины?

Немаловажное уточнение: шины летние. С зимними шинами экспериментировать/экономить не надо. Трупам и калекам сэкономленные копейки не помогут.

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

Существует два диаметрально противоположных мнения по этому поводу.
Давайте разберем.

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

Мнение второе: более свежие (с более высоким протектором) шины надо ставить на заднюю ось.
У такого решения плюсов несколько.
– Если вам не повезло и новая шина оказалась с дефектом и лопнула – шансы сдохнуть в канаве или на встречке значительно меньше.
– Когда передняя пара сносится до невозможности, вы купите всего две новые шины. Это заметно дешевле, чем покупать сразу четыре.
– Если вы любите гонять по мокрой дороге, шансы уйти в занос снижаются. Более качественный протектор на задней оси дает несколько дополнительных км/ч до того волнительного момента, когда жопа перестает держать дорогу.
А занос на переднеприводной машине – удовольствие ниже среднего.

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




origianl post http://vasnake.blogspot.com/2016/04/blog-post.html

2016-04-11

Seam Carving

Seam Carving это способ поменять у картинки размеры, вырезая полоску пикселов с наименьшей значимостью.

И задали нам задачку, написать программу для этого дела
Это из курса

Дело нехитрое, когда знаешь – как. Сел, написал. Отдаю на проверку.
А, кстати, проверяльщик автоматический у них довольно мощный, порядка сотни тестов да с разными комбинациями параметров. Но, ЧСХ для этого курса, студням код тестов недоступен, и это печалит неимоверно.
Проверил: два теста провалено, это около 2% итоговой оценки. С одной стороны хорошо: с первой попытки я изобразил корректную программу, тест фейлится на вспомогательном коде, где надо вернуть mutable картинку. То есть, по идее, я отдаю картинку и клиент может делать с ней что хочет, откуда следует, что отдавать я должен копию. Авотхуй.

Я, сцуко, три часа потратил на то, чтобы угадать, что этим блядским двум тестам надо.
Test 10a: Check that client can mutate the Picture object that is passed to the constructor
==> passed
Test 10b: Check that client can mutate the Picture object that is returned by picture()
==> passed

Два самых интересных варианта непрохождения тестов
Test 10a: Check that client can mutate the Picture object that is passed to the constructor
==> passed
Test 10b: Check that client can mutate the Picture object that is returned by picture()
     - repeated calls to picture() return reference to same Picture object
==> FAILED

Test 10a: Check that client can mutate the Picture object that is passed to the constructor
     - picture() return a Picture object that is not equal to argument Picture object
       even though no seams have been removed
==> FAILED
Test 10b: Check that client can mutate the Picture object that is returned by picture()
==> passed
Фактически, два взаимоисключающих условия: 1-- надо отдавать копию; 2-- не надо делать копию, если картинка не ресайзилась.

Сразу скажу, тесты проверяют не совсем то, что написано в сообщениях об ошибках.
Методом тыка я выяснил, что тесты проверяют: 1-- ты работаешь с копией входных данных; 2-- если в отданной тобой картинке клиент поменял хоть один пиксель, надо делать новую копию.

В итоге, вместо очевидного решения с кешированием результата, получается вот такое говно (зато 100% балл)
    public Picture picture() {
        if (cache == null) {
            cache = new Picture(currPic);
            return cache;
        }
        if (cache.height() != height || cache.width() != width) {
            cache = new Picture(currPic);
            return cache;
        }
        for (int row = 0; row < height; row++) {
            for (int col = 0; col < width; col++) {
                if (currPic.get(col, row) != cache.get(col, row)) {
                    cache = new Picture(currPic);
                    return cache;
                }
            }
        }
        return cache;
    }

Ну что тут сказать: Принстон, Принстон … учился я в этом вашем Принстоне. Ничего особенного, там тоже говны имеются.

P.S.
Лично меня в такой ситуации раздражают две вещи:
– дайте студню тесты, чтобы он мог понять, что же от него требуют. Большинство курсов не стесняется выдать код для тестирования.
– вот такие вот два теста – что они, блиат, проверяют? Что я умею работать с картинкой в попиксельном режиме? Тема задачи была: Shortest path in directed acyclic graph. Я уж не говорю о том, что мутабельность/иммутабельность проверяют не так (не сравнением адресов).

А в целом, вот в такие моменты начинаешь особо ценить функциональный подход (иммутабельные типы данных).





original post http://vasnake.blogspot.com/2016/04/seam-carving.html

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) Klaipeda (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) купи/продай (9) Photo (8) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)