pozitronik: (Sheridan)
После приобретения второго ноутбука (который, по большей части, выполняет чисто развлекательные задачи), я решил не перетаскивать на него всё легаси со старого (который остаётся рабочей машиной), а начать понемногу искать более удобные решения. В частности, я решил использовать только браузер Vivaldi, и к нынешнему моменту у меня набралось достаточно впечатлений о нём. Раньше я пробовал Vivaldi достаточно эпизодически, но по тем или иным причинам не мог на него переползти полностью.
Можно вспомнить, с каким обожанием я писал про Оперу, идейным продолжателем которой является Vivaldi, и как горевал после её уничтожения. После смерти Оперы я предрекал, что когда-нибудь мы будем с трогательной теплотой вспоминать непревзойдённое удобство работы с ней - и вот это случилось. Я прекрасно помню, как кайфово и удобно было в Опере, подсознательно жду этого от Vivaldi - и, увы, не получаю. Даже близко не то. Лучше ли, чем другие хромиумные браузеры?
И да, и нет.
Начну с "нет".
Vivaldi, несмотря на полтора года разработки и стабильную версию 1.6 - всё ещё очень сырой браузер. Он имеет проблемы с оптимизацией и производительностью, например у меня на ноутбуке запуск занимает секунд десять-пятнадцать. Напомню - сверхбыстрый SSD, 32 гигабайта памяти, долбаные гигагерцы мощи, ноутбук стартует быстрее, чем грузится одна программа! А ведь, судя по всему, это запуск расширений происходит раньше, чем инициализируется интерфейс, почтовик лезет на сервер, блокируя дальнейшую загрузку.
Vivaldi имеет проблемы со стабильностью. Он периодически падает при попытке вызвать меню на картинке - и не восстанавливает после этого сессию.
Vivaldi нельзя использовать в разработке и тестировании. Он не хочет повторять постинг заполненных форм при обновлении страницы, как это делают другие браузеры (понимаю, что для этого есть другие инструменты, но в браузере очень часто удобнее), инструменты разработчика всё ещё не полностью интегрированы в интерфейс.
Самое обидное - непонятен вектор развития браузера. От версии к версии добавляются какие-то непонятные и ненужные вещи, те самые свистоперделки. Реально крутые вещи выдаются по чайной ложечке. Но они, тем не менее, есть:

Хоткеи. Почти как в старой Опере, для хромиумных браузеров совершенно уникальная штука. С сожалением замечаю, что отвык (ну, немудрено за такое время) от старых удобных оперных хоткеев, но они стоят того, чтобы вспомнить.
Кастомизация интерфейса и поведения. Нет, ещё не старая Опера, но всё равно - очень неплохо. С интерфейсом, в принципе, вообще нет ограничений, можно, при желании, перепилить всё самому.
Понемногу, но всё-таки реализуются и доделываются какие-то удобности, вроде менеджера загрузок или боковой панельки.

Но в целом, Vivaldi ощущается как хромиумный браузер. С Оперой или Fx, и даже с IE работаешь по своему, и разница чувствуется. А хромиумные браузеры - все одинаковые, как бы их не кастомизировали.
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)
Буду краток: ссылка на гитхаб.

