Обсуждают в коллекции

Фильм «Фонтан» 81


Тёрка в тагах


Сейчас обсуждают

Друзья

Его(2) Общие(0) Хотят дружить(0)


  • Atrinax

  • Blackoff

  • login

  • login

  • login

  • login

Враги

Его(0) Общие(0) Обиженные(1)

На странице: 24 48 96

Большая Тёрка / Мысли /

Личная лента

фото

olegchir

ыыыть!
Портрет жителя
Досмотрел Tyranny.
Минусы: очень короткая
Плюсы: всё остальное
Нашел себе еще одного настоящего врага. Это Александр Жаров, руководитель Роскомнадзора. (Есть еще два: Грибов и Колесников из Литреса).

Существует ли какой‑нибудь относительно законный способ превратить жизнь вполне конкретного человека в ад?
«Самая худшая ошибка, которую ты можешь совершить — это думать, что ты живешь, пока ты просто спишь в зале ожидания жизни.»

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

И вот что я думаю, пора проснуться. Как можно скорей. Иначе наступит момент, когда уже не получится этого сделать
Лытдыбр, дневничок!
Целая неделя без физнагрузки.
Очень странное ощущение. Раньше думал, что примерно так должна ощущться жажда вампиров из книжек.

Все‑таки обладание живым человеческим телом — это жуткий наркотик. Как только начинаешь чувствовать, что оно есть, по зависимостям приезжает куча странных вещей, связанных с его обслуживанием. Нужно правильно есть. Нужно его нагружать. Правильно...
Читать далее
... распределять отдых, иначе скорости восстановления батарейки не хватит. Нужно постоянно смотреть и участвовать в чем‑то новом из «физического мира», иначе выведенный из состояния потока «взгляд» тут же замыливается.

Из полезных вещей наблюдаю увеличение реакции и объема памяти. При условии что батарейка не села и башка не замусорена большим количеством мелких недо‑обработанных сообщений. Можно запоминать то, что раньше отправлялось прямиком в «несрочное, неважное». Можно обрабатывать более серьезные стрессовые ситуации при общении с людьми (т.е. вместо стратегии «черной дыры» общаться как минимум как "идеальное зеркало").

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

Jocker 2016 Spb

Java

На пршлой неделе прошел Jocker - главная Java-конференция в России.

Надо бы написать какой-то отзыв, но что в нем сказать?
С точки зрения участника, всё было около идеально.

Была куча интересных и полезных мне непосредственно для работы докладов (послушал? а теперь - пойди и сделай).

Были дискуссионные зоны, на которых я вытряс из докладчиков все интересующие меня вопросы.
В том...
Читать далее
... числе, там был авторы ByteBuddy, чувак из Jigsaw, живой и настоящий CTO Azul, итп

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

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

Предоставилась возможность вживую встретиться со знакомыми, контакт с которыми обычно есть только через фейсбук. Например, с Шипилевым, Федоровым, Максом Буйлиным (оказалось, мы снова работаем в одной компании), Стасом Домбровским, и многими другими, перечислять всех не имеет смысла.

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

Вот это самое главное, что было.

Ну и еще по мелочи:

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

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

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

(Там же произошел единственный видимый глазу участника факап за всё время - первые пришедшие в ресторан люди сожрали всю еду - он был оперативно разрулен организаторами.)

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

Как-то так.

Большое спасибо команде организаторов, и в особенности (так получилось) Алексею Федорову и Ивану Долгову за героический подвиг в создании такого крутого события.

Надобно повторить. На следующий год.

Клавиатура под хоткеи

Java

Хочу замутить клавиатуру под хоткеи в IntelliJ IDEA CE.

Для этого нужно три вещи:
1) Большие длинные в длину клавиши, чтобы туда влезала пара слов, например: «find class»
2) Отдельные контакты на каждую клавишу (чтобы располагать их как удобно)
3) Контроллер, который позволит каждой клавише быть «программируемой» — т.е. посылать не непосредственно свой код, а сочетание клавиш

(На...
Читать далее
... корпус наплевать, корпус я выпилю лобзиком из старого телевизора. На совместимость с IDE тоже наплевать — это опенсорц детка, впили свои хоткеи сам.)

Подскажите, где найти все эти компоненты?

Попрощался с ВТБ24.

Попрощался с ВТБ24.

Хроники пикирующего бомбардировщика:
1) Пытаюсь оплатить довольно большую сумму. Приходит сообщение на мобильник: лимит карты не позволяет. Веб-интерфейс утверждает, что на карте нет никакого лимита.
2) Хочу выпустить одноразовую временную карту для онлайн-покупок, но не нахожу такую опцию в веб-интерфейсе. В Альфе постоянно юзал эту функцию (она платная, но не безумно платная),...
Читать далее
... тут же её либо нет вообще, либо она запрятана в какое-то интуитивно-непонятное место.
3) Звоню в поддержку. Автомат долго нудно 3 раза читает голосовое меню (я успел поесть), прежде чем сам переключается на специалиста.
4) Специлистка говорит, что у меня выключен 3-D Secure, поэтому такой вот лимит. Не помню, чтобы я его выключал именно на этой карте, ну да ладно. Почему веб-интерфейс об этом не знает - неясно. Специалистка посылает меня включать 3-D Secure или в банкомат, или живьем в офис. По телефону это сделать нельзя.
5) Ни один из банкоматов ВТБ24 не может включить 3-D Secure. Опция такая в банкомате есть (привязка к телефну), после её выполнения банкомат говорит "ждите когда придет СМСка с подтверждением", и СМСка не приходит НИКОГДА.
6) Офисы работают, начиная с 10 часов и заканчивают тоже рано, поэтому в обычные дни я попасть в них просто не могу - ибо работаю в это время на работе. Воскресенье - единственный день, когда я могу свободно перемещаться по левым делам днём.
7) Последний гвоздь в гроб ВТБ24 вбивает себе с размахом и от души - НИ ОДИН офис не работает в воскресенье! Ни один офис в городе Новосибирске, по крайней мере.

Пришлось горестно вздохнуть, и наличкой вывести совершенно все бабки со счёта. (Через несколько разных банкоматов - мало ли какие там еще скрытые лимиты.)
Полученные бабки были перенесены через дорогу и сгружены на свеженькую золотистую карту Сбербанка, а карточка ВТБ24 — заблокирована.

Прощай, ВТБ24.
Об уходящих или хорошо, или ничего, поэтому скажу хорошее: иногда бывали моменты, когда ты работал. Те моменты, когда при блокировке карты вместе с картой не блокировались вообще все имеющиеся на счете деньги на две недели (пока перевыпускается карта). И тогда с помощью тебя можно было что-то сделать. Спасибо тебе за эти редкие волшебные моменты. Rest in peace.

Мавеновое

Java

Закончилось терпение использовать джаваговно, идущее с Мавеном из коробки. Написал плагин для мавена, добавляющий новый lifecycle phase (в котором дергаю другие плагины — типа агрегация, в правильном порядке). На очереди свой packaging. Оказывается, это весьма просто и удобно.

Зачем все эти годы я изучал, как пердолить все эти убогие поделия? Своё поделие пишется быстрее и проще!

Идея для компьютерной игрушки

Проблема с процедурно сгенерированными играми (тип No Man's Sky) заключается не только в однообразии комбинаций, но и в их неестественности, сильно подчеркивающей это однообразие.

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

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

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

Т.е. мы расставляем какие-то реперные точки и смотрим: ага, игрок накопал 9000 кристаллов и идет в магазин менять их на космический корабль. Если эти события связаны (часто повторяются в связке?), то наверное стоит сгенерить квест, в котором нужно получить корабль, и рядом сгенерить пещеру с кристаллами. Результат совпадет с мыслями игрока о том, каким должен быть "настоящий" мир и это добавит ему реалистичности.. удобности?

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

Т.е. нам нужно:
- Базовый мир-песочница, который как-то может генерироваться
- Регистратор паттернов (точки для отслеживания допустим захардкожены, и поверх них нейросетка)
- Геймификатор паттернов (набор вещей как подгадить человеку, наверное, проще сочинить человеку же xD)
- Репликатор паттернов (из того что мы что-то задетектили неочевидно, как это повторить)
- Бутстрап контент для того, чтобы спровоцировать игрока на действия. Например, короткая single player игра с сюжетом
- Собственно человек, который своими дальнейшими действиями создаст контент

И да, я понимаю, что это multi-dimensinal space, куча процессоров и терабайты RAM :)
Когда-нибудь на каждой микроволновке будут терабайты RAM. А готовиться надо уже сейчас.
Смотрим: в тренде так называемая виртуальная реальность с очками Oculus Rift, HTC Vive итп - компутеры для такого железа стоят по 150 тыщ рублей. На те же деньги можно купить комп, который потянет вполне такие некислые вычисления - всё еще не нормальный анализ, но для простенького моделирования должно сгодиться.
Посоны, проблема с отладчиком в Go+Windows решилась.
Оказывается, Delve теперь работает на Windows.
(говорят, он глючный, но это ведь лучше, чем совсем ничего)

1) go get -u -ldflags -H=windowsgui github.com/derekparker/delve/cmd/dlv
2) добавляем полученный экзешник в PATH.
3) Устанавливаем IntelliJ IDEA
4) Добавляем репозиторий плагинов: ...
Читать далее
...https://plugins.jetbrains.com/plugins/nightly/5047
5) Устанавливаем плагин с именем Go, дескрипшеном «Support for Go programming language.» и урлом «https://github.com/go‑lang‑plugin‑org»
6) Всё просто работает

Список книг и других материалов на досужее прочтение

ЖЖ - это такой блокнот, поэтому напишу сюда заметку на память.

Замечания и предложения приветствуются.

Нужно развиваться, иначе пиздец.
Соответственно, нужно определить, как изучать приоритетные для развития вещи.

Совершенно очевидно, что это три вполне конкретные вещи:
- Языки программирования: теория + практика дизайна и конструирования
- Исполнение во времени: concurrency, темпоральная

...
Читать далее
...

логика
- Железо современных серверных компьютеров: как работает проц, память, итп - и как оно на практике связано с Java/C++

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

- Общее стартовое направление: минимальный набор фич ООП по Benjamin Cuire Pierce:
* Dynamic dispatch
* Encapsulation or multi-methods
* Subtype polymorphism
* Object inheritance or delegation
* Open recursion



Конкретика:

- Образцовая, но невыполнимая, подборка:
http://alexott.net/en/fp/books

Практика
========

- ООП
* A Theory Of Objects - Abadi, Cardelli

- Вкус FP для чайников:
* О Haskell по-человечески - https://www.ohaskell.guide/
* Real-World Functional Programming: With Examples in F# and C# - Tomas Petricek, Jon Skeet
* SICP - https://mitpress.mit.edu/sicp/full-text/book/book.html
* HTDP - http://htdp.org/2003-09-26/Book/curriculum-Z-H-1.html…
* Pure functional data structures - Chris Okasaki

- Concurrency
* JCIP
* Seven concurrency models in seven weeks
* Блоги всех причастных

- Дизайн виртуальной машины
* Java standards
* Oracle JRockit: The Definitive Guide - Marcus Hirt, Marcus Lagergren
* ???
* Блоги всех причастных

Теория:
=======

