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: (Yarr)
Друг мой, не знаю, замечал ли ты, или нет, но в состоянии даже лёгкого абсистентного сидрома весьма увеличивается восприимчивость организма к различного рода раздражителям. К яркому свету, резким звукам, и, конечно, к неприятным запахам.
Mon cher ami, вчерашний ассортимент безусловно прекрасных напитков не только согрел мою душу и добавил огня в мочу, но и ещё сегодня с утра привёл к легчайшей форме той самой абстиненции, о которой я упомянул чуть выше. Таким образом, перед тем, как отправиться на работу, я был вынужден технически изолировать своё сознание от всех раздражителей, как световых, так и шумовых.

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

Варёную рыбу, блять.

Какая, право, ironie du sort!
Сей морепродукт скоропостижнейше стух, наполнив атмосферу опенспейса зловоннейшими миазмами, и никакая система кондиционирования не справилась с сим l'odeur du hareng и по сию пору. Это более чем великолепное начало последней недели перед отпуском.
Надеюсь, ты простишь мне мой французский, ибо je ne me soucie pas.
pozitronik: (Sheridan)
Решил сохранить для истории один рабочий момент, который вчера поднял мне настроение до конца рабочего дня (это достаточно редкое явление). Это прямо самое настоящее расследование, обожаю такие дела распутывать.

Дело о похищенных скидках. )
pozitronik: (Sheridan)
Я люблю работать работу под музыку. Правильно подобранный музон, во-первых, отключает меня от опенспейса, а во-вторых, вводит меня в медитативное состояние, в котором я генерирую божественный нектар чистого кода. И если с первой задачей, в общем-то, может справиться почти любой гармонично подобранный набор звуков, то для второй подходит далеко не всё. Музыка не должна быть плохой, но и не должна быть отличной - иначе я отвлекаюсь от работы и переключаюсь на неё. Музыка должна нести по течению - и тогда всё клёво.
Больше всего, как я заметил, мне работается под классический гоа-транс, разлива 92-99 годов. Например:

или


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

Как я собирал бутылки )
pozitronik: (Sheridan)
Подходит к концу первый месяц на новой работе.
Я чертовски доволен - и работой, и собой. Я занимаюсь интересным и увлекательным делом, и за этот месяц ещë не было ни разу, чтобы я пришëл домой с осознанием того, что выложился не на полную. А утром я иду на работу, думая не о том, как бы избежать задач, а о том, как с ними справлюсь.
Это кайф, правда. Тут, конечно, роль играет ещë и то, что работа отвлекает от боли, ведь болит-то не в спине, болит в мозгу. А мозг занят, у него нет времени реагировать на ощущения.
Но это кайф всë равно.
Я действительно стараюсь, как и обещал самому себе. Не могу оценивать собственную эффективность и качество (думаю, через какое-то время покажу то, что делаю, вот и оцените), но думаю, что стыдиться мне нечего.
За это я награждаю себя походом на десятичасовой отрыв Ultimae Global Session, который состоится в ночь с восьмое на девятое июня в Concert Hall Tonight. Это будет круто, просто не может не быть не круто! Более того - это должно быть так круто, как ещë не было никогда.

P.S. Ноут я выбрал, постараюсь завтра купить и отписать обзор уже с него. Всем участвовавшим в обсуждении - спасибо, реально навели на годные мысли. Какую модель выбрал - писать не буду, а то опять развернëтся спор, и я снова передумаю :)
pozitronik: (Sheridan)
Почти ровно шесть лет назад я совершил один из самых важных поступков в своей жизни. Я вылез из сложившейся зоны комфорта, перебрался в чужой и неизвестный город и начал жить независимой и самостоятельной жизнью. Всё это было так странно и ошеломительно, что вспоминая те дни, я вижу себя исключительно со стороны, как будто моим телом тогда управлял какой-то другой человек. Тогда мне здорово помог лучший друг, он пинал меня, когда нужно, помог с жильём, да и вообще - без него бы я не справился. Спасибо, Сергей.
В прошлом году я попытался (не в первый раз, впрочем) уехать в Москву. При этом, если честно, попытка была не очень настойчивая, меня не отпускало желание вернуться в родной город, и устроить себе каникулярное безделье - хотя и до отъезда я отдохнул достаточно неплохо. Желание плюнуть, сдаться, значительно усилилось, когда я провалил первое же московское собеседование (на которое очень рассчитывал). Тогда я не хотел в этом признаваться даже себе; впрочем тогда всё кончилось очередным защемлением нерва, которого я испугался так, что о переезде в Москву позабыл и думать. Оправдавшись болезнью, я вернулся в Димитровград и, в итоге, устроил себе те самые каникулы безделья. Они, конечно, были неимоверно круты, и я не жалею о просранном полугоде жизни, потому что просрал его с большим удовольствием и относительной пользой.

Тем не менее, временем очередной попытки уезда была названа весна, и в голове я держал, почему-то, майские праздники (потому, видимо, что Москва в эти дни запомнилась мне малолюдной и приветливой). Я говорил "уеду весной" родителям, я говорил "уеду весной" друзьям, я говорил "уеду весной" самому себе. И чем ближе была весна, тем больше я беспокоился. Мне предстояло снова покинуть зону комфорта, и уехать в чужой, неизвестный город. С другой стороны - никто меня за хвост не тянул, никому ничего доказывать было не нужно, и подлую мыслишку о том, чтобы навсегда остаться в Димитровграде, отгонять становилось всё сложнее и сложнее.
И до мая я просто не дотерпел. Как только появился малейший намёк на возможность получения работы в Москве - купил билет на ближайший поезд, и постаравшись никому ничего не говорить заранее, уехал.
Ночь в поезде была ужасна. У меня нет ни малейшего желания вспоминать подробности, но заснуть мне не удалось ни на секунду. С ужасом думал я о том, как в таком состоянии пойду на собеседование, которое должно было состояться почти сразу после приезда.
Я ненавижу любые формы собеседований, экзаменов и проверок. На них рутинные задания, которые в рабочем режиме щёлкаются, словно орешки, становятся невыносимо сложными, мысли в голове застревают на поворотах, а язык во рту перестаёт ворочаться. Наверное, я даже боюсь собеседований.
И ко всему этому добавьте почти двухсуточную усталость.
К собственному удивлению, я отболтал собеседование достаточно неплохо. Но когда речь зашла о профильных вещах, я "поплыл", с ужасом понимая, что отвечаю на простейшие вопросы ерунду. Поправлялся, сбивался, тормозил, снова поправлялся - и мои шансы падали на глазах. Ушёл, расценивая шансы, как 50/50 - и через некоторое время ожидаемо получил отказ.
Странное ощущение: вроде и понимаешь, что винить себя в провале несправедливо, но настроение от такой неудачи всё равно падает, а руки опускаются.
И снова мне помог лучший друг со своей персональной женой. Устроили мне тут же новое собеседование, на которое я, почему-то, пришёл без капли волнения, и показал себя просто отлично (я редко могу себя похвалить, и это, кажется, как раз тот случай).
Я, пожалуй, опущу подробности, перейдя к главному: в знаменательную дату 12 апреля этого года я принял предложение работы, что, ко всему прочему, означает мой переезд в Москву.
И это - почти ровно через шесть лет, после такой же, чуть ли не до деталей, истории в Самаре. Верно говорят, что история развивается по спирали... Уроборос схватил себя за хвост.

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



А теперь, дорогие москвичи и понаехавшие раньше меня, вопрос к вам. Работать я начинаю только после майских праздников, а уехать из Москвы до конца апреля у меня возможности нет. Чем заниматься тут почти две недели - не представляю. Так что с удовольствием пообщаюсь с желающими или выслушаю предложения о разнообразной московской фигне, которой можно заняться.

Алсо: выбираю себе телефон. Нужна годная звонилка на андроиде, небольшая, с большим временем жизни, желательно - с двумя симками. Galaxy Tab никуда не девается, нужно именно второе звонильное устройство. Рекомендации?
pozitronik: (Sheridan)
От создателя banionline.ru! На том же движке - eddim.ru. Давно хотел сделать каталог всех поедательных заведений города (а то совсем кабзда, не знаешь, куда девушку отвести, а так чик с мобилки, и всё понятно).

Имхо, получилось простенько и удобно, всё лишнее вырезал, а то, чего не хватало - дописал. Заодно обучил пыху братана, пусть занимается проектом теперь.
pozitronik: (fuuuuuuu)
Всю ночь снилось, как я пишу подрядчикам какое-то нудное техническое задание, а зная, что подрядчики тупые и хотят наебать, расписывал каждую мелочь.
В результате, вместо освежающего сна и отдыха, мой мозг напрягался и работал.
Невыносимо.
pozitronik: (Default)
Видите фото? Да, оно плохое, но всё равно, видите?
Суть такова: в бетонной коробке зарыты две цистерны для ГСМ. Цистерны в коробке, коробка - за забором.
А с другой стороны забора - газончик, который вчера усиленно подстригался и поливался. Поливался из вон того жёлтого шланга, который тоже различим на фотке.
Ну и какой-то умный человек забыл закрыть воду на ночь. Воде заборы нипочём, за ночь она натекла в коробку и одна цистерна всплыла.
Какое замечательно распиздяйство!
pozitronik: (фирестарта)
Иногда я всё-таки люблю свою работу. Это тогда, когда она даёт чувство удовлетворения от хорошо и правильно решённой задачи. Причём задача должна быть интересная, не шаблонная, и, естественно, не рутинная.
Вот сейчас и расскажу о решении одной такой задачи, которую я закрыл буквально только что. Пока идёт тестирование - время на жежешечку у меня есть.
Arbeit macht frei )
Хм, получилось как-то сумбурно и неконкретно - отучаюсь я технические статьи писать =(.
И да, я пока не стану выкладывать доработанный мной SMPP PHP-класс с поддержкой юникодных СМС и LOC-запросов. Причина очень простая: если выкладываешь какой-то самописный софт, будь добр, обеспечивай хоть какую-то обратную связь (даже если она заключается в редких ответах на почту). А мне этого ещё со времён wincmd.ru хватило, до сих пор идут просьбы по плагинам, которые я бросил поддерживать пять лет назад.
Так что класс выкладывать не буду. Если что - доработки там настолько простые, что даже с базовыми знаниями языка и протокола сделать их самому ничего не стоит.

Всем премиум-СМС за счёт опсоса.
pozitronik: (Default)
Короче, поболее полугода назад наши начальнички наняли индусско-девелоперскую фирму писать один продукт.
Цимес как бы в том, что софтина, которую им заказали за огромные деньги, уже давно и отлично работала. Писал ее ваш покорный слуга (чтобы сохранить справедливость - не только он), поддерживал тоже он.
Какого хера заново делать то, что уже есть, поймет не только взрослый, но даже карапуз. Я эту часть пропущу.
Я отдал исходники и хелп к программе, раскумекал ихним индусам (естественно, я использую это определение в переносном смысле) что и как должно работать, и постарался забыть все, как страшный сон.
Сегодня приносили показывать ЭТО.
Про гемор с установкой у меня терпения не хватит рассказать. Оно на шарпе написано, требует админских прав и перенастройки браузера, к тому же валится на этапе установки. Короче, ничего не заработало.
Весело стало, когда открыли хелп: под авторством неизвестного мне индуса лежали мои тексты и мои же скриншоты. Вот на одном из них и было показано, как установить синхронизацию с телефоном "Хуйговно".
Недоделку и копипасту отправили обратно индусам.
Но вобще печально это.
pozitronik: (Yarr)
Блеать, вот нужно написать какому-то чуваку, инженеру, начальнику и вобще гаду, которого ты считаешь априори умным человеком, письмо по техническому вопросу.
Пишешь грамотное, чёткое письмо, в котором излагаешь подоплёку вопроса, неясные моменты и, собственно, сам вопрос.
А тебе в ответ приходит ололо пыщь-пыщь упячка ответ "что бы это зделать нужно зделать %то, о чём ты и спрашивал%".

Всем рака надпочечников за счёт Принстон-Плейнсборо.

...

Feb. 25th, 2011 02:34 pm
pozitronik: (Yarr)
Тут у нас постоянно срабатывает аварийная сигнализация. Очень громко, тут везде динамики понатыканы.
Звучит это так: сначала раздаётся резкий, протяжный писк, как от резонанса на микрофоне. У меня каждый раз сердце останавливается.
Потом начинает противно выть сирена.
А затем, пока сигнализацию не вырубят, начинает играться запись "В здании возникла аварийная ситуация, просим покинуть помещения".

В первый раз мы, как положено по инструкции, быстренько собрались, подхватили резервные ноутбуки и по недостроенной лесенке, огибая похуистично укладывающих плитку строителей, вышли на улицу.
Второй раз уже как-то с недоверием выходили.
Щас уже в открытую всем похуй, волков не видно и мальчику никто не верит. Безопасники ничего не отвечают. А сигналка вопит.
Так будет пожар - и сгорим нахуй.
Отакота.
pozitronik: (Default)
"штатная работа функционала"
pozitronik: (Yarr)
"Хуже дурака может быть только дурак с инициативой".
pozitronik: (Yarr)
Камрады, под катом много ругани и рассуждений о работе, это всё негатив. Не хотите - не читайте.
Read more... )
pozitronik: (Default)
Помните, да?
Теперь там это:


Видно ровным счётом ничего. Ну как ничего - с сорока метров уже не видно.
Вода буквально висит в воздухе, махнёшь сухой рукой - тут же намокает.
Алсо, сегодня сработало аварийное оповещение. Удивительно, но собрались быстро, хотя и без спешки, как на учениях. Выбрались на улицу по разобранной лестнице мимо охуевающих подрядчиков, потом объявили, что тревога не учебная.
Просто кто-то из этих подрядчиков додумался курить рядом с датчиком задымлённости.
Весело тут.
pozitronik: (Default)
Маленькая рабочая зарисовочка.
На вверенный мне в подчинение сервачок (виртуальный сервер, под win2003) сливаются по FTP кой-какие логи, примерно по 12-15 гигов за сутки. Файлики разбиты по восемь мегабайт, итого по полторы-две тысячи файлов в сутки. Всё пишется в один каталог.
Кроме этого на серваке крутится апач, база данных и несколько самодельных серверов, в общем, без нагрузки он не простаивает.
Ну работает он и работает, всё ОК.
Но логи, о которых я в начале сказал, просто так хранить неудобно. И весят они много, и с кучей файлов неудобно работать. Что нужно сделать? Пожать, благо голый текст же.
Ок, пишу небольшой скриптик, который берёт все файлы за день, скармливает их в rar, а после архивации удаляет. Тестирую, всё отлично работает.
Запускаю на рабочем серваке в тест - всё отлично, первый архив выпекается за полчаса.
Запускаю снова - всё тормозит ппц как, ожидаемое время создания одного архива - три часа... пять часов... Загрузка CPU и памяти - в пределах нормы, загрузка диска - тоже.
Но тормозит всё капец как, даже листинг каталогов в файловом менеджере минуту читается. После ребута снова так - первый прогон начинается нормально, но потом вдруг всё опять начинает тормозить, иногда даже до завершения архивации. Копирование или даже перемещение файла - считанные байты в секунду, независимо от способа копирования.
Запускаю менеджер производительности, тыкаюсь в статистику загрузки дисков - огромные задержки при записи. Но при этом в менеджере процессов у всех задач нагрузка на диск не больше и не меньше, чем обычно, и даже суммарно не должна представлять никаких проблем.

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

Ответ под катом )

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:39 pm
Powered by Dreamwidth Studios