понедельник, марта 13, 2017

Как заставить замолчать Pack200

После долгих изысканий, получилось победить многословность Pack200 при вызове его из билд скрипта (gradle и иже с ними). Для сокрытия предупреждений вида:
skipping 72 bytes of LocalVariableTable attribute in org/apache/commons/codec/binary/BaseNCodecInputStream.read([BII).Code skipping 12 bytes of LocalVariableTable attribute in org/apache/commons/codec/binary/BaseNCodecOutputStream.close().Code
достаточно в код вставить следующую строчку:
import sun.util.logging.LoggingSupport LoggingSupport.setLevel(LoggingSupport.getLogger("java.util.jar.Pack200"), java.util.logging.Level.SEVERE)
Таким образом уровень логгирования будет поднят и предупреждения пропадут

пятница, мая 27, 2016

Как обновить пачкой локально изменённые файлы в SVN

svn_fresh.cmd

Удаляет из SVN локально удалённые файлы и добавляет новые файлы в SVN рекурсивно

@echo off
FOR /F "tokens=1*" %%i IN ('svn st %*') DO (

IF "%%i" EQU "?" (
echo File %%j is not vesioned
svn add --force "%%j@"
)
IF "%%i" EQU "!" (
echo File %%j was removed
svn remove --force "%%j@"

IF "%%i" EQU "!M" (
echo File %%j was removed
svn remove --force "%%j@"
)
)
Для линукса похожий скрипт опубликованный и найденный на блоге Kathleen Murtagh

понедельник, июня 10, 2013

Eitech bird

Гордый птыц из гордого метала.
Размах - около 140 см
Вес - полтора кило

Выглядит так:
 С другого ракурса
Может ещё так:

Происходит всё лёгким движением руки и произношением волшебных слов. Демонстрация здесь:



Ниже дополнительные ракурсы и некоторые технические решения для птицы.



И особенности внутреннего строения птицы, для истории.

Лапа:
 Другой ракурс лапы:

Хохолок:

Крыло:


Препарированное туловище:

Список деталей (картинок нет, зато есть номенклатурный номер.):
  • 8x 1051
  • 4x 1123
  • 2x 1122
  • 2x 1103
  • 11x 1010
  • 13x 1009
  • 6x 1008
  • 11x 1007
  • 2x 1106
  • 20x 1005
  • 16x 1004
  • 10x 1003
  • 10x 1002
  • 1x 1001
  • 1x 1121
  • 5x 1101
  • 2x 1153
  • 2x 1102
  • 11x 1842
  • 8x 1841
  • 5x 1840
  • 1x 1415
  • 2x 1261
  • 1x 1201
  • 1x 1202
  • 10x 1251
  • 6x 1252
  • 8x 1253
  • 2x 1361
  • 2x 1372
  • 2x 1371
  • 2x 1364
  • 4x 1609S
  • 4x 1609T
  • 4x 1400
  • 8x 1402
  • 7x 1516
  • 206x 1514
  • 12x 1151
  • 330x 1511
  • 2x 1125

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

Curl + c-ares = ...

Скрипт для пересборки curl с включенным c-ares.

В отличие от make install инструкций, позволяет нормально обновляться до следующих версий curl'а без последующих плясок с бубном.

Что делает:
  1. Качает исходник
  2. Компилирует с включенным curl
  3. Собирает deb пакет и устанавливает его.
Само собой разумеется, что c-ares уже установлен в системе.

rebuild-curl-with-cares.sh

#!/bin/sh

rm -rf /var/tmp/curl-cares
mkdir /var/tmp/curl-cares
cd /var/tmp/curl-cares
apt-get source curl

for f in `ls -1`
do
  if [ -f "$f/debian/rules" ]
  then
    export BASE="$f"
  fi
done

if [ "$BASE" == "" ]
then
  echo "Sources can not be found"
  exit 1
fi

echo "Base dir: $BASE"

cd "$BASE"

dch -i "Enable c-ares support"
mv debian/rules debian/rules.orig
cat debian/rules.orig | sed "s/--prefix/--enable-ares --prefix/" > debian/rules

dpkg-buildpackage

cd ..

dpkg -i `ls -1 *.deb | grep -v -- -dev`

Скрипт запускать под рутом.

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

Resize an ext4 partition on a GPT disk

Отличные инструкции об увеличении раздела ext4 на диске.

http://blog.zepsikopat.net/2011/07/22/resize-an-ext4-partition-on-a-gpt-disk/

пятница, декабря 28, 2012

Поинстаграммим на яве...

Набор эффектов, которыми можно замешать картинку на Java.

http://www.jhlabs.com/ip/filters/

Спасибо автору за труды и лицензию Апач 2.0

суббота, марта 05, 2011

Маленькие хитрости с EnumSet

Задача.
Дано: в метод передан EnumSet. Какой Enum используется - неизвестно.

public <E extends Enum<E>> void showEnumList(EnumSet<E> set) {
 // .... ???
}

Надо: получить список всех полей исходного Enum'а и проставить флажки напротив тех элементов, которые есть в исходном EnumSet.

Решение:
Самое "сложное" - это получить все элементы Enum'а. Поэтому сделать вспомогательный метод никогда не помешает:

public class EnumSetUtils {
  public static <E extends Enum<E>> EnumSet<E> getAllValues(EnumSet<E> set) {
    EnumSet<E> enumSet = EnumSet.complementOf(set);
    enumSet.addAll(set);
    return enumSet;
  }
}


Ну а теперь можно приступать и выполнению задания:

public <E extends Enum<E>> void showEnumList(EnumSet<E> set) {
  for (E e : EnumSetUtils.getAllValues(set)) {
    System.out.println(e + " " + (set.contains(e) ? "+" : "-" ));
  }
}


Задача решена. Всем спасибо.