- Теория типов
* Types and Programming Languages - упомянутый Benjamin Cuire Pierce, (http://www.cis.upenn.edu/~bcpierce/tapl/
* Proofs and Types - Jean-Yves Girard, Yves Lafont and Paul Taylor -http://www.paultaylor.eu/stable/Proofs+Types
* Hindley, Seldin - Lambda-Calculus and Combinators - An Introduction -http://www.cambridge.org/gb/knowledge/isbn/item1175709/…
* Intuitionistic Type Theory - Martin-Löf (помойму это уже перебор)

- Теория моделей
* Model Theory : An Introduction - David Marker
* A Shorter model theory - Hodges
* Mathematical Logic - Cori, Lascar

- Теория категорий
* Conceptual Mathematics: A First Introduction to Categories - Lawvere, Schanuel - http://www.amazon.com/Conceptual-Mathematics-F…/…/052171916X
* Category Theory - Steve Awodey - http://www.amazon.com/Category-Theory-Oxford-L…/…/0199237182
* Categories for the Working Mathematician - Saunders Mac Lane -http://www.amazon.com/Categories-Working-Mathe…/…/0387984038
* Physics, Topology, Logic and Computation: A Rosetta Stone - Baez and Stay - http://math.ucr.edu/home/baez/rosetta.pdf
* An Introduction to n-Categories - Baez - http://arxiv.org/pdf/q-alg/9705009v1.pdf
* Algebra - Serge Lang - http://www.amazon.com/Algebra-Graduate-Texts-M…/…/038795385X

- Гомотопическая теория типов (HoTT)
* https://homotopytypetheory.org/book

- Темпоральная логика
* The temporal logic of reactive and concurrent systems - A. Pnuelli
* Linear Temporal Logic Symbolic Model Checking - Kristin Y. Rozier
* Logic in Computer Science: Modelling and Reasoning about Systems - M. Huth, M. Ryan
* Model Checking - E.M. Clarke, O. Grumberg, D. Peled
* Что угодно про Probabilistic Computation Tree Logic (PCTL)
* Что угодно про Propositional Linear Temporal Logic (PLTL)

Coming out

Java

Небольшой обзор статьи в новый тэг ‪#‎кунсткамера‬
Источник: https://habrahabr.ru/company/mailru/blog/307168/


> Эта проблема — ещё одна трещина в Столпе Наследования.

Это трещина не в наследовании, а в башке автора


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

...
Читать далее
... побочным эффектом.

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

Соответственно, сама система должна быть спроектирована для увеличения повторного использования. А не говнокод которым ты это всё замоделил. Если ты моделируешь говно, то на выходе всегда получается говно, а на Java или Common Lisp оно получится - разница не чтобы сильно большая. Чтобы система была правильно спроектирована нужен хороший разработчик систем, например выделенный системный аналитик или архитектор.

Аналитика у человека не было, сам он не то чтобы гений проектирования, поэтому подпер убогую идею костылями на С++ и Java, и плачет теперь что говно почему-то С++, а не его подход к решению задачи.

Т.е. в проблеме поиска сотрудников (аналитиков, архитекторов) обвинили ООП. Хм, отличная отмаза. На менее подготовленного читателя даже проканало бы, но у нас в Инквизиции за такое сразу же сжигают на рее.

Кстати, все вопросы касательно экономики говна, заставляющей писать софт без аналитиков и анализа, т.е. на самом деле - на все актуальные вопросы современности вообще - отвечает вот эта статья:http://2k.livejournal.com/520078.html


2)
> Проблема с ОО-языками заключается в том, что они тянут за собой всё своё окружение. Вы хотели всего лишь банан, но в результате получаете гориллу, держащую этот банан, и все джунгли впридачу.
> Джо Армстронг

В 1986 году Джо Армстронг сделал Эрланг. Оперативная память стоила очень дорого, и Джо пришлось капитально попотеть, чтобы сэкономить хоть немного. И процессоры были очень медленные, анализ контекста в компиляторе занимал очень много вычислительных ресурсов.

А потом прошло 30 лет.


3)
> Я в течение десятилетий программировал на объектно-ориентированных языках.
> private ArrayList a = new ArrayList();

Вместо private List используется private ArrayList. Абстрагирование, полиморфизм подтипов - не, не слышали. Загримированный под матерого ООП кодера, Штирлиц никогда не был так близок к провалу.


4)
> Возьмём следующий базовый класс
> public class Array { private ArrayList a ...

Знаете, чем хороша Java? Тем что в ней, к счастью, нет такого базового класса.

Автор написал поверх класса List прокси с названием Array (sic!), и запроксировал в нем метод add(element). Потом запроксировал addAll, в котором полностью проигнорировал тот факт, что addAll и add это не какие-то произвольные операции, а жестко связанные. В addAll уже нельзя использовать оригинальный add, нужно использовать свой прокси. После столь свинского с собой обращения, всё похерилось. Конец был немного предсказуем, верно?


5)
> Мы должны работать только с интерфейсом. Это раздражающая тенденция...

...раздражающе мешающая писать говнокод, ясно.


6)
> Идея иерархии “общее/частное”...
> Каждый раз, создавая новую компанию, мне приходится решать проблему, связанную с выбором места для документации компании. Нужно ли мне сделать папку Документы, а внутри неё создать папку Компания? Или мне нужно сделать папку Компания, а внутри неё — Документы? Оба варианта рабочие, но какой из них правильный? Какой лучше?

Вы действительно хотите сделать лучше? Тогда вот мой совет как вашего адвоката:

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


7)
> иерархия “общее/частное” не работает. Так для чего тогда хороши иерархии?
> Для включения (Containment).

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

С 1 сентября 1960 года (или когда там в продакшене появится ООП), писать на нем разрешается только отряду Мстители под руководством отца Тони Старка. (Marvel не похоже на людей, свято блюдущих хронологию)


8)
> Инкапсуляция, второй обрушившийся столп

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


9)
> The Reference Problem
Автор сам придумал этот термин?
Я вижу только https://en.wikipedia.org/wiki/Reference_class_problem
и это вообще из статистики, а не программирования


