Кстати, по поводу кодерских задачек на собеседованиях

Вместо того, чтобы предлагать в 100500 раз перевернуть строку, отсортировать массив и тому подобное — придумайте аналогичную задачку, где фигурирует файл на 100 Гб (скажем, это какой-нибудь лог). Например:

На диске лежит файл log.txt объемом 100 Гб, в котором записаны строки вида UUID,DD-MM-YYYY,hh-mm (например, 123e4567-e89b-12d3-a456-426655440000,01-12-2018,01-35), строки разделяются последовательностью CR-LF. Имеется компьютер с разумным размером оперативной памяти (скажем, 16 Гб), отсортируйте файл по UUID-ам.

Очень оживляет обсуждение.

Самоконтроль, чувак, самоконтроль!

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

miranda

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

С заботой о маломобильных гражданах

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

Думаю, общество слепых подпишется на то, чтобы в следующий раз дизайнеру выбили глаз.

Главное правило разработки под Android

Купите себе несколько девайсов ценовой категории «днище» (бренды вроде Prestigio, Irbis, Digma, которыми завалены магазины) — потому что именно это самое днище будет максимально популярно у пользователей, а заодно — страдать от самых невообразимых программно-аппаратных глюков.

Ну и чтобы два раза не вставать — а что нужно, чтобы писать софт для iPhone/iPad?

Email по паспорту

Вот всякие малосознательные сисадмины смеются над очередной инициативой депутатов, возжелавших непонятно зачем привязать адреса электронной почты к номерам мобильных телефонов — мол, тупые депутаты не понимают особенностей функционирования протокола SMTP, не то что мы!

Ребята, ваше счастье, что не понимают. Если бы понимали — вас бы уже давно поставили на учет раком. Например — открыт 25 порт или есть запись MX для вашего домена? Явитесь в ближайшее отделение Роскомнадзора с паспортом, зарегистрируйтесь там, организуйте учет всей проходящей через ваш открытый SMTP-релей почты, и так далее, и тому подобное. Не явились? Получите невьебенный штраф. Невозможно найти концы? Невьебенный штраф получит провайдер (но этого не будет — так как провайдер первым же организует полный стопроцентный учет клиентов). Да, кстати — если через ваш открытый SMTP пройдет какое-нибудь сообщение от аллахакбаровцев — вас первым же и возьмут за шкирку, так что включите авторизацию.

Ах да, крупные игроки типа Яндекса, Мейла и Гугла получат от этого исключительно профит — так как их-то «почта для доменов» будет на все сто соответствовать требованиям регулирующих органов. Не хотите отдавать почту своего ООО «Ромашка» в лапы яндексогугла? Не забудьте зарегистрироваться в Роскомнадзоре. Ну и так далее, и тому подобное.

Про новую книгу Харари

А я правильно понимаю, что если механически заменить в ней все упоминания Трампа на упоминания Путина, ее смысл вовсе не изменится?

Как горячие пирожки

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

Итак, вводная — надо собрать дюжину плат с SMD-деталями типоразмера 0603 и Bluetooth-модулем на CC2541. Плату я нарисовал в DipTrace, заказал в Резоните изготовление собственно плат, а в OSH Stencils — трафарета из полиимидной пленки. Детали куплены частично на алиэкспрессе (собственно сами Bluetooth-модули), а частично — в Чип-и-Дипе и Электронщике. И вот со всей этой фигней мы попытаемся взлететь :)

paste-printer

По-хорошему, нужен трафаретный принтер, который натягивает трафарет и правильно позиционирует его относительно платы, и есть даже неплохие «самодельные» варианты — но для кустарных условий сойдет и такое приспособление из обрезков других плат той же толщины.

paste-ready

Паста размазывается чем-нибудь типа шпателя или пластиковой карты, при небольшом навыке это делается довольно быстро и непринужденно — на 12 плат у меня ушло меньше 10 минут.

placing

Расстановка деталей — довольно муторный этап, особенно, если делать это обычным пинцетом — но с перерывами я расставил две сотни деталей за два часа. Для сравнения — у самого-самого простого «любительского» установщика типа какого-нибудь Liteplacer заявленная производительность составляет 500-600 деталей в час (хотя с учетом времени на его программирование этот процесс занял бы примерно то же время).

Ручную расстановку можно ускорить, если пользоваться вакуумным пинцетом — только не фигней с резиновой грушей, которыми завален Чип-и-Дип, а чем-то вроде авторучки с прицепленным к ней аквариумным компрессором — не надо вытряхивать детали из ленты, а потом долго и мучительно переворачивать резисторы. Хотя если честно — я подумываю, из чего бы сколхозить ручной манипулятор для установки SMD-компонентов, мне кажется, это могло бы быть еще удобнее.

