Search
Write a publication
Pull to refresh
181
0.1
Send message

Codeigniter: делаем сессии наконец стабильными (прежде всего для авторизаций)

Reading time2 min
Views15K
Сессии в Codeigniter хороши всем. Правда, очень удобно сделаны, особенно когда вы храните сессии в БД (что я считаю единственно верным). Куки шифрованные, в куках ничего, кроме идентификатора нету. Они привязываются к user_agent и, опционально, к IP. Красиво, безопасно.

Но есть у них очень существенный недостаток: жизнь сессии считается от поля last_activity. Это значит, что если у вас стоит expire сессии в двое суток, то при обращении к сессии, у которой last_activity < time()-172800, она ликвидируется и начинется новая. Следственно, для того что бы пользователям не приходилось каждый раз логиниться на сайт, last_activity нужно поддерживать в акутальном состоянии.
Поле last_activity обновляется в двух случаях: когда вы записываете что-то новое в сессию, либо когда сессия обновляется (по-умолчанию каждые 5 минут, опять же, относительно last_activity; указывается в конфиге). И вот главная проблема в том, что при обновлении сессии меняется session_id и текущая сессия у пользователя сессия прерывается, стартует новая.

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

Проблема «животрепещущая», о ней часто вспоминают на форумах Codeigniter, но толкового решения там нигде я так и не увидел.

Но голь, как известно, на выдумки хитра, поэтому простое решение таки нашлось.
Читать дальше →

Разворачиваем приложение на чистой Убунте: от A до Z

Reading time5 min
Views3.8K
Итак, у вас есть чистая Ubuntu, в консоли открыто ssh-соединение с сервером и консоль вас заманчиво приглашает — «root@my-awesome-host:~#» — и больше ничего нет. А хочется запустить и показать всему миру какое-то рельсовое приложение. Поехали от супа до орехов.

Читать дальше →

Единая авторизация пользователей с поддержкой нескольких сервисов

Reading time6 min
Views68K
Yii EAuth extension При реализации одного из проектов на Yii framework у меня возникла задача сделать регистрацию и авторизацию пользователей через сторонние сервисы (Google, Facebook, Twitter, etc).

У данной задачи есть два пути решения:
  • Использовать сервис авторизации, например Loginza;
  • Реализовывать функции авторизации самостоятельно для каждого сервиса.
UPDATE: Актуальная версия и инструкция по настройке доступны на github.com. Инструкция в данной статье подходит для EAuth версии <= 1.1.3.
Я выбрал второй вариант...

Рекомендации по написанию HTML-кода начинающим web-разработчикам

Reading time2 min
Views4.8K
Очевидные вещи, которые выделил для себя. Хотелось бы, чтоб грамотные люди дополнили этот небольшой список. Цель — сделать код и свой, и других — более красивым, валидным, легко понимаемым и семантически грамотным.

Использование тега <br />

В основном это бывает нужно, для улучшения восприятия текста, точнее для форматирования одного элемента. Поэтому, когда нам нужно разделить несколько элементов или просто, чтоб новый элемент был в новой строчке, нужно использовать блочный элемент (div, p, h1..., у которых по умолчанию css-свойство display:block, но при этом, старайтесь не плодить лишних элементов). И если нужно сделать отступ, не нужно вставлять десять <br>, а нужно описать в css свойство margin.

Использование атрибута style и свойство !important

Это нужно в исключительных случаях, когда место уникальное. Почти всегда нужно использовать css-класс со свойствами вынесенными в css-файл. И даже если вам нужно спрятать элемент (display:none), лучше создать универсальный класс, (например css: .hidden {display:none;}), и писать <span class=”error hidden”>.
В описании класса, если у вас не применяется какое-то свойство, не нужно писать !important, чаще всего достаточно впереди дописать родительский селектор, и желательно — class, а не id.
Читать дальше →

Прием WebMoney без ухода с сайта

Reading time10 min
Views9.6K

Привет, хабр!

Хочу рассказать про прием WebMoney без перехода на сайт мерчанта Webmoney (merchant.webmoney.ru). Данный метод приема платежей может использоваться, и используется в оффлайн магазинах, небраузерных играх.

Интересно? Добро пожаловать под кат. Будет много php кода)
Читать дальше →

Pull request'ы на GitHub или Как мне внести изменения в чужой проект

Reading time6 min
Views523K
По просьбе tulskiy делаю вольный перевод частей официальной документации GitHub'а Fork A Repo и Send pull requests.

Итак, что же такое «запрос на включение (сделанных вами изменений)» (именно так я перевёл pull request)? В официальной документации гитхаба говорится следующее:
Pull request'ы позволяют вам рассказать другим о тех изменениях, которые вы разместили в своём GitHub-репозитории. Как только pull request отправлен, заинтересованные стороны рассматривают ваши изменения, обсуждают возможные правки или даже добавляют дополняющие коммиты, если нужно.

Говоря своим языком: Посылая pull request, вы говорите автору изначального репозитория (и всем заинтересованным лицам): «Смотрите, что я сделал, не хотите ли принять мои изменения и влить их в проект?»
Читать дальше, но теперь уже обо всём по порядку

Хитрости и трюки при использовании Wine

Reading time5 min
Views241K
image

Всем привет!
Прочел статью про «Все тонкости настройки Wine», оказалось, что там далеко не все тонкости. Поэтому написал этот пост как дополнение тому.

В данном посте в основном вольный перевод оф. документации, а так же несколько своих и чужих хитростей при работе с вайн.
Скорее всего данный пост будет интересен новичкам и обычным пользователям GNU\Linux. Тем не менее добротные советы от специалистов не будут лишними.
Читать дальше →

Версионная миграция структуры базы данных: основные подходы

Reading time15 min
Views139K
Проблемы контроля версий баз данных и миграций между версиями уже не раз поднимались как на Хабре (1, 2, 3 и др.), так и в Интернете (преимущественно, англоязычном).

В первом разделе этой статьи я рассматриваю основные проблемы, которые возникают в командах программистов при внесении любых изменений в структуру базы данных. Во втором разделе я попытался выделить основные общие подходы к тому, в каком виде изменения структуры базы данных можно хранить и поддерживать в процессе разработки.
Читать дальше →

Разработка игр с использованием Cocos2d на Python

Reading time5 min
Views33K
image

Введение


Имплементация Cocos2d на Objective-C используется для разработки игр для iPhone весьма широко. По данным официального сайта число игр на этом движке уже превышает 1800. Не раз упоминался он и на Хабре. Другие порты (cocos2d-x на C++ и cocos2d-android на Java) также известны и набирают популярность. Однако прародитель этих движков, оригинальный Cocos2d оказался незаслуженно обойден вниманием. Попробую восполнить этот пробел.
Читать дальше →

Решаем проблему родительского контроля в Ubuntu с помощью Dansguardian и Privoxy

Reading time5 min
Views33K
Я придерживаюсь мнения, что Ubuntu вполне себе подходит на роль user-friendly десктопной операционной системы.

Соответственно, считаю, что при покупке компьютеров и ноутбуков на стоимости лицензионной Windows вполне можно сэкономить, поставив бесплатную (открытую) ОС (вспомните, сколько, лет 5 назад, продавалось ноутов с Linux, и сколько сейчас).

Детям я купил неттоп Acer Aspire Revo R3700, который, наверное, сам по себе стоит отдельного обзора (двухъядерный Atom + Ion), прикрутил его сзади к монитору, благо оба поддерживают стандарт крепления VESA (получился этакий компактный моноблок), снес предустановленный Linpus и поставил Ubuntu 10.10

В принципе, и я, и мои дети были всем довольны — работает все достаточно шустро (тьфу-тьфу-тьфу), посёрфить в интернете, посмотреть фотки, послушать музыку, поиграть в детские и обучающие игры — для этого неттоп подходит, на мой взгляд, идеально. Единственное, что удручало, это баннеры на различных, даже детских (!), сайтах со всяким контентом (прежде всего, визуальным), от которого очень хотелось детей оградить.

Вот тут меня и постигло разочарование, когда узнал, что встроенного (штатного) родительского контроля в Ubuntu попросту нет. В Windows Vista и 7 — есть, есть много отдельных «виндовых» программ, например, Интернет Цензор (пробовал под Windows в свое время, в принципе, остался доволен).

Вариант решения для тех, кто тоже озабочен похожими проблемами...

Видеокурс по Kohana 3.1

Reading time2 min
Views18K
Приветствую вас, уважаемые хабралюди!

Хочу предложить вашему вниманию видеокурс моего производства по фреймворку Kohana 3.1.

Что за видеокурс такой и кому он нужен: видеокурс бесплатный, доступен без предварительной регистрации — я не последователь Азамата Ушанова (да-да, такие еще остались, но нас очень мало).

Основная цель видеокурса: рассказать понятным языком (доступным даже начинающему) о преимуществах ООП и MVC-подхода, о возможностях фреймворка Kohana в плане упрощения труда программиста в реализации часто используемых модулей.

Дело в том, что официальное руководство пользователя Kohana 3.1 никуда не годится (тем более для начинающего веб-мастера), получить структурированную в сложностно-тематическую последовательность информацию из разрозненных постов на блогах — весьма сложно. Я решил компенсировать этот недостаток выпуском видеокурса с последовательным изложением материала, от установки локальной среды разработки до реализации конкретного проекта на Kohana (проект — некая образовательная система, которую, от урока к уроку, я программирую на ваших глазах).

На кого рассчитан видеокурс: начинающие веб-мастера, желающие перейти от программирования на чистом PHP к MVC-фреймворку.
Читать дальше →

Как добавить Fixed в konsole

Reading time2 min
Views1.2K
Данная проблема актуальна для Debian, который до сих пор использует KDE версии 3.5 и в котором эмулятор терминала konsole по умолчанию не использует Fixed фонты. Меня данное обстоятельство сильно угнетало так так текст с которым я работаю в редакторе vim выглядит прилично только с этим фонтом. Проблема усугубляется тем, что сие обстоятельство весьма плохо гуглится и для того чтобы найти решение мне пришлось искать информацию и пробовать разные настройки довольно долго. Надеюсь вам это сэкономит время.
Итак, первым делом надо подправить файл /etc/fonts/conf.avail/99-konsole.conf, чтобы он выглядел так:
Читать дальше →

Свет и освещение

Reading time7 min
Views165K
Часто (в том числе и на хабре) всплывает вопрос освещения, особенно «нанотехнологиченого» светодиодного и зачастую говны священных войн «светодиод» против люминисцентных ламп начинают подбурливать. Больше года я уже собирался написать статью о свете, и оно наконец свершилось.
Из этой статьи вы узнаете почему в фотостудиях не снимают с люминесцентными лампами, почему светодиоды до сих пор не захватили мир и стоит ли ими освещать улицы. Поехали!
Читать дальше →

Kohana 3.0 — упрощаем себе жизнь

Reading time8 min
Views10K
Фреймворк — это хорошо, это здорово, это возможность сэкономить кучу времени на раздумьях над архитектурой будущего приложения, но… Фреймворк как таковой — это каркас. И, на примере Kohana 3.0, о которой в данной статье пойдет речь, каркас этот надо, в той или иной степени, допиливать.
Теперь давайте по-порядку, чем мы сейчас займемся:
  • -Расширим базовый контроллер, добавив в него жизненно необходимые методы и работу с юзерами (которая присутствует в 99% проектов, хотя бы на уровне административного логина)
  • -Создадим свой фронт-контроллер для более удобной и красивой работы с вью-файлами
  • -Реализуем вывод ошибок валидации через фронт-контроллер
  • -Улучшим базовый класс View
  • -Ну и еще кое-какие полезные мелочи

Итак, начнем…
Читать дальше →

Глава 3. Оживляем страницу с jQuery

Reading time8 min
Views15K
Очередная глава из книги «jQuery in Action» (авторы Bear Bibeault и Yehuda Katz). Прежде всего извиняюсь перед читателями за столь большой промежуток между публикациями глав. Но все-таки я это сделал, чему, конечно же, рад. Надеюсь, что и вы тоже не останетесь равнодушными. Итак, продалжаем.

Читать дальше →

Измерение расстояния до объекта и его скорости

Reading time9 min
Views60K
Технологию, которую я собираюсь Вам представить, я не встречал в найденных мной методах определения расстояния до объекта на изображении. Она не является ни универсальной, ни сложной, суть её заключается в том, что видимое поле (будем считать, что мы используем видеокамеру) калибруется линейкой и затем сопоставляется координата объекта на изображении с отметкой на линейке. То есть измерение ведётся по одной линии или оси. Но нам не нужно хранить отметку на линейке для каждого пикселя, алгоритму для калибровки нужно только знать размер линейки в пикселях и в метрах, а также координату пикселя, который является фактической серединой линейки. Очевидное ограничение — работает только на плоских поверхностях.

Кроме самого метода в статье рассмотрена его реализация на языке Python с использованием библиотеки OpenCV, а также рассмотрены особенности получения изображений с вебкамер в Linux, используя video4linux2 API.


Читать дальше →

Заработать на контенте

Reading time5 min
Views29K
Периодически ко мне обращаются пользователи Хабра со своими идеями создания сайтов. Естественно, почти все хотят на них так или иначе заработать.

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

Они достаточно знают о том, какие способы рекламы использовать, но главный вопрос, который их мучает – о чем сделать сайт?

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

Все это, несомненно, важно, но только после первого шага – выбора тематики проекта.
подробности

Про фрилансера Ивана и как он не вставал с дивана

Reading time6 min
Views49K
Совсем недавно мы писали о том, как сдавать жилье в аренду, не навлечь на себя гнев государства и не вылететь при этом в трубу, используя простые практические советы по оптимизации налогообложения, рациональный подход и электронного бухгалтера «Эльбу».

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

Динамическое программирование. Классические задачи

Reading time8 min
Views332K
Здравствуй, Хабрахабр. В настоящий момент я работаю над учебным пособием по олимпиадному программированию, один из параграфов которого посвящен динамическому программированию. Ниже приведена выдержка из данного параграфа. Пытаясь объяснить данную тему как можно проще, я постарался сложные моменты сопроводить иллюстрациями. Мне интересно ваше мнение о том, насколько понятным получился данный материал. Также буду рад советам, какие еще задачи стоит включить в данный раздел.

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

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

Такие задачи решают методом динамического программирования, а под самим динамическим программированием понимают сведение задачи к подзадачам.
Читать дальше →

Information

Rating
5,355-th
Registered
Activity