10)
> Если ссылка на объект передаётся конструктору объектов, то он кладёт её в приватную переменную, защищённую инкапсулированием. Но переданный объект небезопасен! Почему? Потому в какой-то части нашего кода содержится указатель на объект, то есть код, вызывающий конструктор. Но он ДОЛЖЕН иметь ссылку на объект, в противном случае он не сможет передать её конструктору.

Автор скорей всего как бы хотел сказать о паттернах fluent interface + builder, примененных в concurrent случае? Что кроме кроме религии запрещает ему сделать все доступы безопасными?


11)
> Конструктору придётся клонировать переданные объекты.

А, автор решил нам продать defensive copying! Об этом рассказывают на первом курсе универа на предмете "программирование на языке высокого уровня" (ПЯВУ). Так что, кто не пробовал поступить даже на первый курс, или никогда не читал классические тексты по Java, или википедию, или вообще ничего, эта информация безусловно будет вам очень полезной.

> в лучшем случае клонировать их бесполезно, а в худшем — невозможно. В каждом из мейнстримовых ОО-языков существует такая проблема. Прощай, инкапсуляция.

Ну а невозможно это потому что? Да черт его знает. Я уже задолбался писать этот комментарий, если честно :-)


12)
> Полиморфизм, третий обрушившийся Столп
> Куда бы они не отправились, он был с ними, но всегда на вспомогательных ролях.

Барбара Лисков и Джанет Винг, Андрей Александреску и Герб Саттер, Роберт "Uncle Bob" Мартин, Девид Хейден и Бертранд Мейер, и другие, менее популярные товарищи, плачут кровавыми слезами и крутятся в постелях как вентиляторы.


13)
> Блог компании Mail.Ru Group

Мэйлру капец. Ясно. Хорошая когда-то была компания.



В Новосибирске уже ночь, надо с этим заявязывать.

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

Coming out

Java

я, к сожалению, не гей, поэтому придумал сделать coming out дргуим способом, а именно — расписаться в безграмотности :3

непонятно, как хорошим образом сделать глобальные инварианты для блока кода (в concurrent случае)

например, мы хотим проверить, что на протяжении всего исполнения произвольного блока кода, должно выполняться условие «x > 0».
А этот x — это shared mutable state, и его может...
Читать далее
... поменять другой поток, поэтому его недостаточно проверять только на входе метода, нужно проверять каждый чекпоинт («каждую строчку»).

Но ведь в джаве нет такой фичи. Можно AOPить целиком методы, но не строчки (а что там генерит компилятор на самом деле вообще не видимо глазу чтобы сказать, что вот на этот минимально неделимый кусок intermediate representation я хочу повесить проверку).

и даже для куска IR у нас может случиться тупо мисалайнмент (direct byte buffers на jdk > 6?), и код превратится в фарш (кстати, кто в теме, прокомментируйте про мисалайнмент в джаве, когда случается?)

Можно навелосипедить это на лямбдах (каждую строчку обернуть в метод) но по понятным причинам это не вариант. Во‑первых, оптимизация (заинлайнит или не заинлайнит? в попу или в рот?). Во‑вторых, ну просто задолбаешься писать всю эту писанину вручную

Можно запустить проверку в отдельном треде — тоже ведь не вариант, там будет происходить черти что. Да и всё равно мы не можем убить тред по своему желанию (если мы не конченые отморози — тогда можем), и нужно будет подпихнуть в целевой тред точки останова.

Ну можно «макросами» переписать сам исходник и реально обернуть каждую строчку в проверки перед сборкой. Или переписать в байткод?

Как это делают правильные, накачаные русские java мужики?
УСЛОВИЕ ЗАДАЧИ:

- Есть очень популярный веб‑фреймворк, которым пользуется половина Новосибирска.

- Вызов ajax там таков, цитирую имена параметров:
m, mp, e, f, sc, dt, wr, ch, bh, pre, bsh, ah, sh, fh, coh, ep, dep, rt, ad, sp, async, tr

Пример использования:
var wcall = Ajax.get({ u: '${callbackUrl}' + '${args}' });

Например, параметр «ад» — это не то, что вы подумали, а
...
Читать далее
...
allow default
a boolean flag which indicates whether to allow the default behavior of the HTML element which listens for the event. For example: clicking on Ajax checkbox should allow the default behavior to actually check the box.


Заметим интересную особенность: параметр u, как вы видите, существует, а в списке выше его нет. Это потому, что в официальной документации он проебан. Типа, пасхалка.

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

А Wicket не умеет работать ни с долгоживущими процессами, ни с асинхронными обновлениями со стороны сервера. Причем, там так всё от души прибито гвоздями в Викете, что фиг оторвешь. Если просто запустить долгоживущий SQL запрос прямо в...
Читать далее
... контроллере викета — весь веб‑интерфейс виснет намертво.

Пришлось написать что‑то типа Task Manager в шиндовс. Каждый отдельный запрос кидается в Квазар (в наидефолтнейшей конфигурации), а внутри файбера уже выполняется SQL‑запрос через JdbcTemplate. Как только файбер что‑то посчитал — результат кладется в гуавовский кэш. А викет потом с помощью AbstractAjaxTimerBehavior постоянно мучает сервер и смотрит, появилось ли чего в кэше. В кэш также кладется JDBC Statement, чтобы даже если никакого результата еще нет, пользователь мог оборвать запрос.

Квазар подключается через добавление агента в томкате.
Документация по процессу подключения там какая‑то переусложненная, на деле достаточно кинуть в lib томката три джарки: comsat‑tomcat‑loader‑7.0.jar, guava‑19.0.jar и junit‑4.12.jar, и потом в context.xml прописать одну строчку:

Интересно, что начиная со Spring 4 класс SimpleJdbcTemplate дропнули (перед этим на протяжении Spring 3 он был deprecated). Но новый класс JdbcTemplate не умеет в состояние, соответственно я не могу оборвать слишком долгий SQL запрос посередине! Пришлось пойти вручную напердолить аналог удаленного SimpleJdbcTemplate. Спрашивается, зачем было удалять? Длинных SQL запросов больше не существует, 640 килобайт хватит всем?

split testing, a/b testing, a/b тестирование, a/b‑тестирование

(Анонс первоначально опубликован на Хабре и Лоре)

В четверг, 7 июля, в 20:00, в петербургском офисе Oracle состоится встреча CodeFreeze с Романом Поборчим, экспертом по Java, качеству поиска и A/B тестированию. Тема встречи — грабли A/B тестирования.

Участие — бесплатное. Количество мест ограничено, необходима ...
Читать далее
...регистрация по ссылке.


О докладе


A/B-тестирование (англ. A/B testing, Split testing) — метод исследования, суть которого заключается в том, что контрольная группа элементов сравнивается с набором тестовых групп, в которых один или несколько показателей были изменены, для того, чтобы выяснить, какие из изменений улучшают целевой показатель. Примером может служить исследование влияния цветовой схемы, расположения и размера элементов интерфейса на конверсию сайта.

Википедия


Все изменения на вашем сервисе проходят через эксперимент на пользователях. Вы выкатываете только то, что показывает значимое улучшение целевой метрики. Да, у вас есть целевая метрика. Да, вы всё знаете про статистическую значимость — ну или, по крайней мере, слышали о ней.

Так почему же целевая метрика вашего сервиса сегодня находится точно на том же уровне, что и год назад?

Один из возможных ответов состоит в том, что в систему проведения экспериментов вкрались ошибки. Роман расскажет о некоторых типовых проблемах, с которыми сталкиваются практически все, кто начинает экспериментировать над пользователями. Кроме конкретных проблем, доклад коснется индикаторов, следя за которыми можно заметить, что что-то сломалось. Если в вашем проекте есть A/B тестирование, то по результатам рассказа вам наверняка захочется внести в него какие-то улучшения.


О докладчике



Роман Поборчий окончил мат-мех СПбГУ в 1998 году. До 2004 года работал над Sun JDK, поучаствовал в релизах с 1.1.8 до Java 5. С 2004 по 2008 год работал в Intel, где также работал над реализацией Java, впоследствии выложенной в Open Source под именем Apache Harmony.

С 2008 по 2015 год занимался оценкой качества поиска в Яндексе, где, в частности, и приобрёл опыт в A/B тестировании.

С 2015 года сменил основной род деятельности и теперь занимается презентациями в IT. Участвовал в качестве консультанта по презентациям в подготовке Highload++ 2015 и РИТ++ 2016.


Место проведения

Петербургский офис компании Oracle:

10-я Красноармейская улица, 22А, БЦ «Келлерман», 2 этаж
(геометка в 2Гис)

Транспорт

  • от станции метро «Балтийская» — 10 минут пешком: сначала по Лермонтовскому проспекту, потом 100 метров налево по 10-ой Красноармейской.

performance, postgresql, optimization, Java

(Анонс первоначально опубликован на Хабре и Лоре)

В среду, 6 июля, в 20:00, в питерском офисе компании Oracle состоится встреча JUG.ru с Альваро Эрнандесом, экспертом по PostgreSQL. Тема встречи — особенности взаимодействия Java с PostgreSQL.

Язык встречи — английский. Участие — бесплатное. Количество мест ограничено, необходима ...
Читать далее
...регистрация по ссылке.


О докладе

Java — это язык для Enterprise разработки, можно сказать — Язык с большой буквы, и с шансами — самый популярный язык для работы с PostgreSQL. А задавались ли вы вопросом, действительно ли эта связка, Java с PostgreSQL, хорошо подходит для своей задачи, действительно ли оправдывает возложенные ожидания? Этот доклад представляет собой технический отчет об уровне развития PostgreSQL и Java, который ответит на следующие основные вопросы:


  • Может ли Java воспользоваться 100% производительности, предоставляемой PostgreSQL? Если нет, то где происходят потери? И что мы можем с ними сделать? Используются ли в PostgreSQL какие-то технические или архитектурные паттерны, которые могут ограничить производительность Java?

  • Можем ли мы из Java достучаться до совершенно всей функциональности, которую предоставляет PostgreSQL? И если нет, что от нас скрыли, и можем ли мы как-то справиться с этим на практике?



О докладчике



Альваро Эрнандес — 37-летний предприниматель в области информационных технологий, живущий в Мадриде (Испания). Он основал компанию 8Kdata и является её техническим директором. Компания 8Kdata занимается разработкой и исследованиями в области баз данных. Большую часть времени Альваро занимается разработкой проекта ToroDB — СУБД на базе PostgreSQL, которая совместима с MongoDB и может заменять её в уже существующих приложениях. Являясь увлеченным разработчиком, он также занимается распространением и популяризацией идей Open Source.

Альваро не только программирует на Java и является членом JavaSpecialists.eu, но также является отличным DBA, учителем, и часто выступает лектором на международных конференциях. Кроме того, он основал PostgreSQL Spanish User Group — одно из крупнейших сообществ этой тематики в мире, состоящее из более чем 550 участников.

Место проведения

Петербургский офис компании Oracle:

10-я Красноармейская улица, 22А, БЦ «Келлерман», 2 этаж
(геометка в 2Гис)

Транспорт


  • от станции метро «Балтийская» — 10 минут пешком: сначала по Лермонтовскому проспекту, потом 100 метров налево по 10-ой Красноармейской.

Особенности работы JIT-компиляторов в HotSpot JVM — встреча с Дагом Хокинсом, Санкт-Петербург

performance optimization, jug , hotspot, azul, jit , jvm , Java

Источники: Хабр, ЛОР

В четверг, 30 июня, в 20:00, в питерском офисе компании Luxoft состоится встреча JUG.ru с Дагом Хокинсом, JVM-инженером в Azul Systems. Тема встречи — особенности работы JIT-компиляторов в HotSpot JVM.

Язык встречи — английский. Участие — бесплатное. Количество мест ограничено, необходима регистрация по...
Читать далее
... ссылке.

О докладе

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

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

О докладчике



Дуглас Хокинс (Douglas Q Hawkins) — работает на должности VM Engineer в компании Azul Systems.

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

Три года назад Дуг перешел от разработки с использованием Java к работе непосредственно разработчиком JVM, и сейчас работает над ReadyNow! — специальной особенностью Zing Virtual Machine, разработанной в Azul, позволяющей виртуальной машине быстро запускаться и продолжать быстро работать, т.е. она решает проблему прогрева, тем самым помогая приложениям, которым нужна высокая скорость отклика. Zing в свою очередь — это специальным образом улучшенный рантайм для Java, предоставляющий консистентное время отклика с минимальным тюнингом GC и JVM, используя технологию сборки мусора без пауз C4 (Continuously Concurrent Compacting Collector), поддерживающую до 2 TB heap-памяти.

Место проведения

Петербургский офис компании Luxoft:
Бизнес-центр «Осень», Свердловская наб., дом 44, литера Я

Транспорт

  • Бесплатный автобус-шаттл «Теорема» от станции метро «Площадь Ленина»

  • Маршрутка К137

  • Автобусы 37 и 106 — остановка на пересечении Полюстровского и Пискаревского пр.


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

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

Пришлось мучить JAXB.

Классы из XSD генерятся вот такой штукой: maven-jaxb2-plugin. Она умеет в jaxb bindings, но как всех обмануть и подменить в bindings.xjc неймспейсы - я не придумал (может, есть способ?)

Но оказалось, что в интернетах есть плагин для плагина, который таки добавляет в заголовок сгенерированных классов нужную инфу: https://github.com/Siggen/jaxb2-namespace-prefix

Hey dougs! I herd you like generator plugins, so we put generator plugin into your generatior plugin, so you can plug generators while your generate plugins

Короче, он какой-то косой, и его действие не распространяется на тэги group, импортированные из другой xsd (ну или я не придумал, как это сделать).
Я хотел прописать bindings node, вдруг это хакнет систему. Но оказалось, что падла почему-то совершенно не понимает запросы типа //*[local-name()=РассветКоммунизма], и падает с ошибкой "ничего не нашлось". А если попробовать //* чисто для теста, оно падает с ошибкой "слишком дофига элементов, не справляюсь, их там больше 25!". Двадцать пять элементов хватить для всех (с). Короче, что за дерево оно там парсит ничерта не понятно, но учитывая что поиск по local-name падает, это явно не моя XSD.

И еще автор забил публиковать стабильные релизы лет 5 как, свежая версия есть только в Sonatype Snapshots.

Вообще там всего плагина - одна портяна на пару экранов. Наверное это как-то можно починить, но лень сейчас с этим пердолиться.

В результате, после МНОГОЧИСЛЕННЫХ попыток обрулить эту проблему разнообразными способами и костылями, пришлось предать общечеловеческие ценности и залить автосгенерированный package-info.java прямо в гит, добавив к нему в шапку еще один @javax.xml.bind.annotation.XmlNs вручную. Причем т.к. если положить _только_ package-info, оно начинает плакать "ой, я тут пытаюсь работать, а класс уже проаннотирован" и падает с ошибкой, пришлось еще навернуть эксклудов.
Кто дочитал до конца, всем синей изоленты.
К посту прилагается срач на Фейсбуке

Встретился сегодня с логгерами в Жабе.
Проблема: логгер работает, но ничего не пишет.
Заметка отвечает на вопрос - почему.

0) При старте вижу, что log4j запускается, но использует реализацию NOP, т.е. ничего не делающую. Привычным движением добавляю в мавеновские зависимости джарку бриджа slf4j-log4j... и не происходит ничего. Долго копаюсь в зависимостях, понимаю...
Читать далее
... что конфиг совершенно стандартный, и дело вероятно не в нем. Надо в thinking out of the box, а снаружи коробки у нас только Tomcat, JDK и операционка. Операционка явно не при чем, Томкат после тщательной инспекции - тоже не при чем, остается только JDK. И тут оказывается, что...

1) Крипто Про в своих зависимостях тащит commons-logging. (Понятно что истории, которые начинаются со слова "Крипто Про" ничем хорошим не продолжаются, так что можно вот прямо тут и закрыть эту заметку.) Так вот, Крипта требует положить джарку с commons-logging прямо внутрь JDK/JRE/lib/ext, Карл!. Иначе ничего не работает. То есть, оно зовет логгер прямо из другой джарки внутри jre/lib/ext, поэтому перенести зависимость на commons-logging из JDK в war-файл нельзя, это тупо не заработает. А Другой софт такого подвоха не ждет, и начинает писать логи куда попало. У меня отвалились все логи. Предположение в том, что оно не читает мое log4j.properties (единый файл на весь проект), и теперь нужно заставить его увидеть сей файл.

2). Одна штука все же работает. Это Apache CXF. Копаюсь в потрохах CXF. Там логгер берется не стандартным спосбом-однострочником, а через какой-то LoggerUtils. Открываю, а там адовый метод на три экрана чистейшей лапши из try-catch и if-return'ов. Общий смысл (кажется) - он пытается угадать, какая у нас сейчас система логирования, и подложить костылей. Причем там есть перлы типа обложенного проверками получения значения примитивной интовой переменной, значение которой дальше нигде не используются. Может быть они таким образом расчитывают на интерцепторы, которые перехватят геттер этой переменной (создание такого интерцептора кажется весьма больной идеей). Либо создатели портяны давно уже не совсем понимают ее содержимое, и на всякий случай не трогают. Ах да, комментариев в портяне нет. В общем, запасной вариант на черный день, логирование через кусок магии и jul без конфигов и без ничего у нас есть, но пользоваться им не хочется. Но копание в CXF приводит к мысли, что на самом деле не работает всего лишь переходник с jul на log4j.

