«Беспощадный, но не бессмысленный»: Сергей Расшиваев — о серфинге в России. Фразы, которые сведут с ума организатора Беспощадный blog detail php

Создание PHP фреймворков - это тяжелое занятие, но следить за их развитием и деятельностью коммиттеров в Твиттере - очень просто. Если вы захотите увидеть в какую сторону движется PHP-сообщество, что сейчас является трендом и какие инструменты применяются в передовых проектах, просто посмотрите, подпишитесь на этих людей.

Вот список из 25 PHP-разработчиков, на которых стоит подписаться. Я надеюсь, что вы найдете их опыт полезным и обязательно воспользуетесь применительно к себе.

2. Sebastian Bergmann. Пионер автоматизированного тестирования в PHP. Создатель фреймворка для тестирования PHPUnit и сооснователь thePHP.cc .

3. Jordi Boggiano. Ведущий разработчик Composer . Участвует в разработке Symfony2. Партнер в Nelmio .

4. Dries Buytaert. Создатель и лидер проекта Drupal . Президент Drupal Association. Сооснователь и технический директор в Acquia .

6. Evan Coury. Сертифицированный инженер по PHP 5.3 and Zend Framework, регулярный докладчик на конференциях по разработке. Создатель Roave .

7. Cal Evans. Архитектор. Представитель разработчиков в GetPantheon .

8. Anthony Ferrara. Разработчик с экспертизами в безопасности, производительности и ООП. Разработал новый, более безопасный password API в PHP 5.5 .

13. Emma Jane Hogbin. Друпал разработчик, темизатор, и опенсоурсный гик. Соавтор книги Front End Drupal и автор Drupal User’s Guide .

14. Rasmus Lerdorf. Создатель PHP.

15. Matthew Weier O’Phinney. Архитектор open-souce ПО. ПМ в Zend Framework . Сертифицированный zend инженер и член Zend Education Advisory Board. Спикер и писатель.

16. Taylor Otwell. Создал

1. Мы это не утверждали.

Чаще всего такая фраза звучит прям перед самым мероприятием, когда кто-то решил ещё раз посмотреть все документы, которые высылали по свадьбе. Случается это только в том случае, если кто-то без ведома другого утвердил какую-либо услугу.

2. А можно завтра… завтра… завтра…

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

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


3. Мы забыли.

Мы можем очень долго просить, просить, просить и каждый раз слышать одно и то же. Это очень сильно тормозит наш професс подготовки.


4. Слишком дорого.

Предварительно мы всё обсуждаем, вдохновляем, креативим и потом считаем. И самый сильный удар для нас это фраза "Слишком дорого". Потому что невеста расстраивается и хочет полностью от всего отказаться. Важно дать обоснованный комментарий, что именно кажется в смете вам дорогим и мы обязательно это поясним. Тогда у вас отпадут сомнения и вы поймёте почему это столько стоит.


5. Зачем их кормить?

Да, свадебные услуги стоят не малых денег. И это оправданно. И знаем, что бывают случаи, когда пары отказываются кормить своих поставщиков, потому что у них и так большой гонорар. Вы должны понимать, что это только оплата работы. И если вы ещё на входе поднимаете этот вопрос, то стоимость услуг серьёзно увеличивается. Это касается только тех, кто работает сверх 4-6 часов на вашей свадьбе.


6. Мы хотим отменить … (декор, свет, звук).

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


7. Мы понимаем, но давайте сделаем по нашему.

Если мы уверены в своей правоте, то мы просто не рискнём поступить иначе. Нам важно сделать хорошо.


8. Отберите у гостей телефоны.

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


9. У нас же не будут на конкурсах шарики лопать или ручку в бутылочку просовывать?

Это мы слышим обычно на первой встрече. И по большей части нас это умиляет. Конечно, в нашей программе такому не быть. Да и не представляем кто такое может сделать.


10. А это мы должны оплачивать?

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


11. Можно мы сами это купим?

Это пожалуй должно быть на самом первом месте. В нашем агентстве такое недопустимо. Мы отвечаем за качество и исполнительность всего. Флорист сможет нам ответить за каждый лепесток в букете, а дизайнер за каждый элемент декора. И готово всё это будет точно в назначенный срок. Для нас главное всё сделать в чётко, слаженно и качественно.

Свадебный организатор WEDDING WAY

Сахно Екатерина

Здравствуйте коллеги!
С совсем недавних пор на нашем портале edcommunity заработал новый сервис. По мне так очень полезный и, главное, очень удобный. Теперь каждый авторизованный пользователь, который проявляет активность на портале и искренне от всей души делится своими наработками и опытом в использовании средств ИКТ на портале, имеет возможность самостоятельно сформировать и скачать официальный сертификат портала сайт!
Как это выглядит на практике?
В первую очередь придя на страницы портала необходимо (войти под своим логином и паролем или сервисом социальной сети).После авторизации следует пройти по ссылке на страницу вашего профиля на портале. Страница будет выглядеть примерно так:
Обращаю ваше внимание на правый верхний угол страницы, где мне напоминают о том, что мой сертификат готов. Смело можем нажимать на изображение самого сертификата. Вы перейдете по ссылке. которая приведет вас на :

Следуя простым указаниям, предлагается заполнить небольшую форму - внимательно читайте указания. В моем случае все выглядело так:

В первом элементе формы - выпадающем списке - выбираем урок, на который вы хотите сформировать Сертификат.
ФИО - укажите ваши фамилию, имя, отчество в дательном падеже.
Должность - тут все вполне понятно.
Ну и, конечно, укажите наименование вашей ОО (образовательной организации).
Осталось нажать на кнопку Сформировать и затем нажать на кнопку (и) Скачать и Распечатать в зависимости от ваших потребностей.

  • Перевод
  • Tutorial

На всякий случай - это перевод (многие не замечают этого в интерефейсе ХабраХабра).
«Fat-Free» можно перевести с английского как «Обезжиренный» - фреймворк и в самом деле поражает своим размером (55 КБ) и скоростью работы.

Я наконец-то нашёл лёгкий и быстрый фреймворк. Он умещается в файл размером всего 55Кб и имеет множество возможностей, о которых вы можете узнать на его , поэтому не буду повторяться. Вместо этого я решил сделать небольшой учебник, из которого вы узнаете как сделать свой блог на этом фреймворке.
Вам понадобится PHP 5.3 на сервере. Я использовал Ubuntu 11.04 для написания этого учебника, на которую легко устанавливается эта версия. Если вы работаете на RHEL или Centos то я предлагаю заглянуть вам на IUS Community Project для получения последней версии PHP.

Установка

Fat-Free Framework.
Fat-Free Framework работает одинаково хорошо и в корне сайта, и в подкаталоге. Я предполагаю, что вы будете использовать подкаталог, поскольку вам не нужно будет создавать отдельный сайт для этого урока.
Создайте папку с именем blog и распакуйте содержимое фреймворка в неё. Это должно выглядеть примерно так:

Поднимитесь на один уровень вверх в иерархии каталогов и установите следующие разрешения:

Sudo chgrp -R www-data blog sudo chmod -R 775 blog
Если вы используете Apache, то mod_rewrite должен быть включён. Измените.htaccess и откорректируйте RewriteBase так, чтобы он указывал на папку с блогом. Например: RewriteBase /blog.

Уже сейчас вы можете зайти в папку blog на сервере и увидеть такую страницу:

(Как только вы посетите эту страницу, будет будет создана специальная папка с кешем - не беспокоитесь об этом).

Начало

Всё что нам нужно уже есть в Fat-Free Framework.

Давайте сначала отредактируем главную страницу и создадим подключение к базе данных.

Откройте файл index.php . Закомментируйте параметр кэширования и установите уровень отладки, чтобы вам легче было заниматься разработкой:


Для установки соединения с базой данных добавьте следующее между командами set и run :

F3::set("DB", new DB("mysql:host=localhost;port=3306;dbname=ИмяВашейБазыДанных", "ИмяПользователя", "Пароль"));
Все файлы пользовательского интерфейса находятся в каталоге ui - вы можете удалить welcome.htm и style.css отсюда, так как они просто используются домашней страницей по-умолчанию.

Маршрутизация

Вы должны сказать фреймворку метод запроса (GET, POST, PUT и т.д.), адрес для запроса и как ответить на этот запрос.

Маршрут для домашней страницы:

F3::route("GET /", function () { // делаем что-нибудь });
Эта безымяная функция будет содержать логику для заполнения страницы.

Для просмотра записи блога:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); });
Это позволяет фреймворку ожидать URI-параметр и присваивает его переменной PHP в функции.

Теперь маршруты для администратора:

// Главная страница администратора F3::route("GET /admin", function () { }); // Страница для добавления материала F3::route("GET /admin/add", function() { }); // Для редактирования материала F3::route("GET /admin/edit/@id", function() { $id = F3::get("PARAMS["id"]"); }); // Служебная для принятия запросов F3::route("POST /admin/edit/@id","edit"); F3::route("POST /admin/add","edit"); function edit() { } // Для удаления F3::route("GET /admin/delete/@id", function() { $id = F3::get("PARAMS["id"]"); });
Обратите внимание, что мы используем одну и ту же функцию для обработки добавления и редактирования сообщений, по этому она имеет имя (остальным функциям имена можно не давать).

Модели

ORMs в Fat-Free Framework делает всю грязную работу за вас - никаких директорий, файлов или кода.

Вот SQL запрос, который создаст 2 таблицы, необходимые для этого урока:

ХабраХабр почему-то не хочет красить этот кусок - прим. перев.

CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `blog`; CREATE TABLE IF NOT EXISTS `article` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `timestamp` datetime NOT NULL, `title` VARCHAR(128) NOT NULL, `summary` VARCHAR(128) NOT NULL, `content` text NOT NULL, `author` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `article` (`id`, `timestamp`, `title`, `summary`, `content`, `author`) VALUES (1, "2011-07-28 02:03:14", "Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr White"), (2, "2011-07-28 02:03:14", "More Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr Green"); CREATE TABLE IF NOT EXISTS `user` (`id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `user` (`id`, `name`, `password`) VALUES ("1", "admin", "password");

Для посетителей

Теперь нам необходимо создать экземпляр объекта Axon, чтобы получить массив результатов. Также мы установим полученное значение в переменную articles.

$article=new Axon("article"); $articles=$article->afind(); F3::set("articles",$articles);
Вы бы могли объединить последнии 2 строчки в одну F3::set("articles",$article->afind()); , но для удобства я оставил две.

Для использования шаблонов нужно создать базовый файл макета в папке ui с именем layout.html :

{{@html_title}}
Движок использует шаблон {{@имя}} для получения значения переменной.

Теперь создадим шаблон для главной страницы, который будет называется blog_home.html :

Blog Titles

{{trim(@item["title"])}} by {{@item["author"]}}

{{@item["summary"]}}


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

F3::set("content","blog_home.html"); echo Template::serve("layout.html");
Шаблон для ускорения работы приложения будет переделан движком в php код.

Полный пример будет выглядеть так:

F3::route("GET /", function () { F3::set("html_title","Home Page"); $article=new Axon("article"); F3::set("list",$article->afind()); F3::set("content","blog_home.html"); echo Template::serve("layout.html"); });
Теперь мы дожны сделать страницу, на которой будет находиться полный текст записи:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); // создаём объект Axon и ищем в нём наш id $article=new Axon("article"); $article->load("id="$id""); // устанавливаем переменные для шаблона F3::set("html_title",$article->title); $article->copyTo("POST"); // подключаем сам шаблон F3::set("content","blog_detail.html"); echo Template::serve("layout.html"); });
Шаблон страницы будет находиться в файле blog_detail.html :

{{@POST.title}}

Published: {{@POST.timestamp}} by {{@POST.author}}

{{@POST.content}}

Back to Homepage

Для администратора

На главной странице администратора будут отображаться записи также, как и на главной. По этому код похожий:

F3::route("GET /admin", function () { F3::set("html_title","My Blog Administration"); $article=new Axon("article"); $list=$article->afind(); F3::set("list",$list); F3::set("content","admin_home.html"); echo Template::serve("layout.html"); });
Шаблон хранится в файле admin_home.html :

Панель администратора

Добавить запись

Заголовок Дата Автор Управление
{{@item["title"]}} {{@item["timestamp"]}} {{@item["author"]}} Изменить Удалить

Результат будет примерно такой:

Теперь создадим форму для редактирования и добавления записей в файле admin_edit.html :

Edit

{{ @message }}










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

Теперь код для маршрутов:

F3::route("GET /admin/add", function() { F3::set("html_title","My Blog Create"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); }); F3::route("GET /admin/edit/@id", function() { F3::set("html_title","My Blog Edit"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); $article->load("id="$id""); $article->copyTo("POST"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); });
Теперь напишем функцию для редактирования, о которой писалось ранее:

Function edit() { // Reset previous error message, if any F3::clear("message"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); //load in the article, set new values then save //if we don"t load it first Axon will do an insert instead of update when we use save command if ($id) $article->load("id="$id""); //overwrite with values just submitted $article->copyFrom("POST"); //create a timestamp in MySQL format $article->timestamp=date("Y-m-d H:i:s"); $article->save(); // Return to admin home page, new blog entry should now be there F3::reroute("/admin"); }

Аутентификация

Добавьте следующие строчки:

// сообщаем фреймворку таблицу с пользователями и передаём значения F3::set("AUTH",array("table"=>"user","id"=>"name","pw"=>"password")); $auth = Auth::basic("sql"); // вход удачный if ($auth) { // сохраняем в сессии F3::set("SESSION.user",$auth->name); // отображаем страницу администратора F3::set("content","admin_home.html"); } else { // вход неудачный F3::set("content","security.html"); }
security.html может выглядеть так:

You must supply valid login details.

Ещё добавьте строчку перед Template::serve:

If (!F3::get("SESSION.user")) F3::set("content","security.html");
Вот и всё. Вы также можете перенаправить пользователя на главную страницу:

If (!F3::get("SESSION.user")) F3::reroute("/");

Итог

Вот так просто можно написать блог с панелью администратора и базой данных.

Скачать готовый пример можно тут -

03.06.2014

Поездка в Норвегию в марте на машине из Питера. Красота дороги, фьордов, снега и гор.

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

Мы уже бывали в этой стране . В этот раз мы отправились в уже практически в Мекку холодного серфинга, на север страны. Финальная наша точка была в маленьком поселке Унстад, на Лофотенских островах.

Для их посещения вам не понадобится ничего особенного, не нужны паромы или супер проходимая машина. Мы доехали на обчном VWGolf.

Единственный трудный участок, который нужно преодолеть, это граница Норвегии и Швеции, там в горах могут быть снегопады. Нужно отдать должное дорожным службам обоих стран, работают они быстро и снег убирают моментально. Так что даже не нужно одевать цепи на колеса. Хотя для уборки могут закрыть дорогу минут на 30-40. Мы даже уже думали повернуть и ехать в объезд, оказалось не нужно и лучше подождать.

Мы стартанули из Санкт-Петербурга и дорога до места заняла 24 часа. Все это время рулила Таня и спала всего пару часов, все остальное время мы ехали. Еду мы взяли частично с собой, частично купили в Финляндии, в целях экономии. В Норвегии высокий уровень жизни и цен соответственно. Единственное на чем сэкономить трудно, это жилье и топливо.

Дорога по Финляндии и Швеции радует разве что вкусным кофе, в остальном же проще спать, так как смотреть особо нечего. Вот Норвегия другое дело. Спать совсем не хочется, вокруг очень красиво. Ощущение нереальности цветов и происходящего. Яркий белый снег, горы и конечно вода во фьордах, все это очень красиво сочетается.

Страна очень ухоженная и что здорово, так это доступность всех красивых мест. Нам в России такого точно не хватает. В большинстве случаев до красивых мест очень трудно добраться. А ведь люди готовы платить за красоту.

Иногда дороги и даже туннели сделаны для городков с пятью домами, а иногда даже и для одного.

Через все Лофотенские острова можно проехать по мостам, правда дорога виляет и поэтому последний участок пути занимает много времени.

Типичные домики норвежской расцветки.