All streams
Search
Write a publication
Pull to refresh
113
0

Software architect

Send message

JVM падает (2 истории про вызов native library)

Reading time2 min
Views2.3K
Хочу поделиться двумя историями с одинаковым сюжетом, но разными развязками.
Может быть кому то, у кого тоже падает JVM будет полезно

1. Native code вызывается из Явы через JNI. Юнит тест — проходит на ура, приложение (GUI, Swing) крэшится.
Подключаемся через дебагер ddd (это такая оболочка над gdb, ежели кто из яваистов не знает :) ) — видим что падает с длинющим стеком. Выясняем с автором нативной библиотеки, что там они десериализуют через boost (такая библиотека для C++) дерево большой глибины. И там рекурсия.

Возникает идея (не сразу, 3 дня споров и гугления), что при вызове из приложения стек больше и он переполняется. Находим параметер для JVM: -XX:ThreadStackSize=

Работает!

2. Native code вызывается через JNA. Присутствую колбеки обратно в Явы, так как я описывал. Юнит тест бежит, приложение падает!

Читать дальше →

Про релевантность опыта. История с моралью

Reading time1 min
Views4.7K
Хочу рассказать поучительную историю.
Работает со мной мужик, который сразу после университета пришел в нашу компанию.
Сначала это был небольшой израильский стартап, потом его купила большая американская компания.
Мужик в фирме рос, руководил отделом. Так прошло 12 лет и мужик решил менять место работы.
И вдруг оказалось, что он никому не нужен.
Почему?
Дело в том, что в нашей фирме придумали свой язык, объектно ориентированный. И даже сделали его стандартом (IEEE) в области тестирования дизайна чипов.
Язык оказался удачным и на нём начали писать свой софт.
Так вот этот мужик, почти всё время, эти 12 лет, писал на этом нашем языке. (Кроме этого — на C++ и Perl, но немного.)
Читать дальше →

Культурные различия 2. Коллеги из Индии

Reading time3 min
Views5.3K
Я работаю в израильском отделении большой американской компании. Приходится много работать с индусами и американцами, даже есть группы, в которых часть людей сидит в другой стране.
Поэтому раз в год нам проводят семинары о культурных различиях. Как надо общаться с коллегами из других стран.

Мой первый рассказ был об американцах.
Сегодняшний — об индусах.

С индусами я работаю много. Есть даже в фирме «мой» индус — архитектор как и я, который вместе со мной отвечал за Business Logic нашей новой аппликации. В то время мы с ним говорили по мессенджеру или по телефону каждый день, я его опекал во время визитов в Израиль, свозил по своей инициативе в Иерусалим и даже приглашал домой.

У меня с ним отличные отношения (хотя и не без трений), но, как выяснилось, не всё я делал правильно :)

Во первых всё, что я писал об американцах в плане «мягких» выражений — верно для индусов и вообще для всех. При общении с кем угодно лучше сказать «Отличная идея, у меня только несколько поправок» в ситуации когда Вы думаете «Что за чушь!?».

Но есть своя специфика. Вопросы рассовой политкорректности индусов волнуют меньше, а вот вопросы «потери лица» — больше.

Читать дальше →

Культурные различия. Общение с американскими коллегами

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

Мой первый рассказ — об американцах.

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

С большим стыдом вспоминал, как я повторял «I disagree!» на последнем Face2face.

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

Кстати, сказать, как у нас «Та уборщица… какая? Ну, эфиопка ...» или «В соседнем отделе есть такой мужик умный, индус низенький такой» — тоже нельзя.
Надо объяснять о ком идет речь, не используя национальность, религию и сексуальные предпочтения.

Итак, правила для общения с американцами:
Читать дальше →

ЖЖ в БД (скрипт на Groovy)

Reading time3 min
Views2.7K
В продолжении темы маленьких скриптов на groovy — еще один.
Предыдущие: Большие письма в Gmail, Упражнение на сложение (LATEX)

Новый скрипт показывает основы работы с XML и базой данных в Groovy. В качестве задачи выберем сохранение нашей уютной ЖЖшки из XML в базу данных.
Зачем это делать? — SQL нам расскажет всё о нашем (или чужом) ЖЖ — темы, комменты, таги — насколько фантазии хватит собирать статистику

Сначало нам надо скачать ЖЖ в XML.
Это сделает чужая утилита — ljdump
Придется установить Питон, открыть IDLE (Python GUI), загрузить туда утилиту и запустить. Всё спросит она сама.

После её пробега у вас будет директория с файлами LXXX — посты и CXXX — комменты.

А на эти XMLи мы и запустим мой скрипт.
В этом виде он использует pure Java, embedded базу данных Hypersonic (HSQLDB), но можно подключиться к любой, конечно же. Только убедитесь, что JDBC driver у вас в classpath.

Парсинг и работа с БД такого типа годятся только для скриптов и небольших программ. В энтерпрайзе никто не будет загружать весь XML в память (а будут использовать SAX), и никто не будет напрямую слать SQL (а будет Connection Pool, prepared statement, batch, Hibernate какой нибудь).

Читать дальше →

JNA: callbacks to Java

Reading time2 min
Views25K
Мне понадобилось подключить наш проект на Яве к старой библиотеке на C. Одной из проблем было, что эта библиотека требует регистрации колбеков (callbacks), которые вызывает по ходу работы, и которые, я хотел бы имплементировать на стороне Явы.

JNI позволяет это всё делать, но муторно. Есть прекрасная библиотека JNA как замена JNI я хотел воспользоваться ей.
К сожалению сайт JNA сейчас пуст — они переезжают с сервера на сервер, статьи по JNA не показывают пример callbacks, поэтому пришлось повозиться немного, чтобы сделать работающий пример.

Этот пример и хочу показать — может кому то приходится.

Начинаем со стороны C:

my.h
typedef  void (*callback)(char *, char*);

int myfunc(char *);

void registerCallback(callback myc);


Читать дальше →

AspectJ, Spring, Maven

Reading time6 min
Views37K
Меня в нашей группе попросили настроить среду и показать использование аспектов AspectJ и интеграция его со Spring.
Мне показалось, что хабросообществу это тоже может быть интересно.

Не буду рассказывать тут о том, что такое AspectJ, кто знает — тому будет полезно, замечу лишь, что аспекты — это возможность добавить на этапе компиляции или рантайма в классы некую функциональность, которой раньше там не было. Или изменить существующую.

Далее: конфигурация проекта и 3 примера аспектов.

Читать дальше →

Разные уровни языков

Reading time1 min
Views543
На волне обсуждений нововведений в Яву и всяких новомодных языков вроде Скалы и Груви, возникла вот какая идея.
В языках ( а может и в библиотеках) должны быть разные уровни для разных людей.

Ну скажем если кто то пишет инфраструктуру, ему можно пользоваться Reflection, а вот тому кто пишет бизнес логику — нельзя.
Ну или, скажем, closures — повышают читабельность кода, но abuse, не корректное использование — запросто.
Поэтому начинает программер сразу после универа — без всяких closures, а научился чему то поставил бутылку архитектору — можно и их использовать.

Интересно — существуют ли такие «уровни» где то в программировании?
Как их можно реализовать технически?
Оправдано ли это?

Программы для генеалогического дерева

Reading time5 min
Views262K

О генеалогических программах.



Зачем оно нужно?

1. Хранение информации. Если все
хранится на бумаге — может сгореть, пропасть и т.д. В электронном виде если регулярно делать бэкап опастность меньше
2. Упорядочивание информации. Быстро найти все людей которые погибли на войне. всех троюродных братьев данного человека, всех которые родились в Киеве до революции. такие задачи возникают часто при работе. Получить все такие срезы очень тяжело если все у вас хранится в одном файле или на бумаге.
3. Работа с источниками. Часто бывает важно знать из какого источника поступила информация. Часто надо найти все, что известно из этого источника.
4. Работа с фотографиями. Хранить все картинки имеющие отношение к одному человеку вместе. Если на фотографии несколько людей не хранить ее несколько раз. Привязывать фотографии не только к людям но и к конкретным событиям.
5. Работа с географическими местами. Описание, фотографии, прежнее имя, список всех кто там родился.
6. Обмен информацией с другими людьми
7. Автоматическое построение деревьев и еще многое многое

Теперь про конкретные программы.
Читать дальше →

Большие письма в Gmail

Reading time3 min
Views2.7K
Как вы знаете, Gmail не позволяет сортировать письма, в частности по размеру.
Есть сервис, который помечает большие письма меткой — www.findbigmail.com, но не все хотят давать не понятно кому свой пароль.

Я написал скрипт (на груви ), который создаёт метку «Big Mail» и маркирует ей все письма размером больше чем 4Мб. В скрипте надо заменить имя юзера и пароль в Gmail, а также, если хотите, размер «больших» мейлов.

Для работы скрипта в classpath должны быть jars отсюда.

Итерация по сообщениям медленная (1-2 в секунду), так что я поставил печать номера просматриваемого письма, чтобы вы знали, что скрипт не застрял.
Забрать все сообщения даже при моём количестве (ок 20000) занимает мало времени. Но при обращении к аттрибутам сообщения (getSize()) Message пойдет на сервер.
Можно настроить это на Pre Fetch, тогда общее время может уменьшиться, но вырастет (и серьезно) время получения списка сообщений (т.е. будете ждать не зная жив ли он вообще)

Еще интересный момент: copyMessages() в применении к Gmail ничего не копирует или переносит, а просто добавляет метку.

Сообщения я помечаю по одному, так, чтобы не получилось, что скрипт упал (например потому что упала сеть) и ничего не сделал.

Вообще есть куда улучшать — интерактивно спрашивать имя и пароль, не помечать те, которые уже помечены и т.д. Кому нужно — допилит :)

Не забудьте сделать IMAP — enable в Settings Гмаила.

Собственно скрипт

Генерация кода с jamon

Reading time8 min
Views3.2K
Генерация кода

В нескольких проектах на разных местах работы я использовал генерацию кода. Зачем?
Чаще всего этим достигается сохранение правильности кода при изменениях. Например при добавлении еще одного типа данных в модель предметной области надо добавить класс на Яве, класс на С ++, код преобразования между ними и значение в Enum. Без генерации кода и работы ручками много, и всегда есть шанс что то из этого забыть.
Иногда reflection может быть заменой генерации кода, но даже тогда такой код будет менее читабельный чем шаблон для генерации.
Исходная информация для генерации кода может выглядеть очень по разному — это может быть Ява класс, у которого через reflection считываем свойства и генерим класс на C++, или csv файл, или XML, или еще что нибудь.

Попробую рассказать как я генерирую код в maven проектах с помощью фреймворка jamon.

Читать дальше →

LaTex: Упражнение

Reading time1 min
Views4.8K
Для того, чтобы старшему ребёнку давать примеры на сложение и вычитание в столбик, написал скрипт на Groovy, который генерирует LaTeX с примерами.
Цель была попрактиковаться в груви, ну и писать примеры от руки надоело.

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

Вот скрипт, надеюсь кому нибудь пригодится:
Читать дальше →

Как быстро сделать веб сайт для стартап-экспериментов

Reading time1 min
Views669
Периодически у меня и у друзей возникают идеи веб-стартапов.
Часто идеи простые, но требующие некой инфраструктуры сайта — например регистрации пользователей.

Хотелось бы иметь возможность обкатывать идеи — создавать прототипы в течении вечера.

Сами мы не местные JavaScript и всякие технологии client side не знаем, а знаем Java, Groovy — т.е. логику на стороне сервера на этих языках написать можем. Ну если надо то и на PHP, Ruby тоже что то простое напишем с учебником языка в руках.

Какие есть возможности для быстрого создания простых сайтов?

WordPress какой нибудь и к нему как то прикрутить свою логику?
Какие нибудь сайт билдеры?
Фреймворки?

Спасибо!

Стартап: составление туристических маршрутов

Reading time1 min
Views1K

User story:


человек приехал в Рим и хочет по Риму погулять. Он просит наш сайт составить ему маршрут: начать от моей гостиницы, прогулка на 5 часов, посетить развалины древнеримского периода, среди них обязательно Колизей и самые интересные сайты эпохи Возрождения. Где то посредине прогулки — обед в мясном ресторане.

Имплементация:


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

С помощью визарда пользователь вводит свои предпочтения и ему составляется маршрут.

Всё это на основе Google Maps.

Бизнес модель


1. Очевидная: реклама гостиниц, ресторанов, тур агенств
2. По сути ведь будет создана универсальная engine, можно продавать её — мерии Нью Йорка или Амстердама, скажем

Доказательства возможной популярности


1. Большие объемы самостоятельного (без групп) туризма
2. Гугл постепенно на свои карт добавляет всё больше маршрутов прогулок (но они Гугла hardcoded)

Сам я такое на коленке не напишу, инвестиции искать не буду, кому идея интересна — берите!

Про серебро на стыке физики и истории

Reading time2 min
Views1.5K
Мой отец, который работает в институте Вейцмана, в лаборатории физики плазмы, отвёл нас к своему коллеге Сане Шильштейну который занимается металлами.
К нему приносят свои находки археологи и он анализирует материал (металл, керамику) различных артефактов.

В 7 веке до нашей эры монеты появились в Европе (в Китае они появились раньше). В домонетный период в качестве денег, использовались слитки различных металлов, в частности, серебра. В различных исторических текстах встречается термин «рубленное серебро». Встречается этот термин и в нескольких местах в Танахе. Связано это с тем, что при расчетах использовали кусочки серебра, отрубленные от большого слитка. С такой системой расчета связано происхождение слова «рубль». Отрубленый металл необходимо было взвешивать. С этой процедурой связано появление таких денежных единиц как «фунт» или «шекель».


Рубленное серебро

Читать дальше →
2

Information

Rating
Does not participate
Location
Израиль
Registered
Activity