Тег ‘книги’

Немножко о позднесоветской микроэлектронике

Немножко угорев по советским VAX-ам, полистал книжку Б. М. Малашевича “50 лет советской микроэлектронике”, где довольно подробно описана история создания микропроцессорных комплектов серий 1801 и 1839. В книжке, конечно, все написано в духе “сам себя не похвалишь – никто не похвалит” – впрочем, автор и сам прекрасно описывает эту практику:

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

Здесь речь идет о 1801 серии – которая была во всех отношениях довольно оригинальной. Малашевич, конечно, сильно сетует на то, что “оригинальную” систему команд “НЦ”, изначально реализованную в этой серии, заменили системой команд PDP-11 – но он электронщик, его хлебом не корми, дай сделать что-то свое, ни с чем не совместимое – в то время как любому программисту понятно, что лучше ДВК с ОС ДЕМОС, чем с какой-то непонятной фигней :)

Впрочем, про историю ДВК и БК есть и у Малашевича, а мы сейчас пойдем чуть дальше – в 1985 году была начата ОКР “Электроника-32″ по разработке совместимого с VAX (это следующая за PDP-11 архитектура процессоров фирмы DEC). Примерно одновременно с этим ГДРовские немцы срисовали выпущенный VAX микропроцессорный комплект microVAX II, и вроде бы эти микросхемы начали выпускать (а похоже – только корпусировать) в Воронеже на заводе “Процессор” под названием 1807 серии – но это совсем другая история.

1839 комплект

В “Ангстреме” срисовывать было западло, поэтому 1839 серия – полностью оригинальная. В интернете можно найти даже исходники (!) микрокода с забавными комментариями вроде “2500 И 2501 – TOЧKИ BXOДA ДЛЯ CБOEB HAYMEHKOBA И ГEPЫ”. Разработка в основном была завершена в 1988 году, и по словам Малашевича “Комплект был существенно мощнее ЭВМ «micro-VAX-I» и несколько превосходил «micro-VAX-II», выпущенных примерно в то же время фирмой DEC”. Здесь мы сталкиваемся как раз с описанным в процитированном выше абзаце “лукавством” – сопоставимые с К1839ВМ1 (время цикла 200 нс) microVAX (время цикла 250 нс) и microVAX II (200 нс) были выпущены в 1983 и 1985 году соответственно, а в конце 1987 вышла уже следующая серия, под названием CVAX – со временем цикла 80 или 90 нс, то есть почти в 2,5 раза более производительная. CVAX был снабжен забавной надписью прямо на чипе – американцы попытались перевести на русский фразу “CVAX: When you care enough to steal the very best” (получилось вот так: “СВАКС… Когда вы заботите (?) довольно воровать настоящий лучший”), но похоже, что адресаты ее так и не смогли оценить:

cvax

Кроме того, в момент выпуска 1839 серии “Ангстрем” с трудом осваивал двухмикронную технологию (с обычными осложнениями этого всего в виде позднесоветского раздолбайства на всех уровнях, очень рекомендую прочитать записанное социологом Белановским “производственное интервью” с рабочим “Ангстрема” – и осознать уровень творившегося там пиздеца) – а DEC вообще собственного полупроводникового производства не имел, но… Уже во время разработки первого microVAX в Штатах существовали компании по заказной разработке интегральных схем, и готовые сделать “что угодно” производители микросхем – что описано в “рекламной” статье DEC и фирмы Silicon Compilers (которая спроектировала топологию микросхемы). Intel в те же годы выпустил первые 386 процессоры с технологическими нормами 1,5 микрона. Представляете? Целое советское министерство оказывалось в догоняющем положении по отношению к одной из многих американских фирм – кроме DEC и Intel, проектированием 32-битных микропроцессоров баловались Motorola, SUN, кучка фирм поменьше – а некоторые занимались многими проектами параллельно, например, тот же Intel.

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

PS Книжку Малашевича стоит прочитать в том числе и ради “разоблачения” популярного нынче мифа о Филиппе Старосе (он же Альфред Сарант), который якобы спроектировал первый в СССР “персональный компьютер” и даже показал его Хрущеву.

Программирование: теоремы и задачи

Вот кстати, хочется рассказать о неплохой книжке по алгоритмам и структурам данных – “Программирование: теоремы и задачи” А. Х. Шеня (свободно распространяется в электронном виде, на бумаге несколько раз издавалась МЦНМО). Вот все знают книжки, скажем, Кнута (но мало кто их читал), Кормена (тут ситуация немного получше), Дасгупты или Скиены – а я хочу сказать, что эта брошюрка (320 страниц, на фоне среднего “айтишного” учебника в тысячу-полторы – это ни о чем) по глубине изложенного материала не уступает как минимум двум последним.

Особенность книжки – в изложении материала. Это не столько учебник/справочник, сколько задачник, построенный по логике “системы задач на листочках”. Эта система применяется, скажем, во многих московских матшколах и состоит примерно в следующем – на каждую тему выдается список задач (”листочек” – обычно они помещаются на лист формата A4), часть задач может иметь и самостоятельную ценность (как полноценные теоремы; иногда содержательные утверждения разбиваются на несколько подряд идущих задач). Сложность задач возрастает, для перехода к последующим листочкам надо либо решить текущий целиком, либо решить большую часть задач (в этом случае листочки могут содержать и нерешаемые задачи). Часть задач может разбираться “у доски” (прежде всего что-то основополагающее), остальные предназначены для самостоятельного решения.

В общем, получился такой сборник задач по алгоритмам для старших школьников или студентов-младшекурсников, не отягощенный излишней сложностью (как тот же Кормен), но и не скатывающийся в сюсюкание, как Бхаргава. Использовать как справочник проблематично, а как набор задач для самостоятельного понимания этого всего – в самый раз. В непонятных местах можно дополнить книжкой Дасгупты или Скиены.

PS Издание 90-х годов сопровождалось совершенно шикарным текстом – “Не покупайте эту книгу!” (кликабельно):

dont-buy-this-book

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

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

Game Engine Black Books

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

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

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

Русский перевод The Art of Electronics

Зашел тут на днях в книжный магазин и увидел красивое свежее издание Хоровица и Хилла. Взял полистать – на первый взгляд ничего, но наткнулся глазом на фразочку – “подробнее мы рассмотрим это в 12-й главе” – а было написано это уже в конце книги. Посмотрел оглавление – опа, а 12 главы нет, есть только 9 или 10! Решил уточнить вопрос – и оказалось, что “Бином” уже давно печатает “так называемое 7 русское издание” – урезанный вариант того, что переводилось еще издательством “Мир”. Хорошо, что не купил!

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

А вот посоветуйте книжек

Насоветовал тут в фейсбуке кучку книжек по программированию микроконтроллеров:

https://www.facebook.com/tikhonovruslan/posts/2193043937400492

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

  • Что такое микроконтроллер? (опционально – что такое ARM, Cortex, STM32 и так далее)
  • Устанавливаем среду разработки (без нее вот просто никуда, даже светодиодом не поморгать без Keil)
  • Пишем простейшую программу (тут половина читателей отваливается, потому что даже “простейшая” программа требует шаманства в виде настройки тактирования, и идет делать сайты на PHP)
  • Работаем с GPIO
  • Работаем с таймерами
  • Работаем со всякой остальной периферией
  • Тема для продвинутых – что такое DMA и как с ним жить
  • Тема для очень продвинутых – как в CubeMX накликать в проект FreeRTOS

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

В общем, что есть хорошего на эту тему “для продолжающих”, с описанием принятых “лучших практик”?

Development and Deployment of Multiplayer Online Games

Посмотрел “бета-версию” будущей книжки Development and Deployment of Multiplayer Online Games: from social games to MMOFPS, with stock exchanges in between.

dnd-of-mog

Разумеется, она не столько про мультиплеерные игры, сколько про распределенные системы “вообще” – к таковым можно отнести, например, всякие там биржевые системы (автор, Сергей Игнатченко, упоминается тут, как один из разработчиков торговой системы РТС). Рассматривается буквально все – от нюансов программирования на C++ (вплоть до всевозможных заблуждений) до архитектуры “в целом“. Очень понравились главы про сетевое взаимодействие, выбор между TCP и UDP, некоторые неочевидные нюансы этих протоколов.

Сейчас вышел на бумаге первый том (из планируемых 9), почти готов второй, третий – в состоянии бета-версии (все три есть на Leanpub).

Адитья Бхаргава, Грокаем алгоритмы

Мельком просмотрел тут одну детскую книжку по “алгоритмам”.

bhargava-algorithms

Удивлен большим количеством положительных отзывов на нее – причем ее рекомендовали, как вполне себе “взрослый” учебник, позволяющий быстренько подготовиться к собеседованию (собственно, вопросы “про алгоритмы” на программистском собеседовании – это некая форма карго-культа). На самом деле объем изложенного там материала катастрофически мал, местами вообще создается впечатление, что книга написана по принципу – взять “полноценный” учебник по “алгоритмам” (что-то типа Кормена или Дасгупты), выкинуть все сложное, а оставшееся максимально упростить. Все это разбавляется некоторым количеством смешных картинок – и готово.

Возможно, это и неплохо для детской книги – даже очень талантливый и старательный семи-восьмиклассник вряд ли будет настолько усидчив, чтобы самостоятельно разрисовать что-то вроде диаграммы стековых вызовов для несложной рекурсивной функции, а здесь она приведена в готовом виде – но есть несколько “сюжетов”, которые при таком подходе очень сильно “повисают в воздухе”. Особенно почему-то досталось O-нотации, которая здесь изложена в виде “как ее понимает средний программист” (а уж подсчет сложности тривиальной сортировки – O(n2) – во второй главе – это просто песня!).

Кратенькое резюме такое – неплохо для семиклассника, читающего под одеялом с фонариком журнал Ксакеп, для взрослого человека скорее бесполезно, в качестве справочника заменяется любым cheatsheet-ом вроде такого:

https://algs4.cs.princeton.edu/cheatsheet/

Introduction to Applied Linear Algebra

Нашел замечательную просто книжку по линейной алгебре – точнее, той ее части, которая нужна в “машинном обучении”. Так и называется – Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares, издана Cambridge University Press, но на официальном сайте доступна и электронная версия.

vmls_cover

Это не совсем учебник по математике в “строгом” смысле – многие вполне содержательные утверждения там приводятся без доказательства, но скорее – сборник многочисленных “прикладных” примеров, причем в самых разных областях – от эконометрики до классификации текстов. Думаю, вполне подойдет тем, кому слова “матрица” и “вектор” напоминают о страшноватой “высшей математике”.

А. А. Бек, “Талант” (”Жизнь Бережкова”)

<sarcasm>

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

</sarcasm>

А если серьезно – очень рекомендую.

О профессиональной этике

Полистал тут книжечку Modern Assembly Language Programming with the ARM Processor by Larry D. Pyeatt, в частности, главу про арифметику с фиксированной запятой. В этой главе упоминается про известный случай с заглючившей системой Patriot, а в одном из упражнений предлагается обсудить это, исходя из положений Software Engineering Code of Ethics And Professional Practice.

Интересно, а многие ли отечественные программисты слышали про такой документ?

Understanding the Digital World: What You Need to Know about Computers, the Internet, Privacy, and Security

Оказывается, Брайан Керниган (один из авторов языка программирования C и операционной системы Unix) еще не впал в маразм и недавно (в 2017 году) написал книжку с подзаголовком “что нужно знать о компьютерах, Интернете, приватности и безопасности”.

understanding-the-digital-world

Основное содержание книги – что-то вроде конспекта курса лекций по “Введению в Computer Science”, или CS 109 в университете Принстона (кстати, очень полезно посмотреть задания и лабораторные по этой ссылке). Примерно 3/4 книги повторяют более раннюю “D is for Digital: What a well-informed person should know about computers and communications”, но здесь добавлен новый материал по криптографии, безопасности и тому подобным вопросам.

Если вам интересно, что действительно должно быть в нормальном современном учебнике по “Основам информатики и вычислительной техники” – посмотрите эту книгу и упражнения к ней.

Был бы человек, а статья найдется

Сегодня (да, бля, сегодня! часа так в три ночи) узнал, что одна из популярных фразочек на тему “не зарекайся” – “Любого человека, ничего ему не объясняя, можно посадить в тюрьму лет на десять, и где-то в глубине души он будет знать, за что,” – это не просто какая-то придумка отечественных юмористов, а приписываемая швейцарскому писателю Фридриху Дюрренматту цитата. Поиски первоисточника, правда, результатов не дали – в “Визите старой дамы” этих слов нет; что-то подобное встречается в “Аварии” – но только подобное.

Впрочем, почитав Дюрренматта, начал лучше понимать записи vit_r под тегом “switzerland“.

Задача по математике

Думаю, экс-матшкольникам будет интересно. Все те же “Пятьдесят лет в строю” Игнатьева, описание вступительных экзаменов в Академию Генерального штаба (1899 год):

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

— Переходите к геометрии. Что у вас там? Круг? Вот и отлично.— И вместо столь знакомых мне теорем по учебнику Семашко, на которых зиждилось все преподавание геометрии в корпусе, маленький генерал велел начертить просто круг, потом другой, побольше, и предложил определить центры всех третьих кругов, касающихся первых двух.

Подобных задач на построение в корпусе мы никогда не решали, и в программах о них не упоминалось. Шарнгорсту дела до этого не было, и он заставил меня мучиться у доски добрых два часа. То и дело мне приходилось стирать многочисленные хорды и перпендикуляры.

Доска стала уже сероватой, мундир мой покрылся мелом, горькая обида туманила сознание, а мой мучитель изредка только подходил и приговаривал: «А есть еще случай, вами неразобранный…»

http://militera.lib.ru/memo/russian/ignatyev_aa/07.html

Как бы я решал эту задачу? Скорее всего, обратил бы внимание на то, что задача сводится к нахождению точек, разность расстояний от которых до центров построенных окружностей фиксирована – а дальше ввел бы подходящую систему координат и записал бы в ней уравнение соответствующей гиперболы (и да, надо действительно рассмотреть несколько случаев). Может быть, совсем красиво получится, если перейти к проективной геометрии – но все это фантазии, а некоторая неприятность состоит в том, что – цитирую абзац чуть раньше -

Программа вступительных экзаменов по математике не предусматривала даже аналитической геометрии…

Конечно, аналитическую геометрию многие из поступающих в той или иной степени могли знать – скажем, закончивший кадетский корпус Игнатьев должен был быть знаком с ней – но все же интересно, можно ли сравнительно легко и быстро решить эту задачу “элементарными” методами, не выходя за рамки обычного гимназического учебника Киселева (его можно найти и в электронном, и даже в бумажном виде, в отличие от упомянутого выше Семашко)?

UPD Учебник Франца Ивановича Симашко “Начальная геометрия и конические сечения” (использовавшийся в кадетских корпусах) удалось найти в электронном виде:

http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-4472/Simashko_F_Nachalnaya_geometriya_i_konicheskie_secheniya.pdf

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

Стартаперу на заметку

Граф Алексей Алексеевич Игнатьев – о тонкостях elevator pitch:

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

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

Если же, наконец, вы решались обратиться к настоящему серьезному банкиру, которым являлся в ту пору Париж, то вам следовало для верности заехать сперва в Брюссель и заручиться там хотя бы только принципиальным одобрением какого-нибудь бельгийца. Появившись с ним во французском банке, вам не следовало открывать всех ваших карт, запугивать «нулями», сулить крупные барыши через десять лет, а просто запросить только первую необходимую для начала сумму и доказать возможность заработать хоть какие-нибудь гроши, но в кратчайший срок. Раз французский капиталист дал первые франки, он будет не в силах считать их потерянными — il courra après son argent (он побежит за своими деньгами) и никогда не даст вам погибнуть. Мнение бельгийца как тяжеловатого на подъем, но серьезного дельца послужит вам лучшей рекомендацией.

http://militera.lib.ru/memo/russian/ignatyev_aa/35.html

А. В. Столяров, “Программирование: введение в профессию”

Посмотрел на свежие “краудфандинговые” книги А. В. Столярова:

http://stolyarov.info/books/programming_intro

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

Можно ли с чисто педагогической точки зрения яростно обличать “стандартизаторов” языков C и C++? Возможно, не все, что они делают – правильно, но стоит ли осуждать в учебнике (!) современные стандарты? Сам автор книги давно ушел из большого секса, но те, кто по этой книге учится сейчас – будут профессионально заниматься программированием через 4-5 лет. Местами есть относительно разумные объяснения, какими возможностями из новых стандартов пользоваться не стоит – но в целом “вместе с водой выплеснули и ребенка”, и, скажем, о существовании того же stdint.h вообще не упоминается. Можно ли сейчас считать компетентным программиста на C, не знающего о существовании этого заголовочного файла – вопрос риторический.

В общем, местами книги можно считать хорошими, местами – приемлемыми, а кое-что вообще следовало бы вычеркнуть. Явно не подходит для “введения в профессию” – а вот как элементарный справочник по программированию в Unix-подобной среде использовать можно, если грамотно отделять тараканов автора от фактического материала.

Про книжки вопрос

Разбираюсь сейчас с одним проектом с использованием Keil MDK. Первым делом, конечно же, нашел старую, но местами актуальную (особенно в моем случае, где используется довольно старая версия MDK) книжку Тревора Мартина “Микроконтроллеры ARM7 семейств LPC2300/2400″. Некоторую ценность представляет 6 глава, где довольно подробно рассказывается о возможностях ОС Keil RTX.

Но вот сегодня я решил все-таки обратиться к фирменной документации (ну, помимо встроенной справки) – благо книжка Getting Started: Building Applications with RL-ARM доступна совершенно бесплатно – и просматривая раздел про RTOS, испытал ощущение, что где-то я это все уже видел. И действительно – эти две публикации практически дословно повторяют друг друга.

Конечно, русское издание книжки Мартина – очевидный бестселлер, особенно несколько лет назад. Далеко не все отечественные “эмбеддеры” владеют английским языком в достаточной степени, чтобы читать документацию на языке оригинала (некоторые и русским не владеют, но это уже совсем печально) – так что достаточно хороший перевод официального руководства не помешает.

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

Очень полезное руководство по фотографии

introduction-to-camera-game

Отзывы на амазоне – просто супер.

Про информатику

Почесал языком в нескольких фейсбучных дискуссиях по поводу преподавания информатики в школе – вот ссылки, если кому интересно:

https://www.facebook.com/tikhonovruslan/posts/1537512619620297
https://www.facebook.com/olartam/posts/1627949730588444
https://www.facebook.com/olartam/posts/1627985307251553

Между делом осознал, насколько крут был старый, еще советский, учебник Кушниренко, Лебедева и Свореня “Основы информатики и вычислительной техники”.

Купил книжку

Михаил Горбачев, “Гонки в СССР”:

gonki-sssr

Открыл на первой попавшейся странице и обнаружил подробное описание регулировки кастера на ГАЗ-24 с помощью кувалды. Не зря купил.