7 заметок с тегом

edu

Экзамен по ассемблеру

Как-то на встрече с друзьями речь зашла про университетские экзамены, и я вдруг вспомнил экзамен по ассемблеру на третьем (?) курсе.

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

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

На пересдаче был еще внимательнее. К чести кафедры, это закаляет!

Parser

На днях в Твитере был прекрасный флешмоб #FirstSevenLanguages, мы вспоминали свои первые 7 языков. У меня список такой: Pascal, Parser, C, JavaScript, Objective-C, Ruby, Swift, Go.

Расскажу немного про Парсер: это язык Студии Лебедева для скриптования сайтов. Объектно-ориентированный.

Я веду свой блог с 2006 года, этот блог увидел свет благодаря движку, который я тогда написал на Парсере. И залил на хостинг. (Спустя несколько лет блог переехал на Эгею.) Тогда модно было создавать движки блогов.

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

Но он странный же: не си-подобный, но и не функциональный. И со своими тараканами. Хотя, может быть именно это меня подготовило к Objective-C? :]

@body[]
<center>
^navigation_sml[]
</center>
^post_content[]
<p></p>

Похоже ведь — и @, и ^. И [ ] !!!

Но вообще, конечно, получается php-подобное говно: смесь логики и представления.

Там даже есть оператор ::, с той же ненужной коннотацией, что и в плюсах:

@show_image[id]
$turing[^captcha_pic::create[$id]]
$tmp[^turing.image[]]
$response:body[^tmp.gif[]]

В 16 лет все это было очень интересно! И я все еще утверждаю, что у Парсера тогда была хорошая документация на русском языке. Это было удобно, когда я не так хорошо читал по-англиски.

2016   code   edu   parser

Moscow Coding School

Прошлые курсы по айос-разработке в школе MCS были в зимой. Я иногда встречаю наших студентов, и расспрашиваю об успехах. Это интересно.

Один из студентов сменил профессию и теперь работает джуниор-разработчиком в известной московской компании. И ему это нравится. На зимнем интенсиве была тема про VIPER — и вот! — привет, Егор и ребята ;)

Зимний интенсив, кстати, был уникальным: он занимал все январские праздничные выходные. Мне кажется, там были только самые супер-мотивированные студенты!

Другой студент пришел на курс с идеей системной айос-клавиатуры с особенным, аккуратным оформлением и поведением (дизайном). После курса он сделал-таки свою клавиатуру. А потом запускал разные парсеры и пауки для обхода сайтов. На Свифте, разумеется.

Moscow Coding School приносит пользу. По этому поводу — анонс моего нового курса по айос-разработке на Свифте для новичков: moscoding.ru/swift/

Для анонса на сайте меня попросили написать краткое био. Пришлось вспомнить всякие интересные факты:

Первую программу для Мака написал в 11 лет на точном советском клоне компьютера Apple II. В университете изучал программирование микропроцессоров. Программировал Айфоны еще при Джобсе. Использую Свифт в продакшене.

Люблю работать в стартапах: Рокетбанк, Luuk, Paste. Сейчас занимаюсь независимой разработкой и консультирую программистов со всего мира по языкам Си, Обджектив-Си и Свифт. Участвую в Московском сообществе CocoaHeads Moscow.

Не свидетель секты запрета goto и #define. Считаю, что нельзя из #define делать новый язык, а из goto — макаронный код. Все остальное можно. Также увлекаюсь «рельсами», Ардуино и сноубордингом.

2016   edu   Swift

Немного схемотехники

Что будет, если в цепь лампочки и батарейки параллельно включить конденсатор? Лампочка плавно загорится. То есть так можно сделать мигающий индикатор как на Макбуке, дышащий в такт человеку?

cover!

Ну, делать мигающую лампочку с помощью конденсатора — не тру. Это тратит много энергии. Лучше — с помощью ШИМ, как уже известно читателям этого блога ;-) В управлении силовой электроникой только импульсные техники используются. Ничего не меняется плавно. Только импульсы: 0 Вольт—x Вольт.

Определение. Электронная схема — это система, где циркулирует информация, представленная электромагнитными явлениями, то есть: электрическими зарядами, постоянными и переменными электрическим и магнитным полями.

Начнем с того, что цифровая схемотехника является подмножеством аналоговой. Поэтому, мигающую лампочку можно сделать как на Ардуино, так и на транзисторах. Второй вариант интереснее с точки зрения схемотехники, но размер чипа какого-нибудь Atmel AVR — 8×8×1 мм. На дискретных транзисторах нет никакого шанса сделать компактнее и надежнее.

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

Как ШИМ плавно меняет количество поступающей энергии?

// 1: _______________|‾‾‾‾‾‾|______________|‾‾‾‾‾‾|______________|‾‾‾‾‾‾|

// 2: _______|‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______|‾‾‾‾‾‾‾‾‾‾‾‾‾‾|______|‾‾‾‾‾‾‾‾‾‾‾‾‾‾|

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

Как правило, постоянная времени изменения управляющего сигнала намного меньше периода следования испульсов. Поэтому от импульса к импульсу изменения будут совершенно незаметны.

Но каким образом сначала лампочка горит ярко, а через три секунды тускло? Что изменилось? Скважность ШИМ-сигнала меняется от времени.

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

См. также:

2016   edu   на пальцах™

0.1 + 0.2

Присылают мне сегодня комикс про Джаваскрипт. Разберем его.

Комикс про Джаваскрипт

Я, было, подумал, что шутка в том, что сложить в Джаваскрипте можно что угодно с чем угодно. Но, оказывается, шутка в том, что сумма будет равна 0.30000000000000004, и это, типа, жесть :-)

Я проверил в Руби и Питоне, результат такой же:

irb(main):001:0> 0.1 + 0.2
=> 0.30000000000000004

>>> 0.1 + 0.2
0.30000000000000004

Так вот, это не шутка. Но почему не 0.3?

Потому что 0.3 в принципе не представими в виде плавающей точки, возможно*.

Плавающая точка — это, фактически, представление числа на неравномерной сетке, с нелинейным шагом, который зависит от числа. Около 1 шаг будет, грубо говоря, 1/10⁹, а около 10⁹ это уже будет 1.

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

То есть, в памяти — не то, что ты думаешь и печатается не то, что ты думаешь :)

Сноска *: В данном случае, погрешность, может, и правда, из-за перевода в основание 2:

0.3₁₀ = 0.01001100110011(0011)₂

Короче, можно просто считать, что никогда не стоит доверять плавающей точке и всегда использовать fuzzy compare.

Тема очень интересная. Discuss!

И, конечно, огромное спасибо Саше за консультацию!

2015   code   edu   math
2015   edu   in English

PWM / ШИМ

Pulse-width modulation / широтно-импульсная модуляция:

Pulse-width modulation / широтно-импульсная модуляция
B — сигнал, V — уровень напряжения
2013   edu   in English