Javascript.RU

Google Gears в деталях

О Google Gears можно услышать довольно много чего интересного. Дескать, есть такой мегаплагин, добавляет кучу возможностей. И еще - с ним можно оптимизировать сайты.

Посмотрим подробнее, что это такое, для чего он нужен, что умеет.

Эта статья не ставит своей целью заменить документацию по Google Gears (которой, к сожалению, нет на русском языке). Ее цель - показать основные возможности Google Gears и существующие способы их применения, включая использование Gears в Joomla, Wordpress, Youtube.

UPDATE: в связи с тем, что технология умерла, статья имеет интерес разве что исторический.

Google Gears (или просто Gears) - плагин для браузера. На момент написания статьи работает во всех современных браузерах, кроме Safari 4 и Opera Desktop до 10 версии включительно.

Конечно, этот плагин надо ставить. Обычно браузер предлагает это сделать в виде выпадающего сообщения.

Gears добавляет в javascript:

  • Базу данных (SQLite)
  • Реальную многопоточность (точнее многопроцессность)
  • Возможность кросс-доменного общения для скриптов
  • Локальный сервер для работы оффлайн
  • Доступ из javascript к содержимому(только на чтение) выбранных пользователем файлов. Есть свой селектор для выбора нескольких файлов одновременно.
  • Взаимодействие с OS в плане создания ярлыков и drag'n'drop
  • Geolocation API для определения координат, включая устройства с GPS
  • Простейшие возможности по работе с изображениями в javascript.

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

Разберем все это поподробнее.

В спецификации HTML 5 предусмотрено хранение и доступ к данным при помощи SQL: Offline Web Applications. Эта возможность поддерживается в Safari.

Google Gears пошел другим путем и предоставляет свой SQL-интерфейс Database API.

Основное отличие - в Gears запросы к базе синхронные, а в HTML 5 - асинхронные (назначается callback на получение результата). Это удобно, т.к. для асинхронности в gears можно использовать многопоточность там, где это нужно.

  • Удалены некоторые возможности SQLite - в основном это касается работы напрямую с файловой системой и системных опций.
  • Жестко задана кодировка: UTF-8.
  • Есть полнотекстовой поиск FTS2 (не для русского языка).
  • Файл с базой хранится внутри домашней директории пользователя. Таким образом, разграничение доступа между пользователями компьютера осуществляется средствами OS.
  • Одновременно в базу может писать только один процесс - иначе генерируется исключение.
  • Много баз данных. Но базы привязаны к текущему протоколу-порту-домену. То есть, базы с одинаковым именем для разных сайтов никак не пересекаются (Same Origin), и залезть с одного сайта в базу другого нельзя.

Доступ к базе требует разрешения от посетителя.

Следующий пример создаст базу и таблицу (если не существует) и добавит туда запись. Многократный запуск добавит много записей, который сохранятся в базе на локальном компьютере.

Пример: Записать в таблицу и сделать выборку
var db = google.gears.factory.create('beta.database');

db.open('js');
db.execute('create table if not exists test(phrase text, created datetime)');

var phrase = prompt("Введите фразу")

db.execute('insert into test values (?, datetime())', [phrase])
var rs = db.execute('select * from test order by created desc')

while (rs.isValidRow()) {
  alert(rs.field(0) + ' создано ' + rs.field(1))
  rs.next()
}
rs.close()
Пример: Удалить базу
var db = google.gears.factory.create('beta.database')
db.open('js')
db.remove()

Здесь, как и в дальнейших примерах, пропущена проверка ошибок выполнения. Например, посетитель может запретить Google Gears. При любых ошибках gears инициирует исключения, которые легко поймать конструкцией try..catch.

В SDK, которое предоставляет google, есть SQL-консоль для работы с базой.

Открыть консоль в ифрейме

API на сайте Google: http://code.google.com/apis/gears/api_database.html.

Многопоточность, а точнее, многопроцессность - пожалуй, самая интересная возможность Google Gears.

Каждый новый поток является отдельным процессом со своими переменными и средой выполнения.

Реализуется она при помощи WorkerPool API, которое представляет собой вольную переработку черновика Web Workers из HTML5.

Новые процессы запускаются вызовом createWorker/createWorkerFromUri класса WorkerPool.

// получить разрешение на доступ к WorkerPool
workerPool = google.gears.factory.create('beta.workerpool')

// создать новый процесс, загрузить для выполнения скрипт worker.js
int childId = workerPool.createWorkerFromUrl('/files/gears/worker.js')

Эти методы возвращают идентификатор, который мы можем использовать для общения с процессом.

Это делается методом workerPool.sendMessage:

workerPool.sendMessage("Ответь мне, процесс!", childId)

Чтобы принять сообщение, в скрипте дочернего процесса (worker.js) должен быть определен метод onmessage на неявно передаваемом в дочерний поток объекте google.gears.workerPool:

Пример: worker.js
google.gears.workerPool.onmessage = function(a,b, message) {
  var reply = "Пришло: "+message.body

  // ответить пославшему 
  google.gears.workerPool.sendMessage(reply, message.sender);
}

У метода onmessage - три аргумента. Первые 2 устарели и не нужны, а третий - собственно, сообщение message со свойствами:

body
Переданное в sendMessage сообщение. В примере - строка, а вообще - может быть любой объект
sender
ID процесса, пославшего сообщение. В примере - ID родителя, основного javascript-процесса
origin
URL, с которого работает пославший сообщение процесс, в форме ПРОТОКОЛ://ДОМЕН(PORT), причем порт отсутствует для стандартных портов 80 и 443

В ответ наш основной процесс может вывести то, что получил:

workerPool.onmessage = function(a,b, message) {
  alert("От потомка: "+message.body)
}

Итак, полный код примера:

workerPool = google.gears.factory.create('beta.workerpool')

// работает синхронно, т.е. к следующей строке кода поток будет готов 
childId = workerPool.createWorkerFromUrl('/files/gears/worker.js')

workerPool.onmessage = function(a,b, message) {
  alert("От потомка: "+message.body)
}

workerPool.sendMessage("Ответь мне, процесс!", childId)

Файл worker.js: /files/gears/worker.js.

Скрипт, загруженный createWorkerFromUrl с другого URL, будет выполняться в контексте безопасности этого URL, и при этом общаться с основным процессом.

Соответственно, можно наладить кросс-доменную коммуникацию без всяких трюков с iframe и проксированием, и даже без postMessage/XDomainRequest.

Об этом написано в секции документации Cross-origin workers WorkerPool API.

  • Дочерние процессы не имеют доступа к объектам document и window. Для рисования используйте основной javascript-процесс. А вместо XmlHttpRequest и setTimeout/setInterval, которые есть в window, Gears предоставляет сходные аналоги: HttpRequest и Timer.
  • Невозможна одновременная запись в базу с разных потоков. Один запишет, другие получат исключения. Соответственно, нужно закладывать в код обработку исключений и повторение SQL-запроса.
  • Метод createWorkerFromUrl не работает из дочерних процессов. В них можно использовать метод createWorker, которому передается не URL, а текст скрипта.

API на сайте Google: http://code.google.com/intl/ru/apis/gears/api_workerpool.html.

Локальный сервер - пожалуй, самая востребованная часть Google Gears API.
По смыслу - это не совсем тот сервер, о котором привык слышать веб-разработчик.

Он умеет две основные вещи.

  1. Загружать одну страницу или их список в локальное хранилище
  2. Неявно перехватывать обращения браузера к загруженным страницам и отдавать их из локального хранилища.

Разумеется, поддерживается и обновление локального хранилища.

Хранилище работает в рамках стандартного контекста безопасности Same Origin, так что сохранить локально можно только страницы с текущего протокола-домена-порта.

Для инициализации хранилища используется фабричный класс LocalServer

var localServer = google.gears.factory.create('beta.localserver')

Этот вызов требует разрешения от посетителя.

Основные методы LocalServer:

  • createStore / openStore / removeStore - для управления хранилищем типа ResourceStore
  • createManagedStore / openManagedStore / removeManagedStore - для управления хранилищем типа ManagedResourceStore

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

Если запрошенная посетителем страница есть в хранилище - запрос будет перехвачен LocalServer'ом, и она будет взята из локального хранилища, а не с удаленного сервера.

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

Таким образом, можно например привязать хранилище к ID посетителя:

var localServer = google.gears.factory.create('beta.localserver')
// создать или открыть, если есть
var store = localServer.createManagedStore('data', 'userid=123')

Данные этого хранилища будут доступны только посетителю с cookie: userid=123.
Конечно, эта мера скорее нацелена на удобство, нежели на безопасность.
Но часто бывает, что у одного человека есть несколько аккаунтов, скажем, почтовых, и здесь ограничение requiredCookie может быть как нельзя более удобно.

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

Это хранилище целиком настраивается на клиенте. Оно позволяет получать с сервера произвольные страницы (или сразу много страниц).

Основной метод: capture(urlOrUrlArray, callback) - получает и сохраняет страницы с сервера.

Для примера посмотрим на таймер. Это обычный div, для которого javascript при помощи xmlhttprequest раз в секунду запрашивает с сервера страницу time.php с текущим серверным временем и выводит ее в div с id="timer".

Кликните, пожалуйста, на кнопку запуска для активации кода таймера:

// используется jQuery функция load, получающая данные
// при помощи XMLHttpRequest
setInterval(function() { $('#timer').load('/files/gears/time.php') }, 1000)

После того, как вы запустите следующий код, время застынет, т.к. страница time.php, содержимое которой ежесекундно попадает в div, станет отдаваться не с сервера, а с вашей машины.

Пример: Загрузить страницу в хранилище
var localServer = google.gears.factory.create('beta.localserver')
var store = localServer.createStore('time-store')
store.capture(
  "/files/gears/time.php", 
  function() { alert('Страница загружена в хранилище') }
)

А этот код удалит страницу из хранилища, после чего таймер опять заработает.

Пример: Удалить страницу из хранилища
var localServer = google.gears.factory.create('beta.localserver')
var store = localServer.createStore('time-store')
store.remove("/files/gears/time.php")
alert('Страница удалена из хранилища')

Для хранилища нет разницы, как запрашивается страница: напрямую или через xmlhttprequest - оно проверяет точное совпадение URL и возвращает страницу из хранилища, если она там есть.

Это, пожалуй, самый востребованный тип хранилища. У него есть два важных свойства:

  1. Он получает список URL для локального-хранения с сервера, в виде файла-"манифеста" в формате JSON. Кроме того, манифест содержит версию.
  2. Каждый URL в манифесте может содержать дополнительные опции поиска совпадения:
    ignoreQuery
    при поиске в хранилище параметры (все после вопр. знака) будут игнорироваться
    matchQuery
    Набор условий на параметры запроса, при совпадении страница будет возвращена из хранилища

После получения манифеста Gears скачивает все перечисленные там страницы и сохраняет их локально.

При каждом изменении версии манифеста все файлы будут скачаны заново.

Типичный способ использования:

  1. Создать хранилище:
    var localServer = google.gears.factory.create('beta.localserver')
    var store = localServer.createManagedStore('store')
    
  2. Запросить с сервера манифест:
    store.manifestUrl = '/files/gears/manifest.php'
    
  3. Запустить процесс обновления:

    store.checkForUpdate()
    

    Метод checkForUpdate работает асинхронно, ход обновления можно узнать, прикрепив обработчики к хранилищу для событий onprogress/onerror/oncomplete.

Если не запускать обновления явным образом при помощи checkForUpdate - Gears будет проверять обновления (запрашивать сервер) самостоятельно при каждом получении страницы из хранилища, но не чаще чем раз в 10 секунд.

В этом - важное отличие от обычного ResourceStore, которое обновляется только "вручную".

Следующий пример манифеста содержит основные используемые опции с комментариями к ним.

{
  // версия манифеста
  "betaManifestVersion": 2,

  // версия манифеста
  "version": "123456789",

  // список страниц,
  // относительные пути - идут относительно URL манифеста 
  "entries": [
      // загрузить ресурс с сервера и сохранить локально
      { "url": "main.js" }

      // локальный URL: main.html, удаленный - main_offline.html
      // при запросе main.html, LocalServer вернет main_offline.html
      { "url": "main.html", "src": "main_offline.html" },

      // вместо src указана опция redirect
      // LocalServer перенаправит браузер на main.html со статусом 302
      { "url": ".", "redirect": "main.html" },

      // выдавать локально сохраненный formHandler.html
      // при любых запросах вида formHandler.html?param1=..&param2...
      { "url": "formHandler.html", "ignoreQuery": true }
    ]
}

Более подробную информацию вы можете получить в документации к манифесту.

Как правило, набор статических файлов (картинок, стилей, скриптов) - не меняется в пределах версии сайта/релиза/"апа"/"деплоя на продакшн".

Поэтому, указав эту версию в манифесте (например, точную дату или ревизию), и собрав в нем всю статику, можно позволить Gears один раз загрузить весь набор и навсегда (до следующей версии) избавить посетителя от лишних запросов к серверу.

Все картинки, скрипты и т.п. Gears будет возвращать из соответствующего ManagedResourceStore.

Таким образом оптимизируют свои админки контент-системы, такие как Joomla, Wordpress и т.п.

Грамотно настроенный веб-сервер/приложение, использующие технологии Умное Кеширование и Версионность в Javascript/CSS, могут быть так же эффективны, и при этом не нужно плагина на клиенте.

Хотя для такой настройки сервера есть ряд ограничений, в частности, в URL лучше не иметь знак вопроса - некоторые браузеры не будут жестко кешировать такие страницы, она вполне применима и отлично работает. Без Gears. Более подробно - описано в самой статье.

  • Умное кеширование не требует плагина.
  • ManagedResourceStore почти не требует изменения в приложении, просто пишется небольшой дополнительный код для создания и обновления манифеста.
  • Умное кеширование позволяет обновить один ресурс, не затрагивая остальные
  • ManagedResourceStore позволяет:
    • указать опции сравнения: ignoreQuery/matchQuery
    • выбирать хранилище по имени в методе openManagedStore
    • ограничить хранилище указанием requiredCookie

Как видите, есть место для обоих технологий.

Кстати, о плагинах...

В Firefox к Gears имеют доступ расширения. Это можно использовать. Например, Greasemonkey может запускать пользовательские скрипты для сайта.

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

Все начинается с класса Desktop, метода openFiles.

Он позволяет посетителю выбрать несколько файлов "родным" селектором операционной системы. Например, в Windows можно выделить файлы мышкой.

Первый аргумент - функция, которой будут передан
ы выбранные файлы, вторым можно указать объект опций с параметрами filter/singleFile (см. OpenFileOptions).

var desktop = google.gears.factory.create('beta.desktop');
desktop.openFiles(
  function (files) { alert('Выбрано файлов: ' + files.length) }
)

Вызвать эту функцию можно, например, при клике на кнопку, то есть вообще без элемента типа <input type="file">.

Файлы передаются в виде массива объектов типа File.
Каждый файл имеет имя name и содержимое blob.

Доступ к содержимому файла предоставляет наибольший интерес.
Это объект типа Blob.

Gears предоставляет следующие возможности для манипуляции Blob.

  • Canvas API позволяет делать операции crop/resize над файлами-изображениями.
  • Blob API дает возможность вырезать часть Blob'а, а BlobBuilder - добавить данные к существующему Blob
  • Локальное хранилище ResourceStore предоставляет метод getAsBlob(url), возвращающий полученный ресурс в виде Blob. Таким образом, Blob можно получить из файла с сервера
  • HttpRequest (аналог XmlHttpRequest) умеет отправлять Blob на сервер и возвращать текущее состояние процесса загрузки ProgressEvent.

Сетевые операции, как и все операции gears, выполняются только в контексте текущего протокола-домена-порта (same origin).

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

Что это дает на практике?