into-the-oven

Дальше загружаем платы в печку.

oven-running

Это обычная бытовая электродуховка, снабженная специальным контролером, который обеспечивает «правильный» температурный профиль. Цикл пайки занимает несколько минут.

oven-done

В течение еще нескольких минут платы остывают.

boards

Готово! Остается запаять лишь пару разъемов.

Они все проспали

Вот возникла необходимость немного освежить знания о том, что такое суффиксные деревья. Посмотрел википедию и обнаружил, что они очень активно применяются в computational biology (не знаю, как перевести это на русский — «вычислительная биология»?), а типичной писькомеркой для алгоритмов построения суффиксного дерева служит задача индексирования человеческого генома (около 3 Гб объемом). Забавно сочетается с мечтами биологов и химиков в начале 80-х о «3M workstation»:

With NeXT, Jobs went back to a project he had contemplated for Apple in August 1985. While touring universities to boost Mac sales, he had met Paul Berg, a Nobel Laureate in chemistry. Paul was frustrated with the cost of teaching students about recombinant DNA in wet laboratories. It would have been cheaper to simulate them. It seemed there was a market for 3M (One Megabyte of RAM, a Megapixel display and MegaFLOP performance) workstations targeted at universities and students. NeXT set itself to build something powerful yet cheap enough that college students could afford it.

http://fabiensanglard.net/gebbdoom/index.html

Впрочем, в какой-то степени отличия компьютеров тех лет от нынешних — только количественные, просто то, что было доступно в 80-х лишь горстке избранных, теперь вообще «ничего не стоит».

Логично, что с тех времен биологи с химиками научились использовать компьютеры на пользу своей науке. Про физиков и говорить нечего — «я бы посмотрел на размер глаз филолога, которому покажут выхлоп недельной работы ускорителя или нейтринного детектора» (ссылка). В общем, кто мог и кто хотел — те научились пользоваться вычислительной техникой уже давно.

А что же наши любимые представители гуманитарных наук? Нет, те, кто поумнее, и кому это было надо (скажем, историкам какого-нибудь раннего средневековья статистика и в хуй не уперлась) — те освоили всякую там статистику еще в «докомпьютерную» эпоху. Но как-то странно на этом фоне выглядит то, что слова Digital Humanities появились только в начале 2000-х, когда тупо игнорировать повсеместное проникновение персоналок, интернета и всего такого стало уже совсем невозможно. Но вот гляжу я на эти Digital Humanities, которые местами сводятся к тому, что «кто-то ввел в компьютер кучку средневековых текстов, мы прошлись по ним grep-ом провели контентный поиск и вот что обнаружили (дальше следует какая-нибудь очевидная ерунда или несусветная чушь)» и не понимаю — а что у вас тут «цифрового»? Да и с гуманитарной составляющей все обычно плохо.

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

Словарь корпоративных смыслов московской системы образования

На сайте «Московского центра развития кадрового потенциала образования» есть забавный раздел с литературой, а в нем — совершенно шедевральный «Словарь корпоративных смыслов«.

mosedu-dictionary

Если вы не знаете, что такое, скажем, «конвергентно ориентированная образовательная программа» — можете открыть словарик и узнать, что это — «образовательная программа, отвечающая принципам конвергентного подхода к образованию (междисциплинарность, использование высоких технологий, опережающий характер освоения профессиональных компетенций)». Понимания происходящего это, конечно, не добавит — впрочем, как и книжка «Логика конвергентного подхода в московском образовании» целиком.

Ретрокомпьютинга пост

У них в 1985 году:

With NeXT, Jobs went back to a project he had contemplated for Apple in August 1985. While touring universities to boost Mac sales, he had met Paul Berg, a Nobel Laureate in chemistry. Paul was frustrated with the cost of teaching students about recombinant DNA in wet laboratories. It would have been cheaper to simulate them. It seemed there was a market for 3M (One Megabyte of RAM, a Megapixel display and MegaFLOP performance) workstations targeted at universities and students. NeXT set itself to build something powerful yet cheap enough that college students could afford it.

http://fabiensanglard.net/gebbdoom/index.html

У нас в 1985 году:

В апреле 1985-го после визита на завод только что избранного Генеральным секретарем ЦК КПСС Горбачева было принято решение создать на базе ЗИЛа образцовое предприятие по системам автоматизации проектирования. До конца лета в напряженном режиме прорабатывались различные варианты реализации этой идеи. Для удовлетворения потребностей завода в САПР необходимы были 400 рабочих мест типа VAX-70 (графический дисплей с разрешением в 1 млн. пикселов и быстродействием 1 млн. операций в секунду). Когда, исходя из этих требований, просчитали вариант реализации на машинах ЕС и СМ, оказалось, что понадобятся средства, вдвое превышающие основные фонды ЗИЛа.

https://www.osp.ru/cw/2000/24/5596/

Что характерно — многие в том же самом 1985 году и представить не могли, что такие «персоналки» кому-то понадобятся:

Потом где-то в середине восьмидесятых годов министр Минэлектронпрома В. Г. Колесников постановил, что нужно делать 32-разрядные процессоры, совместимые с процессорами DEC. Я, кстати, тогда был против этого, потому что считал, что будущее не за мэйнфреймами, а за персональными компьютерами. Но меня, естественно, никто особо не спрашивал. И тогда сделали 32-разрядный микропроцессорный набор (комплект микросхем), программно совместимый с ЭВМ VAX.

http://155la3.ru/datafiles/VAX_russia.pdf

Про Galileo

В прошлую пятницу что-то нехорошее случилось с европейской спутниковой навигационной системой Galileo. По состоянию на вечер понедельника — система так и не заработала:

https://www.gsc-europa.eu/news/update-on-the-availability-of-some-galileo-initial-services

Я вот представил на минуточку, что случилось бы, если бы на несколько дней умер GPS — это было бы что-то масштаба всемирной катастрофы, или ГЛОНАСС — из каждого утюга сообщили бы, что «глонасс не летает, все деньги разворованы, роскосмос к ответу». Некоторым исключением можно считать китайскую систему Beidou — в случае ее серьезных неполадок все прошло бы тихо и спокойно, за исключением того, что все причастные отправились бы развивать китайскую космическую программу в Синцзян-Уйгурском автономном районе. Тут же — просто молчание в течение трех дней, что как бы намекает на актуальность и количество реальных пользователей европейской навигационной системы.

Закон Мура и московская розница

Кстати, у меня среди прочей фигни обнаружились сканы прайс-листа одной из московских компьютерных фирм конца 1995 и начала 1996 года (кликабельно).

price1995

price1996

Pentium-100 за полгода подешевел с 299 $ до 210 $, а планка памяти на 8 Мб — с 254 $ до 138 $. Слабо найти так же быстро дешевеющую компьютерную комплектуху сейчас? Подождав в 1990-х шесть месяцев — вы получили бы заметное улучшение «железа»; подождав такой же срок в 2010-х — не получили бы практически ничего.

Кстати, про производительность ПК

Вот попался на глаза «закон Кармака«:

Because of the nature of Moore’s law, anything that an extremely clever graphics programmer can do at one point can be replicated by a merely competent programmer some number of years later.

Сказано это было в 2004 году, 15 лет назад — а под «законом Мура» понималась, видимо, одна из его «популярных» формулировок — о том, что производительность персональных компьютеров удваивается каждые 18 месяцев. Вероятно, так оно и было до недавнего времени — но вот как-то я решил посмотреть на производительность «моих» ПК и заметил, что что-то случилось нехорошее.

Итак, первым моим компьютером в 1996 году был довольно крутой по тем временам Pentium с тактовой частотой 120 МГц, 16 Мб памяти и жестким диском на 800 Мб. За 7 лет он превратился в полный отстой — скажем, хит сезона 1999 года, Heroes of Might and Magic III, шел на нем с боооольшим трудом, а сосуществование рядом нескольких «жирных» игрушек и Microsoft Visual C++ 6.0 было довольно сложным. Его замена — Pentium IV 1600 МГц, 256 Мб памяти, GeForce 4 MX440 и жесткий диск на 60 Гб — прожила те же 7 лет и умерла от вспучивания конденсаторов. Я не помню, когда я поменял Windows XP на Windows 7 — но точно помню, что в следующей системе я просто вставил жесткий диск с операционкой от предыдущей машины и все благополучно запустилось. «Замена» — неплохой по меркам 2009 года Core 2 Duo с 2 Гб ОЗУ — работает до сих пор, пережив замену жесткого диска (поставлено что-то побольше) и видеокарты, правда, не как «основной» компьютер. Примерно в этот момент я сравнил свои ощущения от перехода на Pentium IV с ощущениями от перехода на Core 2 Duo — и почувствовал, что где-то наебка.

По тому самому закону Мура производительность ПК за 7 лет должна возрастать примерно в 25 раз — и в первом случае действительно вышло как-то так. Разница по всем параметрам была на порядок, ну а Windows XP после Windows 95 и вовсе радовала во всех отношениях. Во втором случае — ну да, памяти побольше, процессор пошустрее — но не на порядок, в повседневной работе вообще никакого качественного скачка не случилось.

А вот теперь — приготовьтесь к страшному. Когда семилетний десктоп окончательно перестал меня устраивать (по разным причинам) — я посмотрел предложение на рынке ноутбуков, посмотрел еще раз, и еще — и в итоге купил б/у Lenovo T420, 2012 года выпуска, с i5-2520M и 8 Гб ОЗУ. И знаете что? Сейчас, в 2019 году, я посмотрел, что предлагает Lenovo в T-series — и не скажу, что в сравнении с техникой семилетней давности вообще произошел какой-то качественный скачок. PassMark показывает разницу в производительности процессоров вдвое — и та достигнута в основном увеличением числа ядер, «однопоточная» производительность и вовсе очень близка. Память? Говорят, и в T420 можно напихать до 16 Гб. Скажу честно — я пользуюсь семилетним компьютером и не вижу причин бежать в магазин и покупать новый.

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

Говорят, что у вот этой остановки роста производительности ПК есть вполне себе фундаментальные причины — а это означает, что с надеждами на закон Мура стоит попрощаться, а «просто компетентный» программист уже не сможет заменить «очень умного». Нет, и совет потратить 6 месяцев на игру на барабанах в рок-группе вместо оптимизации проекта тоже уже не работает. Придется как-то с этим жить.

The Machine To Build The Machines

Погуглил немного про NeXT — компанию, основанную Джобсом после ухода из Apple, и производившиеся ей компьютеры. Среди всего прочего — нашел ролик The Machine To Build The Machines, где показана работа линии SMD-монтажа:

1986 год, на минуточку.

Game Engine Black Books

С удовольствием прочитал две книжки с подробными описаниями процесса разработки и технических решений Wolfenstein 3D и Doom:

http://fabiensanglard.net/gebb/index.html

Сочетание PC-шного и не очень (в частности, довольно подробно описывается NeXT, на котором разрабатывался Doom) «железа», разнообразных хитрых приемов для рендеринга графики, оригинальных алгоритмических решений и просто программистских трюков — это очень круто, рекомендую. Для полного удовольствия от книжек крайне желательно знать Си и иметь представление о том, что рассказывается в стандартном курсе по «алгоритмам» — иначе такие штуки, как BSP, просто пройдут мимо.

Хабр vs Пикабу

Хабр: нейтрально-пуританская (это перевод с американского сайта The Motherboard) статья про секс-игрушку, управляемую нейросетью — 252 «плюса» и 69 «минусов» (1 минус на 0,27 плюса), плюс множество натурально ханжеских или ебанатских комментариев:

https://habr.com/ru/post/441252/

Пикабу: статья про дилду с электроприводом и автоподачей смазки на STM8, множество фотографий резиновых хуев и в целом развязный тон — 2402 «плюса» и 155 «минусов» (1 минус на 0,06 плюса — в четыре с лишним раза «положительнее» хабра) и комментарии с признаниями в любви авторше:

https://pikabu.ru/story/kak_obmanut_i_unizit_komara_5153277

Да, кликбейтный заголовок на пикабу — это «как обмануть и унизить комара».

Чуваки, я бы задумался, где публика свободнее и прогрессивнее.

Еще немного про Java, обучение программированию и все такое

Продолжу недавнюю запись про определение палиндромов на Java. Для начала, поступило довольно обоснованное замечание, что «в старой Java» класс String был устроен так, что методы типа trim и substring не копировали буфер строки, а работали с тем же (благо в Java строки «иммутабельны») — поэтому квадратичной сложности тут не будет и в целом есть даже шансы, что все это дооптимизируется до почти правильного решения.

Что могу возразить? Во-первых, курс называется не «недокументированные возможности старой джавы», а «общая информатика», и читается отнюдь не в ПТУ для быдлокодеров. Я не берусь сказать, как именно будет реализован строковый тип в том языке программирования, который станет основным для выпускников через пять лет — да и вообще, будет ли это Java или что-то еще. Во-вторых — во вводном курсе программирования более ценно не умение обращаться с готовыми методами из класса String, а умение работать с массивами, например. Задачки наподобие «определите, является ли строка палиндромом (без учета пробелов)» — это абсолютная классика задач на работу с одномерным массивом.

И вот тут мы переходим к следующей части — а в чем так сказать, педагогическая ценность этого задания? Выполнить несколько почти тривиальных шагов, засунув их внутрь цикла? Неплохо для обучения Java junior по современным понятиям, но… Более традиционные (и результативные!) подходы предполагают обучение программированию «сержантским методом» (в терминологии [info]ailev) — много-много мелких, но содержательных задач, часть из которых объясняется преподавателем, а часть — остается для самостоятельного решения. Палиндромы, strrev, все что угодно — самостоятельной ценности у этих задач может в общем случае и не быть (хотя надо быть всегда готовым написать собственный left-pad), но их должно быть много, и они должны иметь разную сложность.

В том курсе, о котором я пишу, «сержантским методом» и не пахнет — задач предлагается смехотворно мало, а часть из них — в духе немецкого программистского образования — больше похожи на тесты для умственно отсталых, вот в духе «есть листочек, на листочке нарисованы паровоз, пароход, печка и самолет, что лишнее?» От того, что задача сформулирована в виде «изобразите UML-диаграмму для классов SteamLocomotive, SteamBoat, Furnace, LocalhostFurnace, Plane, BF109, BF109G», она не становится более интеллектуальной, а от написания 10-20 строчек кода в неделю Fundamental programming skills, обещанные в описании курса, не появляются.

Несколько лет назад ни один околопрограммистский срач не обходился без ссылки на Джоэля Спольски — не буду изменять хорошей традиции и даже приведу целый абзац из Perils of Java Schools:

OOP in school consists mostly of memorizing a bunch of vocabulary terms like “encapsulation” and “inheritance” and taking multiple-choice quizzicles on the difference between polymorphism and overloading. Not much harder than memorizing famous dates and names in a history class, OOP poses inadequate mental challenges to scare away first-year students. When you struggle with an OOP problem, your program still works, it’s just sort of hard to maintain. Allegedly. But when you struggle with pointers, your program produces the line Segmentation Fault and you have no idea what’s going on, until you stop and take a deep breath and really try to force your mind to work at two different levels of abstraction simultaneously.

Уж очень мне нравится тут фразочка про inadequate mental challenges — и хочу обратить внимание, что какое-то обучение возможно только тогда, когда решаемые задачи достаточно сложны (а в некоторых вариациях «сержантского метода» — когда в каждом задании есть настолько сложные задачи, что никто не может их решить). Здесь же в своем «упрощенчестве» докатились до предела — задачи настолько тупы, что их решение просто не дает никаких полезных знаний.

PS Между прочим, некоторое количество вполне себе содержательных задач по программированию вместе с азами ООП содержатся в простом задании — «напишите свою реализацию класса java.lang.String», или некоторого его подмножества. Для развлечения — можно предложить написать две реализации — одну в стиле «старой Java», без копирования строкового буфера в методах типа substring, а вторую — с копированием, и сравнить производительность.

2019 год, чуваки впервые увидели сканер

А вот некая мадам (точнее, Elena Pierazzo, профессор университета Гренобля) рассказывает нам о том, как компьютерные технологии меняют методологию гуманитарных наук:

Оказывается, если не заказывать какой-нибудь документ в архиве или библиотеке, а смотреть его на экране компьютера — то можно think out of the page — «думать за пределами страницы».

Что могу сказать? Ребята, если появление планшетного сканера в корне меняет методологию вашей науки — у меня для вас плохие новости.

А вот расскажите мне про кредиты на образование

Вот мы, конечно, любим смеяться по поводу американских студенческих кредитов, а вот что происходит у нас? Вот на днях увидел статейку о стоимости обучения на платных отделениях в ВУЗах Волгограда (не спрашивайте, почему именно Волгоград, просто случайно попало на глаза):

https://v1.ru/text/education/66148102/

Стоимость года обучения — от 100 до 200 тысяч рублей, и если сравнить ее со средней зарплатой по области — то получается не особо радужно:

https://v1.ru/text/gorod/66139447/

Получается, что год обучения в ВУЗе средней руки «стоит» от 3 до 6 средних месячных зарплат в регионе. Ну и с той же «программной инженерией» еще понятно, а вот куда деваться выпускникам со специальностью типа «Монументально-декоративное искусство» — хз, если честно.

Так вот, че как у нас в России со студенческими кредитами?

Чем больше выпьет комсомолец, тем меньше выпьет хулиган!

Пишут, что в немецком городе Остриц проходил неонацистский музыкальный фестиваль «Shield and Sword» (не знаю как вы, а я бы искал тут не буковки SS, а отсылки к любимому фильму кровавого русского диктатора Влада Путина!). Добропорядочные бюргеры скупили все пиво в городе — чтобы не досталось скинам:

https://www.huffpost.com/entry/ostritz-neo-nazi-festival-beer_n_5d11d645e4b0aa375f5270df

Если ты не выпьешь пиво сегодня — завтра его выпьет неонацист или солдат НАТО!