falcrum: (Violet smoker)
Прилетела ща СМС-ка - что-то совсем уж мелкие суммы предлагать спамеры начали:



А с виндой был удивлён. Надо было проверить комп по сетке пингом - дай, думаю, выключу брандмауэр. Зашёл в сервисы, остановил. Фиг. Пинга нет. Включил взад, добавил правило для ICMP - заработало. Но как?
falcrum: (Violet smoker)
Тут на мобиле самовылезло предложение активировать антивирь - я как-то давно не смотрел в сторону этого производителя, потому был удивлён, узнав, что, как сообщал нам Жюль наш Верн в «Детях капитана Гранта», «Оно произносится "Айртон Intel", но пишется "Бен Джойс McAfee"!» Впрочем, гораздо сильнее задело подчёркнутое на скриншоте красным:



Когда-то давно, когда персональные компьютеры ещё частенько называли «ПЭВМ», во весь рост стояла проблема перевода интерфейсов программ с вражеского на родной - ну, чтобы пользователи, не видевшие ничего, кроме печатных машинок, не пугались хотя бы иностранных надписей, так как с языками было тогда тоже похуже.

Натурально, никакие исходные тексты большинства софта доступны нам не были. Поэтому русификация производилась в HEХ-редакторах прямо в EXE-шниках. Нашёл, значится, поиском байтики с меткой или пунктом меню - и вбил туда буквы «великого и могучего».

В таком действе была, помимо трудоёмкости, ещё одна существенная засада: как известно, английские слова в среднем на треть короче русских, а размер строк был наглухо фиксирован. И, чтобы на место, скажем, «Insert» поместить «Вставить», надо было вписаться в шесть знаков, т.е. приходилось делать «Встав.» - точка тоже символ.

Но увидеть вот это «кодируем помаленьку» сейчас - полный мрак...
falcrum: (Violet smoker)
Я-то думал - из анекдотов. Ан нет. Сижу у заказчика на «местном» ноуте, коллега кидает в мыло файлик - открываю:



«Редактирование может повредить компьютер» - какие ещё вопросы? Excel 2010 - специально глянул...
falcrum: (Violet smoker)
Вынужденно колупаюсь в кишках огромного программного комплекса. В процессе выяснил прелестное - идентификатор одного и того же объекта в трёх разных таблицах хранится... в трёх разных видах. К примеру, это - один и тот же ID (NVARCHAR2 - мы что, в этом hex-е ждём юникод?):


  • 1F5B54B5D52A3A8F910AB3D9A93C8F58

  • 1f5b54b5d52a3a8f910ab3d9a93c8f58

  • 1F5B54B5D52A3A8F910AB3-D9A93C8F58



А связывается это кодом снаружи... Р-расстрелять!..
falcrum: (Violet smoker)
Вот если не знать, что оный SurveyMonkey - крайне солидный сервер онлайн-опросов, то что можно подумать?



Чисто переводя с англицкого?
falcrum: (Violet smoker)
Смотрю, сервера у наших банкиров тоже Новый год отмечают ударно:



Прислали выписку по моей карточке, у которой уже истёк «срок годности» - н-да...
falcrum: (Violet smoker)
Работали вчера с коллегой на выезде, идёт общение с системщиком заказчика. Сервер упирается и не хочет делать, что велят. Забегает ещё один местный сисадмин: «Пожарная часть горит!». Выходим посмотреть (внимание, по клику - большое фото!):



Явно делали ремонт, заливали крышу смолой - ну, и полыхнуло. Сами работники брандспойта встречали зрелище смехом и громким матерком. Вот тут-то фраза из заголовка у нас и прозвучала...

В бассейне же нынче повторил три пятьсот - за час шестнадцать, правда. В прошлую среду приехал в ДВС - там отрубилось электричество...
falcrum: (Violet smoker)
Я не скажу вам, что это за язык, но такое лично я увидел впервые и, пока не разобрался методом тыка, чуть с ума не сошёл. Итак, в природе есть циклы, в которых условие проверяется до выполнения - ну, пусть, памятуя о богоподобном паскале, это будет while. Есть циклы, в которых условие проверяется после выполнения всех операторов внутри - repeat...until.

А сегодня я узнал, что бывает так: цикл выполняет свой первый оператор, после этого проверяет своё условие, и, если оно true, выполняет свои остальные вложенные операторы. После чего процедура повторяется: первый оператор, проверка и т.д.

И это не задокументировано. Никак. «Догадайся сам», мать их за ногу...
falcrum: (Violet smoker)
Как я уже́ не раз замечал, в наших финучреждениях нынче модно организовывать клиентов путём выдачи им номерков. Был вчерась «на районе» - и там эта же забава в полный рост. Но.

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



Если кто не допёр, то «лишние» кнопки сообразительные умельцы залепили бумажкой и скотчем. Королева в восхищении!
falcrum: (Violet smoker)
Блинский блин! Деловая переписка. А прилетает тебе вот такое:



Не Поль Шанель, конечно, но мы ехать, а не жрать собираемся...

