?

Log in

No account? Create an account
Эльфожурнал Below are the 10 most recent journal entries recorded in the "Эльфийское лицо" journal:

[<< Previous 10 entries]

Декабрь 13, 2018
11:30 am

[Ссылка]

Веб-шлак
Это я про nginx, да.

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

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

Например, в мире победившего http/1.1 (ну условно), есть заголовок Vary, который определяет, чё и как хранить. Определяет, что характерно, со стороны апликации. Логично же, что апликации лучше знать, чё кэшировать (псевдостатическое говно), а чё нет (инбокс юзера).

В мире apache всё логично. В доке прямо так и написано: "mod_cache implements an RFC 2616 compliant HTTP content caching filter, with support for the caching of content negotiated responses containing the Vary header.".

И они реально смотрят в Vary и кэшируют, чё там прописано.

Чё, ваш фреймворк не умеет генерировать корректный Vary? Тогда вам место в nginx.

Nginx умеет гибко настраивать кэширование по чему угодно, хоть по чёрту лысому.
Кэшировать, игнорируя query-params? Легко. Практически, по-дефолту.
Кэшировать куки? Да запросто. Только попроси.
Смотреть в поле Vary? Ну... Это нужная чёрная магия. Например, убрать лимит на 42 символа в поле Accept, при Vary: Accept.

Tags: , ,

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

Ноябрь 14, 2018
10:18 am

[Ссылка]

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

Ну или надо много RAM, SSD и терпение.

Сидит себе, жуёт IO, никак себя не проявляет, админка дохлая. Второй день уж...

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

Ноябрь 5, 2018
01:55 pm

[Ссылка]

Притча о бессмысленных религиозных запретах, а также о вреде филологии
1. ЗАВЕТ.

- Я Господь твой, о Человек. Я сотворил тебя из ничего. Я дал тебе жизнь и вдохнул в тебя душу. Я дал тебе пять чувств, и шестое, лучшее - разум. Я приблизил тебя к Себе и обещал тебе высочайшее место в мире. Благодарен ли ты мне за эти дары?

- Да, Господи, благодарен, и преизрядно.

- В таком случае, могу ли я попросить тебя сделать мне три маленьких одолжения? Они не сильно напряжные, но, пожалуйста, исполни их.

- Да, Господи, всё исполню.

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

- Кхм... Ладно, Господи, я постараюсь всё это делать, и детей научу. Но, Господь, мне хотелось бы знать...

- Это выше твоего разумения, человек.

- Я дико извиняюсь, Господи, но у меня будут когнитивный диссонанс.

- Это твои проблемы, человек.

- Мне будет сложно объяснить моим детям, зачем нужно заниматься подобной дурью.

- Это, опять же, твои проблемы, человек.

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

- А это будут уже их проблемы, человек.

- Хорошо, Господи. Но всё-таки - НАХЕР ЭТО НАДО?!

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

- Зуб даю.

- Хорошо, верю. Видишь ли, на самом деле мне нужно от тебя совсем не это. Но это - простейший способ объяснить тебе, что мне от тебя нужно.

- Как это, Господи?

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

- Так, Господи, я начинаю понимать. Они смогут селиться только там, где есть реки?

- Ага, соображаешь... Да, это дополнительное ограничение. Они будут селиться там, где до реки можно будет добраться за девять дней. Точнее, доскакать: в ту эпоху появится конный транспорт и хорошие дороги.

- А шарфик-то зачем?

- Чтобы не простудиться, идиот... Так вот, реки к тому моменту будут основными транспортными артериями мира. Таким образом, именно твоё потомство будет контролировать коммуникации. Это позволит ему успешно отбиться от врагов... Правда, через пару столетий после этого все реки пересохнут. Остатки твоего потомства поселятся в пойме последней реки. Это убережёт их от техногенной катастрофы... Про смысл чтения азбуки на ночь я, уж извини, объяснять не буду. Главное: ты понял общий принцип?

- Ну да. Маленькое и просто формулируемое отрицательное условие заменяет очень длинное позитивное описание, к тому же относящееся к будущему.

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

- Ага, понял.

- Ну так выполняй.


2. СОБРАНИЕ МУДРЫХ.

- В Священной Книге сказано: "Каждый девятый день надевай на шею шарфик и прогуливайся вдоль реки". Здесь в тексте слово "ткукукуинуку", что означает "текущая вода". Значит, для того, чтобы исполнить волю Господню, достаточно каждый девятый день проходить мимо текущей воды...

- Нет, "ткукукуинуку" означает "вода, текущая по естественному ложу, промытому самой же этой водой".

- Ты прав. Значит, к роду "ткукукуинуку" относятся любые ручьи, а также потёки воды на снегу, если они промыты водой...

- Является ли моча водой?

- Несомненно. Если кто-нибудь поссал на снег, то это "ткукукуинуку". Также "ткукукуинуку" - это след от любой струи воды.

- Годится ли вода из-под крана?

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

)(

Утащено отсих. Текст старый, гуглится сложно.

(2 комментария | Оставить комментарий)

Октябрь 30, 2018
06:22 pm

[Ссылка]

Как Google втихаря ломает интернет
В процессе работы с Youtube, через ихний API v3, упёрся я в загрузку видео.

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

Справедливо считаю, что раз API у них типа REST, с примесями JSON, то для работы мне вполне хватит классического python-requests. И вполне хватает, что характерно.

Интересное случилось на пункте videos/insert (загрузка видео).

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

Но нет, для videos/insert про cURL сказано, цитирую,

curl samples are currently only supported for GET requests.


Вау. cURL неспособен к чему-то большему, чем GET? Чё-то новое в интернетах.

Пошел разбираться.
Влоб, как и ожидалось, ничего не работает. Самое вменяемое, что возвращает google при аплоаде файлов - "Entity too large".

Пришлось лазить в потроха googleapiclient.

Оказалось, что загрузка файлов делается в два присеста.

Присест первый - шлём метаданные видео и ждём адрес, куда лить само видео:


curl -i -X POST 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&alt=json&part=status%2Csnippet' --data-binary '{"status": {"privacyStatus": "private"}, "snippet": {"tags": null, "categoryId": "22", "description": "Test Description", "title": "Test Title"}}' -H "Authorization: Bearer %классический-токен" -H "content-length: 145" -H "accept-encoding: gzip, deflate" -H "accept: application/json" -H "X-Upload-Content-Length: <размер, чё мы будем потом аплоадить>" -H "X-Upload-Content-Type: <тип будущего файла>" -H "content-type: application/json"



Ответ гугля оооочень интересный:


HTTP/1.1 200 OK
X-GUploader-UploadID: AEnB2UrPv3elzZh0lab4kESHKQNblablablav_tWGa8ly_-pY4nDgyfpUDyGx7kFRRqhrcqdZjjrCdECKyvwnHqw
Location: https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&alt=json&part=status%2Csnippet&upload_id=AEnB2UrPv3elzZh0lab4kESHKQNblablablav_tWGa8ly_-pY4nDgyfpUDyGx7kFRRqhrcqdZjjrCdECKyvwnHqw
ETag: "XI7nbFXulYBIbububuR_gDh3eu1k/TObjzCHMsvnC6T38palOVn6VX7c"
Vary: Origin
Vary: X-Origin
X-Goog-Correlation-Id: JRwDbebe3zi0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Tue, 30 Oct 2018 17:07:02 GMT
Content-Length: 0
Server: UploadServer
Content-Type: text/html; charset=UTF-8
Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"



Что мы видим:

1. Гугль возвращает урл, куда надо сделать PUT-запрос. PUT-запрос делается без приключений - просто PUT, content-type, content-length. Детали тут -
https://developers.google.com/drive/api/v3/manage-uploads (google-drive api, дада, а не youtube api)
2. Гугль возвращает урл, куда надо делать PUT-запрос в хедере, а не в теле ответа. Название поля - Location.
3. Нет, у нас не редирект, как показалось по полю Location, а вполне себе "HTTP/1.1 200 OK"


Как бы, я допускаю, что загружать BLOB'ы и метаданные можно на разные адреса, поэтому, типа, урл для загрузки получаем отдельным запросом. Но, как видно, адрес у нас один и тот же. Смысл тогда в этих манипуляциях? Ну и какого хера там данные отдаются так криво? Вроде редирект (судя по Location), но нифига не редирект, ни по статус-коду, ни по логике процесса.

Гугль, блин! Протоколы писаны и для вас тоже! Блюдите их, мать вашу.

(11 комментариев | Оставить комментарий)

Июль 21, 2018
07:55 am

[Ссылка]

Гугль, ты сошёл с ума!
Заходим на гугль-карты, честно вбиваем туда gps-координаты, "48.501322;17.394851". Гугль показывает середину Братиславы.

Окей, гугль, хрен с тобой, вбиваем те же координаты, только через пробел - "48.501322 17.394851". Карта тут же переключается на малые Татры (50 км на северо-восток).

Вот что это блин, а? А я тебе скажу, гугль, что это. Языковая школа (офис в центре Братиславы) отправляет детей в лагерь в Татры и написало об этом (с gps-координатами, для родителей), на своём сайте. А дальше у великого гуглевского поискового ИИ снесло крышу.

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

Май 1, 2018
10:35 am

[Ссылка]

Бубунта сервер - впечатления
При инсталляции предлагают установить самбу и ещё что-то. Заботливые.

После инсталляции есть dhcpclient, /etc/networking/interfaces, но нету пускалки для них (apt install ifupdown - логично же, что это надо первым делать после установки сделать. Особенно при отсутствии наличия сети).

Лёгким движением apt install dnsmasq - и кривонастроенный dhcp-сервер уже раздаёт не те ip-шки по вашей локалке.

net.ifnames=1 по дефолту - это ведь так важно на сервере, да? Я ведь точно знаю, как нумеруются слота на материнской плате. USB-сетевуха вообще с mac-адресом в имени. Так интуитивно!

Лучше бы я поставил генту...

А потом они жалуются, что linux никто не любит.

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

Октябрь 18, 2017
12:49 pm

[Ссылка]

SCTP, Linux, Message too long
В процессе использования ssh-over-sctp (замечательная штука, если задуматься), регулярно спотыкался об сообщение в логах ssh - "Message too long". Само собой, в man ssh, man sctp - ничего полезного. В гугле ничего полезного тоже не было, кроме одного сообщения в google groups, наведшего на правильную мысль.

С помощью strace выяснил, что иногда через SSH (я использую его для туннелирования трафика) проходят сообщения длиной в сотни килобайт. Где-то в районе 200кб+, при write в сетевой сокет, ssh получал ошибку EMSGSIZE:


...
10229 write(3, "*******************************"..., 264760) = -1 EMSGSIZE (Message too long)
10229 write(2, "packet_write_poll: Connection to"..., 77) = 77
10229 exit_group(255) = ?
10229 +++ exited with 255 +++



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

Лимит, в общем, оказался банальным - значение wmem откуда-то из дебрей ядра:

net.core.wmem_default = 212992
net.core.wmem_max = 212992


При попытке отправить датаграмму большего объема, клиент получает EMSGSIZE.

Не уверен, можно ли это исправить на уровне апликации (SCTP отвратительно задокументирован), но на уровне ядра - точно можно. Просто меняем значения wmem_default, wmem_max (мне хватило 4MB) и радуемся.

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


P.S. Пост написан, что б помочь тем, кто ищет решение проблемы в гугле и ничерта не может нагуглить. Если кому-то это помогло (вы нашли это по ключевикам типа ssh, sctp, message too long, emsgsize), сообщите в комментах, мне будет приятно.

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

Май 29, 2017
11:06 am
(перепостил angry_elf)
[my_xcalibur]
[reposted post]

[Ссылка]

А ты уже прочел "Конфедерацию Меганезия"?
Алоха! Итак, это что-то вроде мини-презентации нашей чудесной интеллектуальной тусовки, собравшейся вокруг цикла романов Александра Розова - "Конфедерация Меганезия". Для начала, как и обещал - картиночка, во многом отражающая смысл происходящего:

Меганезия Хартия Розов

Новость: на нашем создающемся форуме, новый администратор - angry_elf - теперь-то всё точно будет круто!
А вот всякие ссылки по теме Меганезии (там книги Розова и пр., в общем, для забаненных на Google в самый раз).
Также, рекомендую прочитать чудесный креатив sisterlee насчет идейной и функциональной основы нашего меганезийского сообщества.
Остальное - выразим в каментах.
И да, фоа, пожалуйста понажимайте нижерасположенные кнопочки для перепоста. О смысле сего действа я уже писал позавчера в нашем сообществе. Спасибо!

(15 комментариев | Оставить комментарий)

Сентябрь 22, 2016
09:17 am

[Ссылка]

Нашел себе хороший VPS в неведомых далях
Рекламы псот.




Знатно натрахавшись с амазоном, решил я поискать более другой хостинг для Австралийского проекта (это важный момент - в погоне за скоростью загрузки страниц пришлось брать локальный хостинг).

Минутка ненависти к Амазону.
Бесплатные инстансы и траф амазона в итоге обошлись мне в $20 за неполный месяц. Потому что один инстанс мои апликации не потянул, пришлось брать второй, а он уже не бесплатный. Инстанс с базой почти постоянно был в угнетённом режиме (амазон честно пиздил половину процессорного времени), диск там тупил адски, хоть и обещанный ssd.
База, причем, даже не mysql, а православный couchdb.

К слову, режим "честного процессора" в амазоне - свинство и ад. Выглядит это так - когда тебе не нужно процессорное время - steal=0 постоянно. А вот когда набегают люди или база решила чё-нить посчитать -steal подскакивает до 50%. При этом, чисто по наблюдениям, отзывчивость всего падает не в два раза, как должно быть по цифрам, а миниум раз в 5.

Посмотрев на это блядство, пришлось городить кучу костылей.
1. Вынес апликацию на отдельный инстанс, что б хотя б апач перестал тупить.
2. Закэшировал всё, что можно
3. Дропнул нахер все индексы в базе, что б CouchDB даже не пытался их перестраивать, зароутив все запросы ко вьюшкам на германский сервер. Подождать секунду ответа из Германии оказалось выгоднее, чем ждать 10-30 секунд ответа с сервера в том же датацентре.

Да, о датацентре. Пинг в пределах ДЦ скакал 1-30мс. У меня, блин, в деревне, по wifi, через стену деревьев и 3 километра воздуха, пинг до гугля и то меньше и стабильнее!

Знатно натрахавшись, /me пошёл искать более совершенный хостинг. ИЧСХ, нашёл! Не без помощи форума searchengines.ru, что удивительно. Там живо накидали адекватных вариантов в Австралии, за адекватные деньги. Простым гуглением в Австралии не находилось ничего нормального.

Самый, что мне приглянулся - Vultr. У них VPS по всему миру, за вменяемые деньги - вменяемые параметры.
Панелька - полный восторг. Кроме обычных ubuntu/centos можно загрузить любой свой ISO и поставить туда хоть чёрта лысого, хоть Gentoo. Что я и сделал. В качестве VNC-клиента у них используется noVNC (html5, сокеты, никакой жавы!). Работает всё - просто изумительно.

За те же деньги, что я должен уже Амазону за неполный месяц, тут дают полный месяц, в два раза больше рамы, проца и диска. Ну и траф в 3 TB позволяет не парить мозг.

Железо работает шикарно. Реальный локальный SSD, а не невнятный NAS за три пизды, полноценный двухядерный проц, 2 гигабайта памяти. И база, и апликация, и redis с резервом на 800 мегабайт прекрасно вошли. База среплицировалась и обсчиталась из Германии за пару часов - Амазон же колбасило сутки где-то.

Короче, я счастлив.

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

(7 комментариев | Оставить комментарий)

Апрель 10, 2016
02:00 pm

[Ссылка]

О качестве
Разговорился со знакомым. Занимается бизнесом в России. Такой, вымирающий вид, но крутится пока.

Речь зашла о качестве продукции. Мол, почему в Чехии выпускают одну марку пива уже 600 лет и до сих пор его пить можно, а в России только новые сорта можно пить, да и те пару месяцев, пока качество не изговняется.

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

Соответственно, никто не будет закладывать высокие стандарты качества с рассчётом на пару лет работы. Скорее, качество должно приходить с опытом.

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

(4 комментария | Оставить комментарий)

[<< Previous 10 entries]

Тут никогда небыло, нет и не будет Эльфов Разработано LiveJournal.com