Search
Write a publication
Pull to refresh
1
0
Владимир Пестов @KozzyKoder

User

Send message

Переполнение стека вызовов JavaScript, SetTimeout и снижение производительности AJAX

Reading time3 min
Views123K

Проблема


Некоторое время назад в работе над клиентской (javascript) частью движка josi возникла, кстати, достаточно часто встречающаяся проблема переполнения стека:
Uncaught RangeError: Maximum call stack size exceeded (google chrome)
В статье рассматривается решение без использования setTimout или setInterval.
Читать дальше →

Scrum — реальный опыт работы по методологии

Reading time5 min
Views148K
В данной статье я привожу обзор организации процесса создания программного обеспечения в команде, в которой работаю. Моя цель – это поделиться опытом разработки и управления командой разработчиков.

Для организации процесса работ над проектом мы решили выбрать популярную методологию Scrum. Отчасти это дань моде, отчасти большое количество публикаций в сети Интернет на тему «Scrum сделал за нас все!».
Читать дальше →

Почему мне нравится работать программистом в Луисвилле (или почему я не перееду, чтобы работать в Вашем стартапе)

Reading time8 min
Views119K
Уже некоторое время вверху моего сайта висит слоган:
Нет, я не работаю в Нью-Йорке, Вашингтоне или долине, и меня это полностью устраивает.

Как и со многими (если не с большинством) из вас, со мной регулярно связываются рекрутеры. К сожалению, они не знают обо мне ничего конкретного, кроме того, что сумели найти в моем LinkedIn или GitHub. Если уж они и посещали мой сайт, то определенно не заметили этот слоган. Мне порядком надоело отвечать на тонны одинаковых писем (хотя возможно они чем-то и отличаются) снова и снова, так что, надеюсь, читатели моего блога на этот раз простят мне эгоистичное отступление от основной его темы.

Я разработчик софта из Луисвилля, штат Кентукки, и я здесь до чертиков счастлив.

Коротко об авторе и еще кое-что
Эрни Миллер удаленно работает в крупном американском стартапе Living Social ведущим Ruby on Rails разработчиком. О своей должности он пишет «Build awesome things, and make people happy. That's about it.».

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

Этот пост еще в декабре прошлого года попался мне на глаза и отлично употребился вместе с «Как я нахожу время?».

В то же самое время я посетил Ульяновский RailsClub'Ulyanovsk, а чуть позже побывал в Праге. И на резком контрасте с Москвой, я четко понял, что многое в жизни можно делать по-другому. Автор статьи постарается объяснить — как.

Полезного и приятного чтения!


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

[Перевод] Введение в CocosBuilder

Reading time24 min
Views22K


Перевод статьи Introduction to CocosBuilder.
Автор оригинальной статьи Али Хафиджи, разработчик под iOS и Android.

CocosBuilder – это бесплатный инструмент, который позволяет быстро и легко управлять спрайтами, макетами и сценами при разработке вашей игры, использующей Cocos2D.

CocosBuilder идеально подходит для быстрой планировки меню и других элементов интерфейса игровых сцен, при этом вы не будете испытывать проблем по их компоновке в пространстве.
В ходе обучения вы напишите игру Cat Jump. Вы увидите, как CocosBuilder позволит вам сэкономить массу времени и кода.
Читать дальше →

Насколько плохим код должен быть?

Reading time6 min
Views74K
Эрик Липперт — ветеран Microsoft, проработавший в компании 16 лет и стоящий за разработкой VBScript, JScript и C#.

На прошлой неделе в комментариях к одной из статей разгорелся спор о роли низкоуровневой оптимизации в программировании, и я вспомнил относящуюся к этому статью Эрика. Она была написана в конце 2003, и хотя реалии с тех пор несколько изменились — принципы остались теми же самыми. Можете мысленно заменить ASP и VBScript на PHP, JavaScript, или на другой скриптовый язык по вашему вкусу.

Эту статью я уже пытался перевести в 2005, но русский текст тогда получился неуклюжий, так что этот перевод — новый и ранее не публиковался, в соответствии с требованиями НЛО. В Переводе блога Эрика Липперта этого текста тоже нет — наверное, для них он слишком стар.


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

Например, за семь лет в Microsoft я получил десятки вопросов, аналогичных по своей сути этому, заданному в конце 1990-х:
У нас есть код на VBScript, и в одной часто вызываемой функции мы определяем оператором Dim несколько переменных, которые нигде в функции не используются. Не замедляется ли каждый вызов функции из-за объявления этих переменных?
Какой интересный вопрос! В компилируемом языке, таком как Си, объявление локальных переменных общим размером n байт всего лишь вычитает n из указателя стека при входе в функцию. Если n будет чуть больше или чуть меньше, затраты времени на вычитание никак не изменятся. Наверное, в VBScript точно так же? Оказалось, что нет! Вот что я написал автору вопроса:
Читать дальше →

iOS разработчик: Обзор книг для новичка

Reading time4 min
Views193K
Какое-то время назад я решил перепрофилироваться на разработчика под iOS, и решил систематизировать материал. Так сказать, составить свой roadmap. Получился некий обзор, которым я хотел бы поделиться с вами.
Данный обзор не претендует на полноту, непогрешимость и истину в последней инстанции.

Итак, вы приобрёли iPhone или iPad. Чудесные устройства, не правда ли? Какое-то время спустя пришла мысль “а не создать ли мне под него программу, которая завоюет мир?”. Я расскажу вам, с чего начать.
Читать дальше →

Опции JVM. Как это работает

Reading time7 min
Views96K
С каждым днем слово java все больше и больше воспринимается уже не как язык, а как платформа благодаря небезызвестному invokeDynamic. Именно поэтому сегодня я бы хотел поговорить про виртуальную java машину, а именно — об так называемых Performance опциях в Oracle HotSpot JVM версии 1.6 и выше (server). Потому что сегодня почти не встретить людей, которые знают что-то больше чем -Xmx, -Xms и -Xss. В свое время, когда я начал углубляться в тему, то обнаружил огромное количество интересной информации, которой и хочу поделится. Отправной точкой, понятное дело, послужила официальная документация от Oracle. А дальше — гугл, эксперименты и общение:

-XX:+DoEscapeAnalysis


Начну, пожалуй, с самой интересной опции — DoEscapeAnalysis. Как многие из Вас знают, примитивы и ссылки на объекты создаются не в куче, а выделяются на стеке потока (256КБ по умолчанию для Hotspot). Вполне очевидно, что язык java не позволяет создавать объекты на стеке на прямую. Но это вполне себе может проделывать Ваша JVM 1.6 начиная с 14 апдейта.

Про то, как работает сам алгоритм можно прочитать тут (PDF). Если коротко, то:

  • Если область видимости объекта не выходит за область метода, в котором он создается, то такой объект может быть создан на фрейме стека вместо кучи (на самом деле не сам объект, а его поля, на совокупность которых заменяется объект);
  • Если объект не покидает область видимости потока, то к такому объекту другие потоки не имеют доступа и следовательно все операции синхронизации над объектом могут быть удалены.


Для реализации данного алгоритма строится и используется так называемый — граф связей (connection graph), по которому на этапе анализа (алгоритмов анализа — несколько) осуществляется проход для нахождения пересечений с другими потоками и методами.
Таким образом после прохода графа связей для любого объекта возможно одно из следующих следующих состояний:

  • GlobalEscape — объект доступен из других потоков и из других методов, например статическое поле.
  • ArgEscape — объект был передан как аргумент или на него есть ссылка из объекта аргумента, но сам он не выходит из области видимости потока в котором был создан.
  • NoEscape — объект не покидает область видимости метода и его создание может быть вынесено на стек.


После этапа анализа, уже сама JVM проводит возможную оптимизацию: в случае если объект NoEscape, то он может быть создан на стеке; если объект NoEscape или ArgEscape, то операции синхронизации над ним могут быть удалены.

Следует уточнить, что на стеке создается не сам объект а его поля. Так как JVM заменяет цельный объект на совокупность его полей (спасибо Walrus за уточнение).

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

    for (int i = 0; i < 1000*1000*1000; i++) {
        Foo foo = new Foo();
    }

скорость выполнения может увеличится в 8-15 раз. Хотя, на казалось бы, очевидных случаях из практики о которых недавно писалось (тут и тут) EscapeAnalys не работает. Подозреваю, что это связано с размером стека.

Кстати, EscapeAnalysis как раз частично ответственен за известный спор про StringBuilder и StringBuffer. То есть, если Вы вдруг в методе использовали StringBuffer вместо StringBuilder, то EscapeAnalysis (в случае срабатывания) устранит блокировки для StringBuffer'а, после чего StringBuffer вполне превращается в StringBuilder.
Читать дальше →

Строки в C# и .NET

Reading time10 min
Views325K
image
От переводчика: Джон Скит написал несколько статей о строках, и данная статья является первой, которую я решил перевести. Дальше планирую перевести статью о конкатенации строк, а потом — о Юникоде в .NET.

Тип System.StringC# имеющий алиас string) является одним из наиболее часто используемых и важных типов в .NET, и вместе с тем одним из самых недопонимаемых. Эта статья описывает основы данного типа и развенчивает сложившиеся вокруг него мифы и непонимания.
Читать дальше →

Очередь сообщений (Message Queue)

Reading time4 min
Views144K

Очередь сообщений (Message Queue)



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

Полезные факты о языке программирования Objective-C

Reading time3 min
Views23K
Я уже 2 года занимаюсь разработкой приложений под iOS и в этой статье мне захотелось представить те факты, которые показались мне интересными и полезными. Буду рад, если вы так же поделитесь своими знаниями в комментариях. В следующей статье хотелось бы собрать подобные факты о Foundation Kit.

.m


Расширение .m (message) ввели для того чтобы выделить ключевую особенность Objective-С. По сути, мы не вызываем методы у класса, мы отправляем сообщение объекту, после чего происходит диспетчеризация в ходе которой диспетчер методов Objective-C ищет нужный класс и вызывает у него необходимый метод.

NS


Префикс NS обозначает Next Step. Он возник еще в те времена, когда не было Cocoa, а фрейворк назывался NextSTEP и был продуктом NeXT Software. Apple купила эту компанию в 1996 году и чтобы не нарушать обратную совместимость кода продолжила использовать этот префикс.

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

Система автоматической сборки мобильных приложений Alawar Build System

Reading time4 min
Views15K
Всем привет!

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

Мы столкнулись с необходимостью автоматизировать сборку и деплоймент на тестовые устройства, когда размер парка устройств превысил два десятка, а количество проектов, одновременно находящихся в QA достигло 30+. При таких объемах деплоймент билда на тестовые устройства с помощью “Build & Run” в XCode начал заметно затормаживать процесс прохождения QA. Было принято решение об автоматизации процесса сборки и заливки билдов на устройства.

Наша обновленная билд-система состоит из трех основных компонентов:
  • Репозитории с исходными кодами проектов;
  • Сервер сборки;
  • Сервер раздачи билдов на устройства.


Процесс прохождения версии проекта от разработчиков до тестировщиков выглядит следующим образом:
  • Разработчик делает коммит версии в репозиторий;
  • Билд-сервер запускает сборку соответствующего проекта;
  • В случае успешной сборки, билд выкладывается на сервер раздачи;
  • Итоговый IPA устанавливается на устройства “по воздуху”.



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

Пускаем пыль в глаза или как получить больше заказов на разработку

Reading time6 min
Views64K
У большинства компаний и фрилансеров есть свое видение как нужно привлекать клиентов и конвертировать их в заказчиков. Некоторым это удается хорошо, некоторым хуже, но для многих это проблема, пусть даже сами они об этом неподозревают.



Если при наличии современного сайта, представительного портфолио и рыночных рейтов, процент заказов у вас остается относительно низким, то с большой долей вероятности причина в неправильном процессе начальной коммуникации. Как сделать его более эффективным? Об этом пойдет речь под катом.
Читать дальше →

Запрет чтения свойств модели в ASP.NET MVC

Reading time3 min
Views6.3K
В моей прошлой статье был рассмотрен один из возможных вариантов защиты от редактирования свойств модели в Web приложениях, написанных на ASP.NET MVC. Данная статья будет посвящена рассмотрению одного из вариантов запрета чтения некоторых свойств модели конкретными ролями пользователей.
Читать дальше →

Расширение Web Essentials для Visual Studio: LESS, Zen Coding, CoffeeScript и многое другое

Reading time7 min
Views25K


Visual Studio – поистине потрясающий инструмент для разработки приложений вообще (чувствуете всю маркетинговую мощь этой фразы?) и web-разработки в частности. Но сила Visual Studio не только в возможностях, которые в ней есть «из коробки», но и в наличии тысяч полезных расширений. Одним из моих любимых расширений, которое добавляет поддержку LESS, Zen Coding и CoffeeScript, а также содержит множество других возможностей, является расширение Web Essentials 2012 (скачать), о котором мы и поговорим в данной статье.

Не смотря на то, что цикл выпуска обновлений для Visual Studio 2012 короче, чем для предыдущих версий, а первое крупное обновление уже доступно, нам, как разработчикам, обычно, хочется получать новые полезные возможности как можно раньше. И расширение Web Essentials позволяет это делать.
Читать дальше →

[Перевод] Как я читаю книги по программированию

Reading time4 min
Views139K
Я получил образование по специальности «Электротехника» и единственными языками программирования, которые мы изучали были C/C++, ассемблер и Matlab. После того как я посетил Startup Weekend, я понял, что информатика и разработка программного обеспечения мне небезразличны и решил погрузиться в эти области с головой. Также я осознал, что мне требуется изучить еще несколько языков программирования, помимо тех, которые я изучал в университете.

За прошедшие полтора года я начал изучать Java (для Android), а также Python, JavaScript, HTML и CSS (для web-разработки) и выявил для себя, что лучший способ изучать язык программирования, разбирая книгу или туториалы, — читать все по три раза! Да, именно по 3 раза!!! Чтение нового материала подобным образом, хорошо помогло мне понять новые языки программирования и концепции.
Читать дальше →

Предельная производительность: C#

Reading time56 min
Views266K
performanceЯ поделюсь 30 практиками для достижения максимальной производительности приложений, которые этого требуют. Затем, я расскажу, как применил их для коммерческого продукта и добился небывалых результатов!
Приложение было написано на C# для платформы Windows, работающее с Microsoft SQL Server. Никаких профайлеров – содержание основывается на понимании работы различных технологий, поэтому многие топики пригодятся для других платформ и языков программирования.
Читать дальше →

Сервис шаринга скриншотов и кода

Reading time5 min
Views11K
Многие из вас наверняка слышали про сервисы, позволяющие делится скриншотами одним нажатием кнопки. Общая концепция следующая: жмёшь хоткей, выделяешь область экрана, в буфер обмена получаешь ссылку на скриншот, который автоматически загружается на какой-то хостинг. Так же многие из вас наверняка пользовались другими сервисами — позволяющими опубликовать фрагмент исходного кода и получить ссылку на страничку, отображающую этот исходник с подсветкой синтаксиса.

Мы объединили две эти идеи и сделали проект, обладающий следующими фичами:

  • Публикация скриншотов и исходников по нажатию хоткея
  • Open Source — можете форкнуть / поднять на своём сервере / добавить новые фичи
  • Прямая ссылка на изображения, отсутствие рекламы
  • Кроссплатформенность
  • Устойчивость к высоким нагрузкам (хостимся в облаке)

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

Прокрастинация. Новые задачи. Часть 2

Reading time5 min
Views110K
Сегодня мы продолжим борьбу с прокрастинацией.

Поговорим о новых задачах, узнаем что такое РЭПТ и для чего нужен план, существует ли кооперативная работа и когда это всё кончится?

Интересно?
Добро пожаловать под кат

Оптимизация выражения LIKE при использовании Sqlite в iOS приложении

Reading time2 min
Views9.7K
Недавно я столкнулся с задачей оптимизации запроса к Sqlite в моем iOS приложении.
Задача заключалась в следующем. Имелся список документов (PDF файлов), словарь (список слов), ну и связь документов и слов из словаря (вхождение слов в документ). Необходимо было реализовать поиск и вывести список документов в которых есть введенное слово.

Структура базы имела следующий вид:
Читать дальше →

Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity