Profile

coolwolf0: (Default)
coolwolf0

July 2025

S M T W T F S
  123 45
6789101112
13141516171819
20212223242526
2728293031  

Custom Text

Буду краток. Вы смеётесь над названиями в каталоге Икеи? Я сегодня обнаружил, что в стандартном SQL есть функция под названием ... COALESCE ! Возможно, что это какая-то аббревиатура, и аксакалы даже помнят, как она расшифровывается, но "эти люди запрещают мне ковырять в носу?!!".

В обсуждении на профильном форуме кто-то робко предложил использовать логично звучащую функцию IFNULL, но "зубры" его осадили: тут вам не балаган с MySQL диалектами, извольте изъясняться на стандартном SQL!

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

В данном случае получился микс: как назвать уму нерастяжимую ситуацию. Итак по порядку. У программистов часто бывает "затык", когда правишь что-то, а оно никак не реагирует на исправления.

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

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

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

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

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

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

PS: как бороться с такими ситуациями? Ну во-первых, перед тем, как начать рвать на голове волосы (у кого остались), попробуйте преднамеренно испортить исходный код, чтобы он заведомо упал на синтаксисе. Если опять никакой реакции - идите по следу от исходников до результата, потому что дебагируется явно что-то не то. Для случая с копипастой кода: это мерзкий антипаттерн, бойтесь его как огня при написании/исправлении программы, а то он вам ещё и в других ситуациях "выстрелит", например, при правке бага. Нецелевое использование переменной поймать тяжело, но можно: в современных языках есть всякие приблуды для статического анализа кода - не ленитесь их запускать при каждом изменении и тщательно анализируйте результат. Ну и конечно же опасайтесь языков, в которых можно обратиться к переменной без объявления. Злостный затык с мобильным браузером тоже имеет решение: к каждому подгружаемому из HTML файлу в адресе надо приписать дополнительный аргумент, не меняющий сути (ведь картинки и CSS обычно не принимают аргументов), но зависящий от номера версии. Этот примитивный трюк заставляет браузер инвалидировать кеш для всех подключаемых к страничке объектов.
 Как бы ни было мерзко в инфопространстве, приходится сочинять и такие дыбры...

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

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

Для начала коснусь темы "обстановки", так как Краков находится в нескольких часах езды от украинской границы. Беженцы и поддержка Украины на каждом углу - вот основные детали "обстановки". В остальном - никакого напряжения или опасности мы не наблюдали. Супруга моя спокойно переходила в общении с местными на русский (и её вполне понимали). Русская (и смешанная с украинской) речь слышалась на каждом шагу, но чисто внешне было сложно отличить этих говоривших от местных. Для беженцев на вокзале сделано всё что можно: прямо на перронах - указатели к пунктам сбора, в самих пунктах - волонтёры, в специально подписанных жилетках, очень заботливо направляют, помогают, советуют. Пункты помощи разделены на жилые помещения (ряды раскладушек), столовые и места распределения одежды. Кроме того, там же был плакат о выдаче бесплатных местных сим-карт для связи. На вокзале постоянно прокручивалось голосовое объявление на польском и украинском, что гражданам Украины проезд на поезде - бесплатный. Вообще, поддержка видна во всём: многие магазины объявляют об отчислении части выручки в помощь беженцам, где-то вообще висит приглашение на украинском "бесплатные занятия и игры для детей", в супермаркетах стоят копилки для пожетвований, ну и плакаты, рисунки, флаги... Наш гид, проводивший экскурсию по городу, в самом начале войны волонтёрил на границе, принимая первую волну беженцев, и это было страшно... А на центральной площади города периодически выступали (на разных языках) представители беженцев. Они не просили что-то для себя лично, они призывали к солидарности со своей страной, к реальной военной поддержке, к максимальному противодействию агрессору.

В остальном город - типичная старая Европа, вперемешку с современными городскими англомерациями. Тут и крепостная стена с зубчатыми башнями, и королевский замок совмещающий стопицот стилей, и городская легенда про дракона, и даже трубач на башне, ежечасно исполняющий одну и ту же мелодию - круглосуточно и ежедневно. Все улицы старого города - пешеходные, транспорт там движется "на птичьих правах". В целом стиль вождения - очень вежливый, никто не "давит" на зазевавшегося в потоке, не обгоняет "зигзагами", не пытается проскочить перед носом у пешехода на переходе. Буквально один раз мы видели какого-то психа на крутой тачке, газовавшего на отрезке в 30 метров как будто за ним черти гонятся. По городу мы ходили пешком, но для того чтобы получить и вернуть прокатную машину пришлось прокатиться на автобусе. Как и в Варшаве, общественный транспорт предполагает валидацию билетов, вот только купить билеты на остановке мы не смогли (пришлось сбегать на автовокзал и купить их в киоске). А потом оказалось, что билеты продаются (как и в Варшаве) внутри автобуса в специальном автомате.

Вне города мы посетили национальный парк по дороге к озеру "Морское око", теплые источники в Татрах и солевую шахту в Величке.

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

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

Это пока что общие итоги, фотографии и подробности будут позже.
Короче, проект медленно но верно идёт от нулевой версии к первому официальному релизу. Дабы не позориться, ссылку на онлайн-версию пока не публикую. Посему (или засим) требуются добровольцы (или по-нашенски "митнадевки"), которые помимо получения пользы от продукта (чтение RSS с десктопа/смартфона), способны сформулировать какие-никакие замечания по дизайну, юзабилити, документации, UX/UI. Сразу скажу: денег нет, но вы держитесь (то есть платить за тестирование опен-сорса не могу, мне и самому не платят).

Я понимаю, что идея мягко говоря отстала от времени - сейчас почти то же самое можно почитать в той же телеге, но преимущества кастомной ленты никто не отменял. Можно произвольно построить свою "газету", разбив её на рубрики по типу источников (новости/блоги/варез), либо сформулировав некие фильтры, вылавливающие из общего потока статьи на определённую тематику.

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

PS: Если кто решится читать сорсы - не бросайтесь тапками, это пока PoC версия, не до красот. По-хорошему, там надо много чего перелопатить и причесать... Пока что главная цель - функционал.

КДПВ... )
Процесс регистрации прост и незатейлив, установка клиентской части на винде - тоже как два пальца об... ну вы поняли.

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

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

Ну что я вам скажу, всё очень мило, кавайно и хайтечно. В наше время такой няшности не было (в далёком 97-м я только-только познакомился с RCS - по нынешним меркам это реальная жесть). Впрочем, о чём это я, - уже в антисоветской ОС NTS было понятие версии на уровне файловой системы, и там это работало как часы (я думаю, современные часы имеют столько же оперативки, сколько в том шкафе, размером с холодильник-другой). А другой опен-сорс проект я коммитил SVN-ом на флешку, сидя с лептопом в тамбуре поезда - это было лет 15 тому назад. Теперь всё онлайн, и можно не бояться внезапной потери хард-копии, будь то смерть диска или пропажа компьютера (тьфу-тьфу-тьфу).

Ещё чуть-чуть, и можно будет перейти от PoC версии к "нулевому релизу". От винта!

git stash
git update
git pull --rebase
git stash pop
 Как я уже упоминал в блоге, дочкина служба состоит не только в технической части (укладка парашютов и контроль укладки у десантников), но и в обычной армейской повседневности: наряды на кухне и караул. Караул он и есть караул, получи в оружейке М16, жилет, амуницию, и вперёд - карауль. А вот наряды на кухне, это штука сакральная, являющаяся одним из китов службы, наряду с уставами и строевой. Так уж получилось, что уставы зубрить в этой армии не надо, да и со строевой вышла какая-то фигня - старший сержант, отвечающий за армейский порядок, вообще запретил новобранцам маршировать на церемонии получения краповых беретов. Последняя надежда была на кухню: вот где вчерашние маменькины дочки должны были познать дзен чистки картошки и мытья посуды. Ан нет. Оказалось, что во-первых картошку чистят повара (тоже солдаты, но занимающиеся именно этой работой), а посуду моет ... промышленная посудомоечная машина.

