iGesture Pad
Читаю сейчас книгу по истории создания «Айфона», честно сказать не думал, что будет настолько интересно. Сложно было ожидать, что такого рода повествование может меня всерьёз захватить. Но книгу очень советовал один знакомый, а после того, как я взахлёб читал историю о том, как один математик безуспешно пытался доказать теорему, я уже ничего не удивляюсь.
Книгу только начал, так что выудил пока только два примечательных факта.
Первый — про степень участия Стива Джобса. Я, конечно, понимал, что вопреки распространённому мнению, Джобса не изобретал Айфон, но оказалось, что первоначальный прототип вообще создавался в тайне от него.
Ребята проектировали прототип партизанским методом, а презентацию Джобсу старательно подгадывали по времени — в неудачном настроении он мог зарубить любую идею, даже самую гениальную.
Второе — одну из айфонообразующих идей, управление несколько пальцами, технически и идейно подглядели у другой компании — «ФингерВоркс» (FingerWorks), которая выпускала несколько подключаемых к компьютеру устройств для управления пальцами. Причём это были устройства с мультитачем. «Эпл» позже купила эту компанию и использовала её наработки в своих устройствах.
Забавно, что у одной из серии устройств название начинается с «i», этот принцип именования «Эпл» потом постаралась превратить в свою фишку.
Можно заметить, что управляющие жесты, которые придумали в «ФингерВоркс», совершенно не похожи на те, которые потом «Эпл» внедрила в свои продукты. Первые надо специально учить и овладеть ими, на мой взгляд, непросто, у «Эпла» жесты всегда простые и хорошо ложатся на интуицию, но и жестов гораздо меньше. Видимо эти два набора жестов решают разные задачи.
Впрочем, самые частоиспользуемые жесты — прокрутки и изменения масштаба у «Эпла» и «ФингерВоркса» выглядят очень похоже, просто участвует разное количество пальцев.
3д-печать: практическая польза
У нас дома зафиксировано первое практическое использование собственного
У дочки в очередном проекте не хватило прутика, чтобы сделать ворот, поэтому мы с линейкой сделали простую модельку в виде макаронины и напечатали её в трёх вариантах с шагом внутреннего диаметра в миллиметр. Одна из них встала, как влитая.
Карательная медицина
Остался один путь — к опытному человеку. Знахарь ведал травами и настойками, умел снимать боль и заговаривать духов. Он заглянул в рот больного, недолго думая, ткнул в чёрное дупло узким кремнёвым остриём. Мужчина дёрнулся, на глаза сами собой навернулись слёзы. Но надо было терпеть. Знахарь одной рукой ухватился за широкую челюсть, другой стал чистить проклятую дырку в многострадальном зубе. Скрежет кремня об эмаль сотряс всё нутро несчастного пациента, изо всех сил вцепившегося кулаками в шкуру. А лекарь старался, тщательно вытачивая заразу из зуба, скоблил его в разных направлениях, чтобы болезнь не вернулась снова. Несколько минут операции показались бедолаге нескончаемой пыткой.
Наконец знахарь отпустил челюсть страдальца. Остался последний штрих — комок пчелиного воска, которым лекарь старательно замазал получившийся кратер.
— цитата из книги «Байки из грота» Станислава Дробышевского. В главе описывается стоматология, какой она была четырнадцать тысяч лет до нашей эры. Кажется она почти без изменений дожила до советских времён. В моём детстве зубы лечили примерно так же.
Хватит пялиться в свои телеграфы!
300 бод
На днях
Принесённые модемы уже тогда были очень старыми, втыкались в шину ISA в половину разъёма, поскольку были восьмибитными. Я нашёл в интернете похожий, но не могу сказать он это или нет, помню на моём был такой же металлический динамик, никакие другие детали не запомнились.
Кажется скорость соединения была триста бод, то есть около тридцати байт в секунду. Не факт, что цифру я помню правильно, зато точно помню, что этого хватало, чтобы играть в «Варкрафт 2», но «Дум» работал в режиме
Играли мы с другом, а поскольку для соединения мы оба занимали телефон, то мои и его родители, понятное дело, довольны не были, поэтому играли мы редко, а после и вовсе прекратили, вероятно всего
Добавлено позже: в комментариях к трансляции моих записей высказали предположение, что я в детстве мог перепутать байты и боды и скорость модема была 2400 бод. Что ж, вполне может быть.
Школьный автобус
Первого сентября мы стали родителями первоклашки. До сих пор пока в себя не придём
Хорошо, что школа на днях запустила три маршрута школьного автобуса. Вчера мы на него не успели, причём Ева сильно расстроилась, ей очень хотелось попробовать. Но сегодня всё получилось, причём выяснилось, что его ближайшая остановка около дома, только дорогу перейти, очень удобно. Мы не сразу поняли где она, так как в расписании автобуса наша остановка называется
Автобус неожиданно высвободил много времени, но сейчас надо подумать как перераспределить утренние ритуалы, а то мы бегаем в мыле до него, а потом чилим после.
Ужасный поиск «Яндекс.Маркета»
Иронично, что «Маркет»,
КБ и Кб
Я работают в айтишной компании и меня удивляет как много людей путают «КБ» (килобайты) и «Кб» (килобиты), «МБ» (мегабайты) и «Мб» (мегабиты) и так далее. Такая подробность может дорого обойтись, ведь разница между ними в восемь раз, регистр одной буквы изменит контрактные обязательства на невыполнимые и приехали.
Я в своё время придумал такое правило — байт («Б») больше бита («б»).
Заклинатель нейросетей
Всё восстаёт во мне против названия
Работа
Чтобы разобраться в том как описать
Так что
Invalid page in block XXX of relation YYY
Несколько раз в жизни сталкивался с ситуацией, когда «Постгрес» при попытке выполнить запрос, возвращает
Уже два раза я попадал в ситуацию, когда бакапа у клиента
Первым делом, разумеется надо отключить пользователей от базы данных, чтобы предотвратить её дальнейшее разрушение.
Второе, что надо сделать — посмотреть какая сущность у нас развалилась. Это можно сделать следующим запросом:
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 снятие дампа идёт с максимальной скоростью.
Наконец, успех: основная база лежит единым куском, сбойные таблицы сняты отдельными дампами. Что ещё можно сделать?
В одном из случаев у меня были несколько реплик, которые развалились
Если реплики нет, можно посмотреть какие индексы есть на сбойной таблице. Не исключено, что критичные столбцы покрыты индексами, которые остались целыми.
Данные из индексов можно вытащить, сделав запрос так, чтобы он затрагивал только столбцы, которые есть в индексе. Если в интересующем нас индексе нет ключевого столбца, не беда, там есть технический столбец 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Если всё сделано правильно, должна получиться консистентная база данных. Осталось разобраться с двумя вещами: создать удалённые ранее индексы, если таковые были и, если вы создавали мусорные строки, то надо понять как с ними быть дальше. Например, удалить их или заполнить значениями «данные утеряны».
…рный …оста
На последнем
Но и без патронов есть на что посмотреть. Меня больше всего заинтриговали остатки
К сожалению, больше частей найти не удалось, но по тому, что удалось поднять, видно, что
Такие жетоны носили отвечающее за пожарную безопасность в селах и небольших городах. Староста избирался или назначался Земствами на определённый срок.
Детская память
Меня до сих пор удивляет с какой лёгкостью дети запоминают что угодно. После переезда в декабре выучивали с дочкой наш новый адрес — я просто каждый день один раз говорил часть адреса, — сначала улицу, потом дом, потом квартиру, а на следующий день спрашивал всё сказанное ранее в произвольном порядке.
Я вспомнил это, потому что вчера один друг, который провёл детство на Сахалине, рассказал, что однажды в детстве услышал стихотворение, помогающее запомнить основные японские острова. Однажды услышал и запомнил на всю жизнь! Вот оно:
Милая Хоккайдо,
Я тебя Хонсю!
За твою Сикоку
Я тебя Кюсю.
Не «Пайтоном» единым
Писал недавно про засилье «Пайтона» — там, где надо изобразить компьютерную программу, сейчас в основном используют в качестве основы именно этот язык, исключения встречаются всё реже.
И вот на днях, на конференции «Казан Диджитал Вик» встретил одно из приятных исключений — на одном из участников гонок на беспилотных миниавтомобилях была футблока
Это единственный язык, кстати, который я прочно забыл. Непонятно почему — писал на нём всё детство, а в Университете делал на «Делфи» (это диалект) несколько дипломных работ за деньги.
То есть плотненько работал с ним несколько лет, но когда два года назад поковырялся в нём в рамках решения одной из задач для программисткого
Репликатор в каждый дом
Когда у тебя
Огорчает только подбор моделей. Бесплатных — навалом, но там нужное ещё найти надо. Вместо этого хотелось бы уметь копировать произвольную бытовую пластиковую фигню, не напрягаясь.
Сломалась у меня пластиковая заглушка в одной из ножек стула, пришлось подбирать похожую и менять все четыре. Ах, если можно было бы
Выхода как будто бы два — встроить в принтер ещё и сканер, либо
Идея со сканером кажется более разумной, но только на первый взгляд. Всё упирается в разрешающую способность и невозможность заглянуть внутрь детали — как
Так что остаётся вариант номер два — всё промаркировать. Либо банальным
Всё равно для всех деталей так или иначе изготавливаются модели, не на глазок же они отливаются. Сейчас уже существуют заметная индустрия печати всякого на заказ — от мелочей до крупных вещей, насыщения пока не видно, думаю она будет только развиваться.
Не знаю доживём ли мы до принтера в каждый дом, но не исключено. Перейдём на скачиваемые вещи, как это случилось
С точки зрения экологии это тоже может интересно выглядеть — умельцев, которые делают пластик для принтеров из старых бутылок я уже видел.
Это, конечно, не совсем синтезаторы предметов о которых мечтали в научной фантастике в двадцатом веке, но очень и очень близко на самом деле.
Худи «Sinclair ZX Spectrum»
В моём детстве были чрезвычайно распространены клоны британского компьютера «ЗетИкс Спектрум».
Я был настоящим фанатом — знал в нём каждый винтик, умел программировать на его ассемблере и многочисленных бейсиках, знал встроенный «код калькулятора» (программная реализация действий над числами с плавающей точкой). Даже к произвольному телевизору умел подключать (мониторы тогда мало у кого были), была бы схема.
Вчера для смеха купил себе худи «Sinclair ZX Spectrum», сегодня надел. Большинство равнодушно скользит взглядом — молодёжи этот компьютер неизвестен, разве что малочисленным фанатам восьмибитной техники, но где их встретишь?
Зато забавно видеть как расширяются глаза у некоторых дядек из старшего поколения! Они сначала цепляют взглядом логотип и буквы, потом внимательно смотрят мне в лицо и снова переводят взгляд обратно. Прям система
Палка-копалка
Наткнувшись в одной из статей с «Элементов» на слово
В последний раз в неироническом ключе это слово мне попадалось ещё в школе,
Если у вас так же, то вот вам
Вторая модель
Как верно заметили в комментариях к заметке «Репликатор в каждый дом», где я рассуждал про домашнее применение
Правда не думаю, что этот способ подходит всем. Например, у меня нет никакого желания заниматься этим на постоянной основе, а значит и осваивать довольно сложные инструменты
Тем не менее, начальную версию одного из таких продуктов мы с дочкой
В тот раз дочка скорее руководила, чем рисовала сама, а на днях мы сели за другую модель и нарисовали вместе Банбана — персонажа одноимённой игры и мультсериала. На этот раз мой вклад в получившееся был заметно меньше половины.
То, что я с этим вообще вожусь, заслуга исключительно дочкина, вопреки прогнозам читателей, что она бросит
Пока ей требуется довольно много помощи, так как читает она ещё недостаточно хорошо, да и программ разнообразных мало видела, так что мне в незнакомом интерфейсе разбираться проще на пару порядков. Но, думаю, не за горами время, когда я в этом почти не буду участвовать.
Локализация шрифта Брайля
Пока сегодня ждал лифта, чтобы подняться к себе домой, задумчиво смотрел на кнопку «вверх» и впервые подумал — а переводят ли шрифт шрифт Брайля в кабинах лифтов? Подозрительно мало букв под кнопкой.
Погуглил, оказалось, что мои подозрения верны — у меня в подъезде ничего не переведено. Например, на фото кнопка подписана английским словом «UP» («вверх») или «УП», если читать
Кажется будто подумали о слепых, но на самом деле, когда покупали и устанавливали лифт, никто о них даже не задумался. Фейковая забота.