Category: компьютеры

Category was added automatically. Read all entries about "компьютеры".

moose, transparent

язык программирования и его рамки

Когда обучаешь ребенка программированию с нуля, это, наверное, хороший способ узнать, какие важные принципы или правила кажутся само собой разумеющимися, но на самом деле их надо перенять и впитать. Я писал уже в прошлый раз о том, что очень важно на мой взгляд работать над прослеживанием работы программы у себя в голове. Следующий урок с моей дочкой заставил меня задуматься о том, как мы вообще представляем себе инструкции, которые даем компьютеру. Язык программирования это *язык*, но в отличие от человеческих языков он требует от нас сознательно ограничить себя в том, что мы пытаемся сказать.

Я начал урок с нескольких заданий растущей сложности. Ребенок уже знает, что такое PRINT "something", PRINT X, INPUT X, IF/THEN/ELSE, GOTO, и выражения типа X=X+1, хотя я не уверен пока что, что твердо понимает, что такое переменная в отличие от просто числа.

- Итак, начинаем с программы, которая просто печатает имя JULIA.
- Это легко: 10 PRINT "JULIA".
- Теперь пусть программа распечатает это пять раз подряд.
- Тоже легко: 10 PRINT "JULIA JULIA JULIA JULIA JULIA JULIA".
- Нет, пусть каждое имя будет отдельно на своей строке.
- Хорошо, тогда 10 PRINT "JULIA", 20 PRINT "JULIA" итд.

- Теперь следующее задание. Пусть программа спросит у меня число, и если например это 4, то она четыре раза напечатает JULIA.
- Хорошо, начинаем с 10 INPUT X, это мы умеем. А теперь...

И тут ребенок серьезно завис, причем не так, как я ожидал. Мы не учили еще циклы, но она уже знает, как что-то делать снова и снова и остановиться по условию (IF ... THEN END, а потом GOTO назад на нужную строку). Я думал, что она пойдет в эту сторону, но будет сложно переоткрыть идею переменной-счетчика. Оказалось - нет, она пыталась найти способ "сказать" компьютеру сделать именно то, что надо, за один раз. Например, может PRINT X "JULIA"? Нет, так это не работает. А если PRINT "JULIA" * X? Нет, это же умножение, а "JULIA" это не число (да, я знаю про Питон). Папа, а как будет "раз" по-английски, чтобы написать "X раз"?

То есть сложной является сама идея того, что язык программирования - "интерфейс" разговора с компьютером - твердо ограничен некоторыми рамками, и надо в них укладываться. Да, мы не учили конечно еще весь язык, только малую часть, но у нее не было интуитивного ощущения того, что есть эта граница, мы просто до нее не добрались еще. Я несколько раз старался объяснить, что надо решить это задание, пользуясь только тем, что мы уже знаем, и составляя это вместе, но ей, кажется, было сложно понять, как это вообще. Сказали "распечатай X раз", надо найти способ сказать компьютеру это, чтобы он сделал. Идея "сознательно разбить задание на более элементарные шаги, про которые мы уже знаем, что компьютер умеет их выполнять", оказывается сложной и неинтуитивной.

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

- Давай сделаем что-то другое. Начнем с программы, которая просто печатает 1 2 3 4 5, каждое число отдельно.
- Это легко. 10 PRINT 1, 20 PRINT 2 итд.
- Хорошо, теперь, как сделать, чтобы программа печатала 1 2 3 4 5 6 итд. и не останавливалась, до тысячи и дальше?

Тут пришлось подумать. Я напомнил "как мы делали, чтобы программа делала что-то снова и снова, как в игре про 4 2 1?". Да, точно, GOTO. Первая попытка: 10 PRINT 1, 20 GOTO 10. Очевидно неверно. Что нужно делать, чтобы число все время менялось? Да, точно. Следующая попытка: 10 X=1, 20 PRINT X, 30 GOTO 20. Опять не то, да, забыла увеличить число. Следующая попытка:
10 X=1, 20 PRINT X, 30 PRINT X=X+1, 40 GOTO 20. Что-то не так, что? Нет четкого разделения PRINT и присваивания в уме, оба что-то делают с X. Подумай, что надо изменить. Следующая попытка наконец верна: 10 X=1, 20 PRINT X, 30 X=X+1, 40 GOTO 20. Наслаждаемся бегущим рядом чисел. (все это занимает вместе считанные минуты, просто мне показалось интересным записать подробно эти попытки, и первый опыт по сути отладки программы).