Во времена перестройки советские начальники ринулись на "проклятый Запад" жадно копировать буржуйские секреты. Формально они научились основам маркетинга, планированию технологических цепочек, рекламному делу, фандрайзингу и кредитованию, короче, массе технических областей, без которых не изготовишь и не продашь ни самолёт, ни презерватив. Конечно, в совейские времена всё это тоже производили, но получалось в основном или ужасно дорого, или такого качества, что стыдно и противно покупать. Однако, самый главный буржуйский секрет "комсомольские предприниматели" так и не усвоили. Государство - оно для людей, люди его содержат для своих нужд, сами себе выбирают, сами решают кто достоин государственного поста, а кто - проворовавшийся урод. И в государстве обязательно должны быть противовесы, исключающие потерю контроля над ним. Это независимый суд, свобода прессы, свобода слова и демонстраций, многопартийность, плюрализм, конституция наконец. Когда только началась шумиха с онанотехнологиями, какой-то американский экономист так и сказал: "вы хотите получить молоко, но без коровы". Нельзя построить прочную экономическую и научно-техническую базу без свободы предпринимательства, контроля за государственными расходами, демократии и конкуренции. Когда коррупция на государственной должности - норма, нет свободной прессы, способной разоблачить жуликов во власти, когда вместо боевой подготовки солдаты чистят картошку, зубрят устав и оттачивают строевую, тогда и происходит СССР 2.0, причём не важно, что коммунистическую партию переименовали, а старых "коммунистов" назначили мартышками на потеху публике. Суть не изменилась: только всеобщий контроль, ложь и запугивание могут удержать страну. 

Повторю ещё раз, я не 8 лет, а как минимум 15 лет бью в колокола, призываю одуматься и вернуться на путь народовластия, многопартийности, разделения властей. Когда стало ясно, что дело добром не кончится, я призывал всех, у кого есть совесть и голова на плечах: бегите, пока не поздно. И вот прямо сейчас, буквально на глазах становится поздно.
Отцу на прошлой неделе отпраздновали 80 лет
Дочке в эти выходные - 20 лет
Сегодня у меня 7 лет в фирме (если считать срок до Nvidia)
Вот и на машине круглая цифра вышла


В связи с изменением законов на Плюке, дабы не получить пожизненный эцих с гвоздями, вынужден был переехать на параллельную платформу. Переезд занял неделю, так как шибко вумные админы ЖиЖи блокируют траффик зеркалирующего API. Короче, терпение и труд перетёрли эту проблему. В связи с чем и постю тут клип на новый сингл Рамштайна "Время".


... с хостером. Не пугайтесь, я на других фронтах раненый ;-)

Короче, хостер у меня строгий, но справедливый: на халяву разрешает только в бирюльки играться. Чуть какая важная функция - давай, бабки гони.
Но я и не претендую ни на что особенное: малюсенькая база MySQL (footprint практически не растёт, потому что накопить информацию вручную много не получится), какой-никакой PHP (не самая последняя версия, но и не старьё), доступ по FTP - вот и все требования.
И вот настал тот час, когда у хостера начали периодически выскакивать отлупы при соединении апачевской сессии с базой. В результате скрипт вылетает по мерзкому эксцепшену "Connection failed: SQLSTATE[HY000] [2002] Connection refused". Я его конечно же оттрассировал и попытался "поймать" через try ... catch, но проблема в том, что поймать можно что угодно, а потом-то чего прикажете делать? Попытаться тут же в цикле повторить соединение? Плохая идея, ибо в таких делах надо уметь держать себя в руках и дать второй стороне шанс успокоиться. Короче, в архитектурном плане стандартное решение - retry after delay (и так несколько раз, увеличивая длительность задержек).
Но, как оказалось после первой попытки, мой хостер тупо запретил sleep, usleep и вообще, любые попытки затянуть время обработки запроса. Я почесал лысую репу и выдал то, чему учат сисадмины: exec("ping -n 2 -i 1 127.0.0.1"); то есть "чеши яйца с интервалом в секунду". Второй раз забросил старик невод, и пришёл невод с той же тиной морскою - хостер строжайше запретил любые экзеки (хорошо хоть в ответ по морде не навешал).
Ладно, думаю, ты так, а мы - вот так! Запросы наружу по TCP работают? Значит им можно тайм-аут назначить? Ну вот тут-то ты и попался!

Короче, вот вам функция, которая ходит туда, незнамо куда, и отрубается в строго отсчитанный момент.

Read more... )

Скорее всего гугловский DNS не обидится, что ему шлют запросы на несуществующий URL. Я же его не DoS-ю, а так, в качестве "груши" использую, когда со мной родная база говорить отказывается.

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

Вот теперь и экономика. Бизнесмены, а также участники пищевой цепочки от углеводородов, поздравляю с новой реальностью. Ясно было, что "вертикаль" долго не продержится, но чтобы вот так, радикально подпилить трубу, на которой сидел почти весь внешнеторговый баланс?

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

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

UPD: а вот и первая ласточка

Не у меня - я проверялся несколько раз домашним тестом на антиген. Мы этих тестов накупили целую упаковку из 20 штук, чтоб не думалось. Жена официально переболела в начале месяца - абсолютно без симптомов, если не считать першение в горле и лёгкий насморк. Вот теперь - тёща. В пятницу антиген показал у неё две полоски, поэтому в субботу мы с ней смотались в драйв-ин пункт тестирования PCR. Я заполнил простенькую онлайн-анкету, девочка-медсестра просканировала полученный код, выдала нам напечатанную тут же на мобильном принтере наклейку и сказала - вам в левую очередь, для тех, кому за 60 и "групп риска". Мы элегантно объехали очередь из десятка машин и нас действительно обслужили. А на следующий день - звонок. Сначала говорили на иврите, но тёща уверенно ответила заученной фразой "лё медабэрет ..." и перезвонила телефонистка на русском языке. То есть они сходу отказались от опции оповещения через СМС, ввиду возраста пациентки. Тест оказался положительным, так что тёща у нас пока сидит в четырёх стенах (что было и раньше, куда же ей ходить?). Потом перезвонила лечащий врач-терапевт и долго расспрашивала про симптомы, инструктировала по поводу возможных осложнений и дальнейших действий. Заодно упомянула, что для удалённого наблюдения нам будет доставлен прибор, измеряющий уровень кислорода в крови. И вот сегодня позвонил посыльный - он оставил у дверей коробочку с символикой нашей больничной кассы. Внутри оказалась листовка с инструкцией, электронный термометр и тот самый прибор - всё новенькое, в оригинальной упаковке. Вставил прилагаемые батарейки, тёща измерила уровень кислорода и пульс - всё в норме. Короче, ура, и дай бог чтоб на этом всё кончилось.
Всё, это конец эпохи и начало новой. FreeRSS1, рождённый как упражнение в мультидисциплинарном программировании (веб, базы данных, обработка информации) окончательно ушёл в архив. С сегодняшнего дня я могу полноценно читать RSS-подписки со всеми фильтрами, поиском и обновлениями. Да, это "нулевая" версия, там конь не валялся в плане настроек, но уже работает аутентификация и даже добавление/удаление новых лент. Ну и самое главное - система полностью вышла в онлайн, нет необходимости держать включённым домашний комп и выставлять наружу открытый порт для доступа к аппликации извне.
В процессе интеграций я открыл для себя много интересных способов выстрелить себе в ногу. Например, сраный PHP не предупреждает о странном использовании неинициализированной переменной и молча выдаёт пустую строку там, где я ошибся на одну буковку в идентификаторе. При этом он мстительно игнорирует глобальные переменные (ибо антипаттерн).
Вообще этот язык лишь условно можно назвать языком программирования. Если ты не добрался на хостинге до 8-й версии, то названия встроенных функций у тебя выглядят как упражнение студента первого курса в именовании подпрограмм. Приёмчики работы с массивами напоминают какой-то Фортран, а не язык, используемый в 21-м веке. Короче, скоро закрою бек-эндовую часть проекта и возьмусь за GUI. Там по крайней мере будет веселее в плане дебага - можно хоть на пустышках в браузере тренироваться.
Я тут потихоньку ваяю код для полноценного аггрегатора RSS, чтоб базировался на вебе, с мордой от Bootstrap. Мой древний самопал бежит строго на локальной машине, а это бардак и каменный век с точки зрения доступа. Про внешнее оформление в стиле Веб-1.0 вообще молчу.
Уже сейчас имеется подкачка RSS-лент с сайтов по списку и умное хранение обновлений в базе, постраничное отображение статей, отметка прочитанного, редактирование кое-каких деталей имеющихся лент, поддержка клавиатурных шорткатов, плюс адаптивный дизайн под десктоп и смартфон.

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

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

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

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

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

