pozitronik: (Sheridan)
Задача: во внутренней сети есть веб-сервис, нужно дать нескольким тысячам пользователей доступ к нему.
Ограничения: 1) сервис требует как минимум IE10, а лучше - chromium based; 2) у пользователей есть в лучшем случае IE9. Безопасность лютует: приложения запускаются только по белому списку из групповых политик, а хром официально запрещено запускать (даже если установить переносную версию); 3) пользователи не всегда отличаются умом и сообразительностью, им чем проще - тем лучше.
Допущения: 1) безопасники готовы разрешить запуск одного проверенного ими приложения, с условием, что с его помощью за пределы указанного сервиса выбраться будет нельзя; 2) если приложение будет хотя бы выглядеть как один цельный бинарник, шанс пройти проверку у него будет выше.

Резюмируя - нужно было этакое окно на один-единственный сайт. Тупо sitename.exe, можно даже без браузерного интерфейса, вся навигация вполне обеспечивается самим сайтом.

Мысль нулевая: допилить ресурс, чтобы работал в старых версиях IE. С негодованием отвергается всеми, ещё полчаса разработческий чатик кипит ненавистью.
Мысль первая: взять хромиум, допилить, собрать на его базе sitename.exe. Отказано по очевидным причинам.
Мысль вторая: сваять на чём-то вроде Delphi приложение с веб-контролом. Для Дельфи есть хромиумный компонент, так что идея не выглядит нереализуемой. Но хочется ещё проще, и без добавления сущностей.
Мысль третья: доработать сам сервис, впилив в него какое-нибудь REST API, а потом на любом ЯП под любую платформу пилить нативные приложения. В целом идея зашибись, но требует времени (а sitename.exe нужен послезавтра) и сил на поддержку (каждую клиентскую фичу нужно дублировать в API и в приложении).
Мысль четвёртая: взять браузер, и виртуализировать его в чём-то наподобие XenApp. Идея ложится со скрипом - добавляется новая сущность в виде среды виртуализации, на которую безопасники могут залупиться ещё сильнее, например.
Мысль пятая: сделать приложение на каком-нибудь специально созданном для этого инструменте, вроде бы на основе node.js что-то такое было. Но дико не хочется тащить за собой весь обвес, да и по памяти - сыро и криво это всё.
Мысль шестая: а вот о ней подробнее.

Я взял браузер Vivaldi, интерфейс которого написан на HTML+JS+CSS, а кишки - всё тот же хромиум. Соответственно, модифицировать морду браузера элементарно: в файле %version%\resources\vivaldi\style\common.css находятся все стили интерфейса, а вызывается он из %version%\resources\vivaldi\browser.html. Достаточно вписать в browser.html <link rel="stylesheet" href="style/custom.css" />, и далее вносить в этот custom.css нужные модификации.

Вот так выглядит vivaldi совсем без интерфейсных стилей:


Чтобы узнать, какие модификации нужны, запускаем vivaldi.exe с ключами -flag-switches-begin --debug-packed-apps --silent-debugger-extension-api --flag-switches-end. Теперь отладчик может быть вызван на элементах интерфейса, так что можно смотреть айдишники и классы нужных/ненужных элементов управления, и в простейшем случае "скрыть с глаз долой" писать им display:none!important;.
В моём случае я скрыл меню и кнопку Vivaldi (чтобы через них не было доступа к настройкам), боковую панель и меню быстрых команд (чтобы не смущали), и подвинул панель вкладок влево, на место, освободившееся после удаления кнопки.

Затем я открыл настройки (они всё ещё доступны через Alt+P), и подкрутил там так, чтобы выглядело как надо. Страница по умолчанию - наш сайт, его же открывать автоматом при запуске и на новой вкладке, убрать встроенные поисковики, ну и интерфейс по мелочи. Самое главное тут - отредактировать горячие клавиши: убрать доступ к открытию настроек (для себя можно оставить какой-нибудь неочевидный вариант) и отображению разных смущающих панелек, оставить только навигацию. Для совсем параноиков - окно настроек тоже написано на HTML, так что при желании его можно залочить через CSS.

Следующий шаг: по умолчанию vivaldi работает с профилем пользователя в %AppData%\vivaldi\User Data. Можно заставить его хранить профиль в каталоге ..\User Data (к сожалению только так, засунуть профиль в подкаталог относительно бинарника не получится): для этого рядом с vivaldi.exe нужно положить пустой файл stp.viv. Затем в ..\User Data можно скопировать любой уже имеющийся профиль.

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

Теперь можно отключить отладчик (даже если убрать в настройках горячие клавиши на его вызов, он всё равно остаётся доступен через контекстное меню). Открываем ..\User Data\Default\Preferences, там хранятся настройки в JSON (минифицированном, но разобраться можно). Находим там параметр "devtools", и в свойства к нему добавляем "disabled":false.

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

Маленький бонус: если заменить \app\%version%\resources\vivaldi\resources\icon_128.png на свою картинку, именно её Vivaldi будет использовать как иконку окна.

Итого: есть каталог, внутри которого лежит vivaldi.exe, рядом - каталоги с кишками. Весит это, конечно, здорово (порядка полутора сотен мегабайт с пустым юзерпрофилем), но нынешний веб - это не хтмлку распарсить. Тем не менее, у пользователя остаётся возможность найти изменённые файлы, и, при понимании процесса, вернуть всё взад, получив таким образом полнофункциональный браузер. Можно усложнить ему это, заодно несколько оптимизировав сборку: с помощью winrar пакуем всё в sfx-архив. Распаковку указываем во временный каталог, отключаем все сообщения и подтверждения, и указываем перезаписывать имеющиеся файлы. После упаковки получаем тот самый sitename.exe, запустив который пользователь получает (через несколько секунд невидимой распаковки, конечно) что-то вроде этого:



Думаю, примерно того же конечного результата можно бы было добиться и с помощью виртуализации, но по вышеуказанным причинам мне это не подошло.
Теперь уговариваем безопасников внести запуск sitename.exe и %tmpdir%\vivaldi.exe в белый список - и voilà, задача решена с приемлимым количеством приседаний.
pozitronik: (Sheridan)
Вчера утром юзеры поднимают панику: отзывчивость сервиса (самописная web-CRM на основе Yii2) упала многократно. Проверяем: CPU load на сервере уткнулся в потолок, что случилось - непонятно.
Серверное окружение, надо сказать, настроено почти никак. Стандартная связка nginx+php-fpm+mysqld, аппаратных ресурсов с запасом, всё работает, а до мало-мальского тюнинга руки просто не доходят.
top показывает, что процессорное время отжирает mysqld, так что лезу в sql processlist. Не видно ничего подозрительного, запросов много, но они отрабатываются. Висяков нет, slow_log пустой. Рестартуем сервисы - сразу после запуска нагрузка опять зашкаливает.
Сразу скажу - что это было, мы так и не уверены. Провели, что называется, комплекс мероприятий: докрутили nginx, включили кеш mysql (то, что отключён был - глупый косяк, зато не мой), вытащили темповые таблицы в memfs, поправили индексы, добавили памяти под всякие буфера, и оставили до завтра, то есть до сегодня. Было подозрение, что утром час наибольшей нагрузки, но ситуация не повторяется, что-то помогло, но неясно, что.
А пока мониторил работу sql, заметил очень странную вещь: счётчик select_full_join увеличивается очень быстро, буквально +1000/сек.
[Ликбез]
Отличие этого счётчика от нуля означает, что выполняется запрос с JOIN по неиндексированным полям. mysql вынужден каждый раз производить сканирование всей таблицы, не имеющей нужного индекса, таким образом нагрузка растёт пропорционально количеству записей в ней.
[/Ликбез]
Вместе с этим счётчиком рос в той же пропорции и счётчик created_tmp_disk_tables, очевидно потому, что временные таблицы создавались как раз из-за этих фулл джойнов. Это тоже совсем нехорошо: mysql должен запихивать временные таблицы в память, если под это выделено место, но не делает этого, если JOIN происходит по текстовому или двоичному полю. Обмануть mysql можно, отдав под tmpdir раздел в памяти, но это костыль.

Я был вполне уверен, что с индексами самых часто используемых таблиц у меня всё в порядке. Но даже один незамеченный отсутствующий индекс, помноженный на сотни тысяч обращений, мог дать описываемую ситуацию. Поэтому я включил general_log на некоторое время, убедился, что select_full_join подрос, а затем сделал
SELECT argument FROM general_log WHERE argument LIKE '%JOIN%'

и стал смотреть эти запросы с EXPLAIN.
Забегая вперёд скажу, что единственным типом запросов, не использующим индексы, стали обращения к information_schema, выглядящие примерно как
SELECT
    kcu.constraint_name,
    kcu.column_name,
    kcu.referenced_table_name,
    kcu.referenced_column_name
FROM information_schema.referential_constraints AS rc
JOIN information_schema.key_column_usage AS kcu ON [...]


Быстрый гуглинг показал, что Yii2 с какого-то времени получает схему таблиц не через SHOW COLUMNS, а вот этими запросами. Вот тебе и select_full_join; а поскольку типы полей в таблицах текстовые, то образующиеся временные таблицы создаются только на диске.

С одной стороны: information_schema почти целиком состоит из MEMORY-таблиц, т.е. обращения к ним почти ничего не стоят. Но по этой же причине проиндексировать таблицы невозможно, значит счётчики будут расти. Ну и оверхед какой-то есть; при малом количестве обращений он несущественен, но при тысячах запросов в секунду даёт уже заметную нагрузку.

Решением оказывается включение кеша схемы БД в db.conf:
	'enableSchemaCache' => true,
	'schemaCacheDuration' => 0,
	'schemaCache' => 'cache',

Сразу после донастройки минимум вдвое упало количество запросов на БД, количество full_join и tmp_tables стало нулевым. Снижение нагрузки на cpu объективно оценить нельзя, но субъективно нагрузка упала (логично - убраны тысячи холостых запросов).
Единственный минус - при каждом обновлении структуры БД кеш надо сбрасывать через
php yii cache/flush-schema

но, при желании, это автоматизируется в скрипте деплоя.
pozitronik: (Sheridan)
Здравствуйте. Я пришёл, чтобы запечатлеть на этой странице некоторый опыт, полученный во время прохождения квеста "получи военный билет". Если у вас уже есть сия заветная книжица, или же вам она не нужна по какой-то причине - этот пост будет представлять для вас только смутную литературную ценность. Однако я сам ещё некоторое время назад счёл бы нижеприведённую инструкцию весьма полезной, потому питаю надежду, что какому-то бедолаге она всё же пригодится.

Read more... )
pozitronik: (Sheridan)
Уже годы назад, в бытность мою жителем Самары, [livejournal.com profile] fromaway_mainer как бы невзначай рассказывала мне, что есть одно место, где можно покормиться лучшими во Вселенной беляшами. Но то да сё - так я тогда не причастился: то было некогда, то было закрыто, то ещё что. Так что впервые попробовал я тех беляшей много позже, приехав в Самару из Москвы погостить.
Мы с Асей тогда успели к самым последним беляшикам, и кукушечная женщина долго извинялась - мол, эти беляши некрасивые. Именно так - "некрасивые", не идеальной формы. И согласилась отдать последний десяток (я взял скопом, несмотря на гневные взгляды Аси, блюдущей мою диету) беляшей только со скидкой - по десять, что ли, рублей, или по пятнадцать...

Когда я вкусил сей дивный продукт, слёзы подступили к моим глазам, и не заплакал от счастья я только по причине своей мужицкой брутальности. Сказать, что беляш был вкусен - не сказать ничего; он был не просто беляшом, а консистенцией всего беляшного. Да, возможно он был некрасив - но он был прекрасен!

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

Истекаю слюнями.

Если будете в Самаре - непременно сходите. Это место находится в здании Жигулёвского пивзавода, то есть там же, где знаменитое Дно (туда тоже непременно стоит заглянуть; полагаю, что туристы обычно "дном" и ограничиваются), но с той стороны, где вход в ресторан. Ищите там окошко, из которого вкусно пахнет - и лучше на голодный желудок, потому что съедите вы много.
pozitronik: (Sheridan)
Намедни добыл переходник usb2com, нужный для соединения ноутбука с монтировкой телескопа. У меня, если кто не в курсе, HEQ5 с полным фаршем, ну я рассказывал. Электронный агрегат и сам по себе может многое, но, согласитесь, рулить с компа, просто выбирая в программе планетария нужные объекты, гораздо удобнее, чем тыкаясь в не очень информативный пульт.
Итак, я все собрал, соединил, заодно залил в гайдер последнюю прошивочку (а там даже какие-то микрокоды для шаговых двигателей можно прошивать, но это я трогать не решился). Стал читать мануалы, как мне, собственно, с компьютера этими самыми двигателями рулить. Вроде всё просто: идёте на сайт, качаете драйвер, включаете внешнее управление, а дальше всё работает само.
Но это не так, немножечко, чайную ложечку. Никаких драйверов на сайте нет, да и не ясно, каким образом дружить монтировку с планетарием, даже если драйвер будет.
Пять секунд гугления навели меня на альтернативный управляющий софт: проект EQMOD. Это набор драйверов и софта, который годится для управления многими экваториальными монтировками, в том числе - EQ5/EQ6.
Несмотря на то, что интерфейсом софт похож на тот, который я рисовал в вижуалбейсике много лет назад, он работает. Потыкавшись по огромному обилию кнопок с непонятными обозначениями (представьте себе пульт управления космическим кораблём - примерно будет похоже), я нашёл основное: выбор com, к которому подключаться и кнопки управления двигателями. Уже потом, поковырявшись, я нашёл и синхронизацию с GPS-приёмником, и подключение каталогов звёздных объектов, и лысого черта в ступе. Параметров реально до фига.
Но программа-планетарий (я использую stellarium) телескоп всё равно не видела, несмотря на включённый плагин, утверждавший, что всё сделает сам. По идее, в плагине должен был быть выбор порта для подключения к телескопу - но нет.
Пришлось опять гуглить. Оказалось, что именно для работы стеллариума с EQMOD есть проект StellariumScope. Он работает, как прослойка между планетарием и драйвером, сам включая и настраивая почти всё (по крайней мере - так сработало у меня). В стеллариуме оставалось только выбрать "Внешнее ПО" в типе подключения, и всё. Монтировка стала наводить телескоп на точку, которую я выбирал мышкой.
Плюс, оказалось, что можно использовать андроидофон в качестве внешнего GPS-датчика, чтобы не гемороиться с указанием координат каждый раз. В общем, чистая автоматизация, оставалось только прикрутить к телескопу веб-камеру, и транслировать видео на экран того же ноутбука, получилась бы такая себе мобильная обсерватория.
Тут же мы с братом решили - вечерком погрузимся в боевую фуру, и рванём за город, радоваться космическим красотам. Хотелось только решить проблему питания ноутбука - вдруг батарейки не хватит? Телескоп можно запитывать от прикуривателя, а вот ноут - нет.
Но телескоп питается от универсального китайского адаптера, на котором можно выставить необходимый вольтаж, и подключить нужный переходник. Что, если попробовать запитать ноут через этот адаптер?
То, что это всё равно ничего не даст, потому что адаптер в прикуриватель не всунешь, я что-то не подумал. Как и не подумал о других полезных вещах, короче - тупанул, будучи захвачен экспериментаторским драйвом.
В результате пожёг ноуту контроллер питания (скорее всего, поставил переходник коннектора не той стороной, там защиты от дурака нет). Теперь жду ремонта, вот такой я идиот.
pozitronik: (Sheridan)
Несколько дней назад я был одарен вот таким девайсом:
1

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

Дарение шло под ненавязчивое условие сделать обзор, так что энжойтесь.
Read more... )
pozitronik: (Sheridan)
У меня была вот такая книжка в своё время, и я очень рекомендую её почитать независимо от того, сколько вам лет.
pozitronik: (Sheridan)

Пару дней назад я стал невольным свидетелем одного диалога. Хотя это был всё же монолог между папой и дочкой, сидящих на смежных сидушках в трамвае. Папа, небритый и несвежий дядька неопределённого возраста, держал в каждой руке по откупоренной бутылке пива, и слегка заплетающимся языком вразумлял дочку:
- Ты думай, как дальше одна бушь жить! Вот щас мы о тебе заботимся, но потом всё! Будешь сама о себе заботиться! Думай, как бушь жить! Если жениха богатого не найдёшь!
Дочка, толстая и некрасивая девочка, таких же неопределённых (но явно детских) лет, сидела насупившись, с каждым батиным нравоучением уходя всё глубже и глубже в свою внутреннюю Монголию. Было видно, что слышит она это уже не в первый раз, и что думать о том, о чём велит ей батя, она не хочет, не может, да и не умеет.

Эта сцена пробудила во мне связанные воспоминания: примерно так же батя "учил" меня в своё время. Всё моё детство он напоминал мне, что как только мне исполнится пятнадцать (максимум - шестнадцать) лет, он выгонит меня из дома, и перестанет снабжать ресурсами. Мотивировал тем, что сам был выгнан в таком возрасте на вольные хлеба, и, при этом, не только сумел отучиться в техникуме, но ещё и стипендию родителям отсылал.
Я от таких лекций очень страдал психически, и исходил всю внутреннюю Монголию вдоль и поперёк, а батю в этом возрасте откровенно боялся (не только из-за лекций, ещё и из-за ремня).
Естественно, ни в 15, ни в 16 лет никто меня не выгнал. Даже чуть позже, когда я сам выразил желание переселиться от родителей (а возможность была), про старые предупреждения батя и не вспомнил. Разговоры начались совсем другие: да ты же несамостоятельный, ты же в первый день от голода помрёшь, да ты о себе позаботиться не можешь, ко-ко-ко!
И, что характерно, в этих словах была своя правда: я действительно был тогда совершенно не готов к самостоятельной жизни. В первый день я б не помер, да и за месяц бы не сдох, но, скорее всего, потом бы сдался и вернулся в тёплое родительское гнёздышко затем, чтобы потом его никогда не покидать. Собственно, я был несамостоятелен, поскольку мне ни у кого было самостоятельности научиться - тот же батя, к моим семи годам сильно охладел к воспитательному времяпрепровождению, и мной ни фига не занимался (исключение - лекции, да принудительный детский труд без учёта моего мнения). Хотя до того действительно много со мной возился, научил читать, считать, искать грибы.


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

Мудрость олдфага )

Вот такой набор, пока хватит. Можете продолжать в комментах, интересно должно быть.

pozitronik: (Sheridan)
Может, кто пропустил новость: Яндекс выкатил программу слежения за общественным транспортом. Нечто подобное достаточно давно делали в других городах, ещё в Самаре я с успехом пользовался "Прибывалкой". Удивительно, что в столице ничего подобного до сих пор не было, хотя инфраструктура, видимо, имеется (на многих остановках есть электронные табло с временем прибытия).

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

На этих выходных пришлось много покататься по городу, и софтина реально выручает, несмотря на некоторую недоработанность. Да и сегодня утром, вместо того, чтобы ждать на остановке автобуса, я просто вышел из дому ориентируясь на время прибытия.
pozitronik: (Sheridan)
Итак, я расскажу вам несколько секретов, благодаря которым я в свои тридцать выгляжу на полноценные двадцать семь. Хотя большинство способов, которыми я собираюсь поделиться, были известны ещё древнегерманским вавилонянам, но есть у меня кое-что и собственнооткрытое.

Итак, для начала сходите на местный птичий рынок. Идти лучше к самому открытию: товар, который нам понадобится, к обеду уже осыпается.
На рынке ищете такого специфичного вида дяденьку... Ну как бы его описать... В общем, от него, во-первых, пахнет, этот запах вы сразу узнаете. А, во-вторых, поначалу вам покажется, что дяденька не торгует ничем. Нет рядом с ним ни клетки со щеночками, ни семян на прилавке, ни попугая, цитирующего сутры из камасутры. Просто стоит и пахнет.
Не стесняйтесь, подойдите и постарайтесь заглянуть дяденьке в глаза. Если зрачок вертикальный - то это точно он, вы не ошиблись. Вернее - оно, потому что это дерево, оно только выглядит, как дяденька.
Протяните дереву руку и как бы поздоровайтесь, потрясите его коростяную ладонь. Вам в руку высыплется несколько семечек - вот это то, за чем мы пришли.
Важно: трясти нужно правую ладонь, там семечки 64-битные. С левой сыплются 32-хразрядные семечки, в принципе, они тоже годятся, но я бы всё-таки рекомендовал разрядность повыше, чай двадцать первый век на дворе, а не двадцать первый год.
Да, дерево стоит отблагодарить - засуньте ему в дупло купюру, какую не жалко. И бегом домой!

Read more... )
pozitronik: (Sheridan)
11 июня этого года, в первый день летнего отпуска, я случайно встал на весы, и впервые увидел под собой трёхзначную цифру: ровно центнер весил жирдяй, внутри которого сидел худенький я. 25 кило, набранных за семь лет.

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

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

Для этого я, во-первых, купил напольные весы и ввёл себе в привычку взвешиваться сразу после побудки. Конечно, имея дома весы, невозможно удержаться от постоянного взвешивания, просто учитывать я решил самый первый, утренний вес.
Во-вторых, я нашёл и поставил замечательные и удобные программы на смартфон. Первая - спортивный трекер Endomondo, в нём оказалось удобно следить за тренировками, получать статистику по сожженным калориям, устанавливать себе цели, соревноваться с другими людьми. Короче, тренировка превращается в этакую игру, в которой постоянно хочется улучшить результат.
Вторая программа - FatSecret, счётчик и планировщик сожранного. Можно рассчитать оптимальный уровень калорий, и следить за тем, что ты ешь, и как это влияет на вес. Я сразу же начал очень точно записывать всё пожранное, так, чтобы по итогам дня вписаться в рассчитанный для себя лимит. Это тоже всё очень удобно, и тоже напоминает какую-то игру или соревнование, что очень помогает.
В общем и то и это очень рекомендую, можете меня френдить на Endomondo и на FatSecret, будем соревноваться.
В третьих, я освежил свои знания о режиме питания. В принципе, в бытность свою посетителем качалки, я, как любой штангозадрот, очень этим интересовался, но с тех пор прошло уже десять лет. Нашёл несколько простых правил, проверка которых на себе подтвердила их эффективность (вот разъясняющая по хардкору ссылка).

Собственно всё: с этого момента я начал худеть.
Я старался при каждой возможности выбираться на покатушки, постоянно наращивая километраж. Катание постепенно превратилось из источника удовольствия именно в тренировки: я садился на велосипед именно за тем, чтобы задать себе нагрузку. Пришёл с работы, перевёл дух - и часа на полтора-два в парк. Приезжал домой потный и довольный - последний раз подобные ощущения были ещё в качалке, когда после хорошей тренировки по всему телу разливалось блаженство. И ведь нельзя сказать, что велосипед - это трудно, велосипед - это очень круто и весело!
Внезапно велосипедом решилась ещё одна проблема: я перестал жрать со скуки. Обычно, приходя с работы домой, я усаживался за ноутбук, что-нибудь делал, при этом ухомячивая всякое вредное - жевание отвлекало. Велосипед забрал скуку, и, как следствие, зажоры.
Со временем (где-то недели через три я это заметил) обычный голод, наступающий в это привычное время, исчез! Желудок отвык, что его набивают в семь часов вечера.
И вес медленно, но верно пополз вниз.
Верно - это хорошо, но медленно - это плохо. Поэтому тренировки были дополнены:
1) ограничением калорий. Стал съедать 75%-90% нормы жратвы. Жру всё то же, только меньше, кроме ужина - его я сделал белковым: творог/яйца/мясо. И, кстати, не сказал бы, что порции пришлось сильно урезать - избавившись от вечерних перекусонов я выбросил почти весь избыток еды. Тем не менее, организм постоянно напоминал, что его недокармливают, но чем больше времени проходило, тем легче оказывалось не обращать на постоянный голод внимания. Если кому интересно - на фатсекрете можно посмотреть всё, что я ем.
2) режимом. Не есть за два часа до тренировки и два часа после. Ложиться спать как можно раньше. Есть строго в одно и то же время. Пожалуй, режим даже важнее диеты и тренировки: когда я заболел, и режим полетел к чертям - всего за неделю вес вернулся обратно к 96. Но как только вернулся к привычному расписанию - тут же похудел заново.

Резюме:
Худеть оказалось не так уж сложно. Никакого превозмогания (только соблюдение режима), никакой диеты (только соблюдение нормы), никаких изнуряющих тренировок (только молодость, только хардкор).

С сегодняшнего дня я официально не жиробас, и вешу меньше 90 кг.
Мне стали велики все мои брюки, и ремень, затянутый на крайнюю дырочку, уже не спасает.
Теперь мне будет сложнее пережить наступающие голодные времена.
Я охуенен, чего и вам желаю.
pozitronik: (Sheridan)
Помните ли вы что-нибудь из школьного или вузовского курса истории? Мировой или отечественной?
Ну там Наполеон напал на Израиль, татаро-монгольское иго основало Вологду, Пётр Первый отпочковал Петра Второго при помощи хирурга Пирогова? Я, например, ни хрена не помню из школы, а из институтского курса я запомнил только препода-шизофреника и трёхсуточную сдачу экзамена ему (что само по себе эпично). Хотя сам предмет мне нравился, но подавался он так, что пользы из него извлечь было решительно невозможно. Ну скажите, какая разница, в каком именно году была та или иная битва, или помер тот или иной государственный деятель? Зачем это запоминать?
А меж тем полезность истории, как науки, в том, что всё уже было в Симпсонах. Любому более-менее современному событию можно найти аналог из прошлого. А найдя его - проанализировать причины и следствия, и, на основании анализа принять решение. Так что будь я государственным деятелем, то держал бы штат историков, как раз под эти цели.

Эта простая мысль пришла ко мне во время просмотра парфёновской "Истории Российской Империи". Этот цикл передач в своё время прошёл как-то мимо, а жаль: посмотри я их вовремя, то сдавал бы историю не три дня, а три недели. Парфёнов очень интересно рассказал о трёх столетиях существования Империи, дав ответ даже на те вопросы, которые прямо не задавались. Плюс куча фактов, о которых я никогда и не слышал даже: скажем, я понятия не имел, что Горький жил и писал на Капри, и спонсировал революцию на гонорары. Что Аляску решили продавать после того, как извели на ней всех каланов. Что Шамиль, чеченский имам и, в то время, главный враг страны, после поимки жил на царские деньги в Калуге. Что Маннергейм, финский президент и военачальник, был ассистентом на коронации Николая II.

Очень рекомендую, если не смотрели, как, впрочем, и другие проекты Парфёнова.

Кстати, хотя цикл выходил на пике российского либерализма, в начале двухтысячных, когда ни о каких имперских идеях не говорили, он создавал впечатление, что в этой стране ничего не меняется, и не поменяется. Всё уже было, и даже не по одному разу.
pozitronik: (Sheridan)
Выложил ещё одну из своих разработок в опенсорс: https://github.com/pozitronik/jquery.lemongrab

Это очень удобный и неоднократно мне пригождавшийся валидатор форм, умеющий всякие хитрые штуки, о которых я рассказал в статье на Хабре: http://habrahabr.ru/post/218559/
Дока и примеры: http://pozitronik.me/lemongrab
pozitronik: (Sheridan)
UPD: Я посчитал необходимым обновить пост, т.к. ссылки на него разошлись по сети, мне пишут люди, что-то спрашивают и предлагают. Я добавляю что-то вроде FAQ, чтобы не отвечать каждый раз одно и то же.

Q: Это действительно самая полная коллекция?
A: На момент первоначальной публикации (февраль 2014) — да. У меня были собраны все известные радиозаписи, все доступные записи лайвов, и, конечно, все подкасты. Сейчас (март 2016) — вряд ли, в последний год я довольно редко нахожу время на поиск новых выпусков и их сортировку. Не вижу в этом большой проблемы, все подкасты и так выкладываются в общедоступных источниках, записи с живых выступлений также не проблема найти. А радиопередач, записи которых и представляют наибольшую ценность, больше не выходило.
UPD: Последняя сверка коллекции - апрель 2016.

Q: Ты говорил, что коллекция полностью вычищена от рекламы и другого аудиомусора, но это не так!
A: Я никогда такого не говорил. Я, по мере прослушивания, стараюсь помечать записи, содержащие рекламу и громкие отбивки, чтобы в свободное время заняться вычисткой. Но, во-первых, до этого руки доходят ещё реже, чем до обновления коллекции, а во-вторых, могу и пропустить что-то. Когда-нибудь коллекция будет вычищена.

Q: Реклама — понятно, а отбивки зачем вырезать?
A: У меня была привычка засыпать под Модель, а отбивки громкие и неожиданные, будят.

Q: А ещё ты говорил, что у тебя нет ошибок в названиях записей, но это тоже не так!
A: И этого я не говорил. В архиве немеряная уйма записей, даже учитывая, что я многожды перепроверял и сверялся с известными списками выпусков, статистически ошибки возможны. Найденное исправляется.
Другое дело, что иногда возникают недоразумения: ведущий называл не того автора. В этом случае в файле указан настоящий автор.

Q: Почему архив в облаке, а не в торрентах?
A: Мне это удобно. Я вношу изменения у себя, они улетают в облако, и всегда там доступны. Тупо архивная копия.
Торренты же хороши для распространения, но для хранения не очень подходят: торрент надо вручную обновлять при каждом изменении архива, информировать личеров, чтоб забрали, ну и ещё всякое. Я не готов этим заниматься.

Q: Мне неудобно забирать архив из облака!
A: Действительно, у облака mail.ru проблемы с удобством (и выбрал этот сервис я исключительно из-за акции, когда они на халяву раздавали 1Тб пространства). Они не хотят включать поддержку WebDAV (именно, что не хотят — в первое время она была, потом выключили), не говоря уж о FTP. Выкачивать файлы в браузере по одному или даже группами — никаких нервов не хватит. Единственный известный мне приемлимый способ забрать архив — использовать синхронизацию. По пунктам: 1) создаёте своё облако под фейковой учёткой (ну или реальной, сами смотрите); 2) копируете мой архив (или нужные его части) себе в облако; 3) стандартным клиентом сливаете файлы себе.

Ну или пользуетесь вот этой штукой, которую тоже я сделал.

Q: Но ты же делал торрент, где он?
A: С торрентом получилась некрасивая история. Я поделился архивом с администратором одной из модельных групп вконтактика, и он через какое-то время всё-таки меня уболтал на создание торрента. Но по причинам, упоминаемым в следующем вопросе, у него, пардон, дичайше бомбануло, и он принялся поливать меня грязью. Я пожал плечами, и убрал торрент, поддержка которого всё-таки стоила мне сил, пусть и небольших.

Q: А почему бы тебе не переделать в этом архиве следующие вещи...
A: Потому что это моя коллекция. Собранная и организованная так, как удобно мне. Собственно, всё, что в ней есть моего — это именно организация.
Я никому не запрещаю (не хочу и не могу запретить) взять этот набор файлов, переиначить его по собственному желанию, и распространять (или не распространять) где и каким угодно способом. Я даже уже не прошу давать ссылку на этот пост при распространении (многим и это западло). Модель не принадлежит мне (вообще затрудняюсь сказать, чего там с авторскими правами).

Q: Но почему коллекция организована так, а не иначе, и почему не поменять сортировку?
A: Сейчас архив сгруппирован по авторам произведений. Причём не по <Фамилия Имя> а по <Имя Фамилия>. Так сложилось исторически — изначально мне так было удобнее слушать понравившихся авторов. Я прекрасно понимаю, что коллекцию было бы удобнее группировать по датам выпусков, и если бы я готовил её "на публику" — то так бы и поступил. Но я собирал это для себя, и не вижу смысла что-то менять.
Некоторым решением проблемы могло бы быть прописывание всей информации о датах выхода в теги с последующей сортировкой плейлиста. Я собираюсь этим заняться после вырезания всей рекламы (серьёзно).

Q: Давай выложим в группу вконтактика/на рутрекер/на мой сайтик, и будем там распространять!
A: Вы ничего не поняли, перечитайте сначала.

А теперь — оригинальный пост.

Привет, бродяги.
Я потратил несколько дней и завершил промежуточную часть квеста "Собери полную коллекцию МДС".


Для начала - краткий ликбез для тех, кто незнаком с феноменом Модели.
Модель Для Сборки, или, сокращённо, МДС - это культовый проект, существующий с 1995 года (то есть, без малого уже 20 лет). В МДС одновременно звучат странная музыка и странная литература; этот симбиоз рождает настоящие шедевры, полученные по рецепту "смешать, но не взбалтывать". Выпуски МДС сложно назвать просто аудиокнигами (хотя формально это именно так) - это, скорее, совершенно новый жанр искусства.
МДС успела просуществовать в разных форматах и вариантах: начавшись, как радиопередача, Модель побывала и на телевидении, и в Интернете (в виде подкастов), существует она и вживую - в последнее время всё чаще происходят встречи Модели с поклонниками.
Неизменный голос МДС - актёр Владислав Копп. Даже если вы не интересуетесь Моделью, вы гарантированно слышали его дубляж в каком-нибудь фильме или игре. Музыку обеспечивают DJ Габович, DJ Addison, DJ Инкогнито и, иногда, другие DJ, а литературным наполнением программы с не столь давних времён занимается известный писатель-фантаст [livejournal.com profile] lightday.

Модель, за редкими случаями, никогда не предназначалась для записи. Прошедший эфир - если в планах радиостанции не было его повтора - исчезал; сохранением эфиров могли заняться только сами слушатели; к счастью, проект моментально нашёл своих любителей, которые принялись писать передачу на кассеты, а позже - в MP3. Конечно, часть эфиров утеряна, или, по крайней мере, считается таковой, но отношение потерь к общему количеству "спасённых" записей невелико (десятые доли процента).
С появлением интернета любители начали организовывать поиск и сбор и обмен таких записей (и, иногда, "модельной" музыки, которая заслуживает отдельного рассказа), но и тут были проблемы. Кто-то мог хранить весь эфир, но сжатый в 64kbps, кто-то вырезал и хранил только рассказы, кто-то имел весь эфир с приличным битрейтом, но с дикими помехами - и найти наилучший, наиполнейший вариант было непросто. Да что-там, иногда было трудно найти хотя бы какой-то вариант - тем более что долгое время хронологию эфиров никто не вёл, и люди просто не знали, что и где искать.
Долгое время существовал знаменитый архив на mds.rudn.info, в котором была действительно неплохая (хотя и далеко не полная) коллекция "Модели". Медленно и печально выкачивал народ оттуда гигабайты mp3, пока и этот архив не закрылся. Существовали и другие архивы, но понять, какая разница между ними часто было невозможно (а, меж тем, источники получения записей и, следственно, полнота и качество, могли быть разными).
Тем не менее, с развитием социальных сетей и тут удалось навести порядок. Составлена полная карта всех выпусков МДС, архивы более-менее согласованы и выпуски доступны как на отдельных архивных сайтах, так и в МДС-группах социальных сетей.

Чем интересна именно моя коллекция?
Вкратце: качеством, полнотой, организацией.

Мои записи доставались самым различным образом, и все источники я не смогу назвать, даже если очень захочу. Записи обнаруживались в интернете, в домовых сетях, на дисках случайных людей. С какого-то времени я получил возможность писать их сам: кто-то из пользователей симиксовской сетки ретранслировал станцию тогдашнего обитания Модели со спутника. Помню, что из-за обилия пользователей ему приходилось ограничивать битрейт трансляции (в симиксе был закрыт броадкаст, необходимый для организации сетевого радио), и я договорился с ним на увеличение битрейта для меня одного на момент трансляции. Так что я писал выпуски 2004-2005 годов в божественных 320kbps, а затем часами корпел над ними, вырезая рекламные отбивки и выкладывая на местный форум.

Всё нарытое тщательнейше изучалось. Записи сравнивались на качество звучания, полноту записи и битрейт, оставлялось самое лучшее по сумме параметров. Если же мне доставались, например, полная передача с плохим звуком и её отрывки в хорошем звучании, я сохранял оба варианта. Этот подход я использую и по сей день, так что за качество ручаюсь. При этом, конечно, допускаю, что есть отдельные варианты записей чем-то лучших, чем у меня, но понимаю, что при текущих объёмах коллекции проводить полные сравнения очень затруднительно.
Единственное что - не из всех эфиров вырезаны рекламные отбивки. По мере прослушивания коллекции (а сам я не слышал далеко и половины её), я отмечаю те записи, в которых замечена реклама, и при появлении времени вырезаю её. Поскольку процесс это итеративный, то он стремится к бесконечности.

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

Коллекция организована по принципу авторства произведений, прочитанных в эфире. Это обусловлено как историческими факторами, так и личными предпочтениями; хотя многие коллекционеры организуют сборники по дате эфира (а в одном эфире могли звучать произведения разных авторов), не все эфиры существуют в полном виде, что сразу лишает этот подход смысла.
Таким образом, произведения каждого автора хранятся в отдельном подкаталоге, "многосерийные" передачи (бывало, что большую книгу читали по нескольку выпусков подряд) - также в подкаталогах. Именование файлов сохраняет имя автора, название произведения, и порядковый номер выпуска (для "сериалов"), вся эта информация продублирована в ID3-тегах файлов. Там же в тегах иногда добавлена информация по файлу, например, где и когда был прочитан рассказ. В целом, мой подход вполне прост и очевиден, и дополнительно что-то объяснять я не вижу смысла.
С descript.ion-файлами, попадающимися в архивах, можете поступать, как вздумается. Это мои личные заметки о прослушанных рассказах, чтобы не слушать одно и то же несколько раз, или наоборот, иметь возможность найти и послушать понравившийся эфир. Такие заметки поддерживает Total Commander и некоторые другие файловые менеджеры.

Собственно, коллекция в мейлрушном облаке: прямая ссылка (~82 Гб).
UPD: торрент.

Удачного погружения!

А для тех, кто хотел бы познакомиться с МДС, перед тем, как качать, даю ссылку на прослушку двух моих любимейших модельных произведений: http://pozitronik.livejournal.com/264377.html
pozitronik: (Default)
Сейчас расскажу всем, как просто и вкусно приготовить полноценную еду, которой не стыдно угостить даже зашедшую в гости девушку. Требуемый кулинарный скилл - нулевой, запороть готовку совершенно невозможно. Вообще мне эту идею показал мой брателло, и я даже уже хвастался у кого-то в комментах. Спасибо ему.

Итак, что мы будем делать: будем варить в горшке. Варить что? А что под руку попадёт, способ универсальный. Супы, овощи, каши, даже Аллах - всё можно, всё вкусно.
На этот раз будет птица с картошкой и грибами. По идее, это могло бы называться "гуляш", но это не гуляш, а как правильно назвать - не знаю.

Что я купил в магазине:
- Куриное филе. Можно не филе, желательно только, чтобы без костей. Мясо может быть любое (даже рыба), у меня большим успехом завершались эксперименты с индюшатиной и свининой. Ну свинину с говядиной, разве что, стоит обжарить в масле поначалу, в остальном различий в готовке нет.
- Лук.
- Картошка.
- Грибы. Шампиньоны из ближайшего магазина, или подберёзовики из ближайшего леса.
Баланс ингредиентов определяете по собственному вкусу, он может быть любым. Можно что-то выкинуть и что-то добавить - например, легко добавляются всякие овощные смеси, свежие помидоры, бобовые, морковка и т.п. А вот сырики, маянезики и яички уже идут не так годно - они коагулируются и впитывают бульон, получается сухо, съедобно, но уже не так вкусно.
Количество... ну исходя из того, что у меня был примерно килограмм филе, у меня получилось порций шесть. Соответственно, 160 грамм мяса - одна порция, остальное - на глазок.
Для мяса нужна приправа - я купил какую-то гуляшную, но на самом деле абсолютно пофигу, что это будет. Почти любая готовая смесь подходит на ура.
А, ну и сливки. Хотя они совершенно не обязательны - вкусно будет и без сливок. Но у меня были, я решил употребить их в дело.
Кроме этого понадобится непосредственно сам горшок, духовка (можно и микроволновку, но там другие тайминги) и какая-то промежуточная посуда.

Включаем духовку, её нужно разогреть до 220 градусов где-то. У меня духовка электрическая, разогрев занимает двадцать пять минут, как раз хватит остальное сделать. Впрочем, можно приготовить всё ещё вчера - так даже лучше, мясо успеет промариноваться.
Процесс готовки в картинках )
pozitronik: (Default)
Скучная, но полезная часть:

При работе с API Yandex Maps наткнулся на странное поведение класса GeoCollectionBounds. Этот класс высчитывает границы минимального прямоугольника, в который входят все указанные точки, и, при необходимости, подгоняет карту под этои границы.

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


/*Инициализация*/
map = new YMaps.Map(parent_div);//Создали экземпляр карты
bounds = new YMaps.GeoCollectionBounds();//Создали экземпляр класа для расчёта границ

/*Заполнение границ*/
for (var int = 0; int < points.length; int++) {//points - массив с координатами точек
bounds.add(YMaps.Point.fromString(points[int])); //добавляем новую точку
}
map.setBounds(bounds);//Вписываем карту в вычисленные границы

/*Обновление набора точек*/
bounds.Clear();//Сбрасываем границы, см документацию
for (var int = 0; int < new_points.length; int++) {//new_points - массив с координатами точек
bounds.add(YMaps.Point.fromString(new_points[int]); //добавляем новую точку
}
map.setBounds(bounds);//Вписываем карту в вычисленные границы


Если так сделать - карта отмасштабируется неверно. Удаление будет максимальным, в границы почему-то попадает вся планета.
Внимательное изучение под отладчиком показывает, что bounds после инициализации и bounds после вызова Clear() не идентичны. Параметр _empty у только что инициализированного экземпляря равен 0, после добавления первой точки становится равен 1, и не меняется при вызове Clear(). При этом Clear() корректно обнуляет границы, но при bounds._empty==1 нижняя граница прямоугольника (bounds._bottom) перестаёт вычисляться, что и приводит к виду на планету из верхних слоёв атмосферы.
Лечение, соответственно, простое - сразу после bounds.Clear(); делать присвоение bounds._empty=1;

Интересная, но бесполезная часть:
Параллельно задумался: а ведь сколько интересных, трудных, головоломных и непонятных ошибок доводилось мне встречать с того времени, когда я впервые запустил qbasic. Ну, например:
- Ошибки-призраки. Не работает, не понятно почему, вчера всё работало, а сегодня - нет. Не лечится никак и ничем. Откладываешь код, всю ночь играешь в кваку, на следующий день смотришь - тот же самый код работает.
- Трололо-ошибки. Код собирается без единого ворнинга, но не работает. Потом оказывается, например, что написал класс с таким же названием и операторами, что и стандартный, и компилятор, естественно, вызывает не тот, что нужен. Но иногда бывают необъяснимые случаи - стираешь, переписываешь чуть ли не символ в символ, и работает.
- Трололо-отладчик. Под отладчиком программа работает не так, как при запуске. Проходишь пошагово - всё чистенько, четкенько, красота. Запускаешь тот же код вне отладчика - еггог ололо. Иногда помогает дубовый способ понапихивания после каждой строчки вызова собственного логгера (самое ffffuuuuu начинается, когда и при добавленном логгере всё работает, а без него - хуйс). Реже бывает обратное - в отладчике код работает неверно. Вернее, это просто обнаруживается реже - потому что кто же будет отлаживать код, который и так работает.
- Зеркальные ошибки. Оператор работает ровно наоборот от положенного. Скажем, итератор for x=0 to 100 начинает не инкрементировать переменную x, а наоборот - инициализирует её, как 100, а потом делает декремент. Или if/case/switch начинают путать ветки. Этим борландовские компиляторы грешили, но чтобы наткнуться на такой глюк, надо было написать много-много-много кода, так как грешили они редко, но исключительно в жилу.
- Кстати, о Борланде. В какой-то из версий их среды разработки под Delphi иногда тупо переставали работать Insert и Space. Но это фигня, обычно решалось перезапуском. А вот что немало нервов мне пожрало в свой время - на больших участках кода, в десятки тысяч строк, отладчик при пошаговой отладке скакал не по тем строкам. Причём в некоторых функциях работал как надо, а в некоторых - сбивался.
- Мультипоточные глюки. Отлаживать код, который работает в несколько потоков можно только свою судьбу хуйня и бля. Лучше сразу писать правильно.
- Глюки ассемблирования. Поскольку грешил с ассемблером я не так много, то и ошибку помню только одну: в одной из моих досовских программ код собирался неверно, кажется, вместо JE ставилось JNE и последующий оператор тоже менялся. Причём вся отладочная информация и прочее были нормальными. Если кто не знает - код на ассемблере, и код с отладочной информацией в дебаггере должны быть одинаковыми, но вот у меня они одинаковыми не были. Скриншот я показывал сокурсникам и преподавателям, но и те и другие от ассемблера шарахались, как еврей от работы, потому выяснить причину глюка не удалось.

А какие необычные мозговыносящие глюки встречались вам?
pozitronik: (Sheridan)
Нашëл крайне годный ЖЖ-клиент под Андроид. Настолько годный, что хочу аналог под винды: есть всë, что нужно, ничего лишнего и именно в том виде, в каком я хотел это джва года.
Называется ElJay. Умеет не только удобно и без выебонов постить посты, но ещë и даëт доступ к красиво и удобно оформленной френдоленте. Короче, перекрывает официальный клиент наголову (тот мало что глючный, так ещë и крайне самодеятельный - сам форматирует посты блоками, добавляет свой ориджин, норовит всунуть свой тег - пользоваться таким говном можно был только за неимением лучшего).

Кстати, есть ещë софтина "Журналюк" - нечто вроде оповещалки о новых постах в указанных журналах, но еë я пиарить пока не буду: годная идея заключена в сырой и неудобной оболочке.
pozitronik: (Default)
Знаешь, какой вопрос мужчине самый нечестный, неоригинальный и даже несколько неприятный? Это вопрос "О чëм ты думаешь?".
Что можно ответить на такой вопрос?
Если мне хорошо с тобой, я расслаблен, и не думаю, о чëм думаю. Тогда вопрос убивает расслабленность, и всë идëт к чëрту.
Если мне пока ещë не очень хорошо, то я сосредоточен, и пытаюсь контролировать ситуацию. Тогда вопрос заставляет терять эту нить самоконтроля, и, с большой долей вероятности, всë снова идëт к чëрту.
Если я думаю всякую фигню, то мне будет неловко про это рассказывать. Например совсем недавно, без всякой причины и каких-либо последствий, я думал о том, что помню, как были круты и интересны игры про нинзю Гайдена на NES, но почему-то никак не могу переиграть их сейчас, на эмуляторе. И это ещë не самая странная мысль, просто та, что запомнилась. Обьяснять эту ерунду - в 99% случаев всë рушить к чëрту.
Есть и ещë вариант, самый, надо думать, частый. Я думаю, но не словами, а образами, пересказать которые не смогу при всëм желании, не потому, что ты не поймëшь, а потому, что слов таких ещë не придумано.

Понимаешь, почему я ответил на твой вопрос ссылкой на этот пост?
pozitronik: (Default)
Сап, медач.
Поделюсь опытом о том, как ставить самому себе уколы. Штука элементарнейшая, а я вот не знал - благо раньше всегда была рядом персональная медсестра. А вот сейчас, когда возникла реальная и неотложная необходимость, а никого рядом нет, выбор между "ездить каждый день два раза в поликлинику" или "колоться самому" был очевиден.
Итак, всë просто. Если лекарство в ампуле - обстучим еë, чтобы лекарство со стенок стекло на дно. Если есть пилка - обычно еë кладут в упаковку к ампулам - делаем надпил на будущем месте разлома. Если пилки нет, можно воспользоваться маникюрной пилкой для ногтей или ребром надфиля. Если нет и их - ломать ампулу нужно осторожно, завернув в носовой платок (усилие придëтся приложить на порядок больше, и обязательно будут осколки). Если жидкость из ампулы при сломе хоть чуть вытекла - всë, стерильность ëк, выбрасываем. В принципе, можно ампулу перед сломом обтереть спиртом, но если пролилось - это не поможет.
Вскрываем упаковку шприца, насаживаем иглу с колпачком, придерживая иглу у основания снимаем колпачок.
Самое важное: до иглы нельзя дотрагиваться! То есть совсем. Не говоря уж о том, что еë нельзя ронять, использовать повторно и ваще. Дотронулись до иглы - меняйте, это можно (например, если лекарство уже в шприце). Если лекарство набирается не из ампулы, а из пробирки - ну такие баночки с резиновой пробкой, которая протыкается иглой, обычно в них растворы готовятся - после набора лекарства игла меняется. Она протыкала пробку, и уже не стерильна.
Набрали лекарство в шприц? Отлично, самое интересное начинается. Смачиваем ватку в спирте (если нет - мне, например, без рецепта не продали - подойдëт водка или специальные дезинфицирующие медицинские салфетки), и масштабно смазываем область будущего укола. Место укола выбирается эмпирически, если вам хоть раз делали укол - примерное место вы знаете, а дальше вам подскажут зоркий глаз и верная рука.
Колем. При правильном уколе больно чуть-чуть только когда протыкаешь кожу, когда игла входит в мыщцу не чувствуется ничего. Самое хреновое, что может случиться - проткнëте кровеносный сосуд, это неприятно но не более, будет синяк и кровища, но укол надо доколоть. Колоть можно по всякому - "шлепком", когда шприц всаживается сразу, раздельно - когда всаживается игла, а потом уже в неë вставляется шприц, или медленно и осторожно, как делаю я.
Выдавливаем содержимое, тут ничего сложного.
Подтыкаем иглу всë той же наспиртованной ваткой, вынимаем. Ватку можно пртклеить пластырем, либо по старинке прижать резинкой трусов (ну да, колоть проще всего в жопные булки, они словно для того и созданы). Кстати, хорошо всаженный шприц спокойно держится в жопе без всякой поддержки - можно освободить руку, чтоб дотянуться до ватки, например.
Всë, +10 очков к медицине. Самое интересное - оказалось, что делать уколы самому гораздо менее неприятно, чем доверять свою жопу хоть самой лучшей медсестре. Я, например, теперь буду колоться только сам.

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

December 2016

S M T W T F S
    123
45678910
1112131415 1617
18192021222324
25262728293031

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2017 10:06 am
Powered by Dreamwidth Studios