Обновить
128K+

Java *

Объектно-ориентированный язык программирования

137,04
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 3/3. Какие бывают работодатели

Время на прочтение6 мин
Охват и читатели35K
Часть 1/3. Какие бывают 'плюшки'.
Часть 2/3. Подводные камни для «новичка».

Какие бывают работодатели. Характерные особенности.


Вместо краткого вступления, одну закономерность можно назвать сразу: чем длиннее и крупнее проект, тем древнее технологии. Хотите на практике освоить новые технологии — участвуйте в стартующих проектах длиной 3-6 месяцев.

  • Фирмы, работающие на Министерство обороны и подобные структуры.
    Секретность, используется относительно узкий набор технологий — которые сертифицированы в ФСБ. Например, Java 1.6 и Tomcat сертифицированы, а EJB-контейнеры не сертифицированы, вместо них может использоваться самописная недо-пародия. Что хорошего в самописных недо-пародиях — разработчик, что обычно рядом и доступен для общения, что плохого — какая-то мелкая функция, которая есть, но её пока (почти год) не использовали, но которая внезапно понадобилась тебе, — может просто тупо не работать (но можно заставить разработчика быстро починить).
Читать дальше →

Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 1/3

Время на прочтение6 мин
Охват и читатели26K
Давно зрела мысль описать что-нибудь из своего трудового опыта. Постепенно она развилась до идеи написать обзор рынка труда, как его видит работник и соискатель (точнее, автор в качестве работника и соискателя;-)). Изложение получилось несколько субъективное и не претендующее на полноту. Cделано оно на основе опыта, в основном собственного опыта и опыта знакомых. Уклон как-то сам собой получился в сторону описания возможных неприятных неожиданностей. Статья состоит из трёх частей — “Какие бывают 'плюшки'”, “Подводные камни для новичка” и “Какие бывают работодатели”. Наиболее объёмна и подробна центральная часть — в ней собраны моменты, наиболее, по мнению автора, стоящие внимания. Первая и третья части тоже в значительной степени написаны с точки зрения “подводных камней”.

Под конец было решено разбить получившуюся статью в 35000+ знаков на три поста. В этом посте содержится первая часть.
Читать дальше

Java-программист в Петербурге. Обзор рынка труда с точки зрения соискателя. Часть 2/3. Подводные камни для «новичка»

Время на прочтение14 мин
Охват и читатели24K
Часть 1/3. Какие бывают 'плюшки'.
Часть 3/3. Какие бывают работодатели. Характерные особенности.

Подводные камни для новичка.


Первые подводные камни, вообще-то, могут начаться ещё на собеседовании — например, проект новый, процесс интервьюирования ещё не налажен, первый вопрос может быть “Do you have a printed copy of your CV?” от иностранного представителя, в общем, на вас в качестве одного из подопытных кроликов этот процесс и будут отлаживать. Ещё вас могут внезапно поставить на “конвейер”: пропустить через три стадии собеседования по часу с лишним каждая сразу. Проблемы это может породить, если вы не подготовились к собеседованию или если у вас на это день назначены ещё другие собеседования. Но это так, к слову.

Общие соображения.

«Если кто-то виноват, то заранее ясно кто».

Во-первых, есть некоторая естественная склонность при возникновении непоняток (что там было про управленческие и коммуникативные навыки?), трений и, тем более, конфликтов с участием новичка истолковывать их не в его пользу. Даже если новичок прав, то всё равно есть причины чтоб его уволить: ‘менеджер не может с ним сработаться’, чел ‘не вписывается в неформальный корпоративный формат’ или ещё что-то в этом роде. Если такое “не сработался” повторится и со следующими, то или через пару-тройку кандидатов с кем-нибудь наконец сработаются или задумаются, а может быть «что-то в консерватории поправить». В общем, если вы кому-то из начальства или “старожилов” из тех, к мнению которым прислушиваются «внезапно» чем-то “не понравились” или почему-то вызываете у него постоянное желание подколоть вас или уязвить или продемонстрировать своё остроумие вместо чёткого и ясного выражения того, что от вас требуется, то, если дело «дойдёт до ручки», то ясно, кого будет проще уволить — новичка на испытательном сроке, которому надо заплатить за три дня, или «более полноправного» работника, которому надо при прекращении трудового договора не по его инициативе заплатить за два-три месяца и с которым уже как-то сработались? И если они за пару-тройку итераций всё же найдут кого хотят и с кем сработаются, то спишут случай с вами на “мало ли что бывает”. Да ещё и вопрос, захотите ли сами работать в такой обстановке.
Читать дальше →