- Хорошо, а теперь можешь сделать так, чтобы она печатала не до бесконечности, а когда дойдет например до 20, остановилась?

Подумала, вспомнила про IF ... THEN END, перечитала прошлую программу, где это использовала, и вставила 35 IF X=20 THEN END. Работает!

- А можно теперь сделать так, чтобы программа сначала спросила у меня число, а если я сказал например 15, она потом остановилась, когда дойдет до 15?

Подумала, вставила 5 INPUT Y, и заменила условие IF X=20 на if X=Y. Работает!

Но не совсем. Если я ввожу 20, она печатает до 19 и останавливается. Что не так? Почитала еще раз программу, подумала, и заменила условие на IF X=Y+1 (лучше было передвинуть условие раньше, перед увеличением, но это уже мелочи).

ОК, теперь у нас есть программа, она работает. Запустили несколько раз, проверили, все хорошо.

- Хорошо, теперь я тебя попрошу сделать небольшое изменение, ты только не пугайся, если это немного взорвет мозг. Попробуй вместо 20 PRINT X написать 20 PRINT "JULIA". Что тогда будет?

Стала изменять это в программе, еще до запуска появилось подозрение. Запустила. Шок, изумление на лице, "Папа, ты взорвал мне мозг! Это же делает то, что ты от меня хотел. Действительно, это же так просто!"
moose, transparent

непристойное

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

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

Я погуглил, почитал, и вы знаете, что оказалось? (да знаете, конечно, один я такой болван). Оказалось, что там нет никакого протокола, там просто аналоговый сигнал. Напряжение в вольтах напрямую соответствует амплитуде звука. И все.

Вот уже несколько дней не могу придти в себя. Как же это так? Умом понимаю, но сердце отказывается. Нет протокола, нет хендшейка, нет версии, нет контрольной суммы, но как?! Даже битов нет, один голый ток. Есть в этом что-то неприличное, непристойное. Будто кто-то разделся, извалялся в грязи и в таком виде бегает по улицам и машет руками. На наушники теперь смотрю с подозрением. Вот они, лежат передо мной, провод извивается и уходит к разъему в компьютере. А по этому проводу такое идет, ну как же это так?
moose, transparent

достали

Как убрать бесконечные поп-апы "можно ли спамить вас уведомлениями", если вы пользуетесь Chrome:

Settings -> Advanced -> Site Settings -> Notifications -> change "Ask Before Sending" to "Blocked".

Все, больше их не будет. You're welcome.
moose, transparent

утренние ссылки: компьютерная тематика

