• ↓
  • ↑
  • ⇑
 
Записи с темой: программирование (список заголовков)
00:52 

iconv для бедных

06:24 

xhprof авторства facebook оказался в работе намного лучше классического xdebug. Добился двукратного прироста транзакций-в-секунду на доверенном объекте.


И еще интересные слайды по профилированию веб-приложений с июньской devconf от Лердорфа


@темы: Программирование

10:35 

PyCharm 2.5


  • Remote interpreters — full integration with Python interpreters running on remote hosts is ensured.

  • Added ability to browse and install packagesfrom PyPI.

  • The new version provides virtualenv integration including virtualenvs creation and auto-detection of existing ones


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


@темы: Python, Программирование

07:54 

SASS/SCSS

Хорошая штука — этот ваш sass. Шаблонизатор для CSS с функциями, переменными, макросами, дамами и преферансом.


На самом деле есть еще LESS. И в сети много холиваров, кто же круче. Но я выбрал SASS, а точнее его вторую реинкарнацию — SCSS.


У этого дела есть отличная документация и там сразу все понятно что делать.


Из полезного:



  • можно задавать переменные, если часто один и тот же параметр используется в CSS-файле. Причем в переменную можно запихать не только один цвет а сразу весь "1px solid #333"

  • вложенные определения: вместо div.class1 a можно вложить a в описание div.class1

  • функции для работы с цветом! Сделать рамку того же цвета, но на 30% темнее. Или смешать с белым цветом в соотношении 30/70%? Наложить красный полупрозрачный блок на зеленый без поддержки opacity? И такое можно. А если запихать базовый цвет в переменную, то цвет всего сайта меняется одной строчкой.

  • Несколько свойств и вложенные свойства можно объединять в макросы. Даже в параметризованные.

  • В продолжении предыдущего пункта: есть библиотека Bourbon, которая реализует CSS3-свойства через макросы. Теперь не надо прописывать -moz, -o, -webkit, -ms для поддержки нестандартных свойств. Пишем @include border-radius(1px 4px), а bourbon сам позаботиться о префиксах и порядке параметров.


Естественно, никакой браузер это на прямую не поддерживает. Поэтому scss компилируется в обычный css: вложенные правила разворачиваются, переменные подставляются, функции возвращают результат. И тут начинается самое веселое — если относится к scss как к обычному языку программирования, то после компиляции можно получить какой-нибудь css файл на тысячи строк, где половина дублируется, а правила растут на 10 уровней в глубину. Такое может заставить и браузер загрустить.


Поэтому надо сначала читать документацию и полезную статью, а только потом начинать писать. И запомнить, что не @include, а @export ваш лучший друг.


P.S.: LESS умеет (но можно и на сервере все делать тоже) компилировать свой скрипт прямо в браузере при помощи javasсript. Это накладывает некоторые ограничения, но зато можно использовать скрипты в css


PhpStorm (и другие продукты) поддерживает SASS, но вложенные @media вводят его в заблуждение. Ждем исправлений.


@темы: Программирование

08:54 

19:28 

1.4



Спустя ровно год, Django-пони снова появляется на горизонте, чтобы принести нам релиз 1.4


Самое главное — это, конечно, решение проблемы N+1. При последней работе с абитуриентом я даже начал бояться m2m-связей. А теперь встречаем prefetch_related


Улучшенная поддержка WSGI. Пока все проекты в deployment у нас работают в связке cherrypy + nginx. От CherryPy используется только встроенный сервер, так что накладно таскать каждый раз всю библиотеку. И в django-cherrypy, который для связки используется тоже есть свои проблемы. А выбрано оно все было ради скорости, согласно тестам. Правда uwsgi и тогда лидировал, но его поддержка в django была не на высоте и сам он считался нестабильным. А теперь можно и попробовать. Еще интересно как там gunicorn поживает. На тестах он не в лидерах, но теперь, спустя время, все чаще вижу его рекомендации в статьях.


Именованные аргументы в пользовательских шаблонах. Я тут как раз изучаю Twig под PHP и это одна из фишек шаблонизатора, которой мне теперь не хватает django. Но главное не увлекаться этим, а то потом придется писать шаблонизатор для шаблонизатор. assignment_tag и {% static %} тоже пригодятся. Приходилось писать пользовательские теги, которые только меняют контекст. Теперь будет проще.


Остальное изучится по ходу работы.


Обзор новых фич на русском есть на blog.futurecolors.ru


@темы: Python, Программирование

