Архив за 31 мая 2012 - 2

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

Сейчас же я хочу продемонстрировать проетейшую идею, предложенную 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 ) {
	this._name = name || this._name;
	this.duration  = duration || this.duration;
	this._init();
}

ObjectStorage.prototype = {
	_name: '_objectStorage',
	duration: 5000,
	// type == local || session
	_save: function( type ) {
		window[ type + 'Storage' ].setItem( this._name, JSON.stringify( this[ type ] ) );
	},
	
	_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() {
			setTimeout( function() {
				self._save( 'local' );
				callee();
			}, self._duration );
		})();
		
		window.addEventListener( 'beforeunload', function() {
			self._save( 'local' );
			self._save( 'session' );
		} );
	},
	
	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};

Читать полностью »

Разработка прогрессивного фильтра местоположения

Каждое взаимодействие, которое мы создаем, помогает определить и направить пользовательский опыт. Наилучшим вариантом будет разработка чего-то интуитивно понятного перед созданием эстетически приятного интерфейса. "Зачем изобретать"велосипед", если уже есть все готовое в различных шаблонах?!«, спросите вы.

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

Следующий пример поможет вам понять, о чем идет речь. Читать полностью »

Казалось бы, в погоне за планшетными компьютерами и ультрабуками производители готовых устройств начисто забыли о таком классе мобильных компьютеров, как нетбуки, однако нет-нет, да какая-нибудь компания возьмет и выпустит маленький ноутбук, укомплектованный процессором Intel Atom. Самый свежий тому пример — изделие японской фирмы Mouse Computer, названное LuvBook M. Новинка, как того и диктуют каноны жанра, комплектуется дисплеем диагональю 10,1 дюйма и центральным процессором Intel Atom N2800 (Cedar Trail).

Хотите подарить своей маме электронную книжку или какой-то другой цифровой объект? Будьте внимательны, это может нарушить патент на цифровые подарки, который только что получила компания Amazon. Патент США № 8,190,519 покрывает системы и методы для отправки и получения подарков, включая цифровые подарки, которые пересылаются по цифровым каналам связи.

Amazon патентует «цифровые подарки»
Читать полностью »

image

DISCLAIMER: не проматывайте этот пост только из-за того, что обзор книг – это неинтересно. Здесь будет пяток интересных цитат и ряд других полезных мыслей!

Если спросить у десяти разработчиков о паттернах проектирования и о том, какая книга является лучшим источником информации по этой теме, то 9 из 10 назовут знаменитую книгу банды четырех и будут правы. GoF – является классическим каталогом паттернов в том виде, в котором он был описан Кристофером Александером 35 лет назад и все еще остается бесценным справочником для любого программиста.

Но, как и у любого каталога (или справочника), Эрих Гамма и др. сосредотачиваются на применимости паттернов, на связях конкретного паттерна с другими, они дают примеры использования в реальных проектах, но они не учат (точнее, не акцентируют на этом внимание) тому, какие принципы объектно-ориентированного программирования эти паттерны решают; где найти ту грань, когда от паттернов лучше отказаться и не предупреждают о недостатках их чрезмерного использования.
Читать полностью »

Что же это за чудо — Beefy Miracle? История названия Fedora 17

В октябре прошлого года я получил сообщение в Твиттере. Это был Хот-Дог, также известный как Beefy Miracle, он сообщил мне, что последняя версия операционной системы Fedora — Fedora 17, будет названа в его честь. Выбор имени проводился голосованием, Beefy Miracle выиграл с отрывом в более чем 150 голосов! К слову, Fedora 17 совсем недавно вышла в свет.
Читать полностью »

Электронная коммерция в 16, или никогда не рано!

Кто-то в 16 лет первый раз выпил с друзьями, кто-то наконец-то взял 85 lvl в WoW, все они думают, что так и должно растрачиваться юношество. И знаете… мне кажется это печальным, посему расскажу, что я делал в свои 16. Кому интересно — добро пожаловать под кат!
Читать полностью »

Стартап в 16, или никогда не рано!

Кто-то в 16 лет первый раз выпил с друзьями, кто-то наконец-то взял 85 lvl в WoW, все они думают, что так и должно растрачиваться юношество. И знаете… мне кажется это печальным, посему расскажу, как я стартапил в свои 16. Кому интересно — добро пожаловать под кат!
Читать полностью »

Как все уже знают, на днях Яндекс анонсировал замечательное приложение Яндекс.Музыка для платформы iOS. На мой взгляд, самая главная киллер-фича данного приложения — это его способность воспроизводить музыку в off-line режиме.

Т.е. дома, открыв music.yandex.ru, добавляете в плейлисты любимую музыку, открываете приложение на iPhone и синхронизируете плей-листы.

Единственный момент, который меня напрягал во всей этой истории — это невозможность работать с музыкой на уровне альбомов. Нужно создать плейлист, назвать его, потом добавить туда все треки из альбома. Когда добавил плейлист — нет обратной ссылки на альбом.
Читать полностью »

Южнокорейская компания Samsung выпустила 2 новых устройства в линейке хромбуков и хромбоксов. На новых устройства будет доступна Chrome OS 19, которую специально подготовила компания Google к такому событию. В новой операционной системе улучшена интеграция с сервисами Google, появилась поддержка Google Drive, а также поддержка удалённого управления рабочим столом.
Новый хромбук (Samsung Series 5 550) и новый хромбок работают на базе процессора Intel Celeron. Устройства обладают 4 гигабайтами оперативной памяти, твердотельным накопителем SanDisk mSATA на 16 гигабайт. Хотя характеристики не внушительные, но по сравнению с прошлым поколением (процессор Intel Atom, 2 гигабайта Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js