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

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

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

Отладка javascript на мобильных устройствах

Время на прочтение3 мин
Количество просмотров19K
Недавно возникла у меня необходимость создать небольшое html5 приложение для смартфонов.
Почему html5? Все предельно просто: при наличии мобильной версии, сайт можно за пару дней допилить до необходимого состояния или же написать с нуля (что не так важно) и в дальнейшем заниматься поддержкой только одной версии кода, не распыляясь на различные платформы.
Отлаживаем наше приложение в телефоне
Всего голосов 21: ↑18 и ↓3+15
Комментарии25

jQuery 1.7 Released

Время на прочтение5 мин
Количество просмотров6.7K
jQuery 1.7 готов к загрузке! Можно скачать с jQuery CDN:
code.jquery.com/jquery-1.7.js
code.jquery.com/jquery-1.7.min.js

Так же этот релиз будет готов к загрузке с Google и Microsoft CDNs в течении дня или двух.

Команда jQuery благодарит всех, кто принимал участие в тестировании и и поиске багов в бета-версиях и верит в прочность и стабильность релиза. И просит всех, кто найдёт какие-либо баги, рапортовать о них на баг-трекер и по-возможности подкреплять тестами для воспроизведения на jsFiddle для более быстрого анализа проблем.
Что нового читаем под катом
Всего голосов 103: ↑101 и ↓2+99
Комментарии63

Некоторые возможности использования Intent'ов

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

Введение


Объекты типа Intent могут быть использованы для общения между отдельными частями Android приложения, либо между различными приложениями системы. Мощь механизма интентов заключается в том, что с его помощью можно обращаться к любому установленному в системе приложению. Это позволяет повторно использовать некоторые компоненты и значительно сократить время на разработку.

В этой статье я покажу некоторые возможности использования класса Intent для обращения к системным приложениям.
Читать дальше →
Всего голосов 76: ↑73 и ↓3+70
Комментарии18

Реализация одностраничного приложения средствами History API в ASP.NET MVC

Время на прочтение11 мин
Количество просмотров9.9K
Добрый день уважаемые хабаровчане. На сайте уже не раз поднимался вопрос о проблеме создания одностраничных ajax приложений. С такой задачей некоторое время назад столкнулся и я. Однако я недоумевал, почему обладая возможностями html5 и мощью MVC я должен столько всего прописывать вручную, да еще и с помощью js.

Возможно именно [holywar=on]неприязнь к языку js[holywar=off] побудили меня создать простое решение, опирающиеся на возможности ASP.NET MVC. Далее, я подробно опишу проблемы, которые возникают при попытке создать одностраничное ajax приложение, и поэтапно рассмотрю создание полноценного решения.

Если стало интересно — добро пожаловать под кат (код и картинки прилагаются).
Читать дальше →
Всего голосов 33: ↑27 и ↓6+21
Комментарии19

Chainvas: изящный и миниатюрный «костыль», добавляющий средства цепного вызова (method chaining) к любому API

Время на прочтение3 мин
Количество просмотров2.8K
Благодаря библиотеке jQuery примерно с 2006 года (то есть лет пять как) никому не надо объяснять, что такое method chaining: это та самая техника программирования, в которой методы объекта могут быть вызваны друг за другом по цепочке, как в jQuery.

Главнейшим достоинством этой техники является заметная экономия усилий программиста. С нею программисту не приходится заново, неоднократно записывать имя объекта вот в такой манере:
obj.шмяк();
obj.тыдыжжь();
obj.ынц();

Вместо этого программист может вызвать все методы цепóчкою — в одну строку:
obj.шмяк().тыдыжжь().ынц();

Если же ему покажется, что такой вид записи хуже читается человеком, чем предыдущий (особенно когда у методов появляются параметры, иногда довольно обширные), то тогда программист может записывать имена методов с новой строки (JavaScript это позволяет), но всё равно экономить на имени объекта:
obj
   .шмяк(параметр1, параметр2, …)
   .тыдыжжь(параметр1, параметр2, …)
   .ынц(параметр1, параметр2, …);

На практике возможность такой техники обеспечивается тем, что ни один метод объекта не возвращает значение undefined. Вместо этого, если метод является командою, а не запросом (то есть выполняет некоторое действие, а не возвращает некоторое значение), то в конце его автор библиотеки пишет «return this» — этим-то и обеспечивается возможность записи вызова нескольких команд подряд в форме цепочки.