Для картинок - можно обрабатывать их локально (на уровне crop/resize). Объект Canvas умеет делать операции над Blob, но не умеет показывать картинку на экране.

Поэтому показ картинки (и вообще, типичный способ добавления Blob в DOM) состоит из следующих шагов:

  1. Подготовить объект типа Blob
  2. Загрузить его в локальное хранилище типа ResourceStore, используя метод captureBlob(Blob blob, string url, string optContentType)
  3. Вставить на страницу элемент, который прочитает данные с адреса url, например <img src="url">

Продемонстрируем это на примере.

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

Конечно, не всем нужно масштабировать картинки, но пример - типовой и демонстрирует один из вариантов использования разных компонент gears вместе.

Контейнер для картинки:

function resize() {
  var desktop = google.gears.factory.create('beta.desktop');
  // опция singleFile для выбора не более одного файла
  desktop.openFiles(resizeAndShow,
    { singleFile : true, filter: ['image/jpeg', 'image/gif', 'image/png'] }
  )
}

function resizeAndShow(files) {
  // (1)
  var canvas = google.gears.factory.create('beta.canvas');
  canvas.decode(files[0].blob)
  canvas.resize(150,150)
  var blob = canvas.encode("image/jpeg")

  // (2)
  var localServer = google.gears.factory.create('beta.localserver')
  var store = localServer.createStore('store')
  // (2.1)
  var url = '/img.jpg?'+Math.random()
  store.captureBlob(blob, url, "image/jpeg")  
  // (3)
  $('#resized').css('background-image', 'url('+url+')')
  $('#resized')[0].scrollIntoView()

  // (4)
  setTimeout(function (){store.remove(url)},0)
}

Функция resize запускает выбор файла, а resizeAndShow выполняет основные операции.
Рассмотрим ее более подробно.

  1. Декодировать картинку из содержимого первого (в нашем случае - единственного) выбранного файла, отмасштабировать ее, а затем обратно закодировать в Blob.
  2. Инициализовать хранилище
    1. Положить картинку в хранилище по временному адресу, чтобы затем браузер отобразил ее, обратившись по нему. Используется временный URL.

      Чтобы избежать возможного кеширования, он выбирается случайным образом.

      Хранилище ResourceStore возвратит картинку только при полном совпадении url, так что конфликта с обычным изображением img.jpg не возникнет.

      При записи картинки в хранилище явно указан тип содержания: image/jpeg

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

    Если убрать setTimeout, то remove выполнится тут же, до того как браузер отрендерит background-image. Использование setTimeout откладывает вызов, так что он произойдет после показа картинки.

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

Youtube давно использует Google Gears для закачивания больших файлов: http://www.youtube.com/my_videos_multiupload.
При помощи Gears это реализуется очень удобно.

Используемые компоненты Gears:

HttpRequest
Для коммуникации с сервером.
Desktop API
Для выбора файла посетителем.
Blob API
Для доступа к части файла, т.е. большой файл отправляется на сервер по частям.
Worker API
Для создания отдельного потока, который загружает файл.

Файлы, реализующие закачку, не обфусцированы и доступны напрямую по ссылкам (на всякий случай сделал зеркало).

Общая схема загрузки файла на Youtube такова.

  1. Пользователь выбирает файлы при помощи desktop.openFiles, что дает нам содержимое файла в виде объекта Blob
  2. Для отправки файла на сервер инициализуется объект up.SingleUploader.
  3. Файл пересылается по частям, максимальный размер части задан константой up.CHUNK_SIZE. Пересылку каждой части выполняет метод upload_.
  4. Внутри upload_ первый, а затем и каждый следующий кусок выдирается из файла в виде строки вызовом Blob API: file.blob.slice. Текущая позиция в файле сохраняется в свойстве offset.
  5. Подготавливаются стандартные заголовки загрузки файла, включая Content-Disposition, а также добавляются заголовки с авторизационными данными и идентификатор пересылки.
  6. Данные файла, заголовки и каллбэки отправляются на выполнение Worker'у, который отсылает запрос на сервер
  7. По мере выполнения запроса HttpRequest вызывает событие onprogress. Это событие Worker через каллбэк транслирует основному процессу, который рисует progress bar.
  8. По завершении закачки Worker вызывает каллбэк основного процесса onUploadComplete_, который, если все в порядке, снова вызывает upload_ (см. 4).
  9. Метод upload_, как только увидит (сравнив offset с размером файла), что пересылка подошла к концу, вызывает finishUpload_
  10. Серверная часть отслеживает пересылку по идентификатору пересылки и собирает большой файл по частям.

Конкретные детали, если они вам понадобятся, вы без труда поймете из кода. Все реализуется корректно и без каких-либо хаков.

Надо сказать, идея Youtube не нова. Такой способ отсылки запросов на сервер можно использовать и со стандартным XMLHTTPRequest. Другое дело, что передать содержимое файла XMLHTTPRequest средствами стандартного javascript нельзя.

Да и остальные компоненты Gears здесь как нельзя кстати.

На этом описание возможностей Google Gears подошло к концу. Все основные возможности мы разобрали.

Остались всего несколько небольших.

  • Создание shortcut на рабочем столе с указанием иконки через URL. Делается desktop.createShortcut (Google demo)
  • Получение текущего местоположения позиции вызовом Geolocation API - работает, в том числе, и для мобильных устройств.
  • Принятие Drag'n'drop объектов на уровне OS (перенос объектов в окошко браузера) при помощи Desktop API.
    Эта часть HTML5 частично реализована в Firefox 3.5, но Gears позволяет читать содержимое перенесенных файлов.

Разобраться с этими возможностями вы легко сможете из примеров. Пока я не встречал их удачного применения в известных приложениях, но кто знает - может быть, вы будете первым.

Теперь и правда все. Gear it up, dude!

Следующие ссылки содержат основную информацию о разработке и Gears API.


Автор: itrelease (не зарегистрирован), дата: 6 октября, 2009 - 11:55
#permalink

Отличная статья, спасибо!


Автор: Rpsl (не зарегистрирован), дата: 8 октября, 2009 - 11:09
#permalink

Спасибо, отличная статья, а где еще можно посмотреть примеры?


Автор: Боб (не зарегистрирован), дата: 8 октября, 2009 - 11:29
#permalink

Очень-очень интересно написано! Отличная технология.


Автор: Олег Думов (не зарегистрирован), дата: 18 июня, 2021 - 16:56
#permalink

Да, согласен, технология довольно простоая


Автор: Lexmirnov (не зарегистрирован), дата: 8 октября, 2009 - 12:45
#permalink

Большое спасибо, Илья, очень интересно, недолго и по делу ) Посоветую друзьям.


Автор: Гость (не зарегистрирован), дата: 8 октября, 2009 - 18:30
#permalink

Автор: Assargin (не зарегистрирован), дата: 20 октября, 2009 - 09:05
#permalink

Статья просто великолепна, таких очень мало. Хочется узнать у народа, кто-нибудь делал что-нибудь стоящее на основе этой технологии? Как я понял, она вполне подходит, чтобы создавать не просто веб-приложения, а приложения с локальным хранилищем данных, например, для тех, у кого слабый или дорогой интернет, чтобы не постоянно быть онлайн, а типа регулярно "обновляться", скидывать наработанные в оффлайне данные на сервер? Я какбэ прав?))


Автор: special K, дата: 19 ноября, 2009 - 12:18
#permalink

Большое спасибо, а то бы я долго не смог врубиться что это за штука)


Автор: Mars787 (не зарегистрирован), дата: 22 сентября, 2010 - 14:39
#permalink

ок, пошел тестить, хватило бы только мозгов)


Автор: ba1ans (не зарегистрирован), дата: 17 января, 2011 - 10:40
#permalink

Спасибо за статью. Появился один вопрос - почему youtube не просит у пользователя установки плагина Gears, хотя использует Gears API?


Автор: Олег Топалов (не зарегистрирован), дата: 18 июня, 2021 - 16:58
#permalink

Ютуб иногда выдает устарешвую информацию. Но это раньше было. Сейчас они уже все сделали по новой и api редко когда используется в глобальном смысле. Сейчас все больше криптозащита выходит на первый план. Двухуровневая идентификация и все такое. Даже капчи уже понемногу уходят в прошлое


Автор: Гость (не зарегистрирован), дата: 27 января, 2011 - 14:42
#permalink

function resizeAndShow(files) {
// (1)
var canvas = google.gears.factory.create('beta.canvas');

canvas.decode(files[0].blob)
canvas.resize(150,150)
var blob = canvas.encode("image/jpeg")

// (2)
var localServer = google.gears.factory.create('beta.database')
var store = localServer.createStore('database')
// (2.1)
var url = '/img.jpg?'+Math.random()
store.captureBlob(blob, url, "image/jpeg")
// var rs = db.execute('select * from Demo order by Timestamp desc');

if (!google.gears.factory || !db) {
return;
}
//db.execSQL("CREATE TABLE IF NOT EXISTS "+dbTable+"(image BLOB);");
//InputStream xmlInputStream = this.getResources().openRawResource(R.drawable.abc);
//byte[] bb = (xmlInputStream.toString()).getBytes();
// db.execSQL("INSERT INTO "+ dbTable + "(image)" + " VALUES (\""+bb+"\");");

/// db.execute('insert into Demo (t) values (?) where Timestamp=?',[getAsBlob( blob)]), rs.field(1)]);

// db.execute('insert into Demo (getAsBlob( blob)) values (?)where Timestamp=?',[ rs.field(1)]);

db.execute('insert into Demo (getAsBlob( blob)) values (?)',canvas.encode("image/jpeg"));

// (3)
$('#resized').css('background-image', 'url('+url+')')
$('#resized')[0].scrollIntoView()

// (4)
//setTimeout(function (){store.remove(url)},0)
}

Для того, чтобы добавить в ImageList картинки необходимо: 1. Установить размер добавляемых картинок.


Автор: RUVATA, дата: 23 августа, 2011 - 09:02
#permalink

FF 3.6.20
Gears 0.5.36.0
примеры не работают
"google is not defined"

Даже Google Chrome 13.0.782.112 ("google is not defined")


Автор: Гость (не зарегистрирован), дата: 28 апреля, 2012 - 09:26
#permalink

А почему технология умерла?


Автор: FrancNet (не зарегистрирован), дата: 15 января, 2014 - 22:47
#permalink

да тоже интересно почему умерла технология?


Автор: coolkiu00 (не зарегистрирован), дата: 8 августа, 2019 - 07:25
#permalink

congratulations! it's a wonderful thing! I agree with your opinion!
cool maps


Автор: run 3 (не зарегистрирован), дата: 7 ноября, 2019 - 11:46
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and knowledge here helps me a lot candy crush soda


Автор: malkovich (не зарегистрирован), дата: 11 декабря, 2019 - 16:04
#permalink

good job guys! thx!
192.168.1.1


Автор: johnba (не зарегистрирован), дата: 5 марта, 2020 - 12:59
#permalink

I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.
https://arkserverhosting.co.uk
portable hairdryer
crime scene cleanup
mini carpet cleaner
trulylovelykitchen


Автор: Useless Websites (не зарегистрирован), дата: 11 марта, 2020 - 15:50
#permalink

Автор: osama shk (не зарегистрирован), дата: 24 марта, 2020 - 17:31
#permalink

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
婚約指輪


Автор: osama shk (не зарегистрирован), дата: 24 марта, 2020 - 22:12
#permalink

hello!! Very interesting discussion glad that I came across such informative post. Keep up the good work friend. Glad to be part of your net community.
結婚指輪


Автор: osama shk (не зарегистрирован), дата: 24 марта, 2020 - 23:12
#permalink

I admit, I have not been on this web page in a long time... however it was another joy to see It is such an important topic and ignored by so many, even professionals. professionals. I thank you to help making people more aware of possible issues.
ハワイアンジュエリー 結婚指輪


Автор: osama shk (не зарегистрирован), дата: 25 марта, 2020 - 22:26
#permalink

useful information on topics that plenty are interested on for this wonderful post.Admiring the time and effort you put into your b!..
結婚指輪 猫


Автор: osama shk (не зарегистрирован), дата: 25 марта, 2020 - 23:34
#permalink

You have a good point here!I totally agree with what you have said!!Thanks for sharing your views...hope more people will read this article!!!
結婚指輪 手作り


Автор: osama shk (не зарегистрирован), дата: 26 марта, 2020 - 00:35
#permalink

nice post, keep up with this interesting work. It really is good to know that this topic is being covered also on this web site so cheers for taking time to discuss this!
結婚指輪 福岡


Автор: ps5 release date (не зарегистрирован), дата: 14 апреля, 2020 - 07:00
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed, thanks basketball legends


Автор: osama shk (не зарегистрирован), дата: 20 апреля, 2020 - 21:53
#permalink

This is actually the kind of information I have been trying to find. Thank you for writing this information.
pemf mat


Автор: osama shk (не зарегистрирован), дата: 20 апреля, 2020 - 22:52
#permalink

I am unable to read articles online very often, but I’m glad I did today. This is very well written and your points are well-expressed. Please, don’t ever stop writing.
electromagnetic pulse therapy


Автор: Sophie Miller (не зарегистрирован), дата: 21 апреля, 2020 - 15:41
#permalink

average sat score for harvard

Vielen Dank für Ihre Arbeit auf dem Blog! Du machst einen guten Job!


Автор: osama shk (не зарегистрирован), дата: 10 мая, 2020 - 21:58
#permalink

Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists.
post free local ads


Автор: Eric Beronilla (не зарегистрирован), дата: 12 июня, 2020 - 13:11
#permalink

It was been a great plugin. Thanks for this great article about Google Gears. web design manassas va


Автор: roseanna (не зарегистрирован), дата: 17 июня, 2020 - 06:25
#permalink

I think I need to learn more, thank you for sharing
scribble io


Автор: Rheed Go (не зарегистрирован), дата: 17 июня, 2020 - 18:57
#permalink

Interesting post! Thanks for sharing this article. towing ashburn


Автор: MR136 (не зарегистрирован), дата: 17 июня, 2020 - 20:21
#permalink

You can use your insurance claim to fund roof repairs and replacements that your home needs


Автор: Гость (не зарегистрирован), дата: 18 июня, 2020 - 20:41
#permalink

Great plugin. Thanks!!!!


Автор: johnb (не зарегистрирован), дата: 19 июня, 2020 - 14:23
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
depannage rideau metallique paris


Автор: Гость (не зарегистрирован), дата: 3 июля, 2022 - 09:23
#permalink

hello!! Very interesting discussion glad that I came across such informative post. Keep up the good work friend. Glad to be part of your net community.


Автор: bluepeacock (не зарегистрирован), дата: 19 июня, 2020 - 16:59
#permalink

Very good points you wrote here.Great stuff...I think you've made some truly interesting points. Keep up the good work.
click here


Автор: Aryan Mag (не зарегистрирован), дата: 23 июня, 2020 - 17:24
#permalink

Interesting mega-plugin! Just sad to say that isn't working anymore. It has been in demolition in 2011


Автор: Aryan Mag (не зарегистрирован), дата: 23 июня, 2020 - 17:36
#permalink

Additional info, Gears was discontinued in favor of the standardized HTML5 methods that eventually became prevalent. Gears was so powerful that a developer could work offline maybe one of the causes that it has been in demolition in June 7, 2011.


Автор: Bob Hunter (не зарегистрирован), дата: 24 июня, 2020 - 14:57
#permalink

Good job! jiofi.local.html


Автор: Sophie Miller (не зарегистрирован), дата: 2 июля, 2020 - 12:09
#permalink

colleges in texas
Hello! this complex question. Here it is necessary to think...


Автор: Michele (не зарегистрирован), дата: 8 июля, 2020 - 21:20
#permalink

This a interesting article! Thanks for posting! Keep it up! siding Arlington VA


Автор: Гость (не зарегистрирован), дата: 18 июля, 2020 - 16:53
#permalink

It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing.
Zigbee3 Gateway


Автор: MR136 (не зарегистрирован), дата: 3 августа, 2020 - 19:36
#permalink

Nice information! This has been very useful in Google browser. roofing contractor Manassas VA


Автор: johdd (не зарегистрирован), дата: 19 августа, 2020 - 15:02
#permalink

This is my first time visit here. From the tons of comments on your articles,I guess I am not only one having all the enjoyment right here!


Автор: john bond (не зарегистрирован), дата: 21 августа, 2020 - 18:15
#permalink

I am very much pleased with the contents you have mentioned. I wanted to thank you for this great article.
https://daisso.net


Автор: john bond (не зарегистрирован), дата: 21 августа, 2020 - 18:15
#permalink

I really loved reading your blog. It was very well authored and easy to understand. Unlike other blogs I have read which are really not that good.Thanks alot!
click here


Автор: john bond (не зарегистрирован), дата: 26 августа, 2020 - 13:01
#permalink

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information?
Cryptocurrency Price Widget


Автор: osama shk (не зарегистрирован), дата: 7 сентября, 2020 - 15:29
#permalink

I really loved reading your blog. It was very well authored and easy to understand. Unlike other blogs I have read which are really not that good.Thanks alot!
look at here


Автор: osama shk (не зарегистрирован), дата: 8 сентября, 2020 - 14:58
#permalink

Just admiring your work and wondering how you managed this blog so well. It’s so remarkable that I can't afford to not go through this valuable information whenever I surf the internet!
Quantity surveyor near me


Автор: Isak Hansen (не зарегистрирован), дата: 9 сентября, 2020 - 18:16
#permalink

Wow the blog you give us is amazing, no wonder many people want to read this. https://celebrityinsider.org/


Автор: Kristian Kristensen (не зарегистрирован), дата: 9 сентября, 2020 - 18:18
#permalink

I will recomend this blog to all of my friends. Great article.
https://happygamer.com/


Автор: Aputsiaq Larsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:24
#permalink

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


Автор: Mathias Filemonsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:26
#permalink

I learned so much from this blog. Good inforamtion. https://fixoserror.com/


Автор: Jonas Isaksen (не зарегистрирован), дата: 9 сентября, 2020 - 18:28
#permalink

I wait for more.Great article.
https://premiereretail.com


Автор: Otto Josefsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:31
#permalink

I stumbled across this blog.Great article. https://tecsprint.com


Автор: Arne Christensen (не зарегистрирован), дата: 9 сентября, 2020 - 18:33
#permalink

Thank you for this amazing blog. Congratulations.
https://howtolose10poundsinaweek.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:33
#permalink

The things i see here are very informative. Keep going. https://bargainistafashionista.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:35
#permalink

I can say that is one of the best articles out on the internet. https://bankncard.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:37
#permalink

I readed all the article. So informative https://vhan.net


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2020 - 16:21
#permalink

This is one of the best sites i have found on the internet until now. Nice article keep going.
https://millikenconstructioninc.com/


Автор: OneinMillion (не зарегистрирован), дата: 11 сентября, 2020 - 09:31
#permalink

OneinMillion . I said this is no doubt, best as usual from


Автор: Гость (не зарегистрирован), дата: 11 сентября, 2020 - 16:15
#permalink

Thanks for the information, very clear and simple. I will try to use it.Love the way you write. Working my way through your article links
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 15 сентября, 2020 - 12:09
#permalink

This is one of the best articles i found on the blogs around the internet. I am really interested in seeing more of this. Keep going with the great work!
https://gzgjskpzz1m.ga


Автор: osama shk (не зарегистрирован), дата: 15 сентября, 2020 - 13:00
#permalink

I really loved reading your blog. It was very well authored and easy to undertand. Unlike additional blogs I have read which are really not tht good. I also found your posts very interesting. In fact after reading, I had to go show it to my friend and he ejoyed it as well!
seo services


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 10:56
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you https://seoconsultants24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 11:34
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.https://seokarma24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 15:20
#permalink

I have reviewed the article many times and I find it very impressive. The information is extremely useful especially the last part I care about that information very much. I have been looking for this certain information for a long time.
https://packseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 16:58
#permalink

I’m gone to tell my little brother, that he should
also pay a quick visit this blog on regular basis to take updated from hottest information.
https://connectorseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:06
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://digitalseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:13
#permalink

Fantastic blog! Do you have any helpful hints for aspiring writers?
I’m hoping to start my own site soon but I’m a little lost on everything.
https://sweetseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 18:16
#permalink

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
https://fancyseo24h.blogspot.com/


Автор: osama shk (не зарегистрирован), дата: 27 сентября, 2020 - 16:38
#permalink

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
upholstery cleaning


Автор: osama shk (не зарегистрирован), дата: 28 сентября, 2020 - 18:22
#permalink

I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!..
homeostasis


Автор: osama shk (не зарегистрирован), дата: 28 сентября, 2020 - 19:28
#permalink

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic.
Licenciado de Ciudadania


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2020 - 16:25
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://phoenixseogeek.com/


Автор: osama shk (не зарегистрирован), дата: 30 сентября, 2020 - 17:04
#permalink

Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon.
smart home


Автор: Гость (не зарегистрирован), дата: 1 октября, 2020 - 21:56
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.
https://zgjskpzz1m.ga/


Автор: osama shk (не зарегистрирован), дата: 4 октября, 2020 - 10:50
#permalink

Great Information sharing .. I am very happy to read this article .. thanks for giving us go through info.Fantastic nice. I appreciate this post.
level lawn


Автор: osama shk (не зарегистрирован), дата: 5 октября, 2020 - 15:15
#permalink

I really enjoyed reading this post, big fan. Keep up the good work and please tell me when can you publish more articles or where can I read more on the subject?
vy&tea


Автор: osama shk (не зарегистрирован), дата: 9 октября, 2020 - 23:45
#permalink

I know your expertise on this. I must say we should have an online discussion on this. Writing only comments will close the discussion straight away! And will restrict the benefits from this information.
Funny Leaving Cards


Автор: john bond (не зарегистрирован), дата: 14 октября, 2020 - 23:19
#permalink

Thanks for the blog loaded with so many information. Stopping by your blog helped me to get what I was looking for.
svg files


Автор: osama shk (не зарегистрирован), дата: 18 октября, 2020 - 21:16
#permalink

Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
Suffolk Window cleaners


Автор: osamsa shk (не зарегистрирован), дата: 18 октября, 2020 - 23:12
#permalink

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
video production company NYC,


Автор: john bond (не зарегистрирован), дата: 20 октября, 2020 - 15:15
#permalink

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well..
video production company NYC,


Автор: osama shk (не зарегистрирован), дата: 21 октября, 2020 - 14:16
#permalink

This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog..
ที่เที่ยวพังงา


Автор: osama shk (не зарегистрирован), дата: 21 октября, 2020 - 15:46
#permalink

Great Information sharing .. I am very happy to read this article .. thanks for giving us go through info.Fantastic nice. I appreciate this post.
injury lawyer


Автор: osama shk (не зарегистрирован), дата: 21 октября, 2020 - 17:07
#permalink

I haven’t any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us.
retrovideogames.shop


Автор: john bond (не зарегистрирован), дата: 22 октября, 2020 - 20:23
#permalink

This is very interesting content! I have thoroughly enjoyed reading your points and have come to the conclusion that you are right about many of them. You are great.
accident lawyer


Автор: osama shk (не зарегистрирован), дата: 24 октября, 2020 - 13:42
#permalink

I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!..
super greens


Автор: Гость Emily9x (не зарегистрирован), дата: 26 октября, 2020 - 10:05
#permalink

Oh, great, your article provided me with useful information and a fresh perspective on the subject. Check to finish your trip!


Автор: john bond (не зарегистрирован), дата: 27 октября, 2020 - 15:40
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
super greens


Автор: osama shk (не зарегистрирован), дата: 31 октября, 2020 - 12:07
#permalink

I am very enjoyed for this blog. Its an informative topic. It help me very much to solve some problems. Its opportunity are so fantastic and working style so speedy.
locuri de munca bucuresti


Автор: osama shk (не зарегистрирован), дата: 31 октября, 2020 - 21:34
#permalink

Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
Harley-Davidson Women


Автор: osama shk (не зарегистрирован), дата: 6 ноября, 2020 - 23:27
#permalink

I haven’t any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us.
Digitalisierung im Handwerk


Автор: 먹튀검증 (не зарегистрирован), дата: 14 ноября, 2020 - 17:07
#permalink

The post is written in very a good manner and it contains many useful information for me. 먹튀검증


Автор: 대출 (не зарегистрирован), дата: 14 ноября, 2020 - 17:08
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking. 대출


Автор: Posrtegee (не зарегистрирован), дата: 16 ноября, 2020 - 02:35
#permalink

This is a very good post which I really enjoy reading. It is not every day that I have the possibility to see something like this.
192.168.1.254


Автор: osama shk (не зарегистрирован), дата: 22 ноября, 2020 - 18:29
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
fake grass Sheffield


Автор: osama shk (не зарегистрирован), дата: 29 ноября, 2020 - 20:02
#permalink

All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward for more posts.Thanks
tilers in Leeds


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:32
#permalink

Your information was very useful to me. That's exactly what I've been looking for 안전놀이터!


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:32
#permalink

Hello! Nice to meet you. First of all, I thank you very much for 안전놀이터 providing us with this variety of information. I also run a site with a lot of information. In general, there are a lot of materials related to 토토커뮤니티. If you have time, please visit my site 토토커뮤니티사이트!


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:32
#permalink

We are looking for a lot of data on this item. In the meantime, this is the perfect article I was looking for 안전놀이터.What I see with my own eyes is the same article when I lead about 토토커뮤니티사이트. and I was looking for. The content is very similar to my article, so can you come to my 토토커뮤니티 and compare it?


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:33
#permalink

I think a lot of articles related to 안전놀이터 are disappearing someday. That's why it's very hard to find, but I'm very fortunate to read your writing. When you come to my site, I have collected articles related to this. My site name is 메이저놀이터.


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:33
#permalink

What a nice comment!Nice to meet you. I live in 안전한놀이터 a different country from you. Your writing will be of great help to me and to many other people living in our country. I was looking for a post like this, but I finally found 안전놀이터.


Автор: osama shk (не зарегистрирован), дата: 5 декабря, 2020 - 17:03
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read. photo booth sale


Автор: osama shk (не зарегистрирован), дата: 5 декабря, 2020 - 18:31
#permalink

This is highly information, crisp and clear. I think that everything has been described in systematic manner so that reader could get maximum information and learn many things.
3d printing Manchester


Автор: osama shk (не зарегистрирован), дата: 5 декабря, 2020 - 19:06
#permalink

I think this is one of the most significant information for me. And i’m glad reading your article. But should remark on some general things, The web site style is perfect, the articles is really great : D. Good job, cheers
printing derby


Автор: osama shk (не зарегистрирован), дата: 7 декабря, 2020 - 11:59
#permalink

This type of message always inspiring and I prefer to read quality content, so happy to find good place to many here in the post, the writing is just great, thanks for the post.
roofing Lancaster


Автор: osama shk (не зарегистрирован), дата: 9 декабря, 2020 - 17:00
#permalink

This is my first time visit here. From the tons of comments on your articles,I guess I am not only one having all the enjoyment right here!
car repair Reading


Автор: osama shk (не зарегистрирован), дата: 10 декабря, 2020 - 17:50
#permalink

Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post.
hogar inteligente


Автор: osama shk (не зарегистрирован), дата: 10 декабря, 2020 - 18:36
#permalink

If you set out to make me think today; mission accomplished! I really like your writing style and how you express your ideas. Thank you.
mobile mechanic Reading


Автор: Гость (не зарегистрирован), дата: 10 декабря, 2020 - 20:10
#permalink

This is highly information, crisp and clear. You have a way of writing compelling information that sparks much interest.
https://larkenequity.com/ https://larkenequity.com//


Автор: osama shk (не зарегистрирован), дата: 12 декабря, 2020 - 13:08
#permalink

useful information on topics that plenty are interested on for this wonderful post.Admiring the time and effort you put into your b!..
Wakefield pest control


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 17:18
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://hrma-llc.com/
https://hrma-llc.com/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 17:33
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://nuestropsicologoenmadrid.com/
https://nuestropsicologoenmadrid.com/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 18:16
#permalink

I wish more authors of this type of content Wow.!This is highly information, crisp and clear. You have a way of writing compelling information that sparks much interest.!!!
https://cremationconsultancy.com/ https://cremationconsultancy.com//


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 18:52
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post!
https://i-repaircenter.nl/
https://i-repaircenter.nl/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 20:21
#permalink

I really thank you for the valuable info on this great subject and look forward to more great posts. Thanks a lot for enjoying this beauty article with me.
https://zoekmachineservices.nl/
https://zoekmachineservices.nl/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:09
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://hetonderdelenhuis-emmen.nl/ https://hetonderdelenhuis-emmen.nl/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:28
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post!
https://casinoonline-bet.com/
https://casinoonline-bet.com/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:40
#permalink

Great post! I am actually getting ready to across this information, is very helpful my friend. Also great blog here with all of the valuable information you have. Keep up the good work you are doing here
https://restorationdoctorva.com/
https://restorationdoctorva.com/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 17:49
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://fixoserror.com/
https://fixoserror.com/


Автор: Гость (не зарегистрирован), дата: 16 декабря, 2020 - 18:21
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://vvhen.to/
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 17:25
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://findcosmeticsurgeons.net/
https://findcosmeticsurgeons.net/


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 18:52
#permalink

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it!
https://safetytechnology.com
https://safetytechnology.com


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 18:53
#permalink

I loved your post so much I became a fan of you, promise that you will continue to share such good and knowledgeable posts even further, we will be waiting for your post thank you.
https://bestpestcontrolservices.com.au
https://bestpestcontrolservices.com.au


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 18:46
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and knowledge here helps me a lot
https://bankncard.com/
https://bankncard.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:12
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://bargainistafashionista.com/
https://bargainistafashionista.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:24
#permalink

Your information was very useful to me. That's exactly what I've been looking for
https://howtolose10poundsinaweek.com/
https://howtolose10poundsinaweek.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:42
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://tecsprint.com/
https://tecsprint.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:56
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://premiereretail.com/
https://premiereretail.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 23:50
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://happygamer.com/
https://happygamer.com/


Автор: Jim Harxmon (не зарегистрирован), дата: 23 декабря, 2020 - 05:59
#permalink

I want to learn more about SQLite database and here you are giving some important things and insight to remember when dealing with this database. Let us play roblox on pc or gacha life app if you are looking for a great game to play. Gacha life have an updated version where you can create more anime characters and use it to explore the gachaverse


Автор: osama shk (не зарегистрирован), дата: 23 декабря, 2020 - 14:24
#permalink

Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
maison intelligente


Автор: Гость (не зарегистрирован), дата: 24 декабря, 2020 - 21:08
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://closetsphoenix.com/
https://closetsphoenix.com/


Автор: Гость (не зарегистрирован), дата: 24 декабря, 2020 - 22:01
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://caboplatinum.com/
https://caboplatinum.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 15:05
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://zacjohnson.com/
https://zacjohnson.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 15:27
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://blogreign.com/
https://blogreign.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 17:39
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://blogging.org/
https:https://blogging.org/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 17:47
#permalink

Very inspiring and helpful
https://blogninja.com/
https://blogninja.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 18:23
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://phoenixseogeek.com/
https://phoenixseogeek.com/


Автор: Гость (не зарегистрирован), дата: 26 декабря, 2020 - 15:34
#permalink

Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
https://extremevaporizers.com/
https://extremevaporizers.com/


Автор: Гость (не зарегистрирован), дата: 26 декабря, 2020 - 15:56
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
https://usemybee.com/
https://usemybee.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 15:45
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://spacnetwork.com/
https://spacnetwork.com/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 08:28
#permalink

