Uwin – сводная информация

Проект Uwin – существует с марта 2013 года. За это время он значительно изменился, но суть осталась прежняя.
Uwin лучший инструмент для проведения промо акций в социальных сетях.
Continue reading Uwin – сводная информация

Лостед. Бюро находок.

Случалось Вам терять что то? Если да тогда мой новый сервис для Вас.

Предлагаю Вашему вниманию http://losted.info новая доска объявлений. (ex imiss-u.com)

Задачи которые решает мой сервис.

Пример:
Кто то потерял фотоаппарат в парке и хочет вернуть хотя бы фотографии. Тем временем кто то нашел фотоаппарат привык к нему а фотки как бы и не нужны.
Обычный вариант когда человек утерявший фотик пишет об этом во всяких пабликах или просит друзей сделать репост.
Но кто захочет выдавать себя что он нашел фотоаппарат, а готов вернуть только фотографии.

Continue reading Лостед. Бюро находок.

Pickcode.net программистам на долгую память

Представляю сервис закладок и сниппетов для программистов.
Список возможностей.

  • Авторизация с помощью социальный сетей.
  • Подсветка синтаксиса при добавлении сниппета.
  • Возможность добавить существующий сниппет в закладки.
  • Лайки и комментарии.

Сайт достаточно новый поэтому сниппетов пока мало их количество будет расти с посетителями сайта (надеюсь)

Сервис сниппетов и закладок для программистов

Yii Google images widget

Даный виджет поможет отобразить на странице изображения полученые в результате поиска с помощью сервиса Google Images Search

Для работы данного виджета Вам не нужно вносить никаких дополнительных настроек

Continue reading Yii Google images widget

Imiss-u взаимный поиск людей

В свободное время неспешно делаю проект поиска людей с которыми познакомились совершенно случайно.
Чтобы найти человека нужно знать только место и примерное время когда это было.
Поиск должен быть взаимный иначе ничего не получится. Грубо говоря поиск первого человека является результатом для второго. Если Вы не нашли нужного Вам человека значит он не начал Вас искать или не знает про существование этого сервиса(

Сайт конечно же написан на Yii и работает как facebook приложение. База данных – MongoDB (geospatial keys).

Как вы думаете будет ли интересен такой проект кому-либо?
А то меня постоянно одолевают смутные сомнения(

А вот и ссылка на сам сайт Взаимный поиск людей

Yii image resize on the fly

I used this method in my last project. Could be useful for someone.

Requirements.

  • Yii based application
  • Enabled path UrlFormat for UrlManager
  • All rewrites rules shout be written (.htaccess or any other conf)
  • Image  extension for Yii installed  ( http://www.yiiframework.com/extension/image/ )

How it’s works.

For example have folder with resources which are public accessible

/resources/images/avatars/*
/resources/images/posters/*
/resources/images/photos/*
/resources/images/photos/album1/*

Ordinary image displaying would be

If we want to get thumbnail of this picture we just have to change a bit url

Pretty simple? Is not it?

Code

To get this working we have to create new Controller with id resources here its code.

request->requestUri);

        $resourcesPath = Yii::getPathOfAlias('webroot') . $request;
        $targetPath = Yii::getPathOfAlias('webroot') . Yii::app()->request->requestUri;


        if (preg_match('/_(\d+)x(\d+).*\.(jpg|jpeg|png|gif)/i', $resourcesPath, $matches)) {

            if (!isset($matches[0]) || !isset($matches[1]) || !isset($matches[2]) || !isset($matches[3]))
                throw new CHttpException(400, 'Non valid params');

            if (!$matches[1] || !$matches[2]) {
                throw new CHttpException(400, 'Invalid dimensions');
            }

            $originalFile = str_replace($matches[0], '', $resourcesPath);
            if (!file_exists($originalFile))
                throw new CHttpException(404, 'File not found');


            $dirname = dirname($targetPath);
            if (!is_dir($dirname))
                mkdir($dirname, 0775, true);


            $image = Yii::app()->image->load($originalFile);
            $image->resize($matches[1], $matches[2]);

            if ($image->save($targetPath)) {
                if (Yii::app()->request->urlReferrer != Yii::app()->request->requestUri)
                    $this->refresh();
            }

            throw new CHttpException(500, 'Server error');
        } else {
            throw new CHttpException(400, 'Wrong params');
        }
    }

}

What was it?

After first attempt to thumb url /resources/thumbs/images/photos/album1/gh53.jpg_200x300.jpgthumb action will be triggered because file won’t found on disk.

Script will try to find location of the original source file here /resources/images/photos/album1/gh53.jpg

If source file exists it will be resized and stored here /resources/thumbs/images/photos/album1/gh53.jpg_200x300.jpg

Then script will refresh the url page and after that browser will open newly created thumbnail file directly from disk!

Quite easy!
You can extend this script to support only list of dimensions to avoid disk overflow.

That is all.
Comments are appreciated. Thanks.

 

 

ФотоКнига – Сайт для людей

Давно собирался сделать СДЛ чтобы был качественный и полезный.

Выбор пал на проект с предварительным название Photobook

Project codename Photobook  Сервис хранения и составленяи фотоальбомов. Основная фича это то что альбом выглядит как настоящий альбом который можно листать. Идея в том что у пользователь сможет загружать огромное кол-во фотографий и составлять из них альбомы. Альбомы могут быть как приватные так и общедоступные. Понравившийся альбом пользователь может заказать и его сделают для него в печатном виде. (нужно партнерство с полиграфической студией)

Основные требования

  1. Никакого флеша – ни при создании книги ни при ее просмотре ( html5, css3)
  2. Поддержка всех устройств (ipad,iphone,android)
  3. Неограниченое кол-во страниц.
  4. Поддержка видео.
  5. Поддержка анимации
  6. ImageMagick
  7. Поддержка Amazon S3  или др

 

Идеальным для просмотра книги я вижу скрипт http://www.turnjs.com/

Продолжение следует.

Yii ConsoleApplication and Gearman Workers PSD to JPEG conversation

Hi. I am going to show small example of how I use gearman with my Yii applications.
If someone doesn’t know what is gearman here is quick explanation from the official website http://gearman.org

A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating a job to be run and sending it to a job server. The job server will find a suitable worker that can run the job and forwards the job on. The worker performs the work requested by the client and sends a response to the client through the job server. Gearman provides client and worker APIs that your applications call to talk with the Gearman job server (also known as gearmand) so you don’t need to deal with networking or mapping of jobs. Internally, the gearman client and worker APIs communicate with the job server using TCP sockets.

Our example application converts psd to jpeg. We have to install gearman job server, gearman pecl extension and ImageMagick on the server.
Continue reading Yii ConsoleApplication and Gearman Workers PSD to JPEG conversation

Fully ajax website with Yii – Part 2

In previous post I described how to create simple full ajax web application without changing basically logic of the application. All changes was made to the layout, view and to the base classes.
But as you maybe already noticed not everything works well. For example if you tried to sign-in -menu won’t be updated. In this short article I will show how to fix such kind of problems.
All data which ouputs for ajax request collecting with help of flash messages (built-in Yii functionality);
So basically if you wand update something on your page you have to set flash message with name updatedata wich contains an array with key value elements

Example   protected/controllers/SiteController.php ;  actionLoginMethod

 
                ...
                // collect user input data
		if(isset($_POST['LoginForm']))
		{
			$model->attributes=$_POST['LoginForm'];
			// validate user input and redirect to the previous page if valid
                        if($model->validate() && $model->login()) {
                               Yii::app()->user->setFlash('updatedata', array(
 						'#mainmenu'=>$this->renderPartial('/includes/menu',array(),true),));                   
                               $this->redirect(Yii::app()->homeUrl);
                        }
                ...

As you can see I put all mainmenu to separate file. Here is it’s content

protected/views/includes/menu.php

	widget('zii.widgets.CMenu',array(
			'items'=>array(
				array('label'=>'Home', 'url'=>array('/site/index')),
				array('label'=>'About', 'url'=>array('/site/page', 'view'=>'about')),
				array('label'=>'Contact', 'url'=>array('/site/contact')),
				array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
				array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
			),
		)); ?>

For avoiding dublicating data I cut this code from main layout and put there renderPartial instead.

protected/views/layout/main.php

...

...

So all blocks that might be updated via ajax better to move to includes folder. Now after sign -in main menu is changing.

Now we have to add the same code to sign-out method

protected/controllers/SiteController.php

...
public function actionLogout()
	{
		Yii::app()->user->logout();
		Yii::app()->user->setFlash('updatedata', array(
 						'#mainmenu'=>$this->renderPartial('/includes/menu',array(),true),));
		
		$this->redirect(Yii::app()->homeUrl);
	}
...

In that way you can update everyrhing you want on the webpage. Good luck!
P.S. Suggestions are welcome!

Full ajax Yii webapp demo