Насколько я знаю, устоявшегося русского эквивалента англоязычному словосочетанию «method chaining» пока что не существует. Наверное, можно говорить о «цепочечной» или, для простоты, о «цепной» форме вызова методов.

Удобство цепного вызова вызывает привыкание. Ну правда же: достаточно пару-тройку-другую недель попрограммировать на jQuery — и обыкновенные API начинают раздражать, даже бесить, своею допотопною невозможностью цепного вызова. Также недостаёт возможности задания их свойств в виде объекта, передаваемого методу, подобному .css({color: 'red', 'line-height': 1}) в jQuery.

Вообразите себе, например, как необыкновенно было бы удобно, кабы по холсту (<canvas>) можно было рисовать цепными вызовами в такой манере:
ctx.beginPath()
   .prop({
      lineWidth: 2,
      strokeStyle: '#333'
   }).moveTo(0,0)
   .bezierCurveTo(50,50, 80,80, 100,100)
   .stroke().closePath();

И средство для именно таких цепных вызовов появилось — благодаря Lea Verou. Вот оно:

[Chainvas]

Читать дальше →
Всего голосов 58: ↑42 и ↓16+26
Комментарии10

Загрузка векторных значков через @font-face: за и против

Время на прочтение2 мин
Количество просмотров6K
С помощью @font-face вы можете загружать значки (иконки) не в виде PNG или GIF, а внедрить внутрь шрифта и подгрузить пользователю через директиву @font-face. CSS3 позволяет поворачивать такие значки, добавлять тени или даже анимированные эффекты с плавным изменением цвета при наведении курсора мыши (раньше такое было возможно только на Flash).

Вот здесь инструкция по использованию набора шрифтов IconPack (.eot, .woff, .ttf, .svg) и загрузке значков с помощью псевдо-элемента :before и тега span.



<style>  
.staricon {  
  font-family: 'IconPack';  
}  
.staricon:before {  
  content: 'a';  
}  
.show {  
  display:block;  
}  
.hide {  
  display:none;  
}  
</style>  
  
<div class="staricon">  
  <span class="show">star</span>  
</div>

Читать дальше →
Всего голосов 61: ↑54 и ↓7+47
Комментарии33

Введение в Microsoft “Roslyn” CTP

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

Почему Roslyn?


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

Как пишет Soma в своём блоге, часть Visual Studio language team работает на проектом, который называется Roslyn. Его главная цель — переписать компиляторы C# и VB и создать языкове сервисы в управляемом коде. С чистым, современным и управляемым кодом наша команда сможет быть более продуктивной, внедрять инновации быстрее и выдавать больше возможностей скорее и с лучшим качеством.

Более того, мы открываем компиляторы C# и VB со всей их внутренней информацией, делая доступным для вас анализ кода. Мы предоставляем публичное API и обеспечиваем точки расширения в языковых сервисах C# и VB.

Это открывает новые возможности для расширений VisualStudio — написание мощных инструментов рефакторинга и утилит языкового анализа, а так же позволит любому использовать наши парсеры, семантические движки, генераторы кода и сценариев в своих проложениях.
Читать дальше →
Всего голосов 51: ↑41 и ↓10+31
Комментарии13

Вышел Microsoft “Roslyn” CTP

Время на прочтение1 мин
Количество просмотров8.4K
Большинство компиляторов на текущий момент являются чёрными ящиками — они превращают исходный код в объектные файлы или сборки. Цель “Roslyn Project” от компании Microsoft — открыть компиляторы Visual Basic и C#, дав разработчикам возможность пользоваться API, предоставляющим SyntaxTree, Emit API, Symbol API, Binding & Flow Analysis API. Над API надстраивается множество полезных сервисов:


Roslyn можно использовать для генерации кода, анализа и оптимизации, а так же поддержки сценариев и интерактивного использования VB и C#. На днях вышел Microsoft “Roslyn” October 2011 CTP, который уже можно скачать и попробовать на деле. Под катом подборка ссылочек по теме.
Читать дальше →
Всего голосов 52: ↑45 и ↓7+38
Комментарии7

Плагин для выделения последней строки

Время на прочтение1 мин
Количество просмотров3.2K
В моей текущей задаче нужно было расположить текст по ширине с выравниванием последней строки по центру. Решением могло быть CSS свойство text-align-last, но оно поддерживается только в Internet Explorer'е. Поиск подобных плагинов JQuery не дал результатов, поэтому был написан свой.

Готовый плагин я выложил сюда

Пример использования


$(selector).lastLine({
   'display':'block',
   'text-align':'center'
});

Как видно из примера, в качестве параметра передаётся CSS для последней строки.
Читать дальше →
Всего голосов 49: ↑32 и ↓17+15
Комментарии54

Доклады по асинхронному и реактивному программированию

Время на прочтение2 мин
Количество просмотров963
На следующей неделе я проведу два семинара (или доклада, если хотите) в Киеве.


Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии9

Dispose pattern

Время на прочтение10 мин
Количество просмотров68K
“Не стоит следовать некоторой идиоме только потому, что так делают все или так где-то написано”

Мысли автора статьи во время чтения и рефакторинга чужого кода

Ни для кого не будет секретом, что платформа .NET поддерживает автоматическое управление памятью. Это значит, что если вы создадите объект с помощью ключевого слова new, то вам не нужно будет самостоятельно заботиться о его освобождении. Сборщик мусора определит «достижимость» объекта, и если на объект не осталось корневых ссылок, то он будет освобожден. Однако, как только речь заходит о ресурсах, таких как сокет, буфер неуправляемой памяти, дескриптор операционной системы и т.д., то сборщик мусора, по большому счету, умывает руки и весь головняк по работе с такими ресурсами ложится на плечи разработчика.

А как же финализаторы? – спросите вы. Ну, да, есть такое дело, финализаторы действительно предназначены для освобождения ресурсов, но проблема в том, что время их вызова не детерминировано, а это значит, что никто не знает, когда они будут вызваны и будут ли вызваны вообще. Да и порядок вызова финализаторов не определен, поэтому при вызове финализатора некоторые «части» вашего объекта уже могут быть «разрушены», поскольку их финализаторы уже были вызваны. В общем, финализаторы – они-то есть, но это скорее «страховочный трос», а не нормальное средство управления ресурсами.
Читать дальше →
Всего голосов 77: ↑68 и ↓9+59
Комментарии28

If This Then That (ifttt). Мэшап для связывания веб-сервисов

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


Если вы когда-нибудь пользовались веб-приложением Yahoo! Pipes, то представляете себе методы создания таких мэшапов, в которых взаимодействуют между собой сторонние сервисы. Например, можно автоматически сохранять в Instapaper все статьи, которые вы пометили в Google Reader, или посылать по почте сообщение, если завтра будет дождь.

Yahoo! Pipes — замечательный сервис, и ему посвящено несколько статей на Хабре, но у него есть недостаток: он довольно сложный в настройке. Разработчики сайта ifttt.com (If This Then That) постарались сделать интерфейс как можно проще.
Читать дальше →
Всего голосов 63: ↑51 и ↓12+39
Комментарии30

Kerning.js

Время на прочтение1 мин
Количество просмотров2.7K
Свершилось, теперь чудеса типографики стали доступны и нам простым смертным.

Как использовать


Да легко, просто подключаем и используем.
<script src="kerning.js"></script>

Больше ничего не нужно, остальное она сделает сама.

Узнать о самых крутых вкусностях
Всего голосов 115: ↑106 и ↓9+97
Комментарии88

Собственная страница ошибки 404 на ASP.NET MVC

Время на прочтение6 мин
Количество просмотров27K
При разработке проекта на ASP.NET MVC возникла необходимость сделать собственную страницу ошибки 404. Я рассчитывал, что справлюсь с этой задачей за несколько минут. Через 6 часов работы я определил два варианта ее решения разной степени сложности. Описание — далее.
Читать дальше →
Всего голосов 36: ↑29 и ↓7+22
Комментарии28

Google запустил поиск авиабилетов

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


В мае 2011 года Google запустил поиск авиарейсов в виде текстовой подсказки при поисковом запросе (работает в том числе на русском языке для местных авиамаршрутов). Уже тогда стало ясно, что компания серьёзно работает в данном направлении и скоро турагентам придётся искать новую работу1.

И продолжение не заставило долго ждать. Вчера открылся полноценный поиск авиабилетов с нормальным интерфейсом Google Flights. Он пока ограничен территорией США.

Поиск, отображение цен и построение графиков работает поразительно быстро, даже при указании до пяти мест вылета и пяти мест прибытия в одном поисковом запросе, что заставляет задуматься, как же это реализовано.
Читать дальше →
Всего голосов 60: ↑47 и ↓13+34
Комментарии71

Свой инструмент нужно знать в лицо: обзор наиболее часто используемых структур данных