11:12 

Twig

Открыл для себя Twig.


Это 5 лет назад: «говорим шаблонизатор — подразумеваем Smarty». А они мне тогда не нравился. Мне тогда вообще не нравились шаблонизаторы. Я тогда уже знал волшебную мантру «отделяем логику от представления», но надеялся, что я справлюсь своими силами. Как показал опыт, в итоге я сорвался.


А за последнее время я полюбил django, MVC (где отделение вида от контроллера вынесено в парадигму) и их шаблоны. И когда мой взгляд снова упал на PHP я решил проверить, что же изменилось?


Как оказалось шаблонизаторов для PHP сейчас навалом. И Smarty жив. Но в разных списках фигурировал не менее популярный Twig, который к моему счастью и удивлению оказался с django-like синтаксисом с некоторыми доработками. Некоторые из которых мне понравились, а с некоторыми, я считаю, они перемудрили.


Следующая остановка: микрофреймворки и Silex


Оба продукта тянут ноги от Symfony. Хотя Symfony 1.6 мне мало понравилась. Половина дела — в перегагруженном синтаксисе PHP (который только с версии 5.3 стал изменяться к лучшему), который после лаконичного Python-а выглядит страшно. Еще, говорят, что вышла Symfony2. Может там вторая половина дела стала лучше?


@темы: Программирование

12:28 

Продолжаем поддерживать отечественного производителя: университет купил PhpStorm. Теперь будет легче и веселее


@темы: Программирование

19:16 

На brainbench, который вроде как считается крутым, раздают бесплатные тесты.


Зарегистрировался, поискал Python. Нашелся только 2.4 почему-то (большинство пишут на 2.6 все же, кажется). Но прошел:


Test: Python 2.4
Date: 06-Mar-2012
Score: 4.36
Weights: 100% Python 2.4
Elapsed time: 56 min

3 sec
Python 2.4
Score: 4.36
Percentile: Scored higher than 94% of previous examinees



Demonstrates a clear understanding of many advanced concepts within this topic. Appears capable of mentoring others on most projects in this area.
Strong Areas

  • Classes

  • Standard Library

  • Language

  • Built-in Features


Weak Areas

  • None noted



На $4.95 можно получить сертификат для печати. Или бумажный за $14.95


@темы: Python, Программирование

08:21 

Есть скрипт на dev-машине, есть на production. На production валится с ошибками, а на dev все работает. Окружение, вроде, совпадает. assert-ы и логгинг явных проблем не выдали и понятно, что только ими уже не обойдешься. К счастью у PyCharm есть удаленный дебаг:



  1. настраиваем

  2. запускаем дебаггер на dev-машине, а скрипт на production.

  3. ????

  4. ЭВРИКА!


(Как оказалось в итоге, окружения все таки не совпадали и я нашел модуль, который гадил в чужие пространства.)


Удаленный debug в PyCharm пока все же имеет некоторые ограничения:



  • пути до скриптов на разных машинах могут отличаться и это нормально. Для этого PyCharm предлагает настроить соответствие этих путей. Это работает пока не надо спуститься в глубь third-party библиотек, которые в случае того же virtualenv так же могут лежать по разным путям. Тут приходится выбирать что отлаживать: скрипты или чужие библиотеки, но не одновременно

  • окружение (точнее тот срез, с которым мы должны работать) должно совпадать на 100%


Наверно можно было бы еще на самом сервере через pdb сделать, но PyCharm сработал и дальше я не копал


@темы: Python, Программирование

07:38 

16:17 

Зарелизилась IDEA 11. С обещенным визуальным редактором Android Layout-ов и прочими вкусными штуками. Надо проверить.


@темы: Android, Программирование

19:51 

Android: проверь себя

Неплохой чек-лист с хабра. Жирным отметил то, что я осознал и выучил. Курсивом то, о чем имею представление, но не закрепилось еще.



  • Файл AndroidManifest.xml: зачем нужен, необходимые параметры, секции. Здесь нужно рассказать про таг и , рассказать про параметр packageName, про и, про компоненты приложения, которые указываются.

  • Структура проекта: assets, res, src, gen, libs. Что лежит в каждой папке, что должно лежать под версионным контролем, а что нет (папка gen никогда не кладется в VCS). Соответственно ассеты, ресурсы (картинки, музыка, лэйауты), java-код, сгенеренный код, библиотеки.

  • Компоненты приложения. Activity, Service, BroadcastReceiver, ContentProvider. Зачем нужен каждый, как осуществляется работа, lifecycle каждого компонента.

  • Особенности запуска Activity и Service. Что такое Task, Activity Stack. Как принимается решение о запуске процесса Service.

  • ContentProvider, зачем нужен, как используется. Доступ и использование ContentResolver. Работа с курсорами. Помнить про managed cursors.

  • BroadcastReceiver: статические и динамические, механизмы вызова, lifecycle.

  • Межпроцессное взаимодействие. Что такое и зачем нужен Intent, как передавать информацию с его помощью, что такое Bundle и зачем нужен Parcelable. IntentFilter и для чего применяется. Способы взаимодействия Activity и Service(старт, биндинг). AIDL(Android interface definiotn language).

  • Построение UI приложения. Что такое Layout и View, какие бывают типы layout'ов(4 штуки), зачем они применяются. Оптимизация UI под различные размеры экранов и плотность пикселей(использование dp).

  • Хранение данных в платформе: 4 типа. Internal, External Storage, DB, SharedPreferences. Варианты использование, отличия.

  • Локализация. Встроенные средства платформы для локализации, моменты выбора локали.

  • Виджеты. Механизм создания виджетов, доступные средства UI в них. Что такое AppWidgetProvider.

  • Работа в фоне. Когда использовать Service, когда AsyncTask. Что такое AsyncTask, его связь с UI. Сущность IntentService — что делает и чем полезна.

  • Модель безопасности в Android. Разрешения.

  • Использование телефонных средств: сенсоров, вибрации, GPS.

  • Новинки платформы: Loaders, Fragments, In-app billing.

  • Производительность в платформе: best practices. Неиспользование enums до 2.2, использование final и проч. Особенность работы на мобильном: ограничение по памяти и процессоу.

  • Поддержка старых версий платформы: доступ до функциональности через Reflection.

  • Собственные views: механизмы отрисовки, Canvas.

  • Состояния компонент: какие компоненты системы могут сохранять состояния(Activity и View), способы сохранения и восстановления состояний, отличия механизмов для Activity и View.

  • Механизмы подписи приложений для публикации в Android Market.

  • Android NDK: вызов нативного кода

  • Фреймворки для разработки под различные мобильные OS: Titanium, PhoneGap и прочие.

  • Наследование в java, интерфейсы, абстрактные классы, классы, внутренние и анонимные. Множественное наследование интерфейсов, когда применяется. Замыкания.

  • Модификаторы в java: доступа, синхронизации, прочие(static и final). Влияние final на производительность.

  • Collections: типы коллекций(List, Set, Map). Различные реализации, применимость коллекций в тех или иных случаях. Сложность вставки, чтения и поиска в различных реализациях.

  • Многопоточность: потоки, способы синхронизации, методы wait и notify. Ключевое слово synchronized, когда используется, что означает.

  • Отличия библиотеки классов Java SE и платформы Android.


@темы: Android, Программирование

15:43 

Android: JAVA

Еще пришлось резко вспоминать Java. И доучивать что там появилось нового за последние 10 лет.


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


Вот тогда и приходит понимание вложенных классов, generics, зачем нужный интерфейсы и почему один из столпов ООП наследование надо использовать с умом и ограниченно.


И тут мне очень повезло, что мне посоветовали книгу J. Bloch — Effective Java.




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


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


Вот, например, далеко не полный список опций статистического анализатора в IDEA:




По хорошему пользоваться этим надо так: включить все опции и смотреть на warning-и, которые рассыпятся по вашему коду. Естественно нет никакого 100%-правильного стиля программирования. И даже о методиках разводят споры на сотни страниц. Поэтому некоторые опции проверки кода придется отключить, если они уж явно не согласны с вашим стилем. Что-то можно пометить исключениями в коде. Ну а если анализатор говорит, что "этот класс можно сделать и статическим" и вы с этим согласны, то не грех и исправить. Правда сперва нужно прочитать того же Блоха, чтобы понять, почему статический вложенный класс лучше обычного и почему при передаче типов лучше использоваться имя интерфейса, а не конкретного класса.


Анализатор дает совет, от которого невозможно отказаться:




@темы: Android, Программирование

15:14 

Android: IDEA vs Eclipse

Когда летом я решил заняться программированием под Android, я был резко прерван приёмной комиссией. Пришлось забросить все остальное и отдаться ей. Но на самом деле там часто было интересно и творческо. Но самое главное — я оттуда вынес PyCharm