Итак, был у меня замечательный код, просто конфетка: после выбора фильтра в верхнем меню он проходил по всем имеющимся объектам и помечал не прошедшие фильтрацию ноликом, а прошедшие - единичкой. После этого на сцену выходил его высочество AngularJS который показывал или прятал объект, в зависимости от того самого статуса.
Но начальство резонно заметило, что прятать от пользователя объекты, пусть даже отфильтрованные, некрасиво. А красиво было бы объект показать, но в стиле "disabled" - сереньким, с выключенными действиями по клику мышки. Сказано - сделано: пошаманил с CSS, переставил вместо ng-hide вычисляемый класс ng-class зависимый от всё того же битового поля 0/1.
И оно тоже прекрасно заработало, и увидел я что это хорошо, и сказал "да быть интеграции". Дело в том, что помимо этих визуальных чудес, я накрутил сложнючий код на PHP, который читал инфу из JSON-файла, объединял эту инфу с реальными объектами из базы данных, остатки разбивал на два подмножества (привет вычислительная математика)...
Поэтому, чтобы немного облегчить мне жизнь, вопросами фронт-энда занялся совсем другой человек. Он просто заметил, что в моём жаба-скрипте есть что-то связанное с условием показывать/спрятать, и логично рассудив, что именно этого ему почему-то не хватает, понаставил в собственном цикле единички во все объекты.
И вот, собрана бета-версия, начинаю тестировать и получаю полный игнор: что бы я ни фильтровал, ни черта не меняется. Начинаю дебажить жаба-скрипт - в нужные места программа заходит, нолики честно прописывает. Натравливаю на данные JSON.stringify и печатаю результат на консоль - та же картина, все нолики на месте. Но проклятый Angular продолжает игнорировать мои нолики! Уж не знаю, каким чудом я догадался заглянуть на несколько строчек ниже своего дампа: kurwa, вся моя фильтрация аккуратно идёт под нож. И ведь не упрекнёшь человека в том, что он мне данные попортил - надо было самому не лениться и переменную переименовать во что-то более self-explanatory.
Музыка

Фоершванц сделали новогодний клип в своём стиле: с Крампусом и селянками.



Скачал их новый альбом "Memento Mori" и, как говорится "Моментально - в море". А если серьёзно, то ребята как-то однообразно кладут песню за песней. Надо бы над мелодиями поработать, а то эпичные морды кирпичом уже поднадоели.

Read more... )
Продолжая традицию, подведу итоги того, что принято называть прожитым годом (ибо врагам такой год пожелать можно).
Самое большое событие - призыв и служба в рядах ЦАХАЛа нашей доченьки. Теперь у нас сразу две боевые единицы дома: дочь-десантница в бритом краповом берете, плюс сын с боевым оружием на подработке (работает охранником в начальной школе). Учёбу он не бросил (ещё бы, когда платит такие баблосы), только теперь обучение наконец-то стало очным, а не по Зуму.
У моей супруги бизнес остался на плаву - и на том спасибо. Особых взлётов мы не ждём, главное - чтобы падений не было.
Отец тьфу-тьфу-тьфу в порядке, особенно после вживления кардиостимулятора. Вот на прошлой неделе его опять пытались госпитализировать, но нифига не нашли и вытурили на следующий же день. Наконец-то меня стали пускать к нему в отделение, но это после того, как он куда-то посеял всё что можно, начиная с пульта от телевизора, и кончая бабушкофоном, по которому раньше ему могли звонить иногородние родственники. Тёща тоже в порядке, только редко стала выходить из дома.
Мы съездили в настоящую заграницу, причём дважды (Румыния и предновогодний Турин).
На работе всё по-прежнему. Недавно нас слегка переселили (остались на том же этаже, только чуть более шумный open-space). Вроде бы даже тренажёрку открыли и я аж два раза успел позаниматься. А вот столовая так и не работает, ведь нам разрешили появляться в конторе не чаще раза в неделю. Зато моя система пустила ещё больше корней в разных направлениях: теперь её использует наш IT-отдел для оценки потребления электричества по лабораториям и отдельным стойкам. Кроме того, мы приняли в ряды клиентов целый американский филиал, который раньше использовал фирменную систему учёта лабораторного оборудования. Следующий этап - отображение стоек на физических позициях в каждой лаборатории.
На рабочее место мне вручили новый монитор, который как бы ещё и docking-station - у него и камера встроенная, и саундбар, и все-все-все разъёмы втыкаются, а в лептоп уходит единственный type-c. В плане зарплаты и прочих плюшек изменения незначительны, но начиная с определённого возраста это уже становится опасным фактором: работодатель, какой бы он ни был хороший, обнаруживает, что у него какой-то стапрёр почему-то получает овердофига денег и принимается искать дешёвую молодёжь... Пока что до этого не дошло - на фоне остальных работников я выгодно выделяюсь и сам могу заменить любого (дай бог, чтоб не понадобилось). При этом постоянно что-то учу, осваиваю, развиваюсь.
Буквально несколько дней назад я оживил давно дремавшую идею самодельного проекта - веб-версия RSS-аггрегатора. Теперь то, что работало на локальном компе, будет доступно из любой точки мира, да к тому же в новомодном интерфейсе от Bootstrap и иконками FontAwesome. В пайлот-версии пока что отсутствует подсистема аутентификации, поэтому не могу опубликовать тут адрес веб-морды, но поверьте, самые важные проблемы на уровне концепта решены: сервер читает RSS с самых разных сайтов, парсит его на поля, веб-морда умеет показывать ленту на десктопе и телефоне, база данных прекрасно работает с аппликацией, даже начальный код клиентского приложения начал фунциклировать - клавиши-стрелки ходят по заголовкам статей как будто так и надо ;-) Есть и проблемки: переводить на Angular как-то западло, а это значит полно ручной работы на JavaScript. Кроме того, мерзкие сайты-парсеры RSS повернулись к клиентам филейной частью: или требуют бабло за элементарные услуги парсинга, или внезапно стали падать на проверке HTTPS ключей. В конце концов я просто сделаю на PHP свою систему парсинга и перевода контента в RSS, с блекджеком и паттернами.
Поменял наконец-то лизинговую машину. Эта чуть теснее для пассажиров на заднем сиденье, да и багажник маловат. Но это не критично, так как мы избавились от угольного гриля, который надо было возить на пикники - у нас теперь свой газовый гриль на балконе. Да и пылесос тоже поменяли на Дайсон - как мы без него жили, непонятно. Ну и самое главное - у нас новая кухня, полностью переоборудованная, без газа - только на электричестве.
Вот вроде бы и все мои основные новости. А как вы прожили эти 365 дней?
Tags:
Ролики в интернете

Берёзовый киберпанк выпустил очередную порцию стёба, как обычно - на злободневную тему. На этот раз стебутся над медициной.





Read more... )
Прочитал в пейсбуке пост профессионального психолога и специалиста по НЛП: человек не понимает, почему ему задают "дурацкие вопросы" сотрудники службы безопасности в аэропорту, короче это его БЕСИТ. В ответ (помимо прямых и подробных объяснений сути таких собеседований) комментаторы начали переходить на личность топикстартера, а автор - обкладывать непарламентскими анатомическими эпитетами весёлых комментаторов. В конце концов комментарии к посту были заблокированы. Отсюда следует сразу несколько выводов, но основной таков: в разговоре, будь то интернет или оффлайн, никогда не переходите на личности (если вы не профессиональный психолог). Во-первых, это унижает не только вашего визави, а во-вторых, уводит дискуссию в неконструктивное русло. Зато если вы - психолог, то можно крыть x**ми кого угодно, чего стесняться, в этом вся суть профессии!

PS: уважаю психологов, не люблю непрофессионалов и шарлатанов.
Вообще-то благодаря Ковид-эпидемии я уже выиграл дважды (это такое оптимистичное начало, попытка увидеть положительное).
Во-первых, отменилась поездка в Швейцарию, знаменитую своими космическими ценниками на всё (то есть как-бы экономия).
Во-вторых, за неимением возможности поехать за границу, пришлось кое-какие события отмечать в Тель-Авиве, а это (как показали недавние рейтинги) - самый дорогой город мира! Когда бы я об этом узал, катаясь по всяким франциям-польшам? Ну ладно, это были шутки юмора про дела минувшие, перейдём к делам нынешним.

Мы эту поездку условно называли "европейский рождественский базар", чтоб обязательно с ярмаркой, глинтвейном, гуляниями, ёлочкой (а без ёлочки - не возвращаться!)
В качестве цели был выбран Краков с окрестностями, а Париж и Рим - оставлены на всякий пожарный случай. Но человек строит планы, а дьявол - козни. Обстановка в Польше (по сведениям инсайдеров) оказалась не сулящей хороших перспектив, поэтому мы начали копать южнее. Париж был отвергнут из-за высоких цен и многочисленных свидетельств наплыва не-французских гостей города (к африканцам добавилась вторая волна ближневосточных "братьев"). Нам за таким "счастьем" далеко ездить не захотелось, поэтому остановились на Италии. Мы там были дважды, причём в Риме - оба раза. Порывшись в форумах, выбрали Турин. Почему туда? Во-первых, мы там не были во время большого автобусного тура. Во-вторых, это север, а значит новогодняя обстановка гарантирована. И в-третьих, наши основные цели (архитектура, музеи и шоппинг) тут можно удовлетворить в достаточном объёме.

Read more... )