3) Дальше иду разбираться как таки заставить работать commons -logging параллельно с log4j и slf4j.
Оказывается, тут надобно впилить log4j и slf4j, и потом поверх два костыля - бридж из jul в slf, и бридж из slf в log4j.
Вместе они начинают работать в такой цепочке: jul -> slf-> log4j. Что само по себе выглядит как чудовище с восемью ногами.
Но они все равно не работают в этой связке. При их включении (сделать котрое можно только зафорсив compile scope на slf - контринтуитивно, учитывая что проблемный класс находится в совсем другой джарке) отваливается даже то, что раньше логировалось через магическую портяну из CXF.

4) Идем разбираться, как же работает log4j. Внутри обнаруживается чудная особенность: он при инициализации берет первый же попавшийся в classpath объект класса чототам-StaticBinder, и использует его как мост до реальной реализации логгера. Причем если этих StaticBinder'ов несколько, то работать будет максимум один (о чем у них честно сообщено в глубинах документации на сайте, но другими словами). Т.е. если захочется, нельзя написать, например, аггрегатор этих StaticBinder'ов (чтобы потом выбирать нужный по ситуации), ибо он вступит в конфликт с аггрегируемым.

5) Дальше смотрим, что делает таки этот Binder. А он делает класслоадер и засасывает туда всякие адпатеры да мосты. Но в конце концов подсасывается класс Hierarchy, который В СТАТИЧЕСКОМ БЛОКЕ, не в конструкторе, инициализирует сам себя. Т.е. например, хрен мы Спрингом (или чем-то еще) по-человечески можем вмешаться в эту вакханалию. Чтобы переопределить этот кусок логики придется копипастой писать свой StaticBinder, беря за основу мост slf4j-log4j, и создавать в нем какую-то другую копипастаную Hierarchy. Вот тебе и ООП. Ну в любом случае, вот и нашли виновника торжества, место которое проёбывает конфиг.

6) Дальше смотрим, что он делает в секции, может как-то можно подсунуть нужный файл конфига? Ну и видим, что он там есть: там написана некая негибкая лапша, которая вначале ищет В ЛЮБОМ МЕСТЕ класспаса файл log4j.xml, потом если предыдущий файл не найден - опять же в любом месте log4j.properties, а потом смотрит на system property где можно указать оверрайд.
Но мы не можем воспользоваться результатом работы этой лапши:
а) Этот чудный getResources ВСЕГДА находит какой-нибудь log4j.xml внутри ирерахии, т.к. их куча понапихана в библиотеках-зависимостях. Единственный способ не попасть в эту ветку лапши - это указать какой-нибудь оверрайд в system property. Таким образом, в ветку когда оно подцепляет из класспаса log4.properties оно на практике не попадает НИКОГДА.
б) Если вписать system property с путем до файла, оно работает. Но он конструирует его тупо с помощью стандартного класса URL. Т.е. его нельзя указать относительно, например ${catalina.home}/conf/log4j.properties - насколько понимаю, URL не умеет в $-плейсхолдеры (берущие данные из system properties, как можно было бы сделать в случае Спринга). И протокола classpath: по-умолчанию URL не умеет.
в) Случай на черный день - вписать system property с абсолютным путем до файла. Но это говно идея, т.к. повлияет не только на текущее приложение, а вообще на все варки, задеплоенные в Томкате.

Сейчас есть следующие идеи:
z) Покопаться внутри лапши, может туда можно как-то хитро подсунуть относительный путь
x) Попробовать написать свою реализацию протокола classpath: для URL. Но тут возникает проблема в порядке загрузки говнокода. Нужно как-то более-менее гарантировано сделать загрузку этого протокола раньше, чем инициализируется первый логгер (по сути, первый StaticBinder). Иначе есть шанс, что взмах крыльев бабочки в цоде на другой стороне Земляшки разнесет все логироваие к хуям.
c) Написать свой StaticBinder, вызвать там свою Hierarchy, конечно с обильной копипастой из первоисточника чтобы что-нибудь не поломать по дороге, но по пути поправить обнаруженные несправедливости, н-р инициализацию логгера сделать в виде паттерна-стратегия (вместо статического блока)

Вообще, может я чего не понял и просто ламер, всё-таки иногда все эти пирамиды из переходников работают... Интересно, почему... Но я вот тут мимо крокодил, и по крайней мере _выглядят_ все эти пирамиды как адовое рукожопие, какая-то плохо документированная лапша. Склеенная на изоленту (у которой истек срок годности году эдак еще в 1998. Написанная редкими специалистами по PHP, простите - ООП.

Идея: импортозамещение Java (OpenJDK)

Пишу программный документ проекта, помогите с начальным списком фич, пожалуйста!

masterspammer может что-нибудь подсказать насчет анализа языка, если захочет :-)


  • название проекта должно звучать с сохранением духа оригинала и глубины многовековых традиций отношения к клиенту в Oracle, поэтому новое название: Жыдыка

  • идеалогия в том, что если писать код российскими буквами, то