Принимаются пулл-реквесты.
pozitronik: (Sheridan)
Недавно снова возник интерес: а чо там с cloud.mail.ru - открыли они webdav-доступ, или нет? Стандартным приложением пользоваться очень сложно, когда требуется синхронить какие-то разрозненные данные, или, например, часть данных забирать из облака, а часть - залить туда. Да, всё возможно, но неочевидно и как-то неподконтрольно.
Нет, webdav не открыли (и вряд ли когда-нибудь откроют). Зато умельцы покопались в JS и разобрали API (пыщь хабр, например), и на гитхабе нашёлся вполне рабочий код работы с облаком, правда без поддержки копирования из. Я эту поддержку добавил (пыщь гитхаб), но это всё PHP.
А тут сама собой напрашивается идея впендюрить поддержку удалённого хранилища в файловый менеджер. Плагины для Total Commander я, в своё студенческое время, писал на дельфе пачками, пришло время вспомнить. Хотя тут были сомнения: последний раз не под веб я писал уже лет шесть назад; кажется, как раз тогда в Delphi стала появляться поддержка юникода.
На ноуте даже оказалась спираченная в незапамятные времена Delphi XE, и, само собой, код базового шаблона файлсистемного плагина TC. И знаете что? Это как кататься на велосипеде - хрен забудешь. Пальцы помнят горячие клавиши, язык вспоминается тоже моментально. Даже с тем самым юникодом разобрался прям моментально, всё сконпелялось и запустилось.
Дальше, казалось бы, просто: переписывай логику с PHP на паскаль, оформляй классом, вызывай из библиотеки и всё будет пучком. В общем-то, так и получилось, возникла пара затыков только. Первый - работа с сетью, в PHP это встроенные врапперы или всемогущий curl, в дельфи пришлось вспоминать и гуглить про Indy. Второе - это парсинг JSON; то, что в пыхе делается одной строчкой, в дельфе уже нетривиально - ибо статическая типизация. Тем не менее, всё порешалось; забегая вперёд, скажу, что всё работает как хотелось, я на следующей неделе немножко дополирую юзабилити и выложу плагин с исходниками.
Я боялся, что после многолетнего похапе-макакинга Delphi будет вызывать у меня негатив - но нет, ни фига, кодю с удовольствием. Единственное, чего я не понимаю: среда разработки (я спиратил на посмотреть новейшую версию) осталась ну вот ровно на том же уровне, где была лет семь, а то и больше, назад. Ни подсветки, ни настраиваемых хоткеев, редактор вообще бедный. Не выдерживает сравнения не то, что с божественным PHPStorm, даже какому-нибудь Eclipse сильно проигрывает.
pozitronik: (Sheridan)
Намедни добыл переходник usb2com, нужный для соединения ноутбука с монтировкой телескопа. У меня, если кто не в курсе, HEQ5 с полным фаршем, ну я рассказывал. Электронный агрегат и сам по себе может многое, но, согласитесь, рулить с компа, просто выбирая в программе планетария нужные объекты, гораздо удобнее, чем тыкаясь в не очень информативный пульт.
Итак, я все собрал, соединил, заодно залил в гайдер последнюю прошивочку (а там даже какие-то микрокоды для шаговых двигателей можно прошивать, но это я трогать не решился). Стал читать мануалы, как мне, собственно, с компьютера этими самыми двигателями рулить. Вроде всё просто: идёте на сайт, качаете драйвер, включаете внешнее управление, а дальше всё работает само.
Но это не так, немножечко, чайную ложечку. Никаких драйверов на сайте нет, да и не ясно, каким образом дружить монтировку с планетарием, даже если драйвер будет.
Пять секунд гугления навели меня на альтернативный управляющий софт: проект EQMOD. Это набор драйверов и софта, который годится для управления многими экваториальными монтировками, в том числе - EQ5/EQ6.
Несмотря на то, что интерфейсом софт похож на тот, который я рисовал в вижуалбейсике много лет назад, он работает. Потыкавшись по огромному обилию кнопок с непонятными обозначениями (представьте себе пульт управления космическим кораблём - примерно будет похоже), я нашёл основное: выбор com, к которому подключаться и кнопки управления двигателями. Уже потом, поковырявшись, я нашёл и синхронизацию с GPS-приёмником, и подключение каталогов звёздных объектов, и лысого черта в ступе. Параметров реально до фига.
Но программа-планетарий (я использую stellarium) телескоп всё равно не видела, несмотря на включённый плагин, утверждавший, что всё сделает сам. По идее, в плагине должен был быть выбор порта для подключения к телескопу - но нет.
Пришлось опять гуглить. Оказалось, что именно для работы стеллариума с EQMOD есть проект StellariumScope. Он работает, как прослойка между планетарием и драйвером, сам включая и настраивая почти всё (по крайней мере - так сработало у меня). В стеллариуме оставалось только выбрать "Внешнее ПО" в типе подключения, и всё. Монтировка стала наводить телескоп на точку, которую я выбирал мышкой.
Плюс, оказалось, что можно использовать андроидофон в качестве внешнего GPS-датчика, чтобы не гемороиться с указанием координат каждый раз. В общем, чистая автоматизация, оставалось только прикрутить к телескопу веб-камеру, и транслировать видео на экран того же ноутбука, получилась бы такая себе мобильная обсерватория.
Тут же мы с братом решили - вечерком погрузимся в боевую фуру, и рванём за город, радоваться космическим красотам. Хотелось только решить проблему питания ноутбука - вдруг батарейки не хватит? Телескоп можно запитывать от прикуривателя, а вот ноут - нет.
Но телескоп питается от универсального китайского адаптера, на котором можно выставить необходимый вольтаж, и подключить нужный переходник. Что, если попробовать запитать ноут через этот адаптер?
То, что это всё равно ничего не даст, потому что адаптер в прикуриватель не всунешь, я что-то не подумал. Как и не подумал о других полезных вещах, короче - тупанул, будучи захвачен экспериментаторским драйвом.
В результате пожёг ноуту контроллер питания (скорее всего, поставил переходник коннектора не той стороной, там защиты от дурака нет). Теперь жду ремонта, вот такой я идиот.
pozitronik: (Sheridan)
Ну меня вроде читают всякие гиканы, потому поболтаем за "Эльбрус", который процессор. Если что - не стукайте, я не настоящий сварщик, так, по верхам нахватался.

