Хотя для питона есть модуль telegraph, который по идее должен уметь постить туда всё, что надобно, я решил разработать свой. Потому что у готового модуля есть фатальный недостаток.
Пытаясь подружиться с телеграфом, я обнаружил несколько неприятных особенностей, информации о которых не было нигде написано. О других вещах было написано в разных местах, но по маленьким кусочкам. При помощи реверс-инженеринга, такой-то матери и карт Таро я преодолел большинство проблем. О них-то я и хочу написать, чтобы этот текст прочитал какой-нибудь такой же уёбок, как я.
(читать дальше)На самом деле у телеграфа проблема только одна: лапидарная документация. Но проблема эта глобальная. Она рассыпается на множество проблем поменьше. А те, в свою очередь, на малюсенькие проблемки ваще жесть. Да, документация не обновлялась с 2016 года.
Все проблемы я нумерую, чтобы получился FAQ.
1. Q: Я обыскал весь сайт телеграфа, и даже под табуреткой смотрел, но не смог найти токенов для доступа! Где они? A1: Если вы собираетесь работать с телеграфом только через АПИ, то вызовите функцию createAccount. От неё вы получите токен. Его следует использовать всегда, пока вы пользуетесь именно этим аккаунтом. A2: Если вы создали аккаунт через бота @Telegraph, то залогиньтесь в браузере, а потом поищите токен в кукисах. Да, другого метода нет.
2. Q: Что я только не совал в createPage, а он пишет CONTENT_FORMAT_INVALID или CONTENT_TEXT_REQUIRED. Что не так-то? A: Формат входных данных -- Array of Node, написано в документации. Пример есть, но он не иллюстрирует суть. Ещё приведён кусок кода на ява-скрипте, который генерирует нужный формат. Но это немного не то, что ожидается от документации.
Есть примеры в интернете, но там везде приведён ОДИН нод. Или два, но вложенных. А где Array-то? Примеров, где действительно несколько нодов подряд -- нету. На самом деле всё было бы гораздо проще, если бы авторы документации написали, что формат -- JSON. Итак, что значит Array? Это список значений в квадратных скобках, разделённых запятыми, вот так: ["Value1","Value2","Value3"] Согласно документации, каждый элемент массива может быть либо текстом, либо нодом. Вот тот пример, который искал я: ["Goodbye,",{"tag":"b","children":["cruel"]},"world"] Любые чилдрены также являются array of node. Если не знаете, как записывается та или иная разметка, создайте пасту в браузере, а потом в инструментах разработчика поищите запрос, который браузер послал серверу. Там используется именно этот удивительный формат.
3. Q: Я научился делать пасты в формате array of node, но периодически всё равно получаю сообщение про инвалидов, или нечто подобное. В чём может быть дело? A: В отличие от интерпретатора Питона, Телеграф не сообщает о местах, которые ему не нравятся. Но вот какие соображения есть: 1. Парсер телеграфа очень чувствителен к тому, что вы ему даёте. Он, например, не терпит запятой после последнего элемента списка. Пустой список ему тоже непонятен. Пустой элемент списка (т.е. две запятые подряд) -- опять проблемы. 2. Надо экранировать бэкслешем: одинарные, двойные кавычки и... сам бэкслеш! Обратная косая черта в смайлике ¯\_(ツ)_/¯ мне чуть голову не выела. Я думал, что Телеграф иероглифы не понимает. Но с этим как раз всё оказалось отлично.
4. Q: Картинки-то, картинки как грузить? Я уверен, что они грузятся на сервера телеграфа. A1: Загрузка картинок ЕСТЬ, но она не является частью телеграф-апи. Загрузка осуществляется по адресу:
(заметили, что нет префикса "api." ?). Файл надо передать в пост-запросе в поле file: при помощи технологии, которая называется multipart/form-data. Токен НЕ нужен. В Питоне это делается так:
Ответом на это будет МАССИВ (в терминах телеграфа). Например, такой: [{"src":"\/file\/e80f65644eccf184d86c2.png"}] Обращаю внимание, что ответы от телеграф-апи имеют совершенно иной формат, начинающийся с поля "ok", например. такой: {"ok":false,"error":"CONTENT_FORMAT_INVALID"} Видите, нет квадратных скобок? A2: Хотя сервера телеграфа и поддерживают загрузку картинок, это загрузка "без правил". Никто не знает, сколько они там будут храниться, и в каком формате. Но телеграф поддерживает и хотлинкинг с других хостингов. Поэтому если вам другие хостинги по душе -- вставляйте картинки с них.
5. Q: Я сделал пост с текстом и картинками, послал его, но картинки оказались в конце. Какого хуя? A: Я не могу это объяснить, но если на самом верхнем уровне массива нод размещать"просто текст", как я показал выше в примерах с Value1 и Goodbye, то картинки и текст отображаются не в том порядке, что написано. При этом в хтмл-исходниках чистым по белому написано:
И всё равно картинка в конце. Видимо, этому есть какая-то HTML-причина, о которой я не знаю. Чтобы такой проблемы не было, не размещайте текст "сам по себе". Всё должно быть обёрнуто див-ами. Да, документация пишет, что дивы не поддерживаются, однако сам телеграф, когда сохраняет свои страницы, дивы использует очень активно.
6. Q: Как удалить картинку/пасту/аккаунт? A: Никак. С картинками всё совсем тяжело, никакой информации о том, сколько она хранится, нету. Пасту нельзя удалить, однако её можно очистить и сохранить с одним, скажем, символом. Про аккаунт можно просто забыть и создать новый.
7. Q: Отредактировать запись я могу, а урл изменить как? A: Увы, опять никак. Урл генерируется по системе "транслитерация заголовка+месяц создания+день создания". Если имя уже есть, то в конец дописывается -1, -2 и т.д. Дописываемое число не ограничено (я доходил до 18).
8. Q: Не совсем про АПИ. Я дома написал и опубликовал статью. Анонимно. Потом вторую -- на работе. Анонимно. Третью натыкал с телефона. А потом узнал, что можно создать аккаунт. Что мне теперь делать? A: Редактирование уже созданных постов доступно только с того устройства, где их создали. И должны быть целы кукисы. Но!
Когда вы создаёте аккаунт через бота @Telegraph, то при попытке залогиниться в браузере вас спросят, хотите ли вы присоединить имеющиеся пасты к аккаунту или нет. Так можно залогиниться на всех устройствах, где вы творили, и собрать всех покемонов в одну кучу. После этого радактирование будет доступно на всех устройствах.
Проблемы, которые я не решил 1. Как определяется картинка и описание по методу OpenGraph? Судя по всему, именно эти поля используются в телеграме при предварительном просмотре поста. Их можно получить при помощи метода getPage. Но как их задать? Картинка, видимо, выдаётся первая по счёту. Описание составляется из первых фраз поста. Но во время экспериментов я видел и иное поведение. 2. Почему Instant View не всегда доступен? Ясно, что он будет виден только на телефоне, но и там не всё гладко. С одной пастой так долбился, инстант вью никак не появляется. А потом сгенерировал новую, и он появился. Пока что есть два соображения, и оба связаны с картинками. а) Когда у меня в пастах были тестовые пнг размером 1 на 1 пиксель, я не видел инстант вью. (но при этом если картинок нет вовсе -- инстант вью есть!) б) Когда картинки были не с хостинга телеграфа, а с постороннего -- инстант вью также не появился.
Когда у меня спрашивают, что бы почитать по программированию на каком-либо языке, я не всегда могу дать вразумительный ответ. Я прочитал эту книжку, и могу теперь уверенно сказать -- эту книжку МОЖНО рекомендовать: 1. Тем, кто хочет начать программировать, но не знает, как вкатиться. 2. Тем, кто собрался учить Питон, не зная ни одного языка программирования.
В книге всё расписано чрезвычайно подробно, и с полного нуля. Из-за этого книжка очень длинная, при этом по языку дальше основных конструкций авторы не продвинулись. Я узнал кое-что новое из этой книги, но мало.
Я учил студентов программированию, а кроме того я люблю кому-нибудь что-нибудь об'яснять, поэтому мне интересна пропедевтика программирования. И в этом смысле из книги можно взять многое. Но не всё.
Одна из вещей, которая мне часто не нравится в таких книгах -- примеры. Примеры либо схематичны, либо оторваны от реальности. И в этой книге я встретил иную проблему. Тут примеры однообразны. Может хватит считать среднюю оценку? Тем не менее, примеры в основной части книги всё-таки хороши. Потому что в расширенных главах (с 10-й) примеры опять плохи.
В главе про ООП есть очень интересный раздел о том, как проектировать классы, однако ни одного практического примера не приведено. Методы -- это функции, работающие с данными класса. Да, геттеры и сеттеры это валидные методы. Но где что-то, что реально с данными класса работает? Покажите стек, в конце концов!
Примеры в главе с рекурсией оторваны от реальности. Да, Ханойская башня -- это классический случай. А на практике как применять?
И тем не менее, пока что это лучшая книжка для обучения програмированию с нуля. Если знаете круче -- сообщите.
И напоследок -- про перевод. Техническая литература -- это та область, где канцеляриту самое место. Русский перевод, несмотря на это, читается очень легко. С одним замечанием. Лексика у переводчика "пафосная". Как вам, например, фразы о том, что функция должна быть "оборудована" или "оснащена" параметром? Пользователь вводит с клавиатуры не "число", а "порцию данных". Всегда. А когда порция данных введена, то програма эту порцию должна "обследовать", и определить, нормальные они или нет. Такая стилистика меня веселит.
В марте я писал, что у меня всё время что-то пищит на рамках в магазине.
И я выяснил, что это было!
Пищание в этот раз меня удивило, потому что надето на мне было всё другое, чем обычно. А кассиршу пищание наоборот, не удивило. Ей было пофиг. Поэтому я решил разобраться раз и навсегда. Кассирша даже смеяться стала -- вам что, так интересно?
Нет, штаны я снимать не стал. Но из карманов всё вытащил.
ОКАЗАЛОСЬ
Что звенит визитница с карточками. Но почему она звенела? Потому что там лежал "рабочий пропуск", как мне подсказывали в марте? Нет. Потому что когда я покупал визитницу, я не отклеил квадратную метку, которая была на внутренней стороне.
Сортир на даче прослужил более 50 лет. Вы не можете представить, в каком он был состоянии.
Мы проехали по дороге 10 километров и нашли продажу новых сортиров. Нам всё показали. Далее состоялся следующий разговор.
-- И сколько будет стоить всё вместе? -- Ну, сам туалет столько-то, блоки столько-то, доставка столько-то, эээ... -- А установка? -- Ну, смотря как вы захотите ставить. -- А как можно? -- Можно бочку железную закопать. Можно бетонные кольца. Можно просто яму выкопать. -- Хорошо. Допустим, просто яму выкопать. Сколько будет стоить? -- Ну, сам туалет столько-то, блоки столько-то, доставка столько-то, эээ... -- А копка ямы сколько будет стоить? -- Эээ... (разговор повторился ещё пару раз) -- ... -- Ну тыщи две... -- А вот там у нас ещё кустарник растёт... -- Это уже будем на месте договариваться.
***
Приехали втроём. И с одной лопатой. Говорят -- у вас лопаты есть?
Это, как оказывается, вообще очень характерно в наше время в России. Установщики приезжают не со всем необходимым. Установщик кухни, например, попросил у меня мультиметр. Установщик электрощитка -- соединительный кабель. А тут -- лопаты. На работе, например, когда ездим устанавливать приборы, мы все инструменты берём с собой. Да, ситуации бывают нестандартные, тогда мы просим инструменты на месте. Но в типовых ситуациях вполне можно предугадать, что может потребоваться!
Хорошо же. У меня ЕСТЬ лопаты.
***
В итоге работали двое, а третий смотрел. Яму выкопали не такую глубокую, как изначально планировали, но это меня устроило. Кустарник, как оказалось, корчевать не надо. И тем не менее, за работы они взяли ШЕСТЬ тысяч. По опыту таких "эээ" в аналогичных ситуациях мы уже подозревали такой результат. И оказались правы. Но всё равно... моё почтение.
***
Я сестре говорю: Осторожно, у нового туалета яма очень глубокая. Ценные вещи в сортир не бери. Ты срёшь над бездной. Потери будут безвозвратными. А сестра отвечает: Слушай, кому ты это говоришь? Я была в археологической экспедиции. Знаешь, какой у нас там был туалет? Это была яма, поперёк которой были постелены две доски. И стоя на этих досках надо было испражняться.
Папа приходит, говорит -- подойди, чего покажу. Отрывок из фильма. 15 минут. Я: 15 минут?!
Ладно, пошёл, папа мне включает. Фильм -- вестерн. За 15 минут рассказывают всю историю и... конец.
Папа говорит -- тут несколько новелл, посмотри начало второй.
Лааааадно. Пошло начало второй. Вижу сцену, где человеку на шею надели петлю, посадили на коня и собираются так оставить в одиночестве. Я начинаю что-то вспоминать...
***
Пару лет назад я заинтересовался историей мема "В первый раз?", там где один висельник с улыбочкой обращается ко второму. Я загуглил мемепедию, или что там, и прочитал, что это кадр из фильма. Прочитал описание фильма. Сначала хотел смотреть, но потом передумал. Чёрная комедия -- ну, такое. Два года я старательно избегал просмотра. Беда пришла откуда не ждали.
Главный герой второй новеллы чудом спасся, когда его пытались повесить -- но вскоре опять угодил на виселицу. Поэтому-то он и говорил соседу -- "В первый раз?"
Телефон-звонилка упал на достаточно мягкий пол, с небольшой высоты. Крышка отвалилась, аккумулятор выпал. И всё. После этого напряжение на выходе аккумулятора -- 0 вольт ровно. Я расковырял аккумулятор, достал зарядную плату и замерил напряжение на выходе батареи. 0.7 вольта.
При этом до падения телефон работал нормально, и аккумулятор тоже.
Я уже читал другую книгу из этой серии, про мифологию. А эта про иероглифы.
Тем, кто не знает ни китайский, ни японский, книга будет почти не интересна. Надо всё-таки иметь представление о иероглифах, и узнавать многие из них. Если вы учите только японский -- не беда. Всех иероглифов вы не узнаете, но узнаете много чего.
Корни японских иероглифов -- именно в китайских, поэтому для пользы и интереса изучать историю письменности надо именно по китайским источникам. Нет, это не трактат. Это сборник заметок "для общего развития", предназначенный для простых китайцев. Поэтому, с одной стороны, читателя не грузят ничем сверхсложным, но с другой стороны с ним разговаривают как с ребёнком.
Мне было нормально, но хотелось бы... более систематической подачи материала, скажем так.
Я не учу китайский, но я видел достаточно иероглифов, чтобы сказать: упрощение китайских иероглифов, которое произошло в 50-х годах, сильно изуродовало письменность. Текст выглядит, простите, дырявым. Кроме того, оказалась покоцана система ключ+фонетик (об этом я слышал из других источников). И вот хорошо бы, чтобы в этой книге все упрощённые иероглифы были продублированы полной формой. Потому что многие загадки и разгадки без полной формы просто непонятны, особенно изучающим японский язык, потому что японские иероглифы ближе к полным формам, чем упрощённые китайские. И вот смотришь ты как баран на новые ворота на какой-нибудь 凤, а потом по тексту выясняется, что это был 鳳! И ты такой -- Семён Семёныч!
Если в заимствованном слове есть двойная согласная, то со временем она превращается в одинарную.
Писались ли когда-то "кофе" и "адрес" с двойными согласными? Не знаю. Но вот пример из современного -- трафик. Траффик с двумя эф писалось ещё на моей памяти -- и я буду продолжать писать так.
Но что же определяет, сольётся двойная согласная в одну или нет? Дифференциальный имеет две эф уже давно. А из современного -- баннер. Мне тяжело представить, чтобы баннер писался с одной эн. Но когда-то мне было тяжело представить, что траффик будет с одной эф. Запомните этот твит.
Уже не первый раз вижу, когда придорожный магазин делает вот такую разметку при в'езде:
Тем, кто едет слева направо всё очень удобно: не сразу поворот на 90 градусов, а плавная кривая, и для заезда, и для выезда. Но что делать тем, кто едет справа налево?
Сосать лапу. По правилам требуется проехать дальше, найти место для разворота и вернуться.
Есть ли об'ективная необходимость в такой разметке? Нет. В одном из мест, например, такая разметка расположена вместе с разрывом, через который можно заехать на точку с противоположной стороны дороги. А в магазин заехать нельзя, потому что через этот разрыв можно попасть только на треугольник, по которому ездить не положено.
Что же делают клиенты? Они игнорируют эту разметку. Заезжают прямо на треугольник и через разрыв, и через сплошную. А выезжают налево по изогнутой дорожке, предназначенной для встречного движения.
Да, всё это уже написано в сотне мест по интернету, но лишнее повторение не помешает.
После того, как родители несколько дней назад повыясняли отношения, произошло вот что.
Мама на следующий день ко мне с утра приходит и говорит: -- Я себя очень плохо чувствую. У меня всё лицо дёргается. Мне кажется, у меня инсульт.
Инфаркт и инсульт -- серьёзные состояния. Если вы не врач, то вы вряд ли поможете больному. Но вы можете довольно легко установить, требуется ли ему медицинская помощь. Про инфаркт я мало что скажу, а вот инсульт был у бабушки в 2012, поэтому я кое-что видел, и кое-что читал. Теперь при малейших подозрениях на инсульт я всех проверяю -- и себя, и окружающих. Как я это делаю?
Главное, что надо понимать, что инсульт -- это проблемы с кровообращением в головном мозге. Проблемы обычно бывают не по всему мозгу, а "в очаге". И очаг либо слева, либо справа. Поэтому при большинстве видов инсульта наблюдаются проблемы с функционированием одной из половин тела.
1. Чёткость речи. У незнакомцев чёткость может быть пониженной по иным причинам, но если вы человека знаете, то безошибочно определите уменьшенную чёткость речи, "кашу во рту". 2. "Улыбнись". Один из уголков губ не поднимается вовсе, либо поднимается плохо. 3. "Вытяни руки вперёд, разведи в стороны". То же самое. Одна рука поднимается явно хуже, чем другая (с той же стороны, что и уголок губы). 4. "Поднеси руки к груди и надави одной ладонью на другую: одной влево, другой вправо". Может ли одна рука пересилить другую? Если может, то это плохой признак.
Что ещё надо знать? Бывают разные микроинсульты, предынсультные состояния и т.п. Бабушке моей при первом визите скорой помощи поставили диагноз "транзиторная ишемическая атака". Так вот, если пациент пережил первичный инсульт, или что там у него было, то на третий день следует ожидать серьёзного ухудшения. В этот момент пациент уже должен лежать в больнице. Моя бабушка отказалась от госпитализации (кандидат медицинских наук, всю жизнь работала врачом!). А если бы не отказалась, может быть и избежала бы полноценного инсульта, кто знает...
А у мамы я ни одного из признаков не нашёл. К вечеру состояние нормализовалось.
Когда я был в аспирантуре, то новым студентам я всегда давал так называемое "входное тестирование". За образец я взял метод другого препода с кафедры, но с одним отличием.
У другого препода тестирование носило не только диагностический, но и карательный характер. Если ты писал плохо, то надо было тест переписывать, пока не получишь хотя бы три. Иначе не допускали до экзамена.
Я же просто проверял, что за группа ко мне пришла в целом -- и смотрел, есть ли кто-нибудь интересненький (кто слишком много знает). Преподавал я программирование, поэтому проверял компьютерную грамотность. Вопросы были разные, от "в какой руке держать мышку" до "что такое адресное пространство". Я нашёл записи о тех событиях. Сроки давности уже вышли, можно опубликовать избранные ответы на избранные вопросы.
Q: "Максимальный объём памяти в 32-разрядной винде?" A: "32 мб а может и меньше"
Q: "Какая буква у системного диска?" A: "%с"
Q: "Сколько байт в килобайте?" A: 8192
Q: "Что такое ярлык?" A: "Ярлык -- копия файла (или документа -- зачёркнуто), у которого есть пометка на иконке, служащая указателем на объект."
Q: "Что такое расширение имени файла?" A: "Буковки после имени"
Q: "Что такое файл подкачки?" A: "Разгоняет оперативную память"
Q: "Что такое файл?" A: "Вопрос дурацкий. Что такое любовь? В чём смысл жизни? Что было раньше, курица или яйцо? Комбинация из нулей и единиц."
Q: "Сколько значений может принимать байт?" A1: "Байт может принимать 32 значения" A2: "1 байт = 8 бит, 1 бит = 0 или 1. лень считать =)"
Мужик: Алло, это Мария Сергеевна? Я: Вы ошиблись номером. Мужик: А вы не Мария Сергеевна? Я: Ну как вам сказать... Нет. И я не знаю ни одной Марии Сергеевны. Мужик: А как вас зовут? Я: А почему я должен отвечать? Мужик: А может с вами познакомимся? Я: Что-то такие знакомства меня не интересуют. Мужик: Да ну! Потом бы встретились... Я: АХАХАХАХАХА Мужик: Мда, после такого смеха я с вами точно знакомиться не буду.
Когда меня в 2019 году отправляли в командировку, начальник мне купил отдельный смартфон. Условия эксплуатации должны были быть жёсткими, поэтому покупался смартфон самый дешёвый, и с расчётом на то, чтобы я его сломал.
Тем не менее, все заводские невзгоды он перенёс. Но спустя полгода Евгений Евгеньевич, наш доктор наук, уронил на него щуп от осциллографа. Вот тогда-то экран и треснул...
Иду по улице, передо мной на тротуаре стоят две девицы и разговаривают.
Меня обгоняют два электросамокатчика, вроде взрослые мужики. Потом они проезжают и мимо девиц. Первый проехал спокойно, а второй вдруг раз! и дал одной из девиц подзатыльник. А через секунду его уже и след простыл. Это же электросамокат. После этого все 15 секунд, пока я шёл мимо них, вторая девица смотрела на первую с вытаращенными глазами.
И вот... это что за пиздец? Можно ли ему что-либо противопоставить?