3 года назад

J2ME Vector shuffle


Просто оставлю это здесь. Может кому-то пригодится.

Этот метод перемешивает элементы вектора в случайном порядке.

import java.util.Random;
import java.util.Vector;

public class Util {
    public static Vector shuffle(Vector src) {
        Random random = new Random();
        int size = src.size();
        Vector dst = new Vector(size);
        while (size > 0) {
            int index = Math.abs(random.nextInt() % size);
            dst.addElement(src.elementAt(index));
            src.removeElementAt(index);
            size = src.size();
        }
        return dst;
    }
}

В «большой» Java для этого можно использовать метод Collections.shuffle().
3 года назад

Генерация файла переводов в Yii при использовании синтаксиса Smarty


В Yii есть замечательная команда yiic message, позволяющая сгенерировать или обновить файл(ы) с переводами, дописав в них не переведённые фразы. И всё было бы замечательно, но когда понадобилось прикрутить шаблонизатор Smarty, воспользовавшись расширением smarty-renderer , я обнаружил, что генератор сообщений не понимает синтаксис smarty плагина:

{t text="text to translate" cat="app"}
{t text="text to translate" cat="app" src="en" lang="ru"}
{t text="text to translate" cat="app" params=$params}

И поскольку решения не нашлось, я решил написать его сам.
3 года назад

Расширение стандартного списка Mime-Type в Yii Framework


Понадобилось расширить стандартный список миме-типов в Yii Framework.
Для этого создаём в папке конфигурации protected/config файл mimeTypes.php с таким содержанием:

protected/config/mimeTypes.php
<?php
$mimeTypes = require Yii::getPathOfAlias('system.utils.mimeTypes').'.php';

return array_merge($mimeTypes, array(
    'wbmp' => 'image/vnd.wap.wbmp',
    'mp4' => 'video/mp4',
    'apk' => 'application/vnd.android.package-archive',
    'jar' => 'application/java-archive',
    'sis' => 'application/vnd.symbian.install',
    'sisx' => 'x-epoc/x-sisx-app',
    'jad' => 'text/vnd.sun.j2me.app-descriptor; charset=UTF-8',
    'thm' => 'application/vnd.eri.thm',
    'nth' => 'application/vnd.nok-s40theme',
    'sdt' => 'application/vnd.siemens-mp.theme',
    'mpn' => 'application/vnd.mophun.application',
    'mpc' => 'application/vnd.mophun.certificate',
));
Здесь мы взяли стандартный список миме-типов Yii Framework и при помощи функции array_merge добавили в него массив недостающих миме-типов вида "расширение=>mime-type".

Теперь, чтобы применить наш список, нам необходимо указать его расположение при вызове статического метода CFileHelper::getMimeTypeByExtension.

Пример
<?php
$filename = 'bla/bla/bla/video.mp4';

$magicFile = Yii::getPathOfAlias('application.config.mimeTypes').'.php';
if (($mimeType = CFileHelper::getMimeTypeByExtension($filename, $magicFile)) === null) {
    $mimeType = 'application/octet-stream';
}

header("Content-Type: " . $mimeType);
readfile($filename);
exit;

// Пример использования вместе с sendFile
Yii::app()->request->sendFile(basename($filename), file_get_contents($filename), $mimeType);
4 года назад

Бэкап MySQL баз данных с сохранением в DropBox


Встала задача сохранять бэкапы мускула в DropBox'e.

Сказано – сделано!

Быстрым гуглением нашёл shell скрипт, позволяющий загружать(и другие операции, в том числе удалять) файлы на DropBox.
Ссылка на проект с гитхаба - https://github.com/andreafabrizi/Dropbox-Uploader

Скачиваем проект и заливаем на сервер.
Я выбрал папку /home/cron/ для содержимого bash скриптов.
Предварительно создаём эту папку.

mkdir /home/cron/
wget https://github.com/andreafabrizi/Dropbox-Uploader/archive/master.zip --output-document=/home/cron/master.zip
Разархивируем архив и перенесём нужный нам файл dropbox_uploader.sh в нашу папку /home/cron/.
cd /home/cron
unzip master.zip
mv Dropbox-Uploader-master/dropbox_uploader.sh dropbox_uploader.sh
rm master.zip
rm -rf Dropbox-Uploader-master
Далее даём права на исполнение
chmod +x dropbox_uploader.sh
И запускаем скрипт
./dropbox_uploader.sh
4 года назад

Android. Обзор AbsoluteLayout (устаревшая и не рекомендуемая компоновка)


AbsoluteLayout является контейнером компоновки с абсолютным позиционированием, т. е. нужно явно указывать X и Y координаты вложенных элементов.

Данный контейнер является устаревшим с версии Android 1.5, его не рекомендуется использовать в приложениях и в новых версиях он может пропасть.

Тот, кто программировал для мобильных телефонов на платформе J2ME, наверное скажет, ну и что в этом такого? В JAVA-ME при построении низкоуровнего интерфейса в классе Canvas и GameCanvas, также приходилось указывать абсолютные значения при позиционировании элементов. Дело в том, что Вы можете создать клёвую компоновку для одного экрана, но запустив приложение на другом экране, с другим dpi, она поплывёт и возможно окажется совсем на другом месте и в другом масштабе. В общем использовать не стоит, но про неё я расскажу.

Начнём как всегда с примера.

Страницы:
1

Метки: