Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение

«Программирование мышкой» в XCode 6 для Swift

Время на прочтение 5 мин
Количество просмотров 53K
Привет, Хабрахабр!

По причине недавно возникшей необходимости, пришлось писать под iOS, и я заметил сильную нехватку гайдов на русском языке даже для элементарных действий вроде «прицепить к нажатию кнопки какое-то действие», «считать данные из текстового окошка». Статья для начинающих разработчиков под iOS, прошу таких под кат.
Читать дальше →
Всего голосов 32: ↑26 и ↓6 +20
Комментарии 27

Тематические подписки в соцсетях

Время на прочтение 2 мин
Количество просмотров 1.3K
В современных соцсетях общего назначения, типа Фейсбук, имеем ситуацию, когда грубо говоря все пишут обо всём. Чтобы выделиться в таких условиях, вы должны 1) либо быть/стать фактически журналистом, умеющим находить наиболее востребованные темы и интересно писать о них, либо 2) привнести интерес к себе из реала, быть популярным или в чем-то успешным в традиционном социуме, либо 3) на чем-нибудь специализироваться и «бить в одну точку», постепенно формируя тематическое сообщество вокруг себя.
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 19

Yii 2.0 RC

Время на прочтение 7 мин
Количество просмотров 37K
Нам очень приятно сообщить о выходе RC (релиз кандидата) PHP-фреймворка Yii 2.0. Чтобы установить фреймворк или обновиться следуйте инструкциям на yiiframework.com.

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

Часто задаваемые вопросы



  • Что значит 2.0 RC? RC значит Release Candidate, то есть последний релиз перед стабильным GA (General Availability). До него остались, главным образом, правки небольших проблем и документация.
  • Когда будет стабильный релиз? Всё зависит от того, какие проблемы будут с RC. Предварительный план — сделать стабильный релиз примерно через две недели. Конечно, если RC покажет себя достаточно стабильным.
  • Могу ли я использовать RC в своих проектах? Да. Мы настоятельно рекомендуем попробовать его в новых проектах и будем признательны за сообщения об ошибках и просто отзывы. Так как стабильный релиз будет скоро, мы не советуем использовать RC на боевых серверах потому как, хоть это и маловероятно, в стабильной версии всё ещё может быть поломана обратная совместимость.
  • Есть ли документация по 2.0? Да, полное руководство, которое является самой полной документацией по 2.0 и документация по API — справочник, который поможет в использовании отдельных классов фреймворка.
  • Как обновиться с 1.1 на 2.0? Читайте Upgrading from Yii 1.1. Сразу отметим, что 2.0 полностью переписан и обновление не является тривиальным. Если ваше приложение на 1.1 работает хорошо и стабильно, рекомендуем продолжать использовать 1.1, если конечно у вас нет дополнительного времени и ресурсов для обновления.
  • Как обновиться с беты или альфы 2.0? Читайте инструкции в UPGRADE.
  • Как следить за разработкой 2.0? Вся разработка происходит на GitHub: github.com/yiisoft/yii2. Чтобы получать информацию об изменениях, можно отметить проект звёздочкой. Также можете подписаться на наш Twitter twitter.com/yiiframework и присоединиться к группе Facebook.


Читать дальше →
Всего голосов 56: ↑49 и ↓7 +42
Комментарии 78

Лёгкий способ писать iOS приложения на вебе

Время на прочтение 9 мин
Количество просмотров 84K
Всем привет. Не так давно Габриель подарил нам игру 2048. Это тот самый удивительный случай, когда клон игры становится более популярный, чем оригинал. Не малая часть успеха Габриеля — открытый код и, вуаля, MIT лицензия. Набрав чуть больше 20к очков, захотелось поделиться результатом с друзьями, кроме как сделать скриншот не получилось. Глянул аппстор на наличие клона с геймцентром или чем-то подобным — пусто. И тут подумал, почему бы нет?
Забегая вперёд, на создание приложения и всех «ништяков» к нему ушло 4 дня. На выходе универсальный код, который от части работает и в вебе и легко портируется на иос/андроид. Однако, давайте по порядку.


Читать дальше →
Всего голосов 78: ↑65 и ↓13 +52
Комментарии 41

Управление загрузкой изображений

Время на прочтение 4 мин
Количество просмотров 130K


Быстрая и плавная загрузка изображений — это одна из немаловажных составляющих хорошего веб-интерфейса. Кроме того, появляется все больше сайтов, использующие крупные фотографии в дизайне, таким проектам особенно важно следить за корректной загрузкой графики. В этой статье описано несколько техник, которые помогут контролировать загрузку изображений.

Использование контейнера для каждого изображения


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

<div class="img_wrapper">
    <img src="comicbookguy.jpg" alt=""/>
</div>

С помощью контейнера можно контролировать соотношение сторон картинки, а также использовать индикатор загрузки, что очень удобно, если изображения тяжелые.
Читать дальше →
Всего голосов 61: ↑49 и ↓12 +37
Комментарии 31

Загрузчик изображений и миниатюр. Новые стандарты, старые проблемы

Время на прочтение 6 мин
Количество просмотров 12K

Предисловие


Всем привет. Не так давно я написал статью о создании загрузчика изображений на флеше. Там я упомянул, что загрузчик можно реализовать и с помощью html5 File API. Несколько вечеров и — ура — я это сделал. Настало время рассказать, какие приемы я использовал, в каких браузерах это работает, и стоит ли этим вообще пользоваться.
Напомню вкратце требования: необходимо реализовать загрузчик изображений, поддерживающий пакетную загрузку, создание миниатюр(и загрузку их на сервер), и приемлемый интерфейс.
Читать дальше →
Всего голосов 33: ↑33 и ↓0 +33
Комментарии 39

Путешествия во времени и программирование 2: парадоксы

Время на прочтение 26 мин
Количество просмотров 215K


Эпоха путешествий во времени еще не наступила, а человечество уже давно пытается разрешить сопутствующие им парадоксы. Мы поговорим о самом очевидном из них: что же все-таки произойдет при вмешательстве в ход истории? Существует несколько вариантов того, как поток времени реагирует на действия путешественника из будущего. Эти модели можно увидеть в фантастических фильмах, о них все больше начинают говорить ученые, но какая модель ближе к истине — единого мнения пока нет. Мы только начинаем проникать в тайны времени, и еще не обладаем возможностью экспериментировать с перемещениями в прошлое. Что же можно прояснить в данном вопросе уже сейчас? Под катом нас ждет экскурсия по основам механики времени, мы порассуждаем о парадоксах, и проведем небольшой эксперимент. Да, это будет испытание виртуальной машины времени, построенной на основе алгоритма «Жизнь»!
Читать дальше →
Всего голосов 371: ↑351 и ↓20 +331
Комментарии 440

2400 иконок флагов под свободной лицензией

Время на прочтение 1 мин
Количество просмотров 90K


Самая большая коллекция флагов: 2400 пиктограмм размерами 16×16, 24×24, 32×32, 48×48 и 64×64. Есть государственные флаги всех стран, плюс бонусы: Англия, Абхазия, Нагорный Карабах, Красный крест, Южная Осетия, Сомалиленд, флаг Марса, НАТО и проч.

Все иконки в двух вариантах: стандартный и глянцевый.

Скачать:
www.gosquared.com/download/pixels/flags.zip

Лицензия MIT (GPL-совместимая), разрешает использование иконок в коммерческих проектах.
Всего голосов 93: ↑84 и ↓9 +75
Комментарии 30

Путешествия во времени и программирование

Время на прочтение 16 мин
Количество просмотров 72K

Сейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы.
Читать дальше →
Всего голосов 122: ↑89 и ↓33 +56
Комментарии 149

RedBeanPHP — CodeFirst PHP фреймворк

Время на прочтение 6 мин
Количество просмотров 30K
RedBeanPHP
В данном посте речь пойдет об весьма интересном ORM фреймворке RedBeanPHP. Примечателен он, прежде всего, возможностью создавать структуру базы данных на лету. К тому же фреймворк прост в использовании как две копейки. Моё повествование будет разделено на 3 части.
Во второй части основная тема будет — модели. В третей — изменение логики работы фреймворка.

Перед написанием поста я потрудился и сделал тестовое приложение с 15 000 записей, для того, что бы убедиться на своем опыте в возможности невероятно облегчить работу. Ведь я наверно не один, кто прописывает поля в нескольких местах с жутким осознанием бессмысленности этой работы, особенно на начальном этапе разработки. Наконец появился аналог Entity Framework Code First из .NET, который в свое время вызвал у меня дикий восторг. Итак по порядку.
Читать дальше →
Всего голосов 50: ↑40 и ↓10 +30
Комментарии 47

Подборка CSS3-генераторов для упрощения фронтэнд-разработки

Время на прочтение 2 мин
Количество просмотров 48K
CSS3 предоставляет много новых возможностей в мире фронтэнд-разработки. Это действительно великолепная вещь, но иногда трудно вспомнить некоторые параметры, особенно, если вы — веб-дизайнер, а не программист. Вот 10 удивительных CSS3-генераторов, которые помогут вам сэкономить время и силы (картинки кликабельны).
Читать дальше →
Всего голосов 80: ↑75 и ↓5 +70
Комментарии 23

Велосипеды на Javascript и jQuery

Время на прочтение 4 мин
Количество просмотров 76K
В очередной раз открыв код коллег и ужаснувшись, я решил написать эту статью. Надеюсь для кого-нибудь это будет полезным, заодно и мне будет проще новичкам объяснять что у них в коде не так, просто кинув ссылку на эту статью.
Безусловно количество таких вещей очень и очень велико, поэтому в статье ограничусь лишь некоторыми.
Читать дальше →
Всего голосов 258: ↑246 и ↓12 +234
Комментарии 189

Про jQuery и велосипеды — мое дополнение

Время на прочтение 6 мин
Количество просмотров 64K
Сразу спешу сообщить вам, что я никоим образом не связан с автором предыдущей статьи. Однако, прочитав ее и увидев такой положительный отклик сообщества на статью, я тоже вдохновился и решил добавить немного своих наблюдений и знаний, к тому же это может послужить моей входной точкой в круги хабрасообщества.

Для затравки начнем с простого.
Читать дальше →
Всего голосов 242: ↑230 и ↓12 +218
Комментарии 126

.phar — исполняемые PHP-архивы

Время на прочтение 4 мин
Количество просмотров 53K
Данную статью я хочу посвятить одному интересному нововведению в PHP 5.2 (с версии 5.3 входит в стандартную поставку PHP) — PHAR.
image
PHAR — это утилита для создания исполняемых архивов в PHP, аналог JAR в Java.
PHAR ползволяет упаковать много файлов в один, в результате чего Ваше приложение может работать с целой библиотекой, как с одним файлом.
PHAR умеет создавать, читать, записывать и конвертировать такие форматы, как TAR, ZIP и, собственно, PHAR.
Доступ к файлам в архиве осуществляется напрямую, без необходимости распаковки архива, через PHP Stream Wrapper, тоесть с файлами из архива работают все функции, которые поддерживают PHP Stream Wrapper.
Читать дальше →
Всего голосов 137: ↑128 и ↓9 +119
Комментарии 80

AzaThread — многопоточность для PHP с блэкджеком

Время на прочтение 6 мин
Количество просмотров 18K
В сети гуляет довольно много решений для эмуляции многопоточности в php. Чаще всего они основываются на форках, но есть и вариации на тему с использованием curl, proc_open и т.п.

Все встреченные варианты по тем или иным причинам меня не устроили и пришлось написать свое решение.
Набор требований у меня был следующий:
  • Использование форков;
  • Синхронный режим с сохранением интерфейса при отсутствии необходимых расширений;
  • Многократное использование дочерних процессов;
  • Полноценный обмен данными между процессами. Т.е. запуск с аргументами и получение результата по завершении;
  • Возможность обмена событиями между дочерним процессом-«потоком» и основным процессом во время работы;
  • Работа с пулом потоков с сохранением многократного использования, передачи аргументов и получения результатов;
  • Обработка ошибок выполнения;
  • Таймауты на выполнение работы, ожидание работы потоком, инициализацию;
  • Максимум производительности;

В результате получилась библиотека AzaThread (старое название — CThread).
Подробности
Всего голосов 156: ↑146 и ↓10 +136
Комментарии 66

Написание программ на PHP с использованием fork()

Время на прочтение 5 мин
Количество просмотров 37K

Параллельные программы на PHP


Раньше заголовок темы был «Написание многопоточных программ на PHP». В PHP есть ровно один «нормальный» способ писать приложения, которые используют несколько ядер/процессоров — это fork(). О прикладном использовании системного вызова fork() в языке PHP и расширения pcntl я и расскажу. В качестве примера мы напишем достаточно быструю параллельную реализацию grep (со скоростью работы, аналогичной find . -type f -print0 | xargs -0 -P $NUM_PROCS grep $EXPR).
Читать дальше →
Всего голосов 111: ↑89 и ↓22 +67
Комментарии 62

Как сделать группу инпутов удобной

Время на прочтение 2 мин
Количество просмотров 47K
Когда я работал над сервисом заметок jotsky.com, еще до работы в Островке, надо было сделать ввод телефонного номера из двух инпутов. Примерно такой:



Я сделал навигацию с помощью стрелочек. Сделал, чтобы по мере заполнения фокус переключался к следующем инпуту. А вот сделать правильную вставку из буфера обмена у меня никак не получалось.
Читать дальше →
Всего голосов 175: ↑162 и ↓13 +149
Комментарии 98

Работа с локальным хранилищем, как с объектом — Продолжение

Время на прочтение 3 мин
Количество просмотров 14K
Этим постом я бы хотел исправиться и предложить адекватный способ работы с хранилищем, как с объектом. Код из поста «Работа с локальным хранилищем, как с объектом? Легко!» использовать крайне не рекомендую, там всё плохо (минусы изложены внизу). Цель данного — объяснить всем тем, кто добавил статью по ссылке в избранное или поставил плюсик, никогда не использовать этот код.

Сейчас же я хочу продемонстрировать простейшую идею, предложенную Scalar в комментарии.

При загрузке страницы (даже до события готовности DOM дерева) обращаемся к хранилищу (в данном случае, это localStorage и sessionStorage), получить JSON, десериализовать его и положить в какую-нибудь переменную.
localObject = JSON.parse( localStorage.getItem( '_myStorage' ) ); // "{'a':1, 'b':2}" → {a:1, b:2}

Затем, каждые N миллисекунд производить обратный процесс:
localStorage.setItem( '_myStorage', JSON.stringify( localObject ) );

При событии onbeforeunload делать то же самое.

Реализация идеи проста (уровень сложности задачи низок и доступен даже новичку). Но, не все (и я в том числе) до этого додумались.
Код конструктора ObjectStorage
var ObjectStorage = function ObjectStorage( name, duration ) {
	var self,
		name = name || '_objectStorage',
		defaultDuration = 5000;
		
	// дабы не плодить кучу экземпляров, использующих один и тот же ключ хранилища, 
	// просто возвращаем единственный с заданным именем,
	// меняя только duration (если имеется)
	if ( ObjectStorage.instances[ name ] ) {
		self = ObjectStorage.instances[ name ];
		self.duration = duration || self.duration;
	} else {
		self = this;
		self._name = name;
		self.duration = duration || defaultDuration;
		self._init();
		ObjectStorage.instances[ name ] = self;
	}
	
	return self;
};
ObjectStorage.instances = {};
ObjectStorage.prototype = {
	// type == local || session
	_save: function ( type ) {
		var stringified = JSON.stringify( this[ type ] ),
			storage = window[ type + 'Storage' ];
		if ( storage.getItem( this._name ) !== stringified ) {
			storage.setItem( this._name, stringified );
		}
	},

	_get: function ( type ) {
		this[ type ] = JSON.parse( window[ type + 'Storage' ].getItem( this._name ) ) || {};
	},

	_init: function () {
		var self = this;
		self._get( 'local' );
		self._get( 'session' );

		( function callee() {
			self.timeoutId = setTimeout( function () {
				self._save( 'local' );
				callee();
			}, self._duration );
		})();

		window.addEventListener( 'beforeunload', function () {
			self._save( 'local' );
			self._save( 'session' );
		});
	},
	// на случай, если нужно удалить таймаут (clearTimeout( storage.timeoutId ))
	timeoutId: null,
	local: {},
	session: {}
};



Использование:
var storage = new ObjectStorage;
storage.local = {a:4, b: {c:5}};
storage.session = {a:7, b: {c:8}};
b = storage.local.b;
b.c = {d:6};

Читать дальше →
Всего голосов 28: ↑21 и ↓7 +14
Комментарии 42

Некоторые тонкости установки на сайт кнопок «Поделиться» (share) социальных сетей

Время на прочтение 5 мин
Количество просмотров 205K
Сегодня, в эпоху социальных медиа, принято давать посетителям сайта возможность поделиться с друзьями. Мы делали промо-страницу к Дню Рождения интернет-магазина Allsoft и нам нужно было установить кнопки «Поделиться» от Facebook, Twitter, Одноклассников, Вконтакте и Мой мир.

С первого взгляда показалось — что может быть тут особенного — поставил готовый html/js код и готово? Но тонкости оказались в деталях: что если для одной соц. сети нужно передавать один текст, а для другой — другой? Как правильно передать картинку и описание во все сети? А если несколько разных вариантов текста и картинок на одной странице? Как почистить уже закешированную информацию о ссылке в соц.сети? На все эти вопросы нам пришлось найти ответы, которые и вы сможете узнать из этой статьи.
Читать дальше →
Всего голосов 74: ↑59 и ↓15 +44
Комментарии 44

JavaScript паттерны… для чайников

Время на прочтение 8 мин
Количество просмотров 180K
Однажды вечером, сразу после того, как я закончил разбираться с наследованием в JS, мне пришла в голову идея, что пора бы заняться чем-нибудь посложнее — например паттернами. На столе внезапно оказалась книжка Gof, а на экране ноутбука появился труд с названием «JavaScript patterns».

В общем, спустя пару вечеров, у меня появились описания и реализации на JavaScriptе самых основных паттернов — Decorator, Observer, Factory, Mediator, Memoization (не совсем паттерн, а скорее техника, но мне кажется что она прекрасно в этот ряд вписывается) и Singleton.

Читать дальше →
Всего голосов 118: ↑108 и ↓10 +98
Комментарии 46
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность