Search
Write a publication
Pull to refresh
4
0
xRay @xRay

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

Send message

Больше подробностей из отчета Скорость загрузки сайта в Google Analytics

Reading time2 min
Views7.1K
Совсем недавно разработчики GA сообщили об улучшении отчета «Скорость загрузки сайта». А именно в него добавили больше полезных метрик, которые помогут улучшить производительность сайта.

Новый набор метрик доступен в разделе «Технические характеристики» в каждой из вкладок отчета «Скорость загрузки сайта» (Исследование, Эффективность, Наложение данных на карту).

image

image
Что же это за новые метрики и чем они могут быть полезны?

DigestSDK — автоматизация работы с MSSQL на Delphi

Reading time3 min
Views5.8K

Вступление


Несколько лет назад мне пришлось реализовать работу с таблицами базы данных MSSQL сервера. После написания некоторого количества, фактически однотипного кода, пришла мысль автоматизировать эти «рутинные» действия.
Согласитесь, что написание одного и того же кода, отличающегося только структурой таблиц БД, не может никого вдохновить. К тому же, если кол-во таблиц, с которыми приходиться работать переваливает за десяток, то занятие из разряда скучное — переходит в разряд трудоемкое.
Поиск в интернете на тот момент не дал результатов, поэтому реализацию пришлось взять на себя. .
В результате был создан набор модулей (в дальнейшем DigestSDK) на языке Delphi, позволяющих избавить программиста от написания «стандартного» кода по работе с БД и сосредоточиться на логике самого приложения. .
Демонстрационные примеры, исходные коды и видео по работе с DigestSDK выложил на SourceForge (авось еще кому да и пригодится, заодно и хабр эффект проверим в очередной раз:-))..

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

Вышел Firefox 9

Reading time1 min
Views1K
Вышла финальная версия Firefox 9.

В этой версии:
  • Поддержка технологии Type Inference для повышения производителньости JavaScript;
  • Добавлена поддержка запросов статуса Do-Not-Track через JavaScript;
  • Добавлена поддержка font-stretch;
  • Улучшена поддержка text-overflow;
  • Расширена поддержка стандартов HTML5, MathML и CSS;
  • Исправлены ошибки и повышена стабильность.

Скачать для Windows
Скачать для GNU/Linux
Скачать для Mac

p.s. Официальное объявление состоится завтра (вторник).

Быстрая server side интеграция ASP.NET + Facebook

Reading time4 min
Views4.3K
Так вышло, что мне пришлось столкнуться с интеграцией с Facebook-ом на платформе ASP.NET. Интеграция нужна была server-side, поэтому решено было использовать Facebook C# SDK.
Как оказалось процесс довольно таки не сложный, но важно понять суть и принцип.
Читать дальше →

О разработке специальной версии сайта Госдумы для людей с нарушениями зрения

Reading time8 min
Views2K
Из серии статей о новинках на сайте Государственной Думы. Предыдущие: первая, вторая и третья.

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

Адрес спецверсии: spec.duma.gov.ru

Всю разработку специальной версии можно логически разделить на 4 этапа:
  1. Анализ действующих стандартов и ГОСТ-ов;
  2. Анализ существующих решений;
  3. Обобщение проанализированных данных;
  4. Разработка сайта.
Но вначале, приведем некоторые цифры по проблеме зрения в России и мире.
Читать дальше →

2ГИС запускает API карт

Reading time2 min
Views13K
Вслед за API справочника 2ГИС мы рады представить бета-версию API карт. Теперь любой сайт может бесплатно использовать не только точные и актуальные данные по 1,2 млн. организаций России, но и настолько же качественные карты.

Карты 2ГИС охватывают 140 городов и свыше 4000 населённых пунктов с детализацией до заборов, киосков, внутриквартальных проездов. Над актуальностью и полнотой данных в 2ГИС работает более 700 сотрудников, карты обновляются каждый месяц (а данные уже каждый день). 

Функционально API предлагает разработчикам необходимый набор методов для работы с картой. Мы не планируем вводить какую-либо плату за использование API карт, а для начала работы не требуется получение ключа.
Читать дальше →

Vox.io — новый взгляд на идею Skype

Reading time2 min
Views1.2K
Итак, Vox.io — это сервис, который позволяет звонить на мобильные номера и аккаунты самого Vox.io прямо из браузера (как с видео, так и без). А ещё делать групповые звонки (читай, телеконференции), звонки на e-mail (ниже) и отправлять sms. Возможно, пока я писал, появилось что-то ещё — проект очень живой.



В среднем, цена на звонки по России составляет 2 рубля при абонементе и 4 рубля при «просто звонках». При регистрации вам сразу же выдают 10 рублей (25 евроцентов), а за каждого приглашённого начисляют ещё по 6 рублей (15 евроцентов).

Ниже я подробнее расскажу о 3-х главных полезностях Vox.io, которые меня «зацепили».
Читать дальше →

Взлом с продолжением

Reading time4 min
Views44K
Одно время я работал на free-lance.ru. С утра я обычно мониторил заказы, а после обеда непосредственно работал. Однажды я наткнулся на заказ, сумма за выполнение которого была очень аппетитной. Я сразу отписался по заказу, и буквально через минуту получил ТЗ на проект в личку. Поначалу меня удивила скорость ответа, и то что меня сразу выбрали исполнителем, но с другой стороны такое уже частенько бывало. Файл с ТЗ мне показался странным, в него была встроена ссылка на flash ролик. Проверив файл на вирусы и получив ответ, что угроз не обнаружено, я таки усыпил свою бдительность и щелкнул по ссылке на flash ролик. А щелкать не стоило.
Читать дальше →

Знакомство с Gem. Часть вторая

Reading time6 min
Views2.6K
Доброго времени суток!

Вместо введения


Наконец-то я нашёл немного времени для того, чтобы продолжить своё повествование о разнообразных чудесах в Ruby. Как вы помните, в прошлой части мы познакомились с основами написания своего гема. Мы узнали, какой минимальный набор файлов должен быть для того, чтобы его собрать. Также мы узнали как мы можем опубликовать своё творение в RubyGems. В тот же день (после написания первой части) в RubyGems неожиданно проявился всплеск гемов под названием hello-world. Причём я застал довольно много вариаций оного. Некоторые даже не удосужились поменять строку, где указывается автор гема.
g.author = "krovatti"

Некоторые вовсе задавали гему следующие значения версий:
g.version = "666"
g.version = "111"
g.version = "911"

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

IM+ сегодня запускает собственный кросс-платформенный сервис обмена мультимедийными сообщениями «Beep»

Reading time2 min
Views12K
image

Добрый день, Хабр!

Сложилось так, что я уже дважды писал хабрапосты о нововведениях в популярном клиенте IM+. Спустя некоторое время я был приятно удивлен когда получил приглашение от разработчиков принять участие в открытом бета-тесте их нового сервиса обмена мультимедийными сообщениями «Beep», который активно проходил на различных сайтах сообществ (Android-версия на xda-developers.com, Blackberry — на blackberrys.ru и т.д.)
Я в свою очередь протестировал работу нового IM+ c Beep на Android 4.0 ICS.

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

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

Данные о метаданных: к вопросу об индексировании технических чертежей

Reading time2 min
Views4.3K
imageОт переводчика. Продолжаем серию статей, посвященных проблеме создания электронных архивов проектной и конструкторской документации. Сегодняшняя статья посвящена проблеме индексирования отсканированных чертежей. Под индексированием (атрибутированием) в данном случае понимается анализ и последующий ввод в систему метаданных, на основе которых осуществляется классификация, структурирование и поиск документов в архиве. Приглашаем наших читателей к дискуссии и обмену практическим опытом по данному вопросу.

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

Расширение функционала тегов Page/MasterPage/UserControl в ASP.NET MVC

Reading time8 min
Views3.4K
Недавно начал переводить старый самописный движок с PHP на ASP.NET и столкнулся с несколькими моментами, связанными с шаблонами Smarty и возможностями представлений ASP.NET MVC. Сразу оговорюсь, что подход можно применять и для веб-проектов, но там, возможно, потребуется допилка. Итак.

Во-первых, с самого начала возникла необходимость из шаблона обращаться к методам основного объекта веб-приложения (назовем его Main) — например, конфигурация, менеджер тем, к методам вызывающего контроллера и так далее. Стандартный класс System.Web.Mvc.ViewPage не предоставляет удобного функционала для этого. Конечно, можно добраться до свойства ViewContext.Controller, сделать приведение типа и работать в шаблоне с кодом вида <%=((IndexController)ViewContext.Controller).CurrentTheme.Name%>, но тут возникает вопрос читабельности кода и удобства его написания вообще. Я пошел по пути расширения функционала System.Web.Mvc.ViewPage (а заодно System.Web.Mvc.MasterPage и System.Web.Mvc.UserControl) и добавления в него свойства ControlHelper, которое возвращает объект-помощник, делающий доступными необходимые возможности.

Во-вторых, возникла необходимость в представлениях не задавать прямой путь MasterPageFile, а размечать его дополнительными тегами а-ля «CurrentTheme.SiteMaster», «UserTheme.SiteMaster» и т.п. К сожалению, при записи подобной строки в атрибут MasterPageFile директивы Page я получал ошибку синтаксического анализатора, ругавшегося на отсутствие файла "~/Views/{CurrentTheme.SiteMaster}". Единственное найденное решение — создание своего атрибута для директивы Page, например MasterPagePath:
<%@ Page Language="C#" MasterPagePath="{CurrentTheme.SiteMaster}" Inherits="..." %>


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

Последовательный вызов асинхронных функций

Reading time3 min
Views33K
Как известно, язык JavaScript преследует парадигму событийно-ориентированного программирования. Это, безусловно, хорошо, но что делать, если за одной асинхронной функцией должна вызываться другая асинхронная функция, а затем еще одна, и еще… Иногда такой код очень запутывает, и не только человека привыкшего к синхронному и поочередному вызову функций. Это касается сложных анимаций, таймаутов, аякса, когда за одним должно следовать другое, и так дальше.

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

UPD
image
Ниже моё решение, являющееся аналогом этой функции модуля async и кучи других подобных решений, представленных в комментариях. Спасибо всем комментирующим и sedictor в частности.
/UPD

Рассмотрим пример (который взят из головы и в нем возможны ошибки) гипотетического парсера сайта, который после парсинга заносит данные в БД, и, после занесения, вызывает некоторый код.

var html = '';
request.on('response', function (response) {

    response.on('data', function (chunk) {
        html = html + chunk;
    });

    response.on('end', function() {
        //какой-то парсер
        parse(html, function(data){  
                //какая-нибудь функция, добавляющая данные в базу
		addToDatabase(data, function() {  
			doSomething();
		})
	});

    });
});


Много вложенных колбеков — не есть гуд, пробуем по-другому.
Читать дальше →

Моки и стабы

Reading time8 min
Views111K
Существует категория классов, которые тестировать весьма просто. Если класс зависит только от примитивных типов данных и не имеет никаких связей с другими бизнес-сущностями, то достаточно создать экземпляр этого класса, «пнуть» его некоторым образом путем изменения свойства или вызова метода и проверить ожидаемое состояние.

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

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

Легкая публикация PEAR-пакетов

Reading time4 min
Views3.3K
Скажу сразу: у меня создание PEAR-канала и публикация пакета заняли около часа. Но, если отбросить все тупиковые способы, сэкономить на гуглении, и не использовать сомнительные утилиты, то вполне возможно уложиться в 10 минут.

У PHP программистов больше поводов не любить PEAR, чем любить. Действительно, создается впечатление, что за последние 5 лет ни библиотеки в репозиториях, ни сам инсталлятор, практически не изменились.
Тем не менее, до сих пор, установить PHP-бибиотеку проще всего посредством PEAR. Это, конечно, при условии, что она будет одинаково востребована для всей системы. Например, такие продукты, как PHPUnit и Docblox устанавливаются именно через PEAR, и крайне неудобно устанавливать их другими способами: например, клонированием GitHub репозитория.

Скорее всего у вас есть библиотека, которой вы бы хотели поделиться с сообществом. Ну или когда-то появится. Это не важно. Важно то, что рано или поздно вам захочется сделать так, чтобы ваш продукт можно было установить всего в 2 команды…
Читать дальше →

Бесплатные SMS. Каждому!

Reading time3 min
Views2.7K
Всякий, кто когда-либо интересовался историей сервиса «Hotmail» (хотя бы зайдя в одноимённую статью англоязычной Википедии почитать да попрыгать оттуда по гиперссылкам на первоисточники), уж конечно, знает о том, что этот сервис, который в настоящее время называется «Windows Live Hotmail» (а несколькими годами ранее назывался «MSN Hotmail»), не всегда принадлежал Корпорации Microsoft, а был приобретён ею в 1997 году. Запущен же Hotmail был в июле 1996 года двумя интернетчиками по имени Сабир Бхатиа (Sabeer Bhatia) и Джек Смит (Jack Smith); тогда он носил название «HoTMaiL», данное с тем остроумным намерением, чтобы четыре заглавные буквы его складывались в название языка HTML.

Сейчас, в 2011 году, даже сложно представить или вспомнить, что тогда, в 1996 году, HoTMaiL стал одним из самых первых в истории Интернета сайтов, предлагавших навсегда получить бесплатные почтовые ящики в своём домене всем желающим; обычным же для того времени было, наоборот, употребление почтовых ящиков e-mail, предоставляемых организацией при трудоустройстве или провайдером при подключении к Интернету — причём, ясное дело, никто и мечтать не мог о пожизненном владении тем или иным адресом e-mail, потому что такие адреса подлежали физическому уничтожению при увольнении или при расторжении контракта с провайдером. Появление HoTMaiL и других его аналогов (не менее бесплатных) было воспринято сообществом Интернета прямо-таки как манна небесная — хотя, к сожалению, возможность анонимной регистрации и бесплатной отправки e-mail пошла на пользу и спамерам.

Сабир Бхатиа родился 30 декабря 1968 года. В июле 1996 года ему не было ещё и 28 лет. Между тем во все прошедшие с тех пор пятнадцать лет — до самого недавнего времени — об этом индусе родом из Чандигарха ничего не было слышно, и многие из нас, интернетчиков, даже начали подзабывать его имя. Новые же поколения и вовсе ничего не знали о нём.

И что же? Во второй половине ноября 2011 года мир облетела новость (лично мне она попалась на сайте «ТЕХНО bigmir)net») о том, что Бхатиа запустил бесплатную службу мобильных текстовых сообщений JaxtrSMS, которая «сделает для SMS то же самое, что Hotmail сделал для электронной почты». JaxtrSMS обеспечивает бесплатную отправку текстовых сообщений с мобильника каждого своего пользователя на любой другой мобильник в мире — при этом получателю сообщение будет доставлено даже в том (сейчас наиболее вероятном) случае, когда у получателя не установлено приложение JaxtrSMS.

[Jaxtr]

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

Работа с памятью (и всё же она есть)

Reading time13 min
Views108K
Существует распространенное мнение, что «рядовому» PHP разработчику практически не нужно заботиться об управлении памятью, однако «заботиться» и «знать» всё же немного разные понятия. Попытаюсь осветить некоторые аспекты управлению памятью при работе с переменными и массивами, а также интересные «подводные камни» внутренней оптимизации PHP. Как вы сможете убедиться, оптимизация это хорошо, но если не знать как именно она «оптимизирует», то можно столкнуться с «неочевидными граблями», которые могут вас заставить изрядно понервничать.

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

Турнир по AngryBirds: как его делать

Reading time2 min
Views727
На редкость веселое получилось событие — Турнир по AngryBirds.
Мы пригласили на событие все казанские школы и пришло в итоге около 3000 человек. А победил студент КАИ.

Видео



Планы


Сейчас мы в контакте с ROVIO и планируем проводить такие турниры почаще.

Механика турнира


Поставили в конференц-зале ИТ-парка 8 плазменных экранов и через переходник подключили к каждому по iPad2 (iPad'ы отобрали, арендовали у знакомых.) Участники играли на iPad, а изображение выводилось на плазму или на видеокубы.
Читать дальше →

Новый механизм аутентификации в Windows 8: «вход по картинке»

Reading time1 min
Views3.1K
Похоже, что разработчики новой операционной системы Windows 8 не сидят на месте, а действительно воплощают в жизнь новые идеи, не ограничиваясь только визуальными отличиями от конкурентов, такими, например, как интерфейс Metro.

Традиционный механизм аутентификации пользователей при помощи логина и пароля в Windows 8 предлагается дополнить альтернативным, цель которого упростить работу с системой, когда особых требований для безопасности не предъявляется, что типично для домашних условий. Суть нового способа будет заключаться в следующем:
  • Пользователь включает альтернативный режим входа — «по картинке».
  • Далее загружает в систему некоторую известную ему картинку, которая будет использоваться для процесса аутентификации
  • Система просит выполнить по картинке несколько определенных характерных жестов — «тапов», «кругов» и т.п. и запоминает их.
  • В дальнейшем эти жесты предлагается повторить — «введите пароль еще раз» — и при следующем входе в систему пользователь, увидев знакомую ему картинку, должен будет выполнить уже знакомые ему жесты по картинке. Естественно, в случае успеха он получает доступ к своей учетной записи.

Демонстрация этого процесса приведена на видео:



[Источник]

Information

Rating
Does not participate
Registered
Activity