ЗЫ: Чтоб меня в очередной раз не обвиняли в сексизме, уточню - здесь моим собеседником был мужчина...
falcrum: (Violet smoker)
Я юзаю «корелую дровь» уже лет двадцать. За это время вышло десятка полтора версий продукта. И вот, после слёта винта, я вкрутил себе Х6 (до этого «ха-три», вроде, стоял) - пользую, в основном, для обработки подводных фоток. И в нём обнаружил революционную инновацию: теперь можно изменять размер диалогового окна для открытия файлов!

Я, в целом, вообще не понимаю, отчего диалоговые окошки принято делать немасштабируемыми? Не, понятно, что минимальные размеры ограничить надо, но увеличение-то зачем? Ведь куда удобнее увидеть сразу побольше имён картинок, чтобы ткнуть в нужную, не крутя скроллер? Ну, кроме «так здесь принято»? Вроде как средства разработки UI уже сто лет в обед позволяют творить такое не заморачиваясь - ан нет.

Но самый сок в том, что, судя по хитро выглядящему элементу, на который указывает красная стрелочка, этот велосипед кореловцы изобрели сами:



Развитие? Да я в бассейне, где сегодня снял ещё минуту с времени на той же дистанции, прогрессирую куда как быстрее...
falcrum: (Violet smoker)
Наблюдал со стороны ситуацию: кодеры не могут настроить у себя на стенде работу хитрой сторонней библиотеки. Ну, вот не могут - и всё. При этом заказчик с ней вовсю трудится, а у них не получается. Решение: «мы пишем, как должно быть, отсылаем заказчику и проверяем у него». Завелось. Будете разбираться, почему у себя «не взлетает»? Ай, лень - в продакшен!

Опять же взгляд постороннего зрителя: «стыкуются софтом» два коллектива. Хитрые форматы обмена данными, то да сё. Представитель одной стороны удалённо пытает коллегу из другой: как ты вот эту фигню получаешь? День, два - результата нет. Задумчиво: «Какой-то он странный...» Товарищ рядом взвивается: «Странный? Да я него у в институте вёл!» Тут же ответка: «Так какого лешего ты его вообще на волю выпустил!»

Так что насчёт «первого же залетевшего дятла» - это не шутка...
falcrum: (Violet smoker)
Накрылся винт на рабочем компе. Качественно - всё в труху. Причём, зараза, до последней секунды не подавал никаких намёков - и тут: бац! Всё в бэд-блоках, аж щёлкает при подаче питания. Основное-то забэкаплено (во всяком случае, я на это очень сильно надеюсь), а вот тысячи всяких мелочей пропали безвозвратно... Э-эх...

Но я о другом: у меня серверная ОС, и, вкручивая её на на новый винт, наши админы в автозагрузку поставили... караоке. Караоке, млять! Я, что, с горя должен спеть и станцевать?
falcrum: (Violet smoker)
Коллегу попросили слегка поколупаться в старом проекте:



Приходит ко мне - грит, я в шоке: убил полдня - задница! Ничего не понимаю! Не работает! Давай вместе посмотрим!

Итак, имеется DLL-ка, в ней две функции:

Load1: function (aS: pChar): boolean; stdcall = nil;
Load2: function (aS: pChar; var codeErr: LongInt): boolean; stdcall = nil;


Инициализация:

@Load1 := GetProcAddress (hLib, 'Load1');
@Load2 := GetProcAddress (hLib, 'Load2');


Вызов Load1:

procedure PerformLoad (TaskObject: TTaskObject);
var
ErrorCode: integer;
s: string;
begin
s := TaskObject.RequestText;
if Load1 (@s[1]) then // вызов старой функции библиотеки
ErrorCode := 0
else
ErrorCode := 1;
TaskObject.ErrorCode := ErrorCode;
end;


Вызов снаружи:

// Инициализация объекта LocalTaskObject
...
PerformLoad (LocalTaskObject);
if (LocalTaskObject.ErrorCode = 0) then
...


Всё работало. Но. Надо ему было заменить Load1 на Load2:

procedure PerformLoad (TaskObject: TTaskObject);
var
ErrorCode: Integer;
s: string;
begin
s := TaskObject.RequestText;
Load2 (@s[1], ErrorCode); // вызов новой функции библиотеки
TaskObject.ErrorCode := ErrorCode;
end; //Вот здесь ещё всё хорошо - объект TaskObject в отладчике "живой"


И внезапно:

// Инициализация объекта LocalTaskObject
...
PerformLoad (LocalTaskObject); // передаём "живой" объект
if (LocalTaskObject.ErrorCode = 0) then // и внезапно вот здесь LocalTaskObject становится nil
...


Увидев подобное, я несколько прифигел. В чём разница? Что может освобождать или затирать объект? Ладно, говорю, давай попробуем тупой костыль:

function PerformLoad (TaskObject: TTaskObject): TTaskObject;
var
ErrorCode: integer;
s: string;
begin
s := TaskObject.RequestText;
Load2 (@s[1], ErrorCode); // вызов новой функции библиотеки
TaskObject.ErrorCode := ErrorCode;
result := TaskObject;
end;
// Вызов
// Инициализация объекта LocalTaskObject
...
LocalTaskObject := PerformLoad (LocalTaskObject); // передаём "живой" объект
if (LocalTaskObject.ErrorCode = 0) then // и внезапно всё опять заработало
...


Но как?
falcrum: (Violet smoker)
«Если минарет - значит выше всех!»
вспомненная вчера
песня «Пикника»


Она и за корабликами в кадр попадала, и в прошлый заезд я её снимал - но не навести ещё раз мегазум просто не мог (внимание, по клику - везде большие фото!):



Но лучше всего самая больша́я мечеть Хургады смотрится, конечно, с моря:



И даже в пасмурный день - хороша:



Само собой, автоматизация пришла и туда: муэдзина на минарете заменил громкоговоритель, расписание молитв высвечивается на электронном табло - даже интересно, в какой форме разработчикам этого ПО выставляют штрафные санкции?
falcrum: (Violet smoker)
Изрядно задолбавшись по работе, отчего-то вспомнил песню товарища Гинзбурга:

«Врёт, что он там шеф над автоматною
Электронно-счётною машиною.

Дескать, он прикажет ей, помножь-ка мне
Двадцать пять на девять с одной сотою,
И сидит потом, болтает ножками,
Сам сачкует, а она работает.

А она работает без ропота,
Огоньки на пульте обтекаемом!
Ну, а нам-то, нам-то среди роботов,
Нам что делать, людям неприкаянным?!»


А недавно увидел просто на улице на столбе (внимание, по клику - большое фото!):

2014-05-19 07.59.47.jpg

Э-эх...
falcrum: (Violet smoker)
Как-то были споры насчёт «да я, как устроена база данных, в голове держу!»... Ну, вот не самая сложная схема из жизни (внимание, по клику - большое фото!):



Конечно, патентованный аутист запросто разложит её по своим извилинам, но, ёлки-палки, как он будет объяснять ещё кому-то связи между сущностями?
falcrum: (Violet smoker)
Этим «ласковым» словом у нас именуют поделия «одной фирмы из трёх букв» - разработчика программного обеспечения (внимание, по клику - везде большие фото!):



И это не глюк видеокарты/драйверов - «шевелёнка» ползает по отдельному участку экрана. Ну, и «бегущая строка» дополнительно вырывает глаза:



В бассейн сегодня пошёл снова на два сеанса, но то ли недельная пауза сказалась, то ли проведённые в нервной беготне дни - чувствовал себя конкретным «деревом». Так что сделал кое-как три километра за семьдесят четыре минуты - и ладушки...
falcrum: (Violet smoker)
Попросили меня оказать консультационную помощь - типа, надо выгрести данные грамотно, а ты умеешь. Является ко мне юное дарование и начинает объяснять, что ему, собственно, потребно - и я понимаю, что схожу с ума...



Вот такая схемка, только этих Table2, Table3 на самом деле n штук. Надо вывести для каждого Id соответствующее Name из какой-нибудь из множества таблиц, ну, и сортировать по нему...

Так, спрашиваю, а что, если этих Name будет больше одного или не будет вообще? Не-ет, отвечают мне, у нас тут Программная Логика! Я чуть со стула не упал. Ладно, говорю, а кто вообще такую схему дебильную придумал? Почему в Table1 не добавить два поля: Name и какой-нить NameType - и не забыть этот зоопарк, как страшный сон?

И тут моей психике был нанесён удар страшной силы - я попробую воспроизвести реплику близко к тексту: «Нет, мне так неудобно, потому, что так у меня каждая табличка - это объект в java! Вы ведь знаете, что такое наследование?»

... выгнал пинками на..уй... Но, м-мать...
falcrum: (Violet smoker)
Понадобилось мне тут палочкой потыкать - стал искать искать тулзу для тестирования. В инетах пишут «HermesJMS - это клёво», да и с SoapUI сопрягается. Скачал jar-ку с саурсфоржа, начал настраивать:



Как-то сразу насторожило, что пароль не «звёздочками», ну да ладно:



Жму кнопку «Ок» - ничего не работает. Хм. Лезу в взад в настройки очереди, а там:



Где юзер? Нету его! Тырканье показало, что для сохранения значения поля надо мышой кликнуть в соседнюю строчку - сразу кнопку «Сделать зашибись!» жать нельзя...

Вот теперь в мучительных раздумьях: если это - «лучшее», не получу ли я необратимую психотравму, глянув не то, что на «худшее», а хотя бы на «нормальное»? Ну, и что приводит к такому трындецу - жаба, свободное ПО системы «у-семи-нянек-дитя-без-глаза» или принцип «всем-пофиг-ведь-как-то-работает»?

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

Profile

falcrum: (Default)
falcrum

September 2017

S M T W T F S
      1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 2223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 09:26 pm
Powered by Dreamwidth Studios