iGesture Pad

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

Книгу только начал, так что выудил пока только два примечательных факта.

Первый — про степень участия Стива Джобса. Я, конечно, понимал, что вопреки распространённому мнению, Джобса не изобретал Айфон, но оказалось, что первоначальный прототип вообще создавался в тайне от него.

Ребята проектировали прототип партизанским методом, а презентацию Джобсу старательно подгадывали по времени — в неудачном настроении он мог зарубить любую идею, даже самую гениальную.

Чёрный планшет FingerWorks с логотипом iGesture и синими отпечатками ладоней, демонстрирующий технологию мультитач.
iGesture Pad в своей красе, фото с сайта компании «Микрософт»

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

Забавно, что у одной из серии устройств название начинается с «i», этот принцип именования «Эпл» потом постаралась превратить в свою фишку.

Таблица жестов TouchStream/iGesture: разделы «Буфер обмена», «Файлы и окна», «Масштабирование» для Windows, Mac, Linux, Emacs с цветовой кодировкой режимов.
Инструкция: жесты для правой руки для устройств серии «TouchStream» и «iGesture»

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

Впрочем, самые частоиспользуемые жесты — прокрутки и изменения масштаба у «Эпла» и «ФингерВоркса» выглядят очень похоже, просто участвует разное количество пальцев.

4 комментария

3д-печать: практическая польза

У нас дома зафиксировано первое практическое использование собственного 3д-принтера.

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

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

Оставить комментарий

Карательная медицина

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

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

— цитата из книги «Байки из грота» Станислава Дробышевского. В главе описывается стоматология, какой она была четырнадцать тысяч лет до нашей эры. Кажется она почти без изменений дожила до советских времён. В моём детстве зубы лечили примерно так же.

2 комментария

Хватит пялиться в свои телеграфы!

Карикатура «Прогнозы на 1907 год»: леди и джентльмен сидят в парке, используя беспроводной телеграф — леди получает любовное послание, джентльмен — результаты скачек.
«Сцена в Гайд-парке. Эти двое людей не общаются друг с другом. Леди получает любовное сообщение, а мужчина — результаты скачек»

2 комментария

300 бод

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

Принесённые модемы уже тогда были очень старыми, втыкались в шину ISA в половину разъёма, поскольку были восьмибитными. Я нашёл в интернете похожий, но не могу сказать он это или нет, помню на моём был такой же металлический динамик, никакие другие детали не запомнились.

Зелёная печатная плата модема Rockwell 1200B с разъёмами RJ-11, чипами, конденсаторами и динамиком на белом фоне.
Примерно такой модем был и у меня, по воспоминаниям — один в один

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

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

Добавлено позже: в комментариях к трансляции моих записей высказали предположение, что я в детстве мог перепутать байты и боды и скорость модема была 2400 бод. Что ж, вполне может быть.

3 комментария

Школьный автобус

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

Хорошо, что школа на днях запустила три маршрута школьного автобуса. Вчера мы на него не успели, причём Ева сильно расстроилась, ей очень хотелось попробовать. Но сегодня всё получилось, причём выяснилось, что его ближайшая остановка около дома, только дорогу перейти, очень удобно. Мы не сразу поняли где она, так как в расписании автобуса наша остановка называется каким-то историческим народным названием, которого нет ни на карте, ни в памяти наших знакомых.

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

Оставить комментарий

Ужасный поиск «Яндекс.Маркета»

Иронично, что «Маркет», онлайн-базар «Яндекса», компании, известной своим поиском, не умеет нормально искать товары. Ищу «куртки с подогревом», вперемешку с искомым поиск выдаёт мне носки, перчатки и обычные куртки. Копайся в этом хламе, дорогой пользователь, ищи сам чего тебе там нужно. Почему-то «Озон» и «Вайлдберрис» такого себе не позволяют.

10 комментариев

КБ и Кб

Я работают в айтишной компании и меня удивляет как много людей путают «КБ» (килобайты) и «Кб» (килобиты), «МБ» (мегабайты) и «Мб» (мегабиты) и так далее. Такая подробность может дорого обойтись, ведь разница между ними в восемь раз, регистр одной буквы изменит контрактные обязательства на невыполнимые и приехали.

Я в своё время придумал такое правило — байт («Б») больше бита («б»).

11 комментариев

Заклинатель нейросетей

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

Работа промпт-инженера состоит из двух частей: понять что хочет кожаный и объяснить эту кованому.

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

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

2 комментария

Invalid page in block XXX of relation YYY

Несколько раз в жизни сталкивался с ситуацией, когда «Постгрес» при попытке выполнить запрос, возвращает что-то вроде invalid page in block 460248 of relation base/16391/23665. Это всегда означает какую-то аппаратную проблему на системе хранения, где СУБД хранит свои данные.

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

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

Второе, что надо сделать — посмотреть какая сущность у нас развалилась. Это можно сделать следующим запросом:

SELECT 23665::regclass::text;
    text
-------------
 some_items

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

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

CREATE OR REPLACE FUNCTION check_table(table_name TEXT) RETURNS VOID AS $$
DECLARE
    min_id INT;
    max_id INT;
    current_id INT;
BEGIN
    EXECUTE 'SELECT MIN(id), MAX(id) FROM ' || table_name INTO min_id, max_id;

    current_id := min_id;
    
    WHILE current_id <= max_id LOOP
        BEGIN
            EXECUTE 'SELECT * FROM ' || table_name || ' WHERE id = $1' USING current_id;
        EXCEPTION
            WHEN SQLSTATE 'XX001' THEN
                RAISE NOTICE 'Ошибка при обработке id: %', current_id;
        END;
        
        current_id := current_id + 1;
    END LOOP;
END
$$ LANGUAGE plpgsql;

Добавлено позднее: позже я написал другую функцию, которая учитывает, что разрушенные данные могут лежать в «тостах».

Дальше таблицу надо сдампить, составив SELECT, исключающий сбойные участки. Я, обычно, делаю ряд запросов, соединённых через UNION ALL и подставляю его в COPY, предварительно выключив последовательное сканирование таблицы (SET enable_seqscan = OFF).

Если этого не сделать, «Постгрес» обязательно займётся сканированием таблицы, так как нужна она почти вся, а там у нас сбойные участки. Отключив этот метод сканирования, мы заставляем обращаться к таблице через первичный индекс, если он, конечно цел. Хуже, когда разрушен и он.

Я с такой ситуацией ещё не сталкивался, но если столкнусь, буду думать над проверкой строк через ctid.

В общем, должен получиться примерно такой запрос:

SET enable_seqscan = OFF;

COPY (
SELECT * FROM some_items WHERE id < 100500 UNION ALL
SELECT * FROM some_items WHERE id > 100500 AND id < 100800 UNION ALL
SELECT * FROM some_items WHERE id > 100800
) TO '/tmp/some_items-table.dump'

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

pg_dump --exclude-table-data=some_items -j10 -Fd -Z1 -f /dump_directory dbname

Как видно, мы дампим структуру, но не данные сбойной таблицы (ключ —exclude-table-data можно указать несколько раз), при этом параметр -Fd нужен, чтобы мы могли снимать дамп параллельно сразу несколькими процессами, -j задаёт количество этих процессов, ключ -f указывает директорий, куда будет записан бакап, а -Z1 регулирует степень сжатия, —с уровнем 1 снятие дампа идёт с максимальной скоростью.

Наконец, успех: основная база лежит единым куском, сбойные таблицы сняты отдельными дампами. Что ещё можно сделать?

В одном из случаев у меня были несколько реплик, которые развалились по-разному. Из них удалось наскрести недостающие куски. Их можно снять через тот же COPY с запросом SELECT и просто присоединить в конец дампа соответствующей таблицы — там текстовый формат.

Если реплики нет, можно посмотреть какие индексы есть на сбойной таблице. Не исключено, что критичные столбцы покрыты индексами, которые остались целыми.

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

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

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

Для начала восстанавливаем основную базу данных, но без индексов и внешних ключей:

pg_restore -d dbname -Fd /dump_directory --section=pre-data --section=data -j10

Потом заливаем дампы отдельных таблиц, после чего доливаем индексы и внешние ключи:

pg_restore -d dbname -Fd /dump_directory --section=post-data -j10

Если всё сделано правильно, должна получиться консистентная база данных. Осталось разобраться с двумя вещами: создать удалённые ранее индексы, если таковые были и, если вы создавали мусорные строки, то надо понять как с ними быть дальше. Например, удалить их или заполнить значениями «данные утеряны».

3 комментария

…рный …оста

На последнем военно-поисковом копе нашёл немало занятного. Самое интересное пришлось отдать старшему по группе, мне хранить такое нельзя — там пригоршня целых мосиновских патронов в шикарном состоянии, скрепленных какой-то скобой. Ни разу такое не поднимал. Сфотографировать было недосуг — время дорого, да и устал, как собака, но теперь жалею.

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

Три фрагмента ржавой металлической таблички с выгравированными буквами: верхний — «РЫ», нижний — «ОСТА», левый — без текста; два отверстия в правом краю нижней части.
Остатки таблички, видна надпись «…рный …оста»

К сожалению, больше частей найти не удалось, но по тому, что удалось поднять, видно, что когда-то тут было написано «Пожарный староста» — должность, появившаяся в России в 1880 году.

Такие жетоны носили отвечающее за пожарную безопасность в селах и небольших городах. Староста избирался или назначался Земствами на определённый срок.

4 комментария

Детская память

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

Одного-единственного повторения ей хватило, чтобы всё запомнить! Запоминание в день двух или более фактов работает хуже, но мы никуда не торопимся, поэтому я оставил схему «один день — один факт». Мы потом заучили ещё кое-какую информацию, которую ей неплохо бы знать.

Я вспомнил это, потому что вчера один друг, который провёл детство на Сахалине, рассказал, что однажды в детстве услышал стихотворение, помогающее запомнить основные японские острова. Однажды услышал и запомнил на всю жизнь! Вот оно:

Милая Хоккайдо,
Я тебя Хонсю!
За твою Сикоку
Я тебя Кюсю.

2 комментария

Не «Пайтоном» единым

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

И вот на днях, на конференции «Казан Диджитал Вик» встретил одно из приятных исключений — на одном из участников гонок на беспилотных миниавтомобилях была футблока с чем-то паскалеподобным.

Чёрная футболка с кодом на языке Pascal: программа LetaiRacing_2023, команда IT Park, даты 20–21.09.2023, место Kazan, логика успеха и повторных попыток.

Это единственный язык, кстати, который я прочно забыл. Непонятно почему — писал на нём всё детство, а в Университете делал на «Делфи» (это диалект) несколько дипломных работ за деньги.

То есть плотненько работал с ним несколько лет, но когда два года назад поковырялся в нём в рамках решения одной из задач для программисткого адвент-календаря, понял, что не помню вообще ничего, кроме каких-то очень общих вещей, вроде конструкций begin — end.

10 комментариев

Репликатор в каждый дом

Когда у тебя 3д-принтер дома, чувствуешь, что живёшь немного в будущем. Скачал модель, поставил печататься и через несколько часов у тебя готовая вещь на руках, фантастика!

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

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

Мужчина в синем держит бокал с оливками, разговаривая с андроидом в жёлто-чёрной форме у панели управления с зелёно-синим экраном.
Репликатор из франшизы «Звёздный путь» — это машина, способная создавать различные объекты

Выхода как будто бы два — встроить в принтер ещё и сканер, либо как-то маркировать все бытовые пластиковые детали.

Идея со сканером кажется более разумной, но только на первый взгляд. Всё упирается в разрешающую способность и невозможность заглянуть внутрь детали — как полости-то сканировать? Всё, способное эффективно просветить пластик, приходится экранировать. Работать со сканером в свинцовом переднике я как-то пас.

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

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

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

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

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

10 комментариев

Худи «Sinclair ZX Spectrum»

В моём детстве были чрезвычайно распространены клоны британского компьютера «ЗетИкс Спектрум».

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

Тёмно-синяя толстовка с капюшоном на деревянном полу; на груди белый логотип «Sinclair ZX Spectrum» и радужная полоса.
Худи «Sinclair ZX Spectrum» — клоны этого компьютера были чрезвычайно распространены в моём детстве

Вчера для смеха купил себе худи «Sinclair ZX Spectrum», сегодня надел. Большинство равнодушно скользит взглядом — молодёжи этот компьютер неизвестен, разве что малочисленным фанатам восьмибитной техники, но где их встретишь?

Зато забавно видеть как расширяются глаза у некоторых дядек из старшего поколения! Они сначала цепляют взглядом логотип и буквы, потом внимательно смотрят мне в лицо и снова переводят взгляд обратно. Прям система свой-чужой. Причём всё за секунду и совершенно молча. Чувствую себя шпионом в чужой стране.

4 комментария

Палка-копалка

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

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

Древний наконечник копья из камня или кости с заострённым концом и утолщённой рукояткой, с видимыми следами износа и трещинами, на чёрном фоне.
Палка-копалка с датировкой 390±25 тысяч лет

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

Оставить комментарий

Вторая модель

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

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

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

Рука держит бежевую 3D-печатную фигурку с двумя рогами, глазами и тонкими ногами на фоне рабочего стола с клеем и деталями.
Банбан — персонаж одноимённой игры и мультсериала

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

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

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

Оставить комментарий

Локализация шрифта Брайля

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

Круглая кнопка вызова лифта с белой стрелкой вверх и шрифтом Брайля на металлической панели, установленной на деревянной стене.
Под кнопкой «вверх» написано «УП» шрифтом Брайля

Погуглил, оказалось, что мои подозрения верны — у меня в подъезде ничего не переведено. Например, на фото кнопка подписана английским словом «UP» («вверх») или «УП», если читать по-русски.

Кажется будто подумали о слепых, но на самом деле, когда покупали и устанавливали лифт, никто о них даже не задумался. Фейковая забота.

7 комментариев

← сюда туда →