Собственно, меня как-то удивляет хайп, поднявшийся вокруг запуска в продажу персоналок на базе этого процессора за цену в 200 килорублей. Мол, пентиумный компьютер аналогичной производительности, можно купить в двадцать раз дешевле. Я сам скептически отношусь ко всяким "инновациям", "импортозамещению" и всему такому, но если взглянуть критически - хаять тут нечего.
Стоит посмотреть на ситуацию шире. Эльбрусовская архитектура - это не копипаста с пентиумов, это что-то своё, рождённое ещё в совке, но планомерно допиливаемое. Для страны, на десятилетия отставшей от цивилизованного мира в разработках подобного плана, это прорыв.
И этот процессор не только железячно совместим с уже имеющимися массовыми технологиями, но и умеет в поддержку x86. Довести такой проект до релиза - это всё равно, что в средневековой стране построить паровоз, настоящее чудо (даже если в других странах уже давно атомный век, тесломобили и космический туризм).
Так что тут речь не о конкуренции с Intel/AMD, а об относительном внутреннем развитии. Выход на рынок - это, видимо, такая демонстрация: любой желающий (на самом деле - нет) может пощупать железку и убедиться.

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

Any thoughts are welcomed.
pozitronik: (Yarr)
Работал у нас один Руслан. Работал - и уволился вскоре после моего прихода.
А мы, оставшиеся, очень сильно плевались, переписывая за ним его ужасный код. Код был настолько плох, что каждую строчку можно было бы показывать в фильме ужасов: Руслан тварил в каком-то своём стиле, игнорируя любые условности, правила и стандарты. Он забивал на форматирование и отступы скобок, он мешал табуляции и пробелы, заливая ими также и концы строк. Часть файлов он сохранял в win1251, а часть в utf8, а для приведения выводимых кодировок к единому виду писал конструкции с iconv. Он очень любил использовать Codeigniter, но напрочь игнорировал MVC, вписывая html-код форм прямо в контроллер, инлайном или построчно, через echo. А в этот html он инлайном же вписывал и css с js. Он никогда не выносил дублирующийся код в функции, копипастя одинаковые фекальки кода повсюду. При этом он мог написать функцию вроде этой:

private function null2unknown($data) {
if ($data == "") {
return "No Value Returned";
} else {
return $data;
}
}

которая вызывалась всего один раз. Он, в зависимости от настроения, мог использовать стандартные возможности фреймворка - а мог написать многостраничный велосипед. Он называл поля в своих таблицах "select", "order" и "group" - и да, запрос у него мог выполняться даже во вьюхе. Он вписывал логины, пароли и абсолютные пути прямо в скрипт, вынося в конфиг только свой почтовый адрес (хотя и его он тоже вписывал потом напрямую). Он никогда не выбрасывал старый и отладочный код, заботливо сохраняя его в комментариях. Он глушил warning messages собакой.

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

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

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