This was a really great contest and hopefully I can attend the next one. It was alot of fun and I really enjoyed myself..
visit here


Автор: osama shk (не зарегистрирован), дата: 3 января, 2021 - 20:00
#permalink

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic.
abonnenten24


Автор: osama shk (не зарегистрирован), дата: 4 января, 2021 - 19:07
#permalink

Really a great addition. I have read this marvelous post. Thanks for sharing information about it. I really like that. Thanks so lot for your convene.
Domótica


Автор: osama shk (не зарегистрирован), дата: 5 января, 2021 - 15:26
#permalink

Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work!
online marketing


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 17:41
#permalink

Very interesting discussion glad that I came across such informative post. Keep up the good work friend
https://pestcontrolcanberraarea.com.au
https://pestcontrolcanberraarea.com.au


Автор: john bond (не зарегистрирован), дата: 9 января, 2021 - 16:40
#permalink

I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!..
online marketing


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:20
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https:https://emergencydental247.com/ https://emergencydental247.com/o/


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:21
#permalink

It’s hard to find the good from the bad sometimes, but I think you’ve nailed it!
audigitalsolutions.com
audigitalsolutions.com


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:25
#permalink

Great website and the content you shared is very informational and useful.
https://microjobs24.de https://microjobs24.de


Автор: osama shk (не зарегистрирован), дата: 18 января, 2021 - 13:25
#permalink

Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
rubbish removal bridgend


Автор: osama shk (не зарегистрирован), дата: 18 января, 2021 - 15:55
#permalink

I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!..
removals hartlepool


Автор: Гость (не зарегистрирован), дата: 22 января, 2021 - 19:42
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and https://audigitalsolutions.com/
https://audigitalsolutions.com/


Автор: osama shk (не зарегистрирован), дата: 24 января, 2021 - 12:49
#permalink

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
Heimautomatisierung


Автор: osama shk (не зарегистрирован), дата: 24 января, 2021 - 15:22
#permalink

Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
tree surgeons colchester


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 12:36
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://plasticpalletsales.com
https://plasticpalletsales.com


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:25
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
https://megabonuscasino.nl/
https://megabonuscasino.nl/


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:51
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://vosairservices.com/
https://vosairservices.com/


Автор: Гость (не зарегистрирован), дата: 28 января, 2021 - 15:31
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://entutorado.com/
https://entutorado.com/


Автор: osama shk (не зарегистрирован), дата: 6 февраля, 2021 - 01:10
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
ساختمان هوشمند


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2021 - 14:31
#permalink

Hey there, You have done a fantastic job. I will definitely digg it and personally recommend to my friends. I am confident they'll be benefited from this website.
https://atlanticflagpole.com
https://atlanticflagpole.com


Автор: Гость (не зарегистрирован), дата: 12 февраля, 2021 - 19:24
#permalink

I appreciate, lead to I found just what I used to be taking a look for. You've ended my four day lengthy hunt! God Bless you man. Have a nice day. Bye
https://gold4vanilla.com/
https://gold4vanilla.com/


Автор: Гость (не зарегистрирован), дата: 18 февраля, 2021 - 13:04
#permalink

It is appropriate time to make a few plans for the future and it's time to be happy. I've learn this publish and if I may just I want to counsel you some attention-grabbing things or tips. Maybe you could write subsequent articles regarding this article. I wish to learn even more issues approximately it!
https://schmidtchristmasmarket.com/
https://schmidtchristmasmarket.com/


Автор: farhan (не зарегистрирован), дата: 21 февраля, 2021 - 17:13
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
best smm panel


Автор: Гостьsd (не зарегистрирован), дата: 22 февраля, 2021 - 07:13
#permalink

This is my first time visit here. From the tons of comments on your articles,I guess I am not only one having all the enjoyment right here!
best cenotes yucatan


Автор: Гость (не зарегистрирован), дата: 23 февраля, 2021 - 13:43
#permalink

Attractive component of content. I just stumbled upon your weblog and in accession capital to say that I acquire actually enjoyed account your weblog posts. Any way I will be subscribing in your feeds or even I achievement you get admission to consistently fast.
https://whispersandhoney.com/
https://whispersandhoney.com/


Автор: osama shk (не зарегистрирован), дата: 27 февраля, 2021 - 17:12
#permalink

Superbly written article, if only all bloggers offered the same content as you, the internet would be a far better place..
rumah pintar


Автор: calywico calywico (не зарегистрирован), дата: 3 марта, 2021 - 11:50
#permalink

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
best places to eat in cozumel


Автор: Гость (не зарегистрирован), дата: 3 марта, 2021 - 12:24
#permalink

Hi I am so delighted I found your webpage, I really found you by mistake, while I was browsing on Bing for something else, Anyhow I am here now and would just like to say many thanks for a remarkable post and a all round enjoyable blog (I also love the theme/design), I don’t have time to go through it all at the minute but I have bookmarked it and also included your RSS feeds, so when I have time I will be back to read much more, Please do keep up the excellent work.
https://eureka-examens.nl/
https://eureka-examens.nl/


Автор: Гость (не зарегистрирован), дата: 3 марта, 2021 - 12:36
#permalink

Hello, i believe that i noticed you visited my weblog so i came to return the favor?.I'm attempting to in finding issues to improve my web site!I suppose its adequate to make use of some of your ideas!!
https://cbtresultaatuitopleiden.nl/
https://cbtresultaatuitopleiden.nl/


Автор: gggg (не зарегистрирован), дата: 22 марта, 2021 - 22:58
#permalink

Thanks so much for this information. I have to let you know I concur on several of the points you make here and others may require some further review, but I can see your viewpoint.
treatnheal


Автор: osama shk (не зарегистрирован), дата: 24 марта, 2021 - 15:06
#permalink

Very nice article, I enjoyed reading your post, very nice share, I want to twit this to my followers. Thanks!.
treatnheal


Автор: sds (не зарегистрирован), дата: 27 марта, 2021 - 07:08
#permalink

Nice post. I was checking constantly this blog and I’m impressed! Extremely useful info specially the last part I care for such information a lot. I was seeking this certain info for a long time. Thank you and good luck.
Braces Carolina


Автор: Гость (не зарегистрирован), дата: 28 марта, 2021 - 14:51
#permalink

You have done a great job on this article. It’s very readable and highly intelligent. You have even managed to make it understandable and easy to read. You have some real writing talent. Thank you.
Automatyka hoteli


Автор: Iowa Swingers (не зарегистрирован), дата: 30 марта, 2021 - 05:44
#permalink
Love the blog.  Thanks! <a href="https://thelsconnection.com/">Iowa Swingers</a>

Автор: osama shk (не зарегистрирован), дата: 3 апреля, 2021 - 15:05
#permalink

Excellent .. Amazing .. I’ll bookmark your blog and take the feeds also…I’m happy to find so many useful info here in the post, we need work out more techniques in this regard, thanks for sharing.
Inteligentny dom


Автор: osama shk (не зарегистрирован), дата: 5 апреля, 2021 - 14:54
#permalink

Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..
unique bathroom vanity


Автор: farhan (не зарегистрирован), дата: 11 апреля, 2021 - 13:50
#permalink

Fantastic blog! Do you have any tips and hints for aspiring writers? I’m planning to start my own website soon but I’m a little lost on everything. Would you propose starting with a free platform like WordPress or go for a paid option? There are so many options out there that I’m completely overwhelmed .. Any suggestions? Many thanks!
best area to stay in tulum


Автор: Packaging Printers (не зарегистрирован), дата: 12 апреля, 2021 - 15:58
#permalink

Thanks for your nice post I really like it and appreciate it. My work is about Packaging Printers
. If you need perfect quality boxes then you can visit our website.


Автор: farhan (не зарегистрирован), дата: 14 апреля, 2021 - 20:16
#permalink

This is my first time visit here. From the tons of comments on your articles,I guess I am not only one having all the enjoyment right here!
taroko gorge trails


Автор: Custom Mailer Boxes (не зарегистрирован), дата: 29 апреля, 2021 - 09:24
#permalink

Your website is a gift for me.It contains all the information I want to know.My website Custom Mailer Boxes works just like yours.You must visit it if you like it.


Автор: customized packaging custom boxes (не зарегистрирован), дата: 5 мая, 2021 - 14:48
#permalink

My company really liked the work of your site
Because it can help me a lot.You will definitely like it if you expand my site customized packaging custom boxes


Автор: Rank Xone (не зарегистрирован), дата: 20 мая, 2021 - 08:00
#permalink

Ordina pizza a domicilio a Milano da pizzeria babbo natale Pizza a domicilio Milano


Автор: farhan fave (не зарегистрирован), дата: 20 мая, 2021 - 11:10
#permalink

Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post.
RC car tips


Автор: fave fave (не зарегистрирован), дата: 25 мая, 2021 - 10:42
#permalink

I have been checking out a few of your stories and i can state pretty good stuff. I will definitely bookmark your blog
Oriental Rug Cleaning


Автор: Nick Johnson (не зарегистрирован), дата: 27 мая, 2021 - 14:39
#permalink

nice post.


Автор: Nick Johnson (не зарегистрирован), дата: 27 мая, 2021 - 14:39
#permalink

nice post.


Автор: Nick Johnson (не зарегистрирован), дата: 27 мая, 2021 - 14:39
#permalink

nice post.


Автор: farhan (не зарегистрирован), дата: 30 мая, 2021 - 08:21
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information...
Long Island Rug Cleaning


Автор: Гостьsad (не зарегистрирован), дата: 30 мая, 2021 - 08:22
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information...
Long Island Rug Cleaning


Автор: farhan (не зарегистрирован), дата: 30 июня, 2021 - 11:45
#permalink

Your work is very good and I appreciate you and hopping for some more informative posts. Thank you for sharing great information to us.
recruiting software


Автор: farhan fave (не зарегистрирован), дата: 7 июля, 2021 - 12:48
#permalink

I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.
Osteopathie


Автор: James9845 (не зарегистрирован), дата: 7 июля, 2021 - 15:14
#permalink

JS for life!


Автор: Femi (не зарегистрирован), дата: 7 июля, 2021 - 15:18
#permalink

Google JS libraries are well documented, but there are tons of features. hich can make it hard to master.

Femi the fissure fondation


Автор: ferozshaikh (не зарегистрирован), дата: 7 июля, 2021 - 18:56
#permalink

Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up.
Bola Tangkas Slot


Автор: goxafe519 (не зарегистрирован), дата: 11 июля, 2021 - 12:28
#permalink

I read a article under the same title some time ago, but this articles quality is much, much better. How you do this..


Автор: casual sex in newcastle (не зарегистрирован), дата: 18 июля, 2021 - 09:19
#permalink

casual sex in newcastle is a wonderful place to make contact with hot girls in United Kingdom


Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:57
#permalink

Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:57
#permalink

mx5


Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:58
#permalink

Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:58
#permalink

Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:58
#permalink

Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 14:59
#permalink

Автор: Isabel (не зарегистрирован), дата: 22 июля, 2021 - 15:00
#permalink

Автор: ferozshaikh (не зарегистрирован), дата: 24 июля, 2021 - 13:39
#permalink

Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up.
Slot Deposit Linkaja


Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:32
#permalink

Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:34
#permalink

Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:36
#permalink

Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:36
#permalink

Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:40
#permalink

Автор: Gaia1956 (не зарегистрирован), дата: 26 июля, 2021 - 16:42
#permalink

Автор: bradford shemale escort (не зарегистрирован), дата: 27 июля, 2021 - 12:10
#permalink

You must to visit bradford shemale escort for your own casual chat experience in UK


Автор: Гость (не зарегистрирован), дата: 27 июля, 2021 - 19:43
#permalink

Go to SEODISTRO now.


Автор: Гостьasa (не зарегистрирован), дата: 28 июля, 2021 - 14:51
#permalink

I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post.
teakovy zahradny nabytok


Автор: Гостьsad (не зарегистрирован), дата: 28 июля, 2021 - 15:14
#permalink

I read that Post and got it fine and informative. Please share more like that...
teakovy zahradny nabytok


Автор: ferozshaikh (не зарегистрирован), дата: 29 июля, 2021 - 18:19
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
write my capstone paper for me


Автор: modern house architecture design (не зарегистрирован), дата: 3 августа, 2021 - 09:14
#permalink

Great content material and great layout. Your website deserves all of the positive feedback it’s been getting.
modern house architecture design


Автор: farhan (не зарегистрирован), дата: 3 августа, 2021 - 09:30
#permalink

Impressive web site, Distinguished feedback that I can tackle. I am moving forward and may apply to my current job as a pet sitter, which is very enjoyable, but I need to additional expand. Regards.
free keto diet plan for beginners


Автор: Гость (не зарегистрирован), дата: 3 августа, 2021 - 12:30
#permalink

I think that thanks for the valuabe information and insights you have so provided here.
Wohnwagen mieten


Автор: ferozshaikh (не зарегистрирован), дата: 3 августа, 2021 - 13:43
#permalink

Thank you for taking the time to publish this information very useful!
be.cx


Автор: ferozshaikh (не зарегистрирован), дата: 3 августа, 2021 - 15:33
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information...
media56.com


Автор: goxafe5195 goxafe5195 (не зарегистрирован), дата: 17 августа, 2021 - 20:16
#permalink

This is the type of information I’ve long been trying to find. Thank you for writing this information.
CV format


Автор: ferozshaikh (не зарегистрирован), дата: 21 августа, 2021 - 11:15
#permalink

The information you have posted is very useful. The sites you have referred was good. Thanks for sharing...
Tile and grout Cleaning Melbourne


Автор: farhan (не зарегистрирован), дата: 22 августа, 2021 - 14:03
#permalink

Great content material and great layout. Your website deserves all of the positive feedback it’s been getting.
introverts definition


Автор: farhan (не зарегистрирован), дата: 22 августа, 2021 - 19:07
#permalink

Thanks for your post. I’ve been thinking about writing a very comparable post over the last couple of weeks, I’ll probably keep it short and sweet and link to this instead if thats cool. Thanks.
how to calculate enterprise value using dcf


Автор: francis (не зарегистрирован), дата: 24 августа, 2021 - 01:43
#permalink

Thanks for the information I find it very useful, very useful catalogos cklass


Автор: farhan fave (не зарегистрирован), дата: 26 августа, 2021 - 11:21
#permalink

I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post.
denver to vail limo


Автор: fave fave (не зарегистрирован), дата: 2 сентября, 2021 - 13:03
#permalink

Your content is nothing short of brilliant in many ways. I think this is engaging and eye-opening material. Thank you so much for caring about your content and your readers.
All-Terrain Electric Wheelchair


Автор: jogazy jogazy (не зарегистрирован), дата: 2 сентября, 2021 - 13:52
#permalink

I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, i am always look for people to check out my web site.
windows tips


Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:28
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:28
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:28
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:29
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:29
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:30
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:30
#permalink

JMW


Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:31
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:31
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:31
#permalink

Автор: Isabel (не зарегистрирован), дата: 2 сентября, 2021 - 16:32
#permalink

Автор: Гостьsad (не зарегистрирован), дата: 6 сентября, 2021 - 15:23
#permalink

Nice knowledge gaining article. This post is really the best on this valuable topic.
perfect health


Автор: fave fave (не зарегистрирован), дата: 8 сентября, 2021 - 17:34
#permalink

I would like to say that this blog really convinced me to do it! Thanks, very good post.
young australian mines


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2021 - 09:19
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information...
visit here


Автор: pioneerseo seo (не зарегистрирован), дата: 23 сентября, 2021 - 05:50
#permalink

Here at Speed of Light Inc, our mission is to always provide quality electrical services at an affordable price. The success of our company is due to the dedication we provide to our customers. No matter the job, customer satisfaction is always our number one priority! emergency electric in Los Angeles


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum