brainfuck: java-компилятор

branfuck - это такой простейший язык программирования который реализует некую "полную машину Тьюринга", подробнее в википедии, там же и подробное описание команд. Кому лень - пример, выводящий традиционное Hello world:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>.

Для тех, кто видит в первый раз это кажется диким. Ну разе lisp не страшнее?)

Зачем??!

Read more

Debian: php-fpm в Squeeze

Ах эти мейнтейнеры Дебиана! Обещали оставить в сквизе php-fpm, но опять появились баги тараканы в голове - вэб разработчики и сисадмины как и прежде используют глючные сборки от dotdeb, если вообще не пересобирают руками весь php.

Read more

Процедура миграции на Яндекс.Почту

Появилась задача сделать почти 300 ящиков на Яндекс.Почте для домена.
Изначально пост имел название "Чекер почтовых ящиков" - это часть миграции, но получился о шагах миграции корпоративной почты с левых, глючых почтовых служб на нормальный Яндекс)

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

Пришлось много парсить :) Фактически это руководство о том, как переезжать на Яндекс.почту

Read more

Android: информация о устройстве

Иногда требуется получить общую информацию о мобильном устройстве программно: Какой производитель? Название устройства? Версия ОС?

Может быть полезно как для статистики использования, так и для, например, формирования уникального идентификатора устройства (очевидно, что не все поля для этого подойдут)

Read more

Java: кодировка в Hibernate

Возникла ситуация, в которой при сохранении не-англоязычного текста в базу сохранялись вопросики. Понятно что дело в кодировке подключения к БД (хотя так же может быть и кодировка таблиц, если не юникод). Используется Hibernate 3 из-под бинов Spring 3.0.2

Кусок конфигурации из applicationContext.xml, где устанавливается DataSource (в нём и задаются настройки подключения)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/dbname"></property>
<property name="username" value="_user_"></property>
<property name="password" value="_pass_"></property>
</bean>

Read more

1с-битрикс: Ошибка в типе содержимого

При переносе сотого сайта страндартными средствами битрикса (через restore.php) на спейсвеб возникла следующая ошибка:
The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression.

Что такое?

Одна из проблем - лишние символы в /bitrix/php_interface/ в файлах init.php, dbconn.php.

Также эта гадкая ошибка возникает из за сбоя в компрессии, проверить пытался ли битрикс отдавать сжатый контент можно посмотрев заголовки:

Content-Encoding: gzip	
Content-Length:4663

В этом случае решением будет принудительное отключение компрессии - в файле /bitrix/php_interface/init.php добавить константу

<?php
define('BX_COMPRESSION_DISABLED',true);
function getRealLink($ID = 0)
.....

Сколько же времени ушло на
решение этой проблемы :-/

Синхронизация времени по cron

Облачный хостер стал давай сбой - иногда сбивается время. Потребовалось хоть какой то workaround - в виде периодической синхронизации времени

Делается всё очень просто! Разумеется, требуются права администратора

$ cd /etc/cron.hourly
$ cat > date-sync.sh
/вставляем сюда/
#!/bin/sh
ntpdate pool.ntp.org
/жмём ctrl-d/
$ chmod a+x date-sync.sh

На этом всё :) Теперь каждый час будет синхронизироваться время. По вкусу можно выбрать другой серевер времени.

Read more

php trick: вариант обхда open_basedir restriction

Задача: нужно перечислить файлы не в директории сайта

Проблема: действуют ограничения, например:

Warning: dir() [function.dir]: open_basedir restriction in effect.
File(/etc/awstats) is not within the allowed path(s): (.) in /var/www/site/path/index.php on line 22
Warning: dir(/etc/awstats/) [function.dir]: failed to open dir: Operation not permitted
in /var/www/site/path/index.php on line 22

Есть вариант обойти это, при условии что разрешенно выполнять приложения через exec() и это unix-система

Read more

Android: ListView в сложном layout

Если есть потребность совместить ListView с какми-либо ещё View в одном Activity, то требуется соблюсти несколько правил:

  • Обязательно наследовать активити от ListActivity, а не от Activity
  • В onCreate() Activity поместить установку разметки, навроде setContentView(R.layout.chat);
  • Поместить в корень layout пустой ListView c android:id="@android:id/list"
  • Для адаптера списка вызывать setListAdapter(mUidsAdapter);

Read more