Обновление CakePHP 1.1 на 1.3

11:29 Рубрика: cakePHP

cakephp_update
Недавно вышла новая версия CakePHP 1.3 с многочисленными изменениями. Так получилось, что один мой старый проект на версии фреймворка 1.1 я не переводил на версию 1.2, поэтому решил сразу переписать его для 1.3. Хочу вкратце написать о процессе миграции приложений.

Начать лучше с создания шаблона из командной строки: cake -app <directory> bake. После этого в каталоге <directory> появится пустое приложение для версии 1.3. Первым делом копируем файлы старого приложения в этот новый каталог:

/models/*
/controllers/*
/views/*
/vendors/*
- причем ваши собственные библиотеки лучше сразу перенести из /vendors/ в /libs/
/app_controller.php, app_model.php
/webroot/js/*, /webroot/img/*, /webroot/css/* и прочие каталоги.
Файл /webroot/index.php копировать не нужно, т.к. он обновился.

У шаблонов поменялось расширение ещё с версии 1.2, поэтому их нужно просто переименовать из *.thtml в *.ctp.

По очереди открывая файлы настроек в каталоге config, аккуратно переносим все настройки путем редактирования новых файлов. И не забываем переделать пути в routes.php.

Настал черед кода. Все используемые компоненты и хелперы теперь нужно указывать в принудительном порядке (и при обновлении с 1.2). Например:

2.public $helpers = array('Session','Html','Form');
1.public $components = array('Session','Auth','Cookie');

Единственное исключение – хелпер Paginator. Хелпер Javascript отсутствует, ему на смену пришел Jshelper. А если вы использовали javascript->link(), то просто поменяйте на html->script(). Кстати, к версии 1.2 это тоже относится.

Основные изменения на всех уровнях MVC:

Модели

  • Все функции find… нужно заменить на соответствующие find(‘all’…), find(‘first’…), find(‘count’…) и так далее. А метод generateList() – на find(‘list’…).
  • Старые методы execute() необходимо заменить на query().
  • Удаление del() переименовать в delete(). К любым другим методам del() (в компоненте Session, например) это тоже относится.

Контроллеры

  • Заголовок страниц нужно устанавливать либо с помощью $this->set(‘title_for_layout’,'…’), или аналогично, но внутри шаблона.
  • Если вы использовали свои методы для разбивки на страницы, замените их на paginate() и сделайте соответствующие изменения в шаблонах. То же самое касается и авторизации: старые «логины» лучше переписать с использованием компонента Auth.
  • Не забудьте также о новых компонентах Email и Cookie.
  • Загрузка сторонних библиотек, моделей и прочих файлов производится через App::import(): App::import(‘Model’,'…’), App::import(‘Vendor’,'…’), App::import(‘Lib’,'…’).

Шаблоны

  • Все методы для работы с формами теперь находятся в хелпере Form. Следовательно нужно поменять все $html->form… на $form->input() и т.д.
  • Метод для доступа к значениям формы $html->tagValue стал называться $form->value(); $html->tagErrorMsg замените на $form->error, a $html->labelTag на $form->label.
  • Функцию для вывода элементов renderElement() переименуйте в element().
  • Все обращения к моделям и полям в старом формате (Model/field) нужно заменить на новый – Model.field.
  • Желательно (но не обязательно) также использовать новый формат доступа к хелперам через $this: например, обращение к хелперу form: $this->Form->input(). Сделано это было для того, чтобы освободить пространство для пользовательских переменных.

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

Все эти сведения, а также другие отличия можно найти и в официальной документации:

Удачи в обновлении!

(c)

Далее

Image Manager 1.1 — Плагин загрузки картинок, фотографий и файлов для TinyMCE

23:11 Рубрика: Web Development

tinymce_imagemanager


Плагин доступен для скачивания. Предупреждаю, документации пока нет равно как и инструкции по установке. Веселитесь :)

Демо Image Manager 1.1

Скачать:

Русский
English

(c)

Создание своего быстрого и лёгкого Linux

23:04 Рубрика: Linux

Tux-G3

Итак чтобы создать свой оптимизированный Linux для нетбука делаем вот что:
1) Берём свой любимый Linux дистрибутив (у меня это Debian)
2) Устанавливаем его в минимальной конфигурации.
3) Устанавливаем по частям необходимый софт:


Окружение рабочего стола:

XFCE

alt


или LXDE

alt

Про LXDE более детально написано в этой статье

4) Делаем необходимые настройки:
(вся установка и настройка на примере Debian и MSI WInd,но она подойдёт для большинства нетбуков и других дистрибутивов.)
Меняем bash на dash, что даст нам прирост скорости.
#apt-get install dash
#dpkg-reconfigure dash


Устанавливаем микрокод для процессора
#apt-get install intec-microcode

Устанавливаем утилиту powertop,чтобы узнать,как повысить автономную работу.
#apt-get install powertop

 #powertop

В моём случае результат был вполне оптимистичный, процессор большую часть времени живёт в режими энергосбережения. Но всё же решил послушаться эту утилиту и выполнил её рекомендации (занёс некоторые команды в rc.local)

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

echo 2000 > /proc/sys/vm/dirty_writeback_centisecs

echo min_power > /sys/class/scsi_host/host0/link_power_management_policy


Добавте опции noatime к файловым системам в /etc/fstab

Затем откройте /etc/laptop-mode/laptop-mode.conf и измените значение CONTROL_HD_POWERMGMT на 1. (удостоверьтесь,что пакеты acpi-support и acpid установлены иначе никакого энергосбережия не получите)

Настроим запуск демонов.

#apt-get install sysv-rc-conf
#sysv-rc-conf

Debian обычно стартует на 2 уровне,поэтому бдем править его.
У меня обычно нет задач,которые надо запускать по расписанию поэтому  убираю включение планировщиков cron,anacron,atd и локальную почту exim4 поскольку она чаще всего грузится дольше всех. Советую так же советую отключить автозапуск bluetooth и wi-fi они тоже кушают батарейку.

Устанавливаем звук

#apt-get install alsa-base alsa-utils


Настраиваем alsa

#alsaconf

Выбираем hda-intel

Устанавливаем видео

#apt-get install xserver-xorg-video-intel xinit


Устанавливаем и настраиваем ядро:

#apt-get install linux-source

Теперь перейдём в каталог исходных текстов ядра

#cd /usr/src/linux  (если такого каталога нет,то сделайте ссылку с установленной версии исходников ln -s /usr/src/linux-2.6.x.x  /usr/src/linux)

Перед конфигурированием, создать файл .config, с настройками для вашего будущего ядра.

вариант №1

Можно воспользоваться файловой системой proc, где
в файле config.gz находятся компрессированные настройки текущего ядра, с которого запущена
система:

zcat /proc/config.gz >> /usr/src/linux/.config

вариант №2
Воспользоваться утилитой oldconfig

# make oldconfig



Запустите утилиту по конфигурированию

xconfig - утилита конфигурирования ядра, написанная с помощью библиотеки Qt.
gconfig - аналогичная утилита,написанная на gtk.
menuconfig - программа использующая библиотеку ncurses для визуализации консольных приложений.
config - терминальная утилита задающая вопрос, и ожидающая один из вариантов ответа:
да/нет/модуль/?

Я предпочитаю menuconfig

#make menuconfig

Не хочу отбирать славу у человека который всё детально расписал здесь , поэтому про установку wi-fi,apm и дальнейшей установки ядра советую посмотреть по ссылке.
А кому некогда или лень разбираться - вот предлагаю мой конфиг ядра 2.6.26

Attachments:
FileОписаниеFile size
Download this file (config.txt)config.txt Конфиг ядра для MSI WIND U100(переименовать в .config)

54 Kb

(c)

Далее

Формат deb-пакета

22:56 Рубрика: Linux

Debian

Краеугольный камень пакетной системы Debian — это deb-пакет (см. deb(5)), представляющий из себя архив формата ar, внутри которого содержится три файла:
1. debian-binary — текстовый файл, содержащий версию формата deb-пакета, в данный момент это 2.0. Программы, работающие с deb-пакетами, должны читать только первую строку этого файла и не падать, если минорная версия вдруг поменяется (например, станет 2.1).
2. control.tar.gz — служебная информация о пакете, скрипты, вспомогательные файлы (см deb-control(5)). Должен содержать только файлы, единственная папка, которая может присутствовать — «.» (текущая директория). В этот архив обязательно должен входить файл control, его минимальное содержимое рассмотрим чуть ниже.
3. data.tar — собственно файлы, устанавливаемые в систему. Чаще всего этот файл сжат каким-нибудь архиватором (поддерживаются расширения .gz, .xz, .bz2, .lzma), чаще всего в архивах встречается data.tar.gz.

Указанный порядок следования файлов в архиве обязателен. Если в этом архиве требуется разместить еще какие-нибудь файлы (не представляю, зачем это может кому-нибудь понадобиться), они должны находиться перед data.tar.gz, т.е. последний файл в архиве всегда data.tar. Но если сообщество когда-нибудь решит добавить в формат deb еще файлы, они будут помещены после data.tar.

Файл control в архиве control.tar.gz описывает назначение, версию и зависимости пакета, его формат более-менее подробно описан в deb-control(5). Пересказывать всю справку сейчас не буду, опишу лишь минимальное содержимое, необходимое для взаимодействия с инфраструктурой dpkg:

Package: имя пакета
Version: строка версии (при выборе политики назначения версий следует придерживаться deb-version(5))
Maintainer: John Doe <johndoe@foo.com> (человек, поддерживающий пакет, а не автор программы)
Description: короткое описание пакета
Длинное описание, на несколько строк. Каждая строка, входящая в
длинное описание, должна начинаться с пробела

Работа с пакетами средствами ar

Теоретически данной информации должно быть достаточно, чтобы собрать простейший пакет «на коленке» и установить его в систему. Пусть наш пакет (назовем его test) просто добавляет в систему файл /usr/share/example-content/test со строчкой «test». Сделаем архив data.tar.gz со структурой папок и единственным файлом, а также файлик debian-binary:

$ mkdir -p usr/share/example-content/
$ echo test > usr/share/example-content/test
$ tar czf data.tar.gz usr
$ echo 2.0 > debian-binary

Создадим файл control со следующим содержанием:

$ cat control
Package: test
Version: 1.0
Maintainer: Dummy Maint <dummy@example.org>
Description: test package
Test package created on my own knees.
$ tar czf control.tar.gz control

Теперь соберем все воедино:

$ ar -qS test-1.0.deb debian-binary control.tar.gz data.tar.gz

В текущем каталоге должен появиться файл test-1.0.deb. Его «физическое» содержимое можно просмотреть с помощью следующей команды:

$ ar t test-1.0.deb
debian-binary
control.tar.gz
data.tar.gz

Посмотреть файл debian-binary:

$ ar p test-1.0.deb debian-binary
2.0

Посмотреть список файлов в пакете:

$ ar p test-1.0.deb data.tar.gz|tar -tzf -
usr/
usr/share/
usr/share/example-content/
usr/share/example-content/test

Посмотреть содержимое файла control:

$ ar p test-1.0.deb control.tar.gz |tar -O -xzf - control
Package: test
Version: 1.0
Maintainer: Dummy Maint <dummy@example.org>
Description: test package
Test package created on my own knees.

Можно установить этот пакет и убедиться, что файл /usr/share/example-content/test успешно создан, но лучше этого не делать, поскольку из-за недостатка информации в control в пакетной системе может появиться мусор:

$ sudo dpkg -i test-1.0.deb
Selecting previously deselected package test.
(Reading database ... 97631 files and directories currently installed.)
Unpacking test (from test-1.0.deb) ...
Setting up test (1.0) ...

Работа с пакетами средствами dpkg-deb

Все вышеописанное позволяет управляться с deb-пакетами на самом низком уровне, не имея под рукой ничего, кроме стандартных средств Unix (доподлинно известно, что программа ar входила в состав первых Unix 1970х годов). Однако, как несложно догадаться, есть и более высокоуровневые способы создания пакетов и изучения их содержимого. В частности, если уж так необходимо поковыряться с пакетом на низком уровне, все вышеописанные действия настоятельно рекомендуется выполнять с помощью утилиты dpkg-deb(1).

Создание пакета средствами dpkg-deb

Минимальный формат вызова команды dpkg-deb для построения пакета следующий:

dpkg-deb -b исходная_папка

Все, что находится в исходной папке, кроме директории DEBIAN, помещается в data.tar.gz. Содержимое DEBIAN будет использовано для создания control.tar.gz, в частности, будет прочитан и проанализирован файл control и в случае каких-либо ошибок (отсутствует одно из необходимых полей или эти поля имеют неправильные значения) пакет просто не будет создан. Процесс создания нашего тестового пакета с нуля теперь выглядит так (в последней команде предполагается, что в текущей папке остался файл control от сборки пакета средствами ar):

Подготовка структуры:

$ mkdir -p test-1.1/usr/share/example-content/ test-1.1/DEBIAN
$ echo test 1.1 > test-1.1/usr/share/example-content/test
$ sed 's/Version: 1.0/Version: 1.1/g' control > test-1.1/DEBIAN/control

Попытаемся собрать пакет:

$ dpkg-deb -b test-1.1
warning, in file 'test-1.1/DEBIAN/control' near line 5 package 'test':
missing architecture
dpkg-deb: building package `test' in `test-1.1.deb'.
dpkg-deb: warning: ignoring 1 warnings about the control file(s)

Несмотря на отсутствие важного, но не необходимого поля Architecture, был создан пакет test-1.1.deb. Добавим поле и пересоздадим пакет:

$ sed -i "1a \
Architecture: all" test-1.1/DEBIAN/control

$ dpkg-deb -b test-1.1
dpkg-deb: building package `test' in `test-1.1.deb'

Еще одна немаловажная деталь. Как правило, в названии файла пакета указывается его архитектура, а команда dpkg-deb -b назвала файл по имени папки, из которой он был создан. Если бы папка называлась ololo, то мы получили бы ololo.deb. Чтобы файл пакета автоматически именовался в формате имя-версия-архитектура, при вызове dpkg -b необходимо указывать папку, куда будет положен итоговый архив, например, текущую. Тогда все компоненты имени файла будут извлечены из control:

$ cp -R test-1.1 ololo
$ dpkg -b ololo
dpkg-deb: building package `test' in `ololo.deb'.
$ dpkg -b ololo .
dpkg-deb: building package `test' in `./test_1.1_all.deb'.

Теперь всё относительно нормально, продолжаем изучение возможностей dpkg-deb на примере нового пакета.

Получение информации о пакете

Узнать версию формата deb, размер пакета и содержимое файла control:

$ dpkg -I test_1.1_all.deb
new debian package, version 2.0.
size 644 bytes: control archive= 259 bytes.
160 bytes, 6 lines control
Package: test
Architecture: all
Version: 1.1
Maintainer: Dummy Maint <dummy@example.org>
Description: test package
Test package created on my own knees.

Список файлов, устанавливаемых в систему (кроме служебных):

$ dpkg -c test_1.1_all.deb
drwxr-xr-x bvk/bvk 0 2010-10-22 13:21 ./
drwxr-xr-x bvk/bvk 0 2010-10-22 13:21 ./usr/
drwxr-xr-x bvk/bvk 0 2010-10-22 13:21 ./usr/share/
drwxr-xr-x bvk/bvk 0 2010-10-22 13:21 ./usr/share/example-content/
-rw-r--r-- bvk/bvk 9 2010-10-22 13:21 ./usr/share/example-content/test

Обратите внимание на владельца устанавливаемых файлов и каталогов: это не root, а некий пользователь. Чтобы исправить эту проблему, можно собирать пакеты из-под root’а, либо воспользоваться специальной утилитой fakeroot из одноименного пакета. Она перехватывает системные вызовы chmod(2) и stat(2) для файлов, и возвращает значения, как если бы файл принадлежал пользователю root. Небольшой пример:

$ id
uid=1000(bvk) gid=1000(bvk) ...
$ touch trololo
$ ls -l trololo
-rw-r--r-- 1 bvk bvk 0 2010-10-22 13:23 trololo
$ fakeroot ls -l trololo
-rw-r--r-- 1 root root 0 2010-10-22 13:23 trololo

Думаю, принцип понятен. Пересоберем пакет еще более правильно:

$ fakeroot dpkg -b test-1.1 .
dpkg-deb: building package `test' in `test_1.1_all.deb'.
$ dpkg -c test_1.1_all.deb
drwxr-xr-x root/root 0 2010-10-22 13:25 ./
drwxr-xr-x root/root 0 2010-10-22 13:25 ./usr/
drwxr-xr-x root/root 0 2010-10-22 13:25 ./usr/share/
drwxr-xr-x root/root 0 2010-10-22 13:25 ./usr/share/example-content/
-rw-r--r-- root/root 9 2010-10-22 13:25 ./usr/share/example-content/test

Теперь наконец ок.

Можно получаить информацию о пакете в заданном формате:

$ dpkg-deb -W --showformat='${Package}-${Version}-${Architecture} (${Maintainer})\n' test_1.1_all.deb
test-1.1-all (Dummy Maint <dummy@example.org>)

Список полей, которые можно указать в –showformat, можно узнать из вывода команды dpkg-deb -I

Подать на STDOUT архив data.tar.gz из пакета (уже «разжатый»), может быть полезно для извлечения только некоторых файлов:

$ dpkg-deb --fsys-tarfile test-1.0.deb |tar -Ox usr/share/example-content/test
test

Перепаковка пакета

Пожалуй, теперь наступил момент применить свежеполученные знания на практике :) Часто возникает следующая проблема: из некоего источника поступил пакет с некорректными зависимостями, например, требуется устаревший пакет, отсутствующий в системе и всех репозиториях, но доподлинно известно, что другой, уже установленный пакет предоставляет нужную функциональность. В скачанном пакете требуется изменить файл control, убрав или исправив зависимость. Правильно было бы скачать и распаковать исходник пакета (apt-get source), произвести необходимые изменения в скриптах сборки, установить все необходимые для пересборки библиотеки и окружение и т.д. и т.п., но для частного использования (т.е. без распространения по репозиториям) достаточно просто распаковать пакет, изменить необходимые файлы и запаковать обратно. Проиллюстрирую последовательность действий на примере невинного пакета hello:

$ aptitude download hello
Get:1 http://yum.fireground.ru/ubuntu/mirror/ maverick/main hello i386 2.5-1 [34.4kB]
Fetched 34.4kB in 0s (824kB/s)
# да-да, я сижу под убунтой и описываю debian
# распаковать содержимое пакета в папку hello (если не существует, будет создана):
$ dpkg-deb -x hello_2.5-1_i386.deb hello
# распаковать содержимое control.tar.gz в hello/DEBIAN
$ dpkg-deb -e hello_2.5-1_i386.deb hello/DEBIAN
# что-нибудь поменять в control, например, версию пакета:
$ sed -i 's/Version: .*$/Version: 2.5-1test/' hello/DEBIAN/control
# собрать новый пакет:
$ fakeroot dpkg -b hello/ .
dpkg-deb: warning: 'hello//DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: building package `hello' in `./hello_2.5-1test_i386.deb'.
dpkg-deb: warning: ignoring 1 warnings about the control file(s)

Пакет собран. Убедиться, в том, что в нем нет ошибок из-за немного нетрадиционного способа сборки, можно с помощью программы lintian:

$ sudo aptitude install lintian
...
$ lintian hello_2.5-1test_i386.deb
$ echo $?
0

Всё в порядке!

Об установке пакетов в систему, механизме зависимостей, структуре репозиториев и еще более правильных способах сборки пакетов читайте в следующих статьях :)

 

(c)

Далее

Simple Form Authentication in cakePHP 1.2.x.x

11:30 Рубрика: cakePHP

form

There has been a lot of questions about user authentication lately so I thought it was appropriate to create a tutorial that covered the very basics

 

In this tutorial we'll cover all aspects of MVC in an authentication role, logging a user in, maintaining a session, and restricting unauthorized access to controller actions.

 

Though this article is based on CakePHP 1.2.x, the same concepts apply in 1.1.x and most of the code can be reused.

More

Авторизация в CakePHP с пользователями, группами и правилами

11:28 Рубрика: cakePHP

avtorizaciya-v-cakephp-s-polzovatelyami-gruppami-i-pravilami

Сегодня я расскажу вам об очень полезном и удобном компоненте для авторизации пользователей. Как известно в CakePHP входит готовый компонент Auth, который, фактически, является не самой понятной частью Cake’а. Благодоря ребятам из Studiocanaria процесс использования этого компонента стал значительно проще, понятней и удобней.

Далее

CakePHP Auth Component For Dummies Tutorial

jQAPI - Alternative jQuery Documentation

11:26 Рубрика: jQuery

jquery-api-doc

Link

GalleryView: A jQuery Content Gallery Plugin

11:25 Рубрика: jQuery

GalleryView aims to provide jQuery users with a flexible, attractive content gallery that is both easy to implement and a snap to customize.

whole



Link

Best mount options for Windows/FAT32, NFS, CDROM, USB

00:41 Рубрика: Linux

mount

This page REALLY is just for me to remember. When mounting a FAT32 partition, I prefer the options as in the following line found in /etc/fstab

/dev/hda1 /disks/C vfat rw,noatime,nosuid,nodev,noexec,nouser,async,iocharset=utf8,umask=0 0 0

This mounts the drive automatically at boot time and pretty much gives all users the ability to read/write to it. If I don't want the drive to be mounted at boot time but I want normal users to be able to mount it later, then I would add "noauto,user" instead of "auto,nouser" (auto is implicit in the above fstab entry). The "iocharset=utf8" option is important if you have filenames with international characters. This will make them show up appropriately (doesn't seem to be an issue with the reiserfs or ext3 as far as I have seen).

When mounting an NFS volume, I prefer

machine:directory localdirectory nfs noauto,noatime,user,rw,nosuid,hard,intr,sync 0 0

This DOESN'T automatically mount the volume a boot time, but it allows users to mount whenever they need to. The "hard,intr,sync" options are the important ones... I have had problems with "soft" and "async" while using NFS (the machine has locked up many times while using that).

For CDROMs, I like to have

/dev/cdrom /media/cdrom0 iso9660 ro,user,noauto 0 0

Floppies seem to work best using

/dev/fd0 /media/floppy0 auto rw,noatime,user,noauto 0 0

See this link for instructions on how to get your USB devices working in Linux

For a ReiserFS the following seems to work well

/dev/hdd1 /disks/hdd1 reiserfs rw,noatime 0 0

(c)

Далее

Еще несколько полезных плагинов jQuery

23:42 Рубрика: jQuery

jTextTranslate

Два последних моих поста с обзорами плагинов jQuery (1 и 2) были восприняты на Хабре довольно хорошо. Надо сказать, что подобные статьи на английском языке появляются все чаще и чаще. Однако их содержание довольно быстро приедается. Галереи картинок, слайдеры, опять галереи картинок, многочисленные динамические меню и опять слайдеры. Мне не хочется описывать очередную порцию подобных плагинов. Поэтому сегодня я расскажу не о двадцати-тридцати как обычно, а только о семи важных на мой взгляд плагинах, о которых очень хотелось рассказать. Лучше меньше, да лучше.



Заметки к изображениям




Плагин jQuery-Notes позволяет делать заметки к изображениям (непосредственно на них самих), которые становятся видны в момент наведения курсора на эти изображения.
Посмотреть в действии


Временные информационные блоки




Плагин Growl позволит вам организовать на сайте систему оповещения пользователя, в стиле mac-приложения Growl.
Посмотреть в действии


Обтекание блочных элементов не только по горизонтали, но и по вертикали




Посмотреть в действии


Микрогалерея изображений




Упс! Я же не хотел рассказывать о галереях сегодня… Но об этой все-таки расскажу. Эта галерея отличается от остальных тем, что может занимать меньше места на вашей странице, чем среднестатистическое изображение.
Посмотреть в действии


Сколько букв, сколько слов!




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


Графики и диаграммы на все случаи жизни




Много графиков и диаграмм, некоторые из которых могут реагировать на действия пользователя.
Посмотреть в действии


Перевод прямо на сайте




Плагин jTextTranslate поможет перевести необходимый кусок текста на сайте на один из множества доступных языков. Как он это делает? использует Google Language API.
Посмотреть в действии

(c)

Далее