← All posts tagged работа

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

Вот есть ресурсы, которые расшарены между сессиями (операторы составляют пакеты задач, которые станут расписанием для ресурсов). У каждого ресурса есть свой приоритет типа статический, меняется только применением самого ресурса где-то. То есть, если ресурс "занят" в 5 процедурах за день, то его статический приоритет равен 5, условно. Есть приоритет динамический, зависит от текущего набора задач во всех сессиях, где этот ресурс потенциально может быть использован. Ядро умеет всё это дело динамически крутить-вертеть и компоновать так, чтобы операторы получали непротиворечивые данные, чтобы ресурсы не были забронированы одновременно на несколько задач.
И вот есть закавыка — оператор в определенных условиях может начать бронирование с определенного ресурса. То есть, сначала выбран ресурс, а потом уже накидываются задачи. И бизнес пожелал, чтобы при постановке задачи, при распределении исполнителей на роль в первую очередь был выбран тот ресурс, с которого оператор начал сессию бронирования. Казалось бы, чо там — приоритеты же. Но оба приоритета блять обслуживаются централизованно, ядром. А тут в сессии надо просто изначально "предпочесть" ресурс! Были мысли и про модификаторы и про сессионный процессинг. Полный пиздец, очень накладно.
Тут на помощь приходит гуй! В интерфейсе оператор может по своему усмотрению сменить исполнителя в роли, на любого из доступных. Это норм, это user action, всё зашибись. Ну так и давайте типа оператор "кликнул" первым делом на наш этот ресурс, чо там :)
Всё работает, все довольны, зашибись. Только вот смотрю на это с т.з. алгоритмистики и data flow. Взяли задачу, выдрали нужные "роли", собрали ресурсы, посчитали занятость, отобрали подходящих, отсортировали по приоритетам, построили расписание, выдали сессии все расчеты, выгрузили в гуй. И тут же блять "кликаем", повторили весь цикл заново :)
Атас. Не делайте так.

PS. Это вопрос проектирования и архитектуры, есичо. Не предусмотрели в начале.
Vugluskr
работа программирование Есть специфический проектик. Морда на ваадине, унутрях — спринг с этими вашими DI и хибернейт с этими вашими ентитями.
Помимо обычных юзерских сессий есть сессии логические — по редактированию и коллективному резервированию общих ресурсов.
4-ый день решаю задачку по корректному захвату и отпусканию ресурсов.
Доходит до маразмов. Есть сложная многокомпонентная форма из нескольких, не связанных между собой блоков. Один из блоков — листинг контейнеров. В каждом контейнере — набор ресурсов (уникальный). Еще один из блоков — нечто вроде графика Гантта, отображение занятости ресурсов. Когда в графике окошко двигают — што-то меняется, в табличке нужно данные переписать. Когда в табличке что-то меняют — в графике нужно соответственно кубики подвигать. Ну суть понятна, да? Ну так вот всё сделали, а блять удаление всего контейнера забыли. Просто в диздоке забыли нарисовать кнопочку удаления :) Ну и экстренно встраивать, понятно. Кнопочка — в табличке. Сделал сначала тупо — по нажатию в табличке дропается строчка, из общей сессии удаляется контейнер, все заинтересованные оповещаются, мол, изменился набор контейнеров (как на добавление), ожидалось, что всё перерисуется и хоп-хей-лалалей. Хуй там! Как водится, всплыли нюансы. В табличке либо не должно быть совсем элементов (контейнеров), либо если есть хоть один — то какой-то всегда "выбран". И вот есть краткий миг, если удаляют выбранный контейнер, когда в табличке есть элементы (она не пуста), а не выбрано нихуя. И тут наступает полный пролапс гениталий. NPE выпадает аж в 5 местах сразу.
Акей, думаю я, пойдём умным путём — сбросим селекшн на соседа, а сами удалимся. Хуй там! Спасибо ебучему клиент-серверу и выбранной концепции "курсора" в общих сессиях — не успевает селекшн переделаться, как мы ломимся со своим удалением и наступает ожидаемый пиздец с NPE.
Акей, думаю я (на третий день ебли), пойдём ваще-пиздец-каким-умным путём — сделаем состояние Stop-The-World на всей морде пока идёт удаление! Дитынахуй сказал мне ваадин, ничо не знаю, у меня всё ровно! И продолжил сбрасывать селект на табличке, точнее, клиент шлёт анселект и дальше всё крутится-вертится невзирая на эти ваши остановки мира :)
Акей, думаю я, щаз сделаем железобетонную логику событие-листенер на ебучее удаление. Делаю, всё железно, всё в тестах збс. И тут на сцену выползает старый добрый сука хибернейт. Ой, а что это вы объектик не отпустили, не евиктнули, а удаляете?! Ненене, так не пойдет, идите-ка вы на хуй, на всякий случай. На этом моменте взвыл. Рвал, метал, вспоминал всех добрыми словами.

Итого, что сейчас — по нажатию на кнопочку отправляется команда в расшаренную логическую сессию. Набор ресурсов выпиливается из общих планов (поклон хибернейту). Все слушатели удаляют из гуя данные по набору (формочки обнуляются, гантт обнуляется — поклон ваадину). Всё это дело на барьере рапортуется. Как все отстрелялись — сессия торжественно командует — такой-то контейнер ёбнут! Все слушатели судорожно у себя обновляют набор контейнеров. Табличка ловит это дело, ищет у себя в потрохах строку контейнера. Если нашла и если строка выбрана — делается селект на любую другую строку. Затем таки строчка убивается. Ура, бля! Наши победили!
Визуально задержка может быть до секунды (превед, расшаренные данные!). За это время вполне успеваешь кликнуть пару раз куда-нить еще.

Ебаный экибастуз.

Дизайнеры! Рисуйте внимательно, бля!
Архитекторы! Проектируйте внимательно, бля!
Манагеры! Горите в аду, сука, со своими ебучими "щаз мы тут костылик за полчаса слепим"!
Vugluskr
Linux работа Java IDEA 16-ая идея почему-то взбрыкнула и не захотела по умолчанию запускаться под системным jre, вместо него работала под встроенным. Херь в том, что встроенный — говняшка openjdk. При автокомплите на Map<K, V> это говно не предлагало нормальные HashMap, TreeMap и прочие ConcurrentHashMap, оно их ваще не ставило в список, но зато активно пихало какую-то несуразицу типа HashedMap. Я тупил, не мог понять в чём дело. И тут оно пизданулось громко по sigsegv, полез смотреть лог. А там, мать честная, jre running — openjdk, все дела. Как блять так, откуда?! Посмотрел в запускалку шелловскую, а они оказывается сделали что — раньше она искала последовательно в окружении IDEA_JDK, JDK_HOME, JAVA_HOME, "java" in PATH., а вот начиная с какого-то 14* билда она теперь ищет блять вот так: IDEA_JDK, ../jre, JDK_HOME, JAVA_HOME, "java" in PATH. То есть, если IDEA_JDK не выставить, то похую че там у тебя системное — оно будет крутиться на сраном опене.
А я уж думал багрепорты слать и ваще бесноваться всяко. Но хватило только принудительно указать правильный угол. Мир пока может спать спокойно
Vugluskr
работа прожизнь продукт вот живет и развивается энное количество лет. Внутри, как водицца, страшная помойка понамешана. А манагерам же не терпится всякое привинчивать. И вот есть момент один. Основной транспорт между компонентами, был хмл. Потом в нем появились вкрапления джынсы, которая только для одного клиента работала. А потом незаметненько так, эта джынса стала участвовать в некоторых кусках бизнес-логики. И вот буквально недавно, апофеозом стало слияние этих двух направлений, в страшную хуйню под названием "отчетность". Одним из шагов является формирование правильного хмл со всякой хуйнёй. Покажу я вам кусочек xsl-преобразования, чисто так — на оценку мозгоебли (в комментах)
Vugluskr
работа программирование vaadin вынамписали Вот какое впечатление на непосвященных производит ваадин:

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

Но приятно жеж, черт побери!
Vugluskr
работа IDEA Блять, вот нахера я проапгрейдил идею до 13. Есть охеренный бугурд — инспекшн тупит как пиздец, если окно самой идеи находится в фокусе. Просто атас, отжирает весь процессор и тормозит аццки. Стоит только перевести фокус на любое другое окно — инспекшн отрабатывает за долю секунды. Как так? Нахуя, почему?
Vugluskr
работа программирование прожизнь Меня "аж трисёт", когда вижу хардкод типа ссылок, прямых текстов для возврата и прочая. Локали, проперти и, в последнюю очередь, вариант "на-грани" — надписи на кнопках.
Ёбаные говнокодеры от пхп, блеать. Всё намешано в кучу — логика, уи, модель, бизнес, база. Помойка, блеать!
Vugluskr
работа Java killallhuman Когда я в хорошем настроении — я думаю, что людей, которые выходят из цикла по эксепшену нужно просто кастрировать, чтобы не размножались. А когда я в плохом настроении — мне кажется, что их нужно медленно убивать. Затем находить учителей, которые выпустили в свет этих криворуких тупых уёбищ и убивать их ещё медленнее.
Сегодня я в плохом настроении. И мне очень хочется знать, откуда эти самородки на свет лезут...
Vugluskr
работа прожизнь Мне тут комплимент отвесили:
"...и снова я пишу тебе спасибо

так как ты, зараза такая, приучил меня читать твои письма, выискивая скрытый смысл и тонну информации, которая скрывается за каждой строчкой письма, то я теперь все письма читаю так :)))

и нахожу кучу интересной для себя информации..."
Vugluskr
работа фриланс прожизнь Жизнь фрилансера временами совсем не сахар. Сегодня у меня паршивейшее настроение и как-то обзорно всё тухло выглядит.
Меня за последние 12 лет кидали на деньги раз 10, отказывались продолжать сотрудничество раза 4-5, пиздили идеи/наработки — это раз 20, не меньше. Задерживали бабло — тут совсем без счёта. Шантажировали финальным платежом — раз, наверное, 100. Устраивали скандалы из-за упоминания продукта в портфолио — раз 15, наверное. Тут нужно пояснить, что есть 2 сценария. Первый — это когда ты подписываешь NDA, где в частности упоминаются всякие коммерческие тайны и прочая. И манагеры почему-то всегда думают, что это также подразумевает, что ты никому и никогда не расскажешь, что данную софтину делал ты. Это ошибка. Авторские права остаются у меня по-любому, я заинтересован в том, чтобы расширять портфолио. Если в NDA явно не указано, что не должно быть публичных упоминаний авторства — то в хуй идут несогласные. И второй случай, это когда сам наниматель является подрядчиком у кого-то другого и мой труд выдаёт за свой. А упоминание продукта в моём портфолио может вскрыть случайно истинное положение вещей. В первом сценарии, если меня вежливо попросят или изначально включат в NDA такой пункт — я просто прибавлю какую-то цифру к общей стоимости продукта. Во втором сценарии даже обсуждать ничего не буду.

Справедливости ради — светлых моментов крайне немного и все они памятны. Один раз человек по собственной воле оставил крайне положительный отзыв в одной фриланс бирже; впоследствии кинул :) 5 или 6 раз давали бонусы/премии, по собственной воле. 3 раза настойчиво предлагали устроиться в офис со всякими бонусами и прочим. Три раза после создания одного продукта немедленно подписались на создание еще нескольких, не относящихся к начальной задаче. И два раза самостоятельно увеличили общую стоимость по контракту — именно самостоятельно, исходя из своих выводов по анализу объёма работы. И на этом из положительного — всё.
Не упоминаю сарафанное радио, потому что меня рекомендуют конечно, но, насколько я знаю, исключительно под давлением :) То есть, когда друг заказчика пристаёт к заказчику с ножом у горла, типа, ну бля кто это тебе делал? дай контакты! — тогда да, типа рекомендуют. А так, штоп какая-то общая молва — не, нихуя. Не работает.

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

Ну всё, высказался, полегчало! Как говорицца, спасибо што дочитали :)
Vugluskr
работа прожизнь Ненависти пост!
Страшно выбешивают люди, которые по поводу и без повода талдычат "не надо изобретать велосипед". Ебанарот, хоть аргументировать бы научились. Единственное реальное и бесспорное условие этой фразы (и единственная форма) — это когда заказчик/начальник говорит исполнителю "не надо изобретать велосипед за мой счёт". То есть, когда речь идет о чужих времени/деньгах/силах — да! Трижды да! Не нужно экспериментировать за чужой счет. Ибо это уже паразитирование. Всё остальное — мимо кассы. Консерваторы — нахуй. Традиционалисты — нахуй. Защитники старых коней и неглубоких бороз — нахуй. Все несогласные нахуй. Аргументацию, сравнительный анализ, доводы — я готов слушать. Идиотские клише — нет. Ублюдки тупорылые и ссыкливые, блять.
Vugluskr
работа перепостплиз Дорогие други, неспешно ищется тестер на технологически-сложные веб-проекты. Суть работы — искать и находить баги во всяких интерфейсах. Требования — усидчивость, уверенное владение мышкой :), понимание отличий браузеров, умение внятно излагать обнаруженные проблемы. Работа "припадками", но на постоянной основе. Можно работать ночами, постоянно на связи быть не нужно.
Готов предложить как фиксированную з/п, так и сдельщину попроектную. О конкретных цифрах ничего пока не скажу, ибо не представляю пока. Если есть предложения — выслушаю внимательно.

Прошу сделать перепост.
Vugluskr
работа прожизнь Эгоистичный подход заказчиков умиляет. Человек задумал свой проект, предлагает сделать движок к нему. Обсуждаем и упираемся в несуразность решения. Я предлагаю обходные варианты, он отвергает, предлагает свои, не менее кривые, чем первый. Меня заёбывает и я предлагаю поискать другого исполнителя. Человек практически в ярости, говорит, ну ведь то, что я предлагаю — я понимаю, что оно говняное, но ведь можно так сделать?!?! Можно конечно, технически препятствий нет. Только нахуй мне уперся проект, который будет стыдно в портфолио поставить? Нахуй мне мне надо сделать говно, которое заведомо — говно? Только из-за денег? Да иди-ка ты нахуй, дядя.
Высказал ему все это (без "нахуй" :)) — мужик был, мягко говоря, удивлён. Еще минут десять выносил мне мозг на тему "кто платит тот и прав". Расстались ни с чем.
Vugluskr
работа прожизнь Когда-то давно, когда компы были слабенькие и диски маленькими, у меня начали накапливаться результаты труда — всяческие либы, сниппеты кода и прочая сопутствующая херь. Слепить вот так с ходу годную либу для дальнейшего использования получается далеко не всегда, потому всё переиспользуемое хранилось обычно в двух-трёх ипостасях — исходники целиком, бинарик в каком-нибудь приемлемом виде и какие-нибудь шаблончики/сниппеты. Естессно, ещё создавалась куча локальных копий стороннего софта, который часто используется. Периодически я порывался навести в этом барахле порядок, но угасал обычно часа через 4 рытья. Короче, такая, условно-полезная помойка из нужного и ненужного. Чтоб хоть как-то сдерживать энтропию, хранилось это все в отдельной папке, которая имела красочное название типа "trash|unsorted|heap|storage". В какой-то момент (видимо, в 2006-07 г) я даже написал плагин для idea, который позволял хоть как-то управлять сниппетами, тогда стало чутка полегче, но тоже не спасло, плагин вышел из употребления.
Помню еще веху — как-то резко подешевели харды, не помню в каком году, и я прикупил 2 винта, по тем временам огромного размера — 200 гиг. Один винт сразу отошел под эту помойку. Я его обозвал, соответственно, backstorage_200G и засунул в автомаунт. Это был сильно исторический, видимо, момент. Потом прошло много лет, комп, OS и структура хранения менялись много раз. Но /backstorage_200G оставалсь неизменной, эта директория была всегда и настолько въелась в повседневную работу, что этот путь с консоли я набираю за какое-то немыслимо-короткое время, руки работают отдельно от головы.
5 дней назад, 31 декабря я че-то устал от бубунты совсем и решил вернуться на дебиан. Вернулся успешно, все кагбе ок. Но шило в жопе не давало покоя и вот три дня назад я засел за основательную разборку своей помойки. Сегодня закончил. /backstorage_200G больше нет :( RIP. Теперь все в хорошей структуре директорий. Очень непривычно, но блять как удобно, поражаюсь. Почему раньше ленился разобрать?
По итогам — я большой молодец — поборол себя и свою лень; нашёл много интересного и смешного. Нашёл много того, что считалось утерянным навсегда. Нашёл проект, который проебал у себя и удалил у заказчика на серваке и попал на 6.5к штрафа :) Нашёл примерно 2.5 гига логов от всяких резинов/томкатов/вебсфер :) Археологам пламенный наш, как говорится. Всё залил куда надо, проиндексировал, наслаждаюсь :)