среда, 30 октября 2013 г.

Java (по мотивам собеседований)

Сходил на несколько собеседований, зацепили несколько мелких вопросиков, ответы на которые внезапно вызвали у меня эмоциональный отклик.


  1. Множестенное наследие, но для интерфейсов


  2. В голову вбил, что в java нет множестенного наследования, и для объектов это действительно так.
    Но вот для интерфейса вполне правомерно написать:

    Для тестирования простой класс:

  3. Одинаковые названия метода и конструктора

  4. Сигнатуры-то разные

Примеры компилируются, и выполняются без ошибок.

понедельник, 23 сентября 2013 г.

vip.shuvar и bezgmo.ua (Львов)

Около трех месяцев заказывали регулярно продукты с доставкой из интернет магазина рынка Шувар. Обычный заказ около 20 долларов. В последний раз заказ приехал без  винограда. Жена привычно не проверила, оплатила сколько спросили. Вечером обнаружили и написали письмо о неприятности.
Ответа нет.

Вчера (вернее это  было уже сегодня) заказали товары в БЕЗГМО. За полтора часа до прибытия пришло смс уведомление и указали точную сумму заказа. Каждая позиция аккуратно обернута в бумагу с ценником. Вместо пакета - картонный ящик (у меня в последнее время небольшая паранойя на почве информации о том, что пластик очень медленно разлагается). Все продукты свежие (может, повезло, но у Шувара иногда уже были подгулявшее - рыбу например перестали заказывать).

Хорошо, что у людей есть  выбор "проголосовать рублем".

вторник, 13 августа 2013 г.

Праздники

Год назад вышел на работу в львовский офис Логики.
Из безусловных плюсов, кроме зарплаты, двухнедельная поездка в Дублин, двухнедельный отпуск когда у меня родился сын, и, конечно, люди у которых есть чему поучиться.

А еще сегодня оказывается международный день левши

Задумался...

четверг, 27 июня 2013 г.

Ошибки

Самое большое количество ошибок у меня появляется из-за невнимательности.

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

Когда я сфокусирован - ошибки редки. Отсутствие концентрации или не достаточное ее количество портят дело.

Так было еще со времен школы.

Чтобы мысль стала силой - она должна быть в голове одна

Не могу выразить свое состояние лучше, чем этой цитатой.

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

Где-то читал, что подобное состояние вызывает обычно сексуальная неудовлетворенность. Тогда, в одиночестве, верил. Сейчас, женатый и живущий на отдельной жилплощади - уже не верю.
Еще что-то там было о неупорядоченности мотивации.
Наверное, это уже привычка.
Вот дочитаю, кажется, первую в жизни честно купленную электронную книгу Олег Дивов "Леди не движется", отрою англоязычную The Power of Habit: Why We Do What We Do in Life and Business и попытаюсь в себе разобраться и что-то изменить.
Давно хочу ощутить пользу на практике от прочтения книг.

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

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

Когда-то я мог себе позволить купить раз в три-шесть месяцев новую книгу или касету (да, я советское дитя конца 70-ых-начала 80-ых), и тогда получал эмоциональный взрыв уже от самого факта приобретения, не говоря уже о прочтении или просмотре, прослушке.
Моя первая аудио-кассета - Chris De Burg "Ledy in Red". Пиратская, конечно, но купленная - интернета-то не было. Названная из-за популярной на дискотеках одноименной песни, стала для других поводом шуток надо мной. Но я ее помню.
Первая купленная книга - трилогия "Фонд" Айзека Азимова. Я ее читал каждые каникулы в девятом классе.

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

четверг, 20 июня 2013 г.

Дикая энергия

Я не верю, что история когда-нибудь закончится.

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

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

Я называю ее "дикая энергия".

вторник, 18 июня 2013 г.

Последняя капля для eclipse

Наверное, у каждого подобное должно бы происходить по своему: я о смене рабочего инструмента.
Я работаю программистом. Мой рабочий инструмент - IDE. Интегрированная Среда Разработки, как бы неприлично это не выглядело в русской аббревиатуре. Для меня очень важны удобство, простота и функциональность.
Уже несколько лет подряд рядом с eclipse никто не стоял. В сторону idea смотрел, но каждый раз находил ее слишком сложной для усвоения. И платность отталкивала...

Первым звонком для меня стала возможность работы из коробки с Maven. Попробовал, и оказалось, что структурированный xml Maven'а достаточен для того, чтобы не редактировать самому файл проекта привычным добавлением плагина, чтобы сгенерировать служебные файлы для eclipse. Ведь ни один из двух плагинов для eclipse почему-то адекватно не работает. А в idea ничего дополнительно делать не надо. Более того - редактор в idea почему-то удобнее, и зависимости удобно просматриваются.

Следующим шагом был курс по MongoDB. Авторы видео-уроков иногда используют idea. Мне понравились буквенные вставки, которые можно было развернуть в код.
psv превращался в уже надоевший public static void main(String[] args) { ... }. Установил idea, повторял за видео.

А сегодня понадобилось вытащить из удаленного репозитория git код проекта. Не смотря на попытку следовать предоставленному списку того, что надо делать с eclipse, чтобы получить доступ к коду закрытому на доступ только по ключам, я провалился. Да, я и раньше испытывал неудобство в том, как git работает в eclipse. Но путанница, когда устанавливаемые из встроенного магазина плагины на смогли сами разобраться со своими зависимостями, утомила.

Поставил idea. Да, была своя путанница с ключами: настройки подгрузить ключи для репозиториев или среды разработки я не нашел. Но гугл помог понять, что idea сама найдет ключи, если их поместить в ожидаемое место (я был на RedHat 6.3, и каталог должен был быть $HOME/.ssh/. Для моего пользователя root $HOME = /root/ Я не сразу догадался проверить).

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

Собираюсь переходить на idea.

понедельник, 17 июня 2013 г.

Поездка в Киев

После двух лет жизни в украиноязычном Львове обращение на украинском  в русскоязычной среде Киева уже не кажется чем-то странным.
Мой родной язык стал мне настолько удобным, что даже если собеседник говорит по-русски - у меня не вызывает чувтсва неудобства говорить на родном.
Язык - это привычка?

воскресенье, 16 июня 2013 г.

Любительский театр

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

Главное теперь для меня не искусство, не причастность к "высокому", а то, что происходило со мной на сцене.

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

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

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

В любительском театре я не успевал привыкнуть в спектаклю. У меня часто не было  другого шанса все исправить - если вдруг подведешь. Поэтому переживание премьеры очень острое, нервы часто на пределе. Это одна из частей того, что вызывает привязанность.

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

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

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

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

суббота, 15 июня 2013 г.

Слово, у которого пока нет страницы в русской википедии, но в английской и украинской - есть

Infotainment  

Infotainment is "information-based media content or programming that also includes entertainment content in an effort to enhance popularity with audiences and consumers."[1] The term can also refer to the hardware/software products and systems which are built into, or can be added to vehicles in order to enhance driver and/or passenger experience. It is a neologistic portmanteau of information and entertainment, referring to a type of media which provides a combination of information and entertainment. According to many dictionaries[2]infotainment is always television, and the term is "mainly disapproving."[3] However, many self-described infotainment websites exist, which provide a variety of functions and services.,[4]many of which include the several increasingly popular social media websites and applications being used daily by billions of users world wide.

Інфотейнмент
Інфоте́йнмент (infotainment, від англ., information — інформація і entertainment — розвага) — це вид інформаційних програм. Новини у них подаються для аудиторії в максимально розважливій формі. Інформування реципієнтів проходить в ненав'язливій формі, а новинні програми представляють політику, як сферу масового життя, наближеного до людини. Інфотейнмент, як правило, містить лише поверхові відомості з певної теми і не може розглядатися як джерело самоосвіти. Синонімом інфотейнменту іноді виступають т.зв. soft news («легкі» новини), названі так на противагу hard news («вагомим», або «справжнім», новинам). В друкованих ЗМІ цьому поняттю відповідає термін «таблоїдизація», що подає події у такій же розважливій формі, але в друкованому вигляді.

Лично для меня слово это скорее означает способ восприятия информации, а не способ ее подачи. Так уж получилось - когда-то не понял, вложил в словослияние (Portmanteau, и для этого слова нет уже украинской страницы, а русская есть) что-то свое.

Это когда я читаю блоги, книги, журналы и статьи - в электронной и бумажной форме - и тому подобное, а полученную информацию - не использую никак кроме как for lulz. Сюда же идет скачивание попавшихся на глаза книг, сбор ссылок на них и другие интересные статьи, которые захламляют окно броузера, но которые не хочется "терять". Да, открытые неделями ссылки - туда же.

Тезисом для диалектического осмысления происходящего, вероятно, когда-то было желание постоянно расширять кругозор и быть способным поддержать разговор на буквально любую тему, похвалиться прочитанным, порекомендовать что-то уже пройденное для себя другим людям. Не получение знаний и\или навыков, а именно чтение книг стало самоцелью. Тем более, что не все знания, которые дают книги, можно превратить в навыки в реальном мире. Часть из потенциально возможных еще отсеивается тем, что знания вообще никак и никогда не используются. Да, это было открытие: прочитаное сравнитнльно большое для окружения количество книг не превратилось в преимущество. Книги не те? Ну,може хотя бы несколько должны были бы оказаться "теми"?