Время на прочтение8 мин
Количество просмотров62K
image
Некоторое время назад я сходил на собеседование в одну довольно большую и уважаемую компанию. Собеседование прошло хорошо и понравилось как мне, так и, надеюсь, людям его проводившим. Но на следующий день, в процессе разбора полетов, я обнаружил, что в ходе собеседования ответ на как минимум один вопрос был неверен.

Вопрос: Почему поиск в python dict на больших объемах данных быстрее чем итерация по индексированному массиву?

Ответ: В dict хранятся хэши от ключей. Каждый раз, когда мы ищем в dict значение по ключу, мы сначала вычисляем его хэш, а потом (внезапно), выполняем бинарный поиск. Таким образом, сложность составляет O(lg(N))!

На самом деле никакого бинарного поиска тут нет. И сложность алгоритма не O(lg(N)), а Amort. O(1) — так как в основе dict питона лежит структура под названием Hash Table.

Причиной неверного ответа было то, что я не удосужился досконально изучить те структуры, которые лежат в основе работы с коллекциями моего любимого языка. Правда, по результатам опроса нескольких знакомых разработчиков, оказалось что это не только моя проблема, очень многие вообще не задумываются, как работают коллекции в их любимых ЯП. А ведь используем мы их каждый день и не по разу. Так родилась идея этой статьи.
Читать дальше →
Всего голосов 191: ↑179 и ↓12+167
Комментарии66

Создание форм для глубоко вложенных View Model в ASP.NET MVC

Время на прочтение5 мин
Количество просмотров5.8K
Ёще один интересный пост от Jimmy Bogard, посвященный cозданию форм для глубоко вложенных View Model в ASP.NET MVC. Несмотря на то, что в нём постоянно идёт отсылка к ASP.NET MVC 2, информация актуальна и для 3-ей версии. Под хабракатом оригинальный пост в вольном переводе.

Познакомиться с шаблонами для редактирования
Всего голосов 20: ↑15 и ↓5+10
Комментарии14

Применение паттерна MVP в классическом ASP.NET

Время на прочтение3 мин
Количество просмотров5.8K
Приходилось ли Вам сталкиваться с долгоиграющими проектами на ASP.NET?
Может быть Вы сейчас над таким проектом как раз и трудитесь?
Если да, то вы скорее всего сталкивались со сложно переплетенным набором событий, логики и валидаций внутри классов страниц.
Эта статья рассказывает о том как можно упростить жизнь на таких проектах используя все тот же шаблон Model-View-Presenter.
Читать дальше →
Всего голосов 16: ↑11 и ↓5+6
Комментарии24

Официальный ASP.NET MVC 4 Roadmap

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


Очередной год проходит, и самое время для работы над новым релизом ASP.NET MVC. Информация представленная ниже покрывает общие сведения из roadmap для фреймворка ASP.NET MVC 4.

Важно понимать, что мы находимся на раннем этапе разработки ASP.NET MVC 4 и представленный roadmap – документ, планируемый для следующего релиза. Это не спецификация, описывающая, как будет. Мы просто надеемся реализовать большую часть описанного ниже, но нет никаких гарантий того, что это получится. Планы меняются, и вы можете помочь изменить их! Для этого, пожалуйста, оставьте свой отзыв на нашем Uservoice site, дабы мы имели большее представление о том, что вы хотите видеть в новом релизе.

Цели


Перед разбором предлагаемых функций давайте рассмотрим основные цели релиза. Ради великой и прекрасной цели мы поставили перед собой задачу сделать ASP.NET MVC лучшей платформой для создания современных «богатых» веб-приложений. Поэтому мы сконцентрировались на тех функциях ASP.NET MVC 4 (и сетевого стека), которые приблизят нас к выполнению этой цели.

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

Маньячная минимизация (в погоне за байтом)

Время на прочтение8 мин
Количество просмотров8K
Hello World,

Этот топик о том, каким образом можно предварительно зарефакторить код так, чтобы улучшить его минимизацию. Недавно я перед релизом минимизировал библиотеку Helios Kernel (о которой написал позавчера). Исходник библиотеки весит 28112 байт, в нём щедрые комментарии, и поэтому он с пол пинка ужимается YUI компрессором до 7083 байт. Не то что бы мне показалось, что 7 килобайт — слишком жирно. Но просто, посмотрев своими глазами на минимизированный код, я смог увидеть кучу мест, где можно было бы сэкономить ещё:



Посмотрим, что можно сделать с кодом, чтобы превратить 7083 байт в 4009 3937.
Читать дальше →
Всего голосов 171: ↑154 и ↓17+137
Комментарии121

Информация

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