Рубрика «java» - 231

В данной статье я разберу каким образом можно реализовать тихую доменную авторизацию (Kerberos) на сервере приложений GlassFish.
Тест проводился на ПК с Windows 7 Pro SP1 (64bit), JDK 1.7.0_25(64bit) и GlassFish 4 (ver 89).
Пользоваться мы будем библиотекой SPNEGO. Данная статья собственно является переводом и адаптацией, того что вы можете найти на странице библиотеки на английском языке.
Читать полностью »

«Разбор Полетов» — Episode 52 — Главный по IDEA

Гость выпуска — Андрей Чепцов из JetBrains
Читать полностью »

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

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

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

  • Фирмы, работающие на Министерство обороны и подобные структуры

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

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

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

Часть 1/3. Какие бывают 'плюшки'.
Часть 3/3. Какие бывают работодатели. Характерные особенности.

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

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

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

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

Хочется поблагодарить 0leo, morisson и adaptun за помощь в подготовке статьи.

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

Как считают звёзды?
Многие уже читали статью о миссии 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).
Читать полностью »

Добрый день, читатель!

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

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

Майнинг и как он работает: матчасть
Привет, %username%!
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Читать полностью »

Есть у меня на некоторых 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? Сказано, сделано.
Читать полностью »

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js