Настройка IDEA для чистокодеров

Время на прочтение4 мин
Охват и читатели293K
Я люблю две вещи: Intellij IDEA и чистый код (Clean Code).
IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.


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

Мои любимые настройки IDEA с картинками

Как считают звёзды? Использование InterSystems Caché eXtreme в Gaia

Время на прочтение7 мин
Охват и читатели8.7K
Хочется поблагодарить 0leo, morisson и adaptun за помощь в подготовке статьи.

Инструменты звездочётов



Как вы знаете, завтра, 19 декабря 2013 года, будет запущен телескоп Gaia. Многие уже читали статью о миссии, однако мало кто знает, какую технологию разработчики Европейского Космического Агентства выбрали для обработки и хранения данных Gaia. В 2011 году в качестве кандидатов рассматривались IBM DB2, PostgreSQL, Hadoop, Cassandra и Caché (точнее – технология Caché eXtreme Event Persistence; см., напр., "Astrostatistics and Data Mining" п/ред. Луиса Мануэля Сарро (Luis Manuel Sarro), Лорана Эйе (Laurent Eyer) и Уильяма О'Маллейна (William O'Mullane), c. 111-112).
Читать дальше →

Taskurotta или управление процессами в распределенной системе

Время на прочтение12 мин
Охват и читатели6.6K
Добрый день, хабраюзер!

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

Просмотрев рынок, было принято решение сделать реплику по мотивам Amazon Simple Workflow, так как использовать его напрямую мы не можем. Свойства фреймворка которые нам подходят:
Читать дальше →

Интеграция RWT/RAP + Jetty + JAX-WS

Время на прочтение4 мин
Охват и читатели3.9K
При разработке RAP/RCP приложения у меня возникла проблема: как сделать кастомные error-pages и интегрировать их в embedded jetty. В интернете есть множество обучалок тому, как это сделать, если вы встраиваете Jetty в свое приложение. Но с RWT все сложнее. RWT сам занимается запуском Jetty и стартует его как managed service. При этом сам интерфейс Jetty скрыт от других бандлов и работать с ним напрямую не получится.
Я пошел немного дальше и решил расширить фнкциональность до исполнения любых сервлетов тем самым Jetty, который встроен в RWT приложение. И, самое главное интегрировать JAX-WS веб-сервисы туда же. Сочувствующим, добро пожаловать под кат.

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

Пишем плагин для Maven

Время на прочтение10 мин
Охват и читатели25K
Есть у меня на некоторых maven-проектах профиль, с помощью которого производится копирование shared-библиотек с последующим перезапуском сервера Tomcat.
Maven profile
<profile>
	<id>deploy-deps</id>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<useSubDirectoryPerScope>true</useSubDirectoryPerScope>
							<excludeGroupIds>исключаем некоторые группы, попадающие в war-архив</excludeGroupIds>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>05-stop-tomcat</id>
						<phase>package</phase>
						<goals>
							<goal>exec</goal>
						</goals>
						<configuration>
							<arguments>
								<argument>-ssh</argument>
								<argument>-4</argument>
								<argument>-agent</argument>
								<argument>-i</argument>
								<argument>${putty.key}</argument>
								<argument>${ssh.user}@${ssh.host}</argument>
								<argument>${tomcat.dir.root}/bin/shutdown.sh</argument>
							</arguments>
							<executable>plink</executable>
						</configuration>
					</execution>
					<execution>
						<id>10-clean-shared-jars</id>
						<phase>package</phase>
						<goals>
							<goal>exec</goal>
						</goals>
						<configuration>
							<arguments>
								<argument>-ssh</argument>
								<argument>-4</argument>
								<argument>-agent</argument>
								<argument>-i</argument>
								<argument>${putty.key}</argument>
								<argument>${ssh.user}@${ssh.host}</argument>
								<argument>rm</argument>
								<argument>-Rf</argument>
								<argument>${tomcat.dir.shared}/*.jar</argument>
							</arguments>
							<executable>plink</executable>
						</configuration>
					</execution>
					<execution>
						<id>15-upload-shared-jars</id>
						<phase>package</phase>
						<goals>
							<goal>exec</goal>
						</goals>
						<configuration>
							<arguments>
								<argument>-scp</argument>
								<argument>-4</argument>
								<argument>-agent</argument>
								<argument>-i</argument>
								<argument>${putty.key}</argument>
								<argument>${project.build.directory}/dependency/compile/*.jar</argument>
								<argument>${ssh.user}@${ssh.host}:${tomcat.lib.shared}/</argument>
							</arguments>
							<executable>pscp</executable>
						</configuration>
					</execution>
					<execution>
						<id>20-start-tomcat</id>
						<phase>package</phase>
						<goals>
							<goal>exec</goal>
						</goals>
						<configuration>
							<arguments>
								<argument>-ssh</argument>
								<argument>-4</argument>
								<argument>-agent</argument>
								<argument>-i</argument>
								<argument>"${putty.key}"</argument>
								<argument>${ssh.user}@${ssh.host}</argument>
								<argument>bin/startup.sh</argument>
							</arguments>
							<executable>plink</executable>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</profile>

отходя в сторону, поведаю для чего сей профиль
В части проектов используется связка Nginx+Tomcat. Для данной связки реализовано следующее:
  1. Для всего статичного контента используется некий каталог за пределами webapps. В этот каталог «смотрит» Nginx и отдаёт по web-пути "/static/*"
  2. Все shared java-библиотеки (редко изменяемые) грузятся в каталог ${catalina.home}/shared, и в Tomcat в файле conf/catalina.properties настроена для этого переменная «shared.loader»
  3. Для каждого инстанса Tomcat создан свой системный пользователь
  4. Для доступа по SSH используются ключи и у каждого разработчика он свой

Соответственно, загрузка статичного контента и shared-библиотек это отдельные профили. Всё остальное собирается в war-архив и устанавливается через стандартный web-manager Tomcat-а.
А чтобы не плодить конфигураций, используется PAgent, в который уже и добавленые нужные нам private keys. Они же используются для подключения через Putty

Лежит себе профиль в pom.xml, не кусается вроде бы, даже пашет потихоньку на благо программера, но вот только есть в нём пара «минусов» — занимает много места при развёрнутом pom.xml да ещё и в новые проекты приходится вставлять.
И если от второго минуса можно избавиться написав шаблон в любимая_IDE или свой архетип наваять, то от первого минуса не так-то просто избавить.

Точно ли не так просто? может «обернём» этот профиль в виде плагина для Maven? Сказано, сделано.
Читать дальше →

Spring и обработка событий в Hibernate

Время на прочтение3 мин
Охват и читатели20K
Как-то обделена на хабре такая тема, как обработка событий при работе с сущностями с использованием Hibernate — я смог найти только один пост уже почти мохнатого года. Но то аудит, а нам нужна возможность автоматизировать работу с некоторыми атрибутами сущностей и при этом упростить процедуру работы с ними.

Для начала создадим демонстрационный стенд с двумя сущностями User и AnObject, а так же DAO-слоем для них.
Код
Здесь и далее привожу только значимые куски кода — в полной версии можно посмотреть на github
@Entity
@Table(name = "user")
public class User {
        @Id
        @GeneratedValue
        private long id;
        @Basic
        @Column(name = "username", updatable = false, unique = true, nullable = false)
        private String username;

        // getter and setter
}

@Entity
@Table(name = "anObject")
public class AnObject {
        @Id
        @GeneratedValue
        private long id;
        @Column
        private String value;

        // getter and setter
}


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

MacroGroovy — работа с AST на Groovy ещё никогда не была такой простой

Время на прочтение5 мин
Охват и читатели6.2K
image
Последнее время часто приходится работать с такой мощной возможностью Groovy как Compile-time AST Transformations.

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

def someVariable = new ConstantExpression("someValue");
def returnStatement = new ReturnStatement(
    new ConstructorCallExpression(
        ClassHelper.make(SomeCoolClass),
        new ArgumentListExpression(someVariable)
    )
);


До боли знакомые конструкции, не правда ли? Хотите, чтобы было вот так?
def someVariable = macro { "someValue" }
def returnStatement = macro { return new SomeCoolClass($v{ someVariable }) }


Или даже так?
def constructorCall = macro { new SomeCoolClass($v{ macro { "someValue" } }) }


В данной статье речь пойдёт о моём решении этой проблемы, максимально близком к родному решению Groovy — github.com/bsideup/MacroGroovy

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

Google возвращается в суд, чтобы защитить будущее программирования

Время на прочтение2 мин
Охват и читатели51K

Исполнительный директор Oracle Ларри Эллисон

Полтора года назад компания Google одержала убедительную победу над Oracle в судебном процессе по использованию кода Java в операционной системе Android. Однако, в среду 4 декабря представителей компании Google вызвали в Апелляционный суд США для дачи показаний по поводу апелляции компании Oracle. Это значит, что процесс может возобновиться, а прежнее решение могут отменить.
Читать дальше →

Подписывание Java апплета и некоторые тонкости java security

Время на прочтение10 мин
Охват и читатели27K
Постановка задачи:

В качестве WYSIWYG XML редактора в нашем приложении используется java applet Oxygen Author Component. При загрузке этого апплета на клиенте Java не должна выкидывать никаких пугающих варнингов о небезопасном коде, а спокойно и тихо загружать себе апплет, не напрягая пользователя и не заставляя брать на себя тяжелую ответственность. У нас ведь солидное приложение как никак.
Читать дальше →

CUBA — платформа для быстрой разработки бизнес-приложений на Java

Время на прочтение8 мин
Охват и читатели50K
Если вы занимаетесь разработкой софта для предприятий, то возможно уже написали собственную платформу. Которая позволяет вам быстро создавать UI и логику для работы с данными, содержит общую для ваших проектов функциональность: управление правами пользователей, генератор отчетов, BPM и тому подобное, и имеет архитектуру, позволяющую легко сопровождать и масштабировать приложение. Если еще не успели написать, предлагаем познакомиться с нашей разработкой — платформой CUBA.

image

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

Ближайшие события

Ciklum Speakers’ Corner «Централизованное управление логами и мониторинг Java приложений»

Время на прочтение1 мин
Охват и читатели2.7K
11 декабря киевский офис компании Ciklum приглашает всех желающих присоединиться к открытому Speakers’ Corner она тему «Централизованное управление логами и мониторинг Java приложений».
image
Читать дальше →

Встречайте: IntelliJ IDEA 13

Время на прочтение5 мин
Охват и читатели71K

Что у нас было в 2013


Одна из самых радостных для нас новостей в 2013 году прозвучала на Google I/O: Google анонсировал preview-версию Android Studio, новую среду разработки приложений под Android. Android Studio разрабатывается в сотрудничестве с JetBrains на основе IntelliJ IDEA Community Edition. IntelliJ IDEA 13 — это первый мажорный релиз, включающий в себя то новое, что возникло в результате этого сотрудничества.

Этой весной мы сделали и поддержку новой Java 8.

Мы остаемся привержены идее вдумчивой интеграции одних наших инструментов с другими: например, мы обновили плагины для совместной работы IntelliJ IDEA с TeamCity, продолжаем разрабатывать наши новые продукты, используя опыт создания платформы IntelliJ. Так, в сентябре 2013 мы анонсировали наш новый продукт — UpSource, серверную платформу для работы с кодом в браузере с присущими нашим инструментам возможностями: навигацией, find usages, показом изменений в коде и анализом кода.

И сегодня… Буквально пять минут назад… Па-пам! Мы выпустили IntelliJ IDEA 13.



Осторожно! Дальше - несколько видео на английском и много скриншотов!

Работа с OpenCV. Часть 1. Установка и Hello World

Время на прочтение2 мин
Охват и читатели54K
Навигатор:
Работа с OpenCV. Часть 1. Установка и Hello World

В этой серии статей будет расcмотрена работа с библиотекой компьютерного зрения OpenCV. Для работы из под Java будет использоваться интерфейс JavaCV.
Читать дальше →

Подсветка кода на android. Мой опыт

Время на прочтение4 мин
Охват и читатели17K

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

Кода будет немного, только основные моменты.

Для начала хочу привести небольшой список фактов для того, чтобы ввести читателя в курс дела:

  • Несмотря на N ядер (каждое с огромной частотой), современный смартфоны все еще очень сильно уступают в производительности даже недорогим, но большим компьютерам.
  • Каждое приложении в андроиде имеет строго ограниченный размер выделяемой памяти. И он не велик.
  • Метод setSpan работает медленно.
  • Чем больше работы вы вынесете в Worker'ы, тем отзывчивее будет ваше приложение.
  • Держать подсвеченным весь текст не получится — только видимую его часть.
  • Довольно очевидно, но все же: поиск места размещения спана в UI потоке делать не получится.


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

JavaFX и Spring. Вместе веселей

Время на прочтение8 мин
Охват и читатели32K


В данной статье я хочу рассказать о своем опыте интеграции таких вещей как JavaFX и Spring. И заодно использовать базу данных Derby и Maven для сборки приложения.

Введение


JavaFX выглядит довольно удобной и привлекательной технологией для реализации десктопных решений на платформе Java. Начиная с версии Java SE 7 Update 6, JavaFX является частью реализации Oracle Java SE, т.е. никаких дополнительных установок на стороне пользователя не требуется.

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

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

Путь к Java Junior Developer

Время на прочтение5 мин
Охват и читатели496K


Здравствуйте.
Меня зовут Кислин Григорий. В начале ноября в Санкт-Петербурге закончился первый обучающий семинар «Java. Базовый курс», сейчас переименнованый в «Java. Junior Developer. Интенсив». Хочу поделиться с Вами полученным при его проведении опытом на тему обучения Java а также своим опытом трудоустройства на позицию Java разработчика.

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

WebSphere Application Server Liberty Profile

Время на прочтение4 мин
Охват и читатели29K

Введение


Если раньше Вам приходилось сталкиваться с разработкой приложений для WebSphere Application Server (далее WAS), то Вы конечно же знаете, что это процесс небыстрый. Для этого требовалось разворачивать свой собственный, «тяжелый», сервер приложений, одна перезагрузка которого занимала длительное время. В команде разработки WebSphere долго думали над тем, как предоставить разработчикам самую простую, лучшую и доступную среду для создания новых веб-приложений для WAS. В результате в версии WAS 8.5 появился новый Liberty Profile, который значительно упрощает процесс разработки приложений для WAS.

Итак, что такое Liberty Profile и что он делает?


По сути Liberty Profile – это динамический профиль WAS, который позволяет WAS-серверу предоставлять только те функции, которые требуются приложению (или нескольким приложениям), развернутому на этом сервере. Если приложению нужны сервлеты, то запускается лишь ядро WAS, HTTP-транспорт и веб-контейнер. Все это происходит очень быстро (за несколько секунд) и требует весьма скромного объема ресурсов. Вам нужен JPA-провайдер для доступа к реляционным данным? Вам не придется долго искать, достаточно добавить опцию JPA и конфигурацию хранения данных и Liberty Profile включит все необходимое. Все это делается в динамическом режиме. Даже несмотря на то, что сервер перезапускается за несколько секунд, Вам не придется этого делать. Это очень важно для разработки, так как Вы постоянно добавляете в приложение новые возможности, меняете код и исправляете ошибки. Разработчикам необходимо, чтобы внесение изменений в программный код и в конфигурацию было простым, и чтобы эти изменения немедленно отражались в среде тестирования. Все это становится таким простым с Liberty Profile и новыми инструментами WAS Developer Tools.
Читать дальше →