$sup_time = date("Hi",time());

switch($lang){
case 'ru':
$this->setTitle(iconv('windows-1251','utf-8','Информация о заявителе'));
if ($sup_time=="2356" || $sup_time=="2357" || $sup_time=="2358" || $sup_time=="2359" || $sup_time=="0000" || $sup_time=="0001"){
$this->load_view('support',$output);
} else {
$this->load_view('home',$output);
}
break;
case 'eng':
$this->setTitle('Payment information');
if ($sup_time=="2356" || $sup_time=="2357" || $sup_time=="2358" || $sup_time=="2359" || $sup_time=="0000" || $sup_time=="0001"){
$this->load_view('support',$output);
} else {
$this->load_view('home',$output);
}
break;
}



В этом коде ужасно всё, но самый перепиздец - это выбор view в зависимости от времени. Он берёт значение часов/минут в виде строки, и проверяет каждый из вариантов этой строки. Это чудовищное, невыносимое и смешное решение.


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

Могу предоставить саппорту адрес ящика, пущай копаются в логах. Хотя такой же эксперимент им самим провести нетрудно.
pozitronik: (Sheridan)
Решил сохранить для истории один рабочий момент, который вчера поднял мне настроение до конца рабочего дня (это достаточно редкое явление). Это прямо самое настоящее расследование, обожаю такие дела распутывать.

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

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

На этих выходных пришлось много покататься по городу, и софтина реально выручает, несмотря на некоторую недоработанность. Да и сегодня утром, вместо того, чтобы ждать на остановке автобуса, я просто вышел из дому ориентируясь на время прибытия.
pozitronik: (Sheridan)
Не могу пройти мимо очень радостной и нежданной новости: сегодня объявлено о выходе технического превью браузера Vivaldi. Прелесть в том, что этот браузер собирается быть настоящим наследником нещадно загубленной Оперы.
Попытки (неудачные) возродить лучший в мире браузер предпринимались и предпринимаются. Кучи вариантов сборок фаерфокса, в которых он ведёт себя вроде как Опера (и тормозит, как фаерфокс), Otter Browser, про который и говорить не хочется... Да и хроможную "оперу" туда же можно отнести - к неудачникам.
А у Vivaldi есть все шансы на наследство. Как я понял, команда разработчиков по крайней мере частично состоит из бывших сотрудников Opera ASA, которых ушли при смене курса. Сам Йон фон Течнер стоит во главе команды - а это, собственно, тот, кто Оперу когда-то придумал, и многие годы определял пути её развития.
Даже в техпревью новый браузер выглядит весьма многообещающе (и уж куда лучше, чем выглядело техпревью хроможной оперы в своё время). Самые узнаваемые фишки классической оперы перенесены один в один - настраиваемые табы, боковая панелька, корзина, менеджер загрузок и прочее! Даже есть настраиваемые хоткеи, чему, по-моему, разучились уже совсем все браузеры. И это - поверх движка Хромиума, то есть то, что когда-то обещали сделать в самой Опере (а вместо этого знатно пукнули в лужу, и продолжают сидеть в этой луже по сию пору).
А что радует больше всего - браузер собираются ориентировать на нашу, гиковскую, аудиторию. Команда охотно собирает фичреквесты (которые, естественно, сводятся к "сделать, как было раньше"), и обещает их исполнение. Прямая противоположность евангелисту оперы с его "мы лучше знаем, что вам надо".

Желаю новому браузеру и его разработчикам всяческих успехов, и готовлюсь к тому, что веб-серфинг снова станет приятным.
pozitronik: (Sheridan)
Ставил админ арч, на арч - апач, на апач - патч, чтоб работал двач
Зашёл админ в шелл шерстить в баше хеши, шифтом шевеля
Как не проси, нет у mc rpc, а что есть в mc у man спроси
Админский хлеб - top и grep, а sudo да chmod - на хлебушке мёд
Написал админ от великой лени: from any to any any deny

Продолжаем в комментах (инбифо: жалкая попытка, всем похрен).
pozitronik: (Sheridan)
1. Нужно проставить на сайте виджет от zingaya.com (веб-телефония). Сайт из корпсетки залочен: ну мало ли, тут много чего закрыто, ибо нефиг. Тем более сайт, с которого можно звонить.
Нимало не удивляясь такой паранойе, начинаем разводить бюрократию: собираем айпишники пользователей, пишем служебку, собираем подписи начальства, неделю бумажка ходит по инстанциям, попадает к безопасникам, те требуют нарисовать им схемы, предоставить детальные обоснования, и прочая, и прочая; после того, как наш фанерный самолётик делает два круга над бюрократическим Парижем, безопасники отвечают, мол на прокси блокировки ресурса нет.
Смотрим в сторону админов, те пожимают плечами: а чо мы, в адресе сайта есть %gay%, вот он и фильтруется.

2. Менеджер присылает задачку: заменить на сайте картинку на приаттаченную. Но адрес, где что надо менять, не указывает.
Ну мало ли, забыла, переспрашиваю:
- Что заменить-то?
- Изображение.
- (фейспалм) Где?
- Я прислала, посмотри письмо.
Открываем письмо, к нему, вместе с картинкой прикреплён html. Менеджер, торжествующе:
- Вот, видишь, открывай! Там адрес!
Открываю файл из аттача, естественно в адресной строке локальный путь.
- Ой, а у меня не так было!
И убегает.

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

Это очень удобный и неоднократно мне пригождавшийся валидатор форм, умеющий всякие хитрые штуки, о которых я рассказал в статье на Хабре: http://habrahabr.ru/post/218559/
Дока и примеры: http://pozitronik.me/lemongrab
pozitronik: (Sheridan)
Если кто помнит, есть у меня планшет, старый, как испражнения мамонта. Гэлакси Таб, самой первой ещë модели, собственно, чуть ли не первое устройство такого форм-фактора. Несмотря на трëхлетний возраст, планшет дарит мне радость и удовольствие - с него удобно читать книги, он до сих пор без проблем воспроизводит видосы, а уж сколько текста я на нëм набрал! Претензия к нему была только одна - батарейка, нещадно съедаемая за день. Это со временем усугубилось загаженностью: даже находясь в режиме ожидания планшет разряжался из-за всяких фоновых программ, наставленных в своë время.
Естественно, что производитель девайса всячески забил на обновления софта для планшета. Он как работал под древнючим андроидом 2.1 так и работал бы; собственно, никакой принципиальной разницы с четвëртой версией андроида для меня не было, потому, руководствуясь мудростью "лучшее - враг хорошего" я только однажды перепрошил его на неофициальную 2.3, и на сëм остановился.

А вот на днях чего-то взял и решил поставить в него cyanogen mod. И поставил.
Сама операция установки очень простая, если есть расширенный загрузчик (cwm). Он позволяет указать файл с прошивкой (заранее залитый в память), и всë. Стандартный загрузчик, вроде, тоже должен это уметь, но проверить никак.
Ночные сборки 11 версии мода не захотели ставиться, впрочем, на то они и ночные. 10.2 экспериментальная сначала тоже не хотела, но погуглив ошибку с лога, я разобрался в проблеме (нужно было форматировать /system), и всë установилось.
И всë, Android 4.3 работает на железке, как родной. Даже лучше - в родном не было так удобно. Разница как между Windows 95 и 98, если вы понимаете, о чëм я. Проблем с производительностью никаких, по ощущениям даже быстрее стало - но это наверняка из-за незасранности системы. Батарейка в режиме ожидания почти не разряжается. Проблем замечено только две: не индицируется зарядка от маломощной зарядки (родную я посеял), хотя зарядка идëт, и не все приложения могут выйти в инет по розданному с ноута вайфаю. Вайфай роздан правильно, телефон на нëм работает, как надо. На планшете же работают браузер, частично - почта (стандартное приложение завелось, а gmail - нет), и не работает всë остальное, даже маркет. Хотя пинг есть, всë резолвится. Ну разберусь с этим, думаю.

Такие дела. Написал этот пост с планшета, просто так.
pozitronik: (Sheridan)
Вчера, после необычно долгого периода открытого тестирования, зарелизился Total Commander 8.50. Улучшений и исправлений, как обычно, многие сотни, вот наиболее значимые из них (заранее оговорю, что всё настраивается или отключается при невостребованности):


  • Фоновый поиск (команда cm_SearchStandalone или Alt+Shift+F7). Даже не верится - об этом просили, наверное, все двадцать лет существования программы! Более того: инструмент поиска в TC можно вызывать отдельно от самого TC, запуская программу с ключом /S=F.

  • Редактирование прямо на FTP (работает и для FS-плагинов). Вернее, именно так это выглядит для пользователя, на самом же деле TC будет автоматически синхронизировать локальную копию изменяемого файла при каждом его обновлении.

  • TC оптимизирован для работы на touch-устройствах. Касание иконки файла работает аналогично нажатию ПКМ (касанием считается и клик ЛКМ).

  • Добавлена поддержка High DPI экранов (новые иконки высокого разрешения, оптимизированы размеры контролов при высоких DPI), улучшена работа на многомониторных конфигурациях.

  • Фоновые диалоги стали информативнее (например, при копировании выводится информация об количестве и размере копируемого/скопированного), а некоторые операции стало возможно восстанавливать из фона.

  • Файловые операции стали умнее. Копирование не будет останавливаться на нечитаемых файлах, TC сначала скопирует то, что сможет, и только потом спросит "а что делать с этим?". При этом, если файлы не читаются сразу же, диалог появится - подразумевается, что пользователь ещё не успел отойти от компьютера. Фоновые файловые операции будут притормаживаться, при работе с этими же файлами в основном интерфейсе. Копирование обзавелось функцией проверки CRC (которую, отключили в одной из бета-версий из-за одного репорта о некорректной работе, а потом включили обратно, после многочисленных просьб и перепроверок, не подтвердивших проблему).

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

  • При поиске дубликатов можно использовать поля из контентных плагинов. Например, можно найти все изображения с одинаковыми пропорциями сторон (не указывая при этом сами пропорции).

  • Нативная поддержка распаковки RAR5 и 7Z.

  • В Lister выделенный текст можно искать в Google (поисковые системы настраиваются).



И множество других, мелких и не очень улучшений, ознакомиться с полным списком которых можно в файле истории TC.
pozitronik: (Sheridan)
Новость о реализации TCP/IP over sound (в комментах правильно подмечают, что это велосипед модема) натолкнула на воспоминания.

Готовясь поступать в институт я ходил на подготовительные курсы, где познакомился с мистером Альфом, в быту - Василием Алибабаевичем. Мы с ним быстро сошлись на почве взаимного увлечения компьютерами и любви к интересным абстрактным задачам.
Одной из таких задач была реализация нестандартной связи между нашими компьютерами, желательно - с минимальными финансовотрудозатратами. Задача, между прочим, вполне насущная, по той простой причине, что модемов тогда у нас не было, а соединиться в сеть было очень интересно.
Придумали мы тогда много всего.
Итак, рассуждали мы, какие есть у наших домов совместные коммуникации? Жили мы в максимально удалённых районах города, без всякой прямой видимости, но, тем не менее, даже в таких условиях физическая среда передачи была, и даже не одна.
Во-первых - непосредственно воздух. Направленный лазерный или радиолуч. Если бы мы жили рядом - это был бы вариант, но в нашей ситуации расстояния требовали репитеров, усложняющих и удорожающих схему.
Во-вторых - телефонная линия. Но тут, очевидно, всё же было проще купить модем.
В-третьих - электросеть. Но собственную реализацию Ethernet over AC мы благоразумно решили не пилить, опасась пожечь компьютеры.
В-четвёртых - проводное радио (само это сочетание всегда вызывает у меня разрыв шаблона). Не знаю, как сейчас, а тогда проводные точки доступа в радиосеть стояли во всех квартирах, и схема передачи была очень простой: по всей сети шёл броадкаст от одного источника. С минимальными знаниями и столь же минимальным набором инструментов можно было воткнуться в сеть и начать своё вещание - ИЧСХ, иногда такое хулиганство случалось. Как по мне - самый доступный вариант физической среды, даже несмотря на то, что шумы, которые могла бы создать наша передача, мешали бы слушать "Маяк" всему городу. В качестве модема могла бы выступать звуковая карта (или даже обычный PC-спикер), оставалось дело за малым: написать реализацию всей модели OSI, начиная с канального уровня, что было сложно ещё и потому, что тогда мы ни о какой OSI и близко не слышали. Но, тем не менее, думаю, что займись мы тогда этим всерьёз, на уровне proof-of-concept задачу бы решили, тем более, что требовалась-то самая простая реализация, на уровне возможностей RS-232. Но не занялись, по очевидным причинам.