...
Читать далее
...
  • работать будет быстрее! Всё ядро OpenJDK переписать на русском языке, включая комментарии и тесты

  • JMH будет автоматически гонять тесты в двух режимах: в российском и нероссийском. Если нероссийский вариант работает быстрее, всё падает с ошибкой

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

  • особая российская Java Memory Model.

  • мы обязуемся отбить незаконно отобранный у народа России полновесный sun.misc.Unsafe, добавив его под другим именем, возможно даже под несколькими разными другими именами

  • чтобы лучше передавать дампы памяти диктовкой по телефону, по возможности их содержимое автоматически кодируется в последовательность русских матов

  • мониторинг болеющих GC, VM и прочих букв производится через выгрузку статистики на веб-сервис Госуслуг. (Чтобы не переделывать Госуслуги, каждому GC автоматически заводится учётка гражданина, а статус здоровья отображается через графики на веб-сервисах Минздрава)

  • глубинная интеграция с Astra Linux

  • аннотации @Нахуй и @Уходи в Spring Framework будут предоставлять новые scope для бинов, при создании такого бина всё связанное с ним бесследно удаляется, включая засранный пермген, чистятся кармы и сбрасываются кэши в процессоре. В живых остается только то, что не имело DI-связи с данным бином. Это нововведение должно заменить ошибочно отсутствующие в Java деструкторы и прерывание тредов. И да, Spring будет встроен прямо в Жыдыка

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

  • в качестве пре-коммит хука в репозиторий Жыдыки, запускается СОРМ. Все патчи, посланные по почте, проходят через специальный почтовый сервер за авторством сами знаете кого. Все лицензии в начале файлов заменяются необычайно точные на выдержки из Конституции
    сдавшим Р-CJP выдаются стандарты в кожаном переплете и ксива старшего лейтенанта ФСБ. Коммитеры обязательно подписывают подписку о невыезде и дают военную присягу. Все права на боевые заслуги коммитеров передаются Родине лично

А прорвало Касперскую сразу после вот этого не мене зачетного монолога: http://www.kommersant.ru/doc/3002418

Поциент начинает с казалось бы правильной посылки:

«— В каких‑то узких областях импортозамещение имеет смысл — стратегических, связанных с безопасностью страны. Во всем остальном — это изобретать велосипед. Причем, скорее всего, этот велосипед получится медленный и часто ломающийся. В...
Читать далее
... конечном итоге бизнес, который будет вынужден пользоваться продуктами импортозамещения, сильно потеряет.»

Но вместо перехода к идее, что софт нужно разрабатывать вместе, особенно в модели Open Source / Free Software, афтар впадает в пограничное состояние и начинает шизофазировать:

«Технология или программный продукт сегодня является способом улучшить производительность труда и сократить издержки для бизнеса. Нет шансов сделать продукт лучше, чем, например, Oracle, Microsoft или SAP,— это мировые лидеры, формировавшиеся десятилетиями. Качество российских аналогов, скорее всего, будет сильно хуже. Конечный потребитель от этого только потеряет. В итоге денег будет потрачено сильно больше, а конечный результат грустный.»

Не, ну если, конечно, аутсорсная контора не может в R&D и собственное производство, то ойвсе, Россиюшке конец.

Короче, перед нами опять диалог жабы и гадюки.
Детишки, сейчас я вам расскажу, что такое кластерное программирование

Skype перешел на новый уровень — теперь его нужно распараллеливать! Обычный компьютер слишком слаб для Скайпа

Когда пытаешься по скайпу скачать большой файл (почему‑то особо люто на XML, совпадение?), он виснет. Причем с шансами вместе со скайпом виснет еще и Мак.

У мну два компа — линукс и макмини. Поэтому на обоих...
Читать далее
... компах теперь запущен скайп. Пока один скайп висит, по другому можно общаться. И наоборот. А если комп не повис, то можно не только общаться, но еще и кодить.

На обоих компьютерах уже стоит совершенно одинаковое окружение (гит‑репозхиторий, эклипса, идея‑комьюнити, жаба, мавен, гит, итп), поэтому пока один из компов висит, можно переключаться на другой комп и кодить на нем

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

Вот и сказочке конец, а кто слушал — прожигает жизнь и рабочее время на чтение херни в фейсбуке. Спокойной ночи, малыши.
Victor Kuriashkin написал прорывного бота, которая позволяет разговаривать с начальством на короткой ноге

Oleg Chirukhin, [05.06.16 18:49]
Давай споём, друган?

Ainix_Herman_Gref, [05.06.16 18:49]
о том, происходит ли убийство бактерии методом глубокой заморозки

Oleg Chirukhin, [05.06.16 18:49]
Пусть прошлое раскрошится
Волною о причал,
Мы вспомним всё хорошее, ...
Читать далее
...
Забудем про печаль.



Ainix_Herman_Gref, [05.06.16 18:49]
акции российских предприятий раскупаются за границей как горячие пирожки

Oleg Chirukhin, [05.06.16 18:49]
Умчалась юность бедная
За даль туманных звёзд,
И за любовь последнюю
Я поднимаю тост.

Ainix_Herman_Gref, [05.06.16 18:49]
первый этап уже выполнен наказание невиновных

Oleg Chirukhin, [05.06.16 18:49]
Выпьем за любовь,
Как блестят сейчас твои глаза,
Выпьем за любовь,
Пусть дрожит хрустальная слеза.

Ainix_Herman_Gref, [05.06.16 18:49]
мы создаем совершенно немыслимое количество вузов, готовящих бухгалтеров, у нас скоро вся страна станет бухгалтерами

Oleg Chirukhin, [05.06.16 18:50]
Выпьем за любовь,
И уже не надо лишних слов,
Выпьем за любовь, родная,
Выпьем за любовь.

Ainix_Herman_Gref, [05.06.16 18:50]
рублей, а сотрудник центрального аппарата министерства получает 18 тыс

Oleg Chirukhin, [05.06.16 18:50]
Пpости меня за все цветы,
Что для других срывал,
Пpости меня за все мосты,
Что за собой сжигал.

Ainix_Herman_Gref, [05.06.16 18:50]
хотел бы я поменяться постами с министром финансов

Oleg Chirukhin, [05.06.16 18:50]
Hо мы построили с тобой
Последний хрупкий мост,
За возвращение любви
Я поднимаю тост.

Ainix_Herman_Gref, [05.06.16 18:50]
нет, скорее с министром финансов

alt