Утренние ссылки: компьютерный выпуск.

  1. Introducing Translatotron: An End-to-End Speech-to-Speech Translation Model. Гугл натренировал нейронную сеть, чтобы та переводила напрямую речь на одном языке в речь на другом языке, не пользуясь промежуточной текстовой репрезентацией. Опционально можно сохранить в переводе тембр чтеца на языке оригинала. Очень круто, хоть результаты и уступают немного лучшим на данный момент системам "через текст". В примерах в конце записи заметны небольшие неточности в переводах.

  2. Talk To Transformer. Испытайте сами нашумевшую в последнее время языковую модель GPT-2 от OpenAI (не полную ее версию, правда). Напишите или скопируйте что угодно по-английски, и машина продолжит речь, иногда с пугающе впечатляющим результатом.

  3. Google and Binomial Partner to Open-Source Basis Universal Texture Format. Новый формат для сжатия картинок, который, если я верно позволяю, экономит место не только на диске, но и в оперативной памяти, потому что по дороге в GPU, и даже в самом GPU, картинка остается сжатой (если кто-то понимает, как это устроено внутри GPU, расскажите, интересно).

  4. Why I (still) Love Tech. Не очень внятная, но пропитанная приятной ностальгией тирада о том, как олдскульные хакеры 80-х и 90-х своими руками выпестовали современную эру "три микрочипа в каждой мозоли и фейсбук из ушей", не подозревая об этом. Несколько обязательных слов о том, что компьютерная индустрия это мир "белых мужчин", но, к счастью, буквально несколько, видно, что автор не об этом хочет поговорить.

    "How do you change an industry that will not stop, not even to catch its breath? We have no leaders, no elections. We never expected to take over the world! It was just a scene. You know how U2 was a little band in Ireland with some good albums, and over time grew into this huge, world-spanning band-as-brand with stadium shows with giant robotic structures, and Bono was hanging out with Paul Wolfowitz? Tech is like that, but it just kept going. Imagine if you were really into the group Swervedriver in the mid-’90s but by 2019 someone was on CNBC telling you that Swervedriver represented, I don’t know, 10 percent of global economic growth, outpacing returns in oil and lumber. That’s the tech industry."

  5. 2D Graphics on Modern GPU. Выглядит интересно; код, к сожалению, написан под Apple'овский API, которого нет на других платформах.

  6. Writing a Technical Book for Manning. Очень подробный пост о том, как автор опубликовал техническую книгу про HTTP/2 в издательстве Manning. Вся внутренняя кухня: как устроен контракт, сколько книг он продал и сколько денег получил, как устроено сотрудничество с издательством, какие форматы используются, что делают тамошние редакторы итд. итд. Автор не стесняется признать, что почти ничего не знал о теме своей книги, когда издательство ему предложило ее написать (на основании того, что он написал об этом популярную блог-запись). Я, впрочем, не помню, когда в последний раз открывал или покупал книгу такого рода; но все равно любопытно было прочитать.
moose, transparent

начинается с одного шага

Прошлая неделя началась с неожиданного желания купить новый монитор. А дальше...

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

- но если я куплю новую карту, мой старый блок питания не даст достаточно мощности

[пропускаем много шагов здесь]

- но если я меняю материнскую плату, и новая поддерживает новый супер-быстрый формат NVME SSD-дисков, будет жалко ставить обратно мой старый SSD

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

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

Теперь у меня в комнате вброшено много частей, и предстоит Сборка.
moose, transparent

невыносимая длительность минуты

Понравился комментарий на HN о том, как автор много лет назад, работая в университет, выбил бюджет на апгрейд компьютеров в лаборатории:

When I was a CS prof, many, many years ago, our undergraduate lab had Macs with floppy disks. I asked the University to pay for installing 10MB Hard Drives in the Macs. I was asked to present my case to the deans council. At the meeting, I said that the students used the floppy to load their development environment. I said that, with a hard drive, it took 10 secs to load and be ready. With the floppy, I said it took 30 seconds. Then I said, "That does not sound like much difference, but this is 10 seconds ...." I paused and looked at my watch for 10 seconds. Then I said "And this is 30 seconds" - again I looked at my watch. At the 20 second mark, the VP Academic (chair of the meeting) said "You have your money".


(он продемонстрировал разницу между "ждать 10 секунд загрузки" и "ждать 30 секунд загрузки" тем, что во время заседания отмерил точно это время по часам. Декан не дождался конца 30 секунд и сказал, что согласен выделить деньги)

Напомнило это из "Записок и выписок" Гаспарова:

МИНУТА МОЛЧАНИЯ: в 1960—1990-е годы в среднем длилась 20 секунд. В «Затмении» Антониони незабываемая минута молчания на бирже длилась все-таки 30 секунд. Когда в античном секторе ИМЛИ мы поминали ушедших, то я никого не поднимал с места, но за полнотой минуты следил по секундной стрелке. Со стороны это должно было выглядеть отвратительно, но время ощущалось не символическое, а настоящее.


Есть ли еще примеры этой идеи, того, как долго течет настоящая минута по часам?
moose, transparent

несколько технических ссылок

(для программистов и других технарей)

1. Some notes about HTTP/3, и обсуждение на HN.

Из комментариев, важная мысль: the whole point of QUIC is that it is a userspace implementation. From the QUIC viewpoint kernel implementation is death for a protocol because it freezes its specification and behaviour in slow-to-update systems. This is why they found they couldn't "just improve TCP".

2. Lag & Blanking explained



Видео на 16 мин; подробное обсуждение того, как работали CRT-телевизоры, и как игры того времени использовали особенности пути электронного луча: H-Blank, V-Blank, я почти уже успел забыть, что это такое, а тут объясняется подробнее, чем я когда-либо знал.
Высокого качества визуализации.

Одну вещь я тут не понял. Эта картинка впечатляет, тут нарисованы инструкции CPU (раскрашены в несколько цветов по видам) и время их выполнения в течении одного фрейма монитора.



Про широкую полосу в центре картинки сказано, что это CPU приостанавливается на время DRAM refesh памяти (почитайте по ссылке, там тоже очень хорошо написано). Но почему периодичность DRAM refresh должна точно совпадать с периодичностью скан-линии видеокарты? Что-то тут мне непонятно.

3. How to Install macOS Sierra Final on VirtualBox on Windows

Я не знал, что так вообще можно. Разве Apple не вкладывал/ет кучу труда в то, чтобы macOS не работала на эмуляторах? Это то, что я смутно помнил, может, неправ?

Сейчас мне это не нужно, но может пригодиться потом.

4. Idyll: A toolkit for creating data-driven stories and explorable explanations. Небольшая надстройка над JS, в которой все заточено для создания интерактивных страниц-объяснений с демками. Примеры красивые, но не знаю, насколько это реально удобно, не пробовал.
moose, transparent

brainstorm/green needle

Помните аудио-иллюзию Yanny/Laurel? Вот еще одна новая, по-моему еще круче:



На этом видео второй звук, который испускает игрушка (на третьей секунде), можно услышать как "brainstorm", а можно как "green needle", причем по желанию: заранее выберите, что услышите, и именно это услышите. Очень убедительно.

Возможно, у вас не получится услышать один из вариантов, тоже бывает. У меня странно было: в первый раз, когда я увидел видео, все работало, и я мог услышать оба варианта по желанию. На следующий день внезапно я потерял способность слышать "brainstorm", мог услышать только "green needle" или "brain needle". Я двигал громкость, переходил от компьютера к телефону - ничего не помогало. Прошло пару дней, и вот сегодня опять могу услышать обе версии. Удивительное дело.
moose, transparent

мимоходом

Компания "Твиттер" создала новую должность "глобального директора по культуре и сообществу" (global director of culture and community).

Вас удивит и шокирует, что на эту должность назначена чернокожая женщина. Ее зовут God-is Rivera.



Но это-то ладно, а мне понравилось, где она работала раньше (это рекламное агентство): "Ms. Rivera previously was director of inclusion and cultural resonance at WPP PLC’s VMLY&R."

Выглядит так, будто кто-то случайным образом бил по клавиатуре. А потом из того, что получилось, убрал все гласные буквы.
moose, transparent

всячина

  1. Найдено при разборе старой коробки.



    Какой-то у меня когнитивный диссонанс, неужели к первому "Властелину колец" я еще пользовался VCR? Разве это не была уже эпоха CD/DVD? Эх, все забыл.

    P.S. Только сейчас заметил, что я подписал кассету "Lord of the Ring" (не Rings). Властелин звонка :) и без артикля в начале.

  2. Забавный диалог из Фейсбука.

    — По-моему, я уже об этом писал, но я по-прежнему не могу понять, как мне могло прийти в голову для некоторого важного аккаунта указать контрольный вопрос «Что я сейчас сканирую?».
    — а я выбрал: "Моя любимая книга!" - до сих пор войти в этот аккаунт не могу

  3. Из реддита, тема "какой профессиональный совет ("pro tip") из 90х/2000х не сработает сегодня?"

    "Увеличивать все важные файлы до размера в 1.45 мегабайт, чтобы их нельзя было украсть на дискете".