Однако самым увлекательным стал пятый вариант. Мы подумали, и пришли к выводу, что все дома в городе соединены канализацией. Конечно оборудования, которое могло бы использовать говноводы в качестве физической среды передачи данных, мы бы сделать не смогли, но какова сама идея! И название семейству канализационных протоколов мы придумали очень быстро - PIPI/IP.

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

В комментах объявляется конкурс на самый интересный и нестандартный способ связи между двумя компьютерами. Исходные данные обозначены выше, но для интереса не ограничиваем себя финансово и технически, решаем только инженерную задачу. Передача данных должна, при этом, происходить полностью автоматически, без участия человека или животных (а то TCP по почтовым голубям уже давно придумано).
pozitronik: (фирестарта)


Люди пьют в своих квартирах,
Ресторанах, корпоративах.
На столах полно закусок,
По бокалам разлит шампусик.

Люди встречают новый год,
А я рефакторю код,
Я рефакторю код,
Я рефакторю код!

Поздравление презиоккупанта,
Сразу тост под бой курантов,
"Голубой огонёк" на "первом",
С обязательным фейерверком.

Люди встречают новый год,
А я рефакторю код,
Я рефакторю код,
Я рефакторю код!

Кто-то любит катиться с горки,
А я больше люблю фреймворки.
Посылаю ваш праздник нахер,
Запускаю опять дебаггер.

Люди встречают новый год,
А я рефакторю код,
Я рефакторю код,
Меня рефакторинг прёт!

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

Это была аналогия к тому, что сегодня я увидел, придя на работу. Запущенный браузер - а я на работе вынужденно пользуюсь Iron под Speed Dial показал мне поздравительный баннер. Поздравлял он с днём матери.
То есть браузер без моего спроса показал мне какую-то совершенно никоим образом не востребованную информацию. В принципе, такое поздравление-напоминаний скорее приятно, но - смотри выше, я о таком функционале не просил, не знал, не включал его никоим обрзом. А будь на моём месте, скажем, бесплодная женщина, неистово и бессмысленно мечтающая о ребёнке - ей было приятно? Вряд ли. Но дело всё-таки не в сути поздравления, а в том, что без спроса пользователя изменилось состояние браузера - вещи не менее интимной, чем тот же унитаз.

При всём том, что Iron - это, по сути, тот же Хром, из которого вырезается весь гуглотрекинг, стандартный спиддиал - это просто хтмл-страничка, которая время от времени синхронизируется с гуглом. Логически Speed Dial встроен в браузер, технически - сами видите. Вангую, лет через пять, весь браузер будет работать из облака, а гугл будет сам решать, что запускать, с какими настройками, и по каким страницам вам нравится ходить; по сути с хромом всё уже недалеко от этого - обновляется он без спроса, и отключение этого поведения нетривиально. За такое надо топить в помоях, я считаю.
Но ведь ничего с этим не поделать. IE - продукт другой империи зла, Фаерфокс и браузером-то называть стыдно, Опера - мертва, остаются всякие поделки на базе хромиума, вроде того же Iron - но и к ним, оказывается, могут дотянуться ласковые щупальца.

С вами был Жажа Позитронов, не переключайтесь.

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 Jul. 24th, 2017 12:32 pm
Powered by Dreamwidth Studios