Сейчас это явление из-за невостребованности информационного "послеследа" превратилось в антитезу -  довольно бессмысленное собирательство всего, что попадает на глаза. Иногда я забываю последнюю страницу\ главу прочитанного. "База данных" (скорее чулан), которая в каком-то виде существует в моей голове и обеспечивает "доступ" к информации, работает довольно своеобразно. Главные методы получения усвоенной информации - по ассоциации с происходящим вокруг\всплывшим в разговоре, и то, что было повторно пройдено\часто использовалось в последнее время. Пример - часто используемые формы обращения программного кода к сторонним библиотекам и стандартным средствам программного языка ("public void", "public static void main(String[] args)" ...). Кстати, именно поэтому считаю потерей метод  только чтения кода при обучении - в книге или видео. Руки, которые набирают код, помагают запомнить его как навык. Вот если бы задания в Codeacademy были бы посложнее...

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

Некоторое время я задумался над тем, куда девается мое время. Да, работа плюс дорога к ней и обратно - допустим восемь плюс два. Да, внимание к семье - допустим, пять. Да, сон - часов шесть. Но существовало некоторое количество времени перед сном, которое просто исчезало. Телевизора нет. Сериалы и фильмы из интернета смотрю - изредка. Планы по самообразованию медленно "прогибаются" по срокам, растягиваются. И это не смотря на то, что есть порядка трех часов перед сном - в тишине, когда никто не беспокоит. Куда девается мое время? Оно просто проходит. Я  не успеваю!

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

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

Тоесть, у меня зависимость. Не алкоголь и не курение, а инфотейнмент.

понедельник, 3 июня 2013 г.

Functional Programming Principles in Scala от Coursera

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

Неожиданно, потому что из-за неорганнизованности часто опаздывал со сдачей, за что мне заслуженно снимали баллы. Так я из 10 за задание получал 8, а иногда и 6 баллов. Для того, чтобы получить сертификат с отличием, надо было набрать за все 6 заданий 48 баллов и выше. Мой же результат - 43,98 балла.
Все, что кроме двух сотых, снятых с меня за стилистически неправильное использование изменяемых (mutable) коллекций в задании с анаграммами - это баллы за опоздание с заданием.
Возможно, поэтому сертификат у меня все-таки с отличием, хотя и набрал я по сути 73, а не нужные 80%.

Баллы считались автоматически: задание отсылалось на сервер из консоли Scala. Потом сервер, видимо прогонял встроенные в задание тесты (может быть, даже поставляемые с заданием юнит-тесты), проверял на соответствие стилю, и обновлял оценку в "онлайновом кабинете" - с пояснениями в виде лога во время проверки.

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

Я очень скромно оцениваю свои успехи в функциональном программировании и в языке. Мне еще учиться и учиться. Поэтому я даже в профиле на linked.in не обозначил знание функционального программирования и Scala. Не хочу разочаровывать и позориться.

Все собираюсь пересмотреть еще раз весь курс, а до этого прочитать книгу по языку.
Но это будет непросто - у меня очень мало времени, ведь кроме работы у меня еще дома маленький ребенок, и два новых онлайновых курса - Стенфордовский "Machine Learning" на той же Coursera, и курс по MongoDB от его создателей - M101J MongoDB for Java Developers.

Курс по машинному обучению оказался довольно сложным и объемным, и я уже не верю, что его осилю - пусть и до первого июля, на что дается возможность. Видимо, ввиду сложности курса за опоздание снимается только 20% баллов и дается больше месяца на доздачу - вотличие от курса по функциональному программированию, который снимал баллы ежедневно за опоздание. Чувствую, это надо неплохо так засесть. Возможность, вроде как и есть, но у меня ощущение, что времени сосредоточиться у меня не будет.
Еще думаю, что курс от Яндекса по тому же предмету будет попроще - русский у меня значительно лучше английского. Мой английский, пусть и уровня Intermediate+, все же немного неудобный для такой сложной темы.

Со вторым курсом - по MongoDB - у меня получше. Я пока 2 из 7 заданий сдал вовремя и на максимальный балл. На очереди третье задание с дедлайном меньше суток.  Кроме того, видео лекции попроще, и тесно связаны с домашним заданием - в отличие от курса по Scala, в котором мне приходилось дополнительно гуглить и учиться.
Крайний срок в понедельник не 12 ночи, а 3 часа ночи\утра уже вторника.
Так что у меня есть еще 3,5 часа на данный момент.
А еще, как обычно, не все лекции досмотрены, и по заданиям конь не валялся.
Убегаю...

Update: Успел сдать последнее задание за минуту час до дедлайна :-)

Update: "отличие" для диплома от Cousera все-таки сняли. Удобно, что диплом был онлайн :-)

четверг, 25 апреля 2013 г.

Неудачнеги?

Недавно прочитал (и никак не могу найти где) о том, что в отличии от ауотсорсеров, которые зарабатывают для страны порядка миллиарда долларов (на 2011 год, вроде бы), заробитчане пересылают домой порядка трех (на самом деле больше - раз, два). И пока есть такие выехавшие - можно перебиться и без аутсорсинга.
И не то, что стало обидно, но сегодня подумал сравнить эффективность.
Согласно последним (за 2012 год правда) оценкам суммарное количество сотрудников пятерки самых крупных компаний-аутсорсеров порядка 10 тысяч, топ 25 - порядка 20 тысяч. Ну, пусть суммарное всех, вместе с неучтенными, будет 100, даже 200 тысяч (нереально, по-моему).
Согласно другим данным, на заработки выехало около полтора миллиона и больше. Я думаю - порядка трех миллионов.
Тоесть, заробитчан по количеству в раз 10-15 больше, а пересылают они домой только раза в три больше чем аутсорсеры легально наколбасили.
Конечно, в этом, наверное особой заслуги ит-аутсорсеров нет - коньюнктура растущего мирового рынка. Но пока что один  парень сидящий дома в Украине обеспечивает денежный поток в страну в разы больше, чем уехавший на заработки.
И семьи из-за этого не разваливаются, в отличии от заробитчан.

воскресенье, 21 апреля 2013 г.

очень упрощенный конспект книги о Spring Data

Долго сомневался, но все же решил опубликовать краткий конспект того, что вычитал в книге Чтение он не заменит, опыта не добавит, но общее представление о том, что в книге способен дать.
Итак, тезисно:
  1. Причины появления NoSQL: увеличение количества данных, соотношение структуры домена со структурой базы данных (графы как графы, key-value как key-value)
  2. Виды NoSQL баз: key-value (похоже на hashtable), column family (как key-value но value это column), document (структурированные данные, например XML или JSON) и graph (графы, модель данных содержит узлы-nodes и ребра-edges)
  3. Atomicity Consistency Isolation Durability (ACID) в RDBMS заменяется Basically Available Scalable Eventually consistent (BASE) для NoSQL
  4. JPA не подходит как основа общего интерфейса для NoSQL - его спецификация завязана на Object Relational Mapping.
  5. Каждое из хранилищ Spring Data содержит не только одинаковую структурную модель, но и отличия в свойствах и возможностях
  6. Spring Data работает на основе декларативного маркерного обозначения имен элементов архитектуры (классов, интерфейсов, полей данных, методов). Выбор конкретного хранилища определяется в конфигурации приложения (например, @EnableJpaRepositories или jpa:repositories base-package="..." если используется XML-конфиг).
  7. Методы интерфейса для работы с определенным доменным класом (например, Client) определяются или полностью пользователем (через запрос @Query для выполнения), или путем расширения интерфейсов Spring Data.
    Repository - простой маркерный интерфейс для пометки для Spring Data определяемого пользователем репозитория.
    CrudRepository расширяет Repository основными методами объектно-реляционной модели - поиском, сохранением и удалением сущностей.
    PagingAndSortingRepository расшираяет CrudRepository методами распределения по страницам и сортировкой.
  8. Пользователь может сам определять новые интерфейсы для репозиториев согласно своему представлению архитектуры приложения. Для этого интерфейс необходимо пометить как @NoRepositoryBean если интерфейс будет наследоваться от существующего интерфейса репозиториев, или создать свой собственный интерфейс и его реализацию согласно соглашения по именованию (например, ClientRepositoryCustomization и ClientRepositoryCustomizationImpl)
  9. Имена методов интерфейсов репозитория должны соответствовать верблюжемуРегистру и основываться на запроектированных шаблонах чтобы Spring Data их распознал, или полагаться на прилагаемое Query.
    Например,
    Client findByFirstname(String firstname) - найти клиента Client по его полю данных firstname,
    List findByAddress_ZipCode(ZipCode zipCode) - найти список клиентов по почтовому коду, который содержит его поле данных - адрес address,
    List findByEmailAndLastname(EmailAddress email, String lastname) - найти список клиентов по почтовому адресу и фамилии.
    Если держаться за конвенцию именования, то Spring Data генерирует нужный запрос Query.
  10. Spring Data поддерживает интеграцию с Querydsl. который позволяет обобщенно составлять запросы к JPA, Hibernate, JDO, native JDBC, Lucene, Hibernate Search, и MongoDB. Похоже на попытку сделать нечто подобное LINQ, но для java. Не понравилось - Eclipse не подхватил даже с танцами, Intellij Idea разобралась, но осадочек остался. По-моему, шаг с отдельной автогенерацией запросов не удобный. Вот разве что если запросов в проекте много, и их все надо поддерживать в удобочитаемом виде?
  11. MongoDB - хранилище документов в формате BSON - бинарного расширения JSON.
  12. Neo4J - база данных графов, состоит из вершин и их отношений.
  13. Redis - key-value база данных.
  14. Spring Roo - проект SpringSource для управления кодом и его созданием.
  15. Spring REST Exporter - проект SpringSource для доступа к основанным на JPA репозиториям через REST-интерфейс.

пятница, 15 марта 2013 г.

Это приятное чувство "а я ведь говорил"

Вспомнилось.

На одной из прошлых работ столкнулся с любопытной ситуацией различия работы серверов баз данных MySQL и MS SQL.
Вкратце и упрощенно, клиенты часто получали неприятность отказа программы при использовании определенных тяжелых запросов с помощью внутренней системы поиска.
Внутри все сводилось к запросу вида
SELECT DISTINCT [smthng1] FROM (множество_1) WHERE [smthng2] NOT NULL AND EXISTS (множество_2)
Не буду углубляться в сложности выборки обоих указанных множеств - это не существенно. Сложные. Поля из нескольких таблиц.

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

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

Разбор полетов показал, что эффективнее разбить запрос на две части, и с помощью java перебрать совпадения множеств, чем ждать пока MySQL обработает EXISTS.
Что ж, решение было внедрено и отправлено клиенту.

Но внезапно оказалось, что у клиента MS SQL и его проблему патч не решил.
Ощущение собственной правоты подогрело душу.
Клиент своим отказом отсрочил полноценное решение проблеммы.

Но это не было концом истории.

Дамп базы MS SQL для препарирования мы все-таки получили.
Но потом оказалось, что никаких проблем с EXISTS у запроса нет.
Недоразумения для MS SQL связаны с DISTINCT.

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

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

Выводы, они же советы.

  1. Добивайтесь максимального совпадения рабочей среды и среды разработки.
  2. Осторожно с  EXISTS в MySQL.
  3. Осторожно с DISTINCT в MS SQL.
Дальше надо бы подкрепить примерами на тестовой базы на чистом и свободном проекте, но уж очень лень. "Я просто оставлю здесь это"...

вторник, 26 февраля 2013 г.

Кайдзен

Давно знал (слышал?) о японской методике "кайдзен" - постоянного улучшения (в работе, производстве, деятельности, продуктивности). При этом представлял ее подобием постоянного и безсонного муравьиного труда и забот.

Но недавно увидел статью с упоминанием об длительности применения данной методики.

Одна минута.

И это все изменило.

Не полчаса в месяц, или семь минут в неделю, а одна минута, но каждый день.

Ведь меняется главное - отношение к процессу самоусовершенствования.
У меня ведь сейчас как?
Вот приходит мне в голову мысль о том, что (допустим) знания о Hadoop, или HTML5, или еще о чем-то красивом и воздушном сделают меня лучше как программиста. Потом я, допустим, нахожу на Амазоне  (или еще где) книгу с наивысшим рейтингом по выбранной теме. Потом покупаю такую книгу, или даже нахожу и скачаваю из свободного доступа через Гугл. Пусть даже не последнюю редакцию, а плохой скан кривого перевода перевода предыдущего издания. Дальше книгу надо читать, полученные знания пытатся где-то применять. Я пролистываю книжку, и откладываю чтение на потом.
И все. Дальше книга теряется во софбственной файлопомойке. Я ведь столько времени потратил чтобы заполучить возможность себя улучшать в выбранном вопросе, а прочтение и освоение книги это дело не одного часа, дня или даже недели.
Более того, часто есть еще более клинический случай, где на месте книги - открытая в отдельной закладке многостраничного броузера статья (часто даже не очень и длинная).
Но общий момент сознательного выбора длительного занятия самоусовершенствованием тормозит. И статья висит днями.

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