JetBrains PyCharm — это на самом деле подмножество JetBrains Intellij IDEA — IDE, которая объединяет в себя не Java, Python, PHP, Ruby, Objective C и много чего другого интересного.


И вот когда решил осенью снова вернуться к Android-программированию, я подумал «А вообще зачем этот монструозный неповоротливый Eclipse?». Тем более, что знакомые пацаны говорили, что Eclipse уже не тот и плохо развивается. Когда я поизучал вопрос поглубже, то понял, что единственное преимущество Eclipse в Android-программировании — это то, что сам Google официально поддерживает лишь его. В него встроены визуальные средства и все книги пишут про него.


Но на самом деле программу для андроида можно собрать и в консоли, было бы желание. Eclipse-плагин тянет только прослойку между SDK интерфейсом Eclipse и такую прослойку можно написать для любой IDE.


Ребята из JetBrains тоже озаботились этим. Их прослойка уже вполне рабочая, но пока (в версии 10.5) не включает визуальных компонент. Но



  • собрать проект

  • смотреть документацию встроенными методами

  • устанавливать apk на телефон через adb

  • смотреть лог

  • дебажить приложение на телефоне


они умеют.

Пока нет визуального редактора интерфейса. Но визуальный редактор того же Eclipse генерирует совсем не человеколюбивый код. А сколько раз он просто не смог отрендерить рукамипоправленный XML, при этом не сообщая никаких ошибок. Это вам не отполированный QT Designer. Так что layoyt-ы все равно лучше писать руками.

Всякие DDMS и Hierarchy Viewer и прочее вряд ли пользуются успехом у начинающих программистов, поэтому когда надо дорасти до этого уровня, то можно научиться использовать их отдельно.

Да и уже в 11 версии IDEA обещают визуальный редактор layout-ов.

Еще одна «неприятная» вещь у JetBrains, это то, что они смеют просить за свою работу денег. Но тут есть два варианта:



  1. взломанную IDEA найти не проблема

  2. Есть бесплатная и открытая IDEA Community Edition. И Android в ней есть. Что там вырезано я так пока и не понял, пока мне хватало всего. Может если бы я мучил Java EE, то тогда бы встретил какие-то ограничения.

    Но еще в IDEA CE  можно делать только OpenSource проекты. Остальное запрещено лицензией, которую никто не читает.


А так как летом я убил два месяца на PyCharm, то в IDEA я уже знал на какие жать кнопочки, как смотреть справку, рефакторить, запускать, настраивать. Это не Eclipse в котором окошко debug-а пугало меня на столько, что мне просто хотелось закрыть его и спрятаться под одеяло.


И через несколько месяцев я могу уже точно сказать, что программировать для Android без Eclipse можно


В сердце дебага:



@темы: Android, Программирование

10:23 

Новости андроидостроения

На русском языке вышла новая редакция суперкниги.


Android 3 для профессионалов. Создание приложений для планшетных компьютеров и смартфонов




Практически свежак. Перевод на этот раз хвалят. Отпугивает пока только цена. Но в итоге надо будет брать.


@темы: Программирование, Книги, Android

18:08 

Nerd humour

Смеялся:


<@joosa> how do you say float in java? just 1.5f?

<@Gliptic> FloatFactoryFactory.getInstance(FloatFactoryFactory.defaultInstanceDescriptionString).getFactory(Locale.getLocale("en-US")).createBuilder().setString("1.5").getResult()


@темы: Программирование, чего-чего?

11:53 

И так будет с каждым

07:08 

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


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


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


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


@темы: Программирование

05:33 



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


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


Тут то и приходит понимание, что знание языка — это не только знание синтаксиса и стандартных библиотек. Есть еще много глобальных принципов организации кода, есть некоторые тонкости характерные для данного языка.


Аналогично с вынесенными в заголовок книги «шаблонами программирования». Шаблоны — это не какие-то академические конструкции придуманные бородатыми профессорами в университетах. Любой программист работающий с ООП и написавший что-либо крупнее гостевой книги, наверняка, сам изобрел некоторые из шаблонов. Просто он не знает, что это так называется.


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


После этого код становится гладким и шелковистым и внезапное озарение заказчика в виде "а давайте еще посчитаем статистику по паре факультет/УГС" будет решено всего одним новым классом или даже одной строчкой кода. А в оставшееся время можно еще что-нибудь почитать умное.


Жаль только, что таких книг мало в основной массе литературы.


@темы: Книги, Программирование

I was LOST

главная