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

У них в 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

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

Вечер фейспалмов продолжается

А вот мне рассказали, чему учат юных джавистов в TU D-stadt. Задание простое – проверить, является ли текстовая строка палиндромом (без учета пробелов) – скажем, таковыми будут “шалаш” или “оголи жопу пожилого” (привет Пенсионному фонду). Ну как это делает нормальный человек? Заводим указатели на начало и конец строки, двигаем их навстречу друг другу, пропуская пробелы, и сравниваем буквы.

palindrom

Так вот, сейчас студентов учат немного другому. Надо сначала выполнить метод trim(), отрезав от строки пробелы в начале и в конце, потом сравнить первую букву с последней, затем выполнить метод substring() и повторить это с обрезанной строкой. Прикольно, да? Не знаю, как у вас, а я не могу обойтись без слов “пиздец”, “охуеть” и “ебланы”, когда рассказываю об этом.

Очередной привет Texas Instruments

Интересно, почему мне примерно каждые две недели хочется безудержно материть софтовую поддержку Texas Instruments? Вот и в этот раз нарвался на известный уже многим баг (точнее, адов набор багов) в порте lwIP на микроконтроллеры серии Tiva:

https://e2e.ti.com/support/microcontrollers/other/f/908/t/370852

Смотреть на файл и делать многочисленные фейспалмы можно тут:

https://github.com/yuvadm/tiva-c/blob/master/third_party/lwip-1.4.1/ports/tiva-tm4c129/sys_arch.c

Честное слово, иногда кажется, что выложенные каким-то чуваком самописные примеры работы с lwIP на, прости Господи, 1986ВЕ3Т тестировались куда тщательнее творчества техасовских индусов.

Да, для решения большинства проблем с sys_arch.c из комплекта TivaWare при работе с FreeRTOS достаточно просто подменить этот файл на более нормальный, аппаратно-зависимого там ничего нет, так что берите из любого другого порта lwIP под FreeRTOS.

Хохлосрача пост

Попробуйте доказать мне, что нормальный человек, а не биоробот, способен понять фразу с тройным отрицанием – “не небезпечно”.

Новое слово

Ебсплатное (программное обеспечение) – как бы бесплатное, но придется поебстись, чтобы заставить его работать.

Осторожно, говно

Купил где-то год назад в Чип-и-Дипе горсточку стабилизаторов напряжения AMS1117-3.3. Поставив их в устройство, питающееся от 12-13 В (ток там копеечный, так что сильно греться LDOшка не должна), с удивлением обнаружил, что они очень любят неожиданно умирать, а на выход при этом прилетает полное напряжение питания – что убивает всю остальную схему. То ли это массовый брак, то ли какие-то подделки (на что намекает “Производитель: Китай” в описании) – но брать эти LDO я зарекся.

На аналогичные микросхемы производства Texas Instruments или ON Semiconductor, купленные в том же ЧиДе, нареканий нет (в рамках издевательств подавал им на вход напряжение до 30В, остались живы).

Идея для стартапа

Дейтинговое приложение “Тендер” (через “е”) – излагаешь требования к потенциальному партнеру в духе 223-ФЗ (например – нельзя писать “хочу Анджелину Джоли”, писать “жопа как у Кардашьян” можно, сопроводив это словами “или эквивалент”), а тебе подсовывают страшных уёбищ, при этом удовлетворяющих всем изложенным требованиям.

Передовое штурманское оборудование сезона-2019, часть 2

Тем временем приехал трафарет из OSH Stencils, а это значит, что платы для нового Bluetooth-адаптера я теперь могу собирать быстро и без особого геморроя.

bletrip

Смешного вот напишу

На прошлой неделе три дня промучился с отладкой вроде бы простейшей прошивки для очередного девайса. Если просто – приборчик должен был делать что-то несложное по прерыванию на одном из входов CC2541 и одновременно работать Bluetooth-beacon’ом – казалось бы, что может быть проще? Но я допустил совершенно идиотскую ошибку – перепутал номер порта в обработчике прерывания, написав вместо

HAL_ISR_FUNCTION( drdyHandler, P0INT_VECTOR )

вот такую штуку:

HAL_ISR_FUNCTION( drdyHandler, P1INT_VECTOR )

Что забавно – обработчик прерывания работал (и поэтому был вне подозрений), а вот Bluetooth порой валился с совершенно невнятными ошибками. Все дело в том, что векторы прерываний портов идут подряд, просто “по умолчанию” на месте вектора прерывания оказывается вполне себе допустимая инструкция

MOV R7,A

Она выполняется, выбирается следующая за ней – это инструкция перехода к обработчику другого прерывания, и все почти хорошо – если бы при этом не портился регистр R7. Именно это и приводило к непредсказуемым глюкам.

dаVи по dS

На прошедших выходных прошло ралли “На 7 холмах” – второй этап кубка РАФ по ретро-ралли. Среди прочих развлечений участников ждало дополнительное соревнование на регулярность движения, где средняя скорость задавалась не привычным способом в виде “процентов от ПДД”, а была пропорциональна пройденному на секторе расстоянию.

dk

Например, здесь сразу от старта задана средняя скорость, равная 6,67*5=33,35 км/ч, и при проезде каждых 200 метров дистанции она возрастает на 1 км/ч. Название дополнительного соревнования как бы подсказывает, что для точного расчета норматива штурману придется решить несложное дифференциальное уравнение – перепишем формулу из дорожной книги, учитывая, что скорость – это производная от пути:

f

Как известно, решением этого уравнения будет экспоненциальная функция:

f1

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

f2

Пусть мы проезжаем точку с расстоянием s1 в момент времени t1, а точку с расстоянием s2 – в момент времени t2. Запишем для них предыдущую формулу, немного ее изменив:

f3

f4

И вычтем одно из второго, при этом t0 в левой части сократится, а разность логарифмов в правой части заменим на логарифм частного:

f5

f6

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

f7

Приведу пример расчета по этой формуле – пусть точка старта у нас находится на расстоянии 1,5 км от начала сектора, точка финиша – 5 км от начала сектора, а коэффициент k равен 10 (то есть заданная скорость в момент старта равна 15 км/ч, а к финишу возрастает до 50).

f8

Получается, что весь этот участок надо проехать за 7 минут 13 секунд.

Впрочем, красоту этого всего оценило ровно два штурмана с мехматом в анамнезе – при этом один из них ехал нулем :) Перейду к более приземленному вопросу – как такое ехать? Начну с того, что не надо пренебрегать самым простым вариантом – штурман говорит пилоту заданную скорость, а тот выдерживает ее по спидометру. Вообще, отказаться от расчетов и ехать примерно с заданной скоростью – вполне действенный метод проезда “считальных” РД, если штурман не умеет или не хочет считать.

Если штурман едет, используя для расчетов табличку в Excel – то в этом случае не составит труда ввести в нее расчетную формулу с логарифмом. Главная трудность здесь – это переносить расстояние с одометра в компьютер.

Можно ехать в духе “соревнований по кнопкодавству”, часто меняя заданную скорость в штурманской программе (типа “Чайного навигатора” или TSD Navigator, с которым и ездят сейчас все призеры ретро-ралли). Например, если на этом же РД менять скорость с шагом 10 км/ч каждый километр, то норматив получится таким:

1km

Вместо 7 минут 13 секунд получилось 8 минут 30 секунд – не очень хорошо, но что, если штурман может жать на кнопки быстрее и меняет заданную скорость каждые 500 метров?

500m

478 секунд, уже лучше – и поверьте мне на слово (ну или можете самостоятельно посчитать в том же Excel), что если штурман – истинный виртуоз своего дела и жмет на кнопки каждые 100 метров, то норматив будет равен 441 секунде, что отличается от идеального времени на 8 секунд.

Ну и наконец – лучше всего найти штурмана, закончившего мехмат, ВМК или физтех, например – так как возможны и новые шутки от организаторов.