The Developer Times — simplicity & usability

About
В течения дня разрабатываю коммерческие Ruby on Rails, Java и C# web-приложения. Вечером исследую технологии разработки ПО, пишу заметки в блог и иногда могу забить гвоздь. :) По возможности, стараюсь делать проще и удобнее. Для Tumblr поддерживаю тему "Flashback to Simplicity". А связаться со мной можно через местный телеграф.

Экспорт и импорт данных в Oracle

Экспорт и импорт данных в Oracle под Linux заработал не сразу.

Сначала пришлось подредактировать .bash_profile:

# User specific environment and startup programs

export JAVA_HOME=/usr/lib/jvm-exports/java-1.6.0-openjdk-1.6.0.0.x86_64/
export ORACLE_HOME=/opt/oracle/11g
export TNS_ADMIN=${ORACLE_HOME}/network/admin/
export ORACLE_SID=orcl

export PATH=$PATH:$HOME/bin:${ORACLE_HOME}/bin

И только затем заработали команды exp и imp:

$ exp userid=user/password file=user.dmp
$ imp userid=user_tmp/password file=user.dmp fromuser=user touser=user_tmp
| 1 заметка | tags:

Самый короткий способ избавиться от дубликатов в списке в Java

Избавиться от дубликатов в списке и при этом не потерять порядок.

// Список с дубликатами
ArrayList list = new ArrayList() {{ add("A"); add("B"); add("A"); }};

// Список без дубликатов
list = new ArrayList(new LinkedHashSet(list));

Возможно эффективность страдает, зато коротко. Как вариант, можно использовать org.apache.commons.collections.list.SetUniqueList.

List uniqueList = SetUniqueList.decorate(new ArrayList());

Если в списке хранятся нестандартные объекты, будет также полезно переопределить public boolean equals(Object obj) и public int hashCode() при помощи org.apache.commons.lang3.builder.EqualsBuilder и org.apache.commons.lang3.builder.HashCodeBuilder соответственно.

| tags:

Как быстро преобразовать файл в формате windows-1251 к utf-8

В Linux многое просто, вот и операция конвертация файла элементарна:

$ iconv -f windows-1251 -t utf-8 <windows-1251-file.txt> utf-8-file.txt
| 1 заметка | tags:

Как заходить на сервер по ssh без пароля?

Очень просто — для того, чтобы без пароля ходить с server1 на server2 нужно выполнить всего две команды.

1. Создаём пару ключей.

[user1@server1] $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
...

2. После того, как ключи созданы, передаём публичный ключ (в нашем случае id_rsa.pub) на удалённый сервер.

[user1@server1] $ ssh-copy-id -i ~/.ssh/id_rsa.pub user2@server2
user2@server2's password: 
Now try logging into the machine, with "ssh 'user2@server2'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Теперь можно зайти на сервер без пароля.

[user1@server1] $ ssh user2@server2
Last login: Tue May 22 12:25:00 2012 from server1
[user2@server2] $
| tags:

Копирование InputStream в OutputStream одной строчкой

Вы всё ещё пишете так:

// InputStream is
// OutputStream op;
byte[] buf = new byte[4096];
int len;
while ((len = is.read(buf)) != -1) {
  op.write(buf, 0, len);
}
op.flush();
is.close();

Зачем? Ведь можно писать короче и проще, используя IOUtils:

// InputStream is
// OutputStream op;
IOUtils.copy(is, os);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
| 1 заметка | tags: