User
Разработка электронного, интерактивного журнала для iPad
4 min
17KХотелось бы на личном опыте поделиться знаниями и методами по созданию интерактивных журналов для iPad.
Где-то в конце 2010 года ко мне обратились с заказом реализовать приложение, которое бы позволяло перевести печатную продукцию издательств (журналы, книги, брошюры) в электронный формат для удобного чтения на iPad. После долгих разговоров и уточнений, финальная задача технического задания была сформулирована так:
Создать приложение для iPad, которое является магазином электронных журналов. Пользователь, пройдя несложную регистрацию, пополнив баланс до необходимой суммы, мог скачать доступный электронный журнал и просмотреть его. Журнал должен быть интерактивным, то есть в нем были функции просмотра набора слайдов, вращения, видео, аудио, увеличения шрифта, добавления закладок, красивой анимации для пролистывания страниц и еще список вещей в том же духе. Исходный журнал представлял из себя чистую pdf, поступающую на прямую из издательства.
Где-то в конце 2010 года ко мне обратились с заказом реализовать приложение, которое бы позволяло перевести печатную продукцию издательств (журналы, книги, брошюры) в электронный формат для удобного чтения на iPad. После долгих разговоров и уточнений, финальная задача технического задания была сформулирована так:
Создать приложение для iPad, которое является магазином электронных журналов. Пользователь, пройдя несложную регистрацию, пополнив баланс до необходимой суммы, мог скачать доступный электронный журнал и просмотреть его. Журнал должен быть интерактивным, то есть в нем были функции просмотра набора слайдов, вращения, видео, аудио, увеличения шрифта, добавления закладок, красивой анимации для пролистывания страниц и еще список вещей в том же духе. Исходный журнал представлял из себя чистую pdf, поступающую на прямую из издательства.
+19
Эмуляция интерфейса iPhone с помощью CSS
1 min
3K
Координатные данные проекта UiUiKit (Universal iPhone UI Kit):
- Сайт автора: www.minid.net
- SVN URL: code.google.com/p/iphone-universal/source/checkout
- Download: code.google.com/p/iphone-universal/downloads/list
Оригинально библиотека заточена под web-приложения именно для iPhone, поэтому всякий CSS3+ ограничивается указанием свойств только для
webkit
'а. Я пропатчил CSS директивами для остальных и развернул демонстрационную страничку, чтобы можно было сразу потыкать в элементы интерфейса. Выглядит симпатично (на картинке в начале топика — скриншот моего браузера). Приятного использования!
+53
Почему ИТшнику стоит стать ИПшником и почему не стоит регистрировать ООО
7 min
86K
1. Почему стоит начать работать «в белую»
2. Почему на начальном этапе ИП лучше ООО
3. Что делать, если партнёров несколько
Если вы – начинающий или уже опытный фрилансер и подумываете о работе «в белую», но ещё точно не определились с вопросами «Стоит ли оно того?» и «ИП или ООО?», вэлком
+351
CiEx подскажет какой фильм посмотреть — часть 2
1 min
958
На прошлой неделе мы запустили CiEx (сайт по подбору кино, когда хочется что-то посмотреть, но не знаешь что именно) и получили очень много положительных отзывов и пожеланий.
Под катом собран список того, что было улучшено, доработано и добавлено.
+10
Objective-C с нуля
23 min
442K
+147
Pythonic
7 min
38KTranslation
Итак, что же это значит, когда кто-либо говорит, что foo выглядит как pythonic? Что значит, когда кто-либо смотрит в наш код и говорит, что он unpythonic? Давайте попробуем разобраться.
В Python-сообществе существует неологизм pythonic, который можно трактовать по разному, но в общем случае он характеризует стиль кода. Поэтому утверждение, что какой-либо код является pythonic, равносильно утверждению, что он написан в соответствии с идиома Python’a. Аналогично, такое утверждение в отношении интерфейса, или какой-либо функциональности, означает, что он (она) согласуется с идиомами Python’a и хорошо вписывается в экосистему.
Напротив, метка unpythonic означает, что код представляет собой грубую попытку записать код какого-либо другого языка программирования в синтаксисе Python, а не идиоматическую трансформацию.
Понятие Pythonicity плотно связано с минималистической концепцией Python’a и уходом от принципа «существует много способов сделать это». Нечитабельный код, или непонятные идиомы – все это unpythonic.
При переходе от одного языка к другому, некоторые вещи должны быть «разучены». Что мы знаем из других языков программирования, что не будет к месту в Python’e?
В Python-сообществе существует неологизм pythonic, который можно трактовать по разному, но в общем случае он характеризует стиль кода. Поэтому утверждение, что какой-либо код является pythonic, равносильно утверждению, что он написан в соответствии с идиома Python’a. Аналогично, такое утверждение в отношении интерфейса, или какой-либо функциональности, означает, что он (она) согласуется с идиомами Python’a и хорошо вписывается в экосистему.
Напротив, метка unpythonic означает, что код представляет собой грубую попытку записать код какого-либо другого языка программирования в синтаксисе Python, а не идиоматическую трансформацию.
Понятие Pythonicity плотно связано с минималистической концепцией Python’a и уходом от принципа «существует много способов сделать это». Нечитабельный код, или непонятные идиомы – все это unpythonic.
При переходе от одного языка к другому, некоторые вещи должны быть «разучены». Что мы знаем из других языков программирования, что не будет к месту в Python’e?
+92
JPA: Хранение перечислений в базе данных
6 min
48KНаверняка многие из вас сталкивались с проблемой хранения перечислений в базе данных, возникающей при попытке реализации удобного способа работы с разного рода служебными справочниками — статусами, типами объектов и так далее.
Суть её очень проста: если хранить перечисления как сущности (
Особенно актуально это в том случае, когда поле, содержащее перечисление, аннотировано как
Однако сама идея хранения в базе данных заманчива простотой построения запросов вручную, очень ценной при отладке ПО или решении сложных ситуаций. Когда можно написать не просто
На самом деле, существует очень простое и изящное решение этой проблемы, убивающее сразу всех зайцев.
Суть её очень проста: если хранить перечисления как сущности (
@Entity
), то с ними получается крайне неудобно работать, база данных нагружается лишними запросами даже несмотря на кэширование, а сами запросы к БД усложняются лишними JOIN'ами. Если же перечисление определять как enum, то с ними становится удобно работать, но возникает проблема синхронизации с базой данных и отслеживания ошибок таковой синхронизации.Особенно актуально это в том случае, когда поле, содержащее перечисление, аннотировано как
@Enumerated(EnumType.ORDINAL)
— всё мгновенно ломается при смене порядка объявления значений. Если же мы храним значения в строковом виде — как @Enumerated(EnumType.STRING)
— возникает проблема скорости доступа, так как индексы по строковым полям менее эффективны и занимают больше места. Более того, вне зависимости от способа хранения значения поля при отсутствии в базе данных таблицы со списком допустимых значений мы никак не защищены от некорректных или устаревших данных и, как следствие, проблем.Однако сама идея хранения в базе данных заманчива простотой построения запросов вручную, очень ценной при отладке ПО или решении сложных ситуаций. Когда можно написать не просто
SELECT id, title FROM product WHERE status = 5
, а, скажем, SELECT id, title FROM product JOIN status ON status.id = product.status_id WHERE status.code = 'NEW'
— это очень ценно. В том числе и тем, что мы всегда можем быть уверены в том, что status_id
содержит корректное значение, если поставим FOREIGN KEY
.На самом деле, существует очень простое и изящное решение этой проблемы, убивающее сразу всех зайцев.
+25
Анимация меню при помощи CSS3
8 min
38KTranslation

В данной статье я хотел бы показать вам некоторые приёмы создания эффектов при помощи CSS3 на примере меню. Идея заключается в простой композиции элементов: иконки, основного названия и вторичного названия, которое будет анимировано при наведении курсора, используя только CSS-переходы и CSS-анимацию. Мы рассмотрим несколько различных эффектов для элементов.
+181
SITH — техника CSS3 для плавной смены изображения
2 min
17KДоброго времени суток, Хабр!
Хотел бы рассказать Вам, каким образом я добился плавной смены цветов иконок при наведении на них курсора. Подобная проблема часто встречается на Facebook. Если иконка представляет собой синий силуэт на белом фоне, то при наведении курсора оба цвета меняются местами, причём происходит это мгновенно и выглядит немного резко. Мои эстетические чувства были задеты, и я разработал своё решение.
Не встретив на просторах Интернета чего-либо подобного, я взял на себя ответственность назвать этот метод SITH (Soft Image Transition on :Hover) — плавный переход изображения при наведении.

Под хабракатом Вы найдёте полное описание техники, весь код, несколько скриншотов и ссылку на демонстрационную версию.
Хотел бы рассказать Вам, каким образом я добился плавной смены цветов иконок при наведении на них курсора. Подобная проблема часто встречается на Facebook. Если иконка представляет собой синий силуэт на белом фоне, то при наведении курсора оба цвета меняются местами, причём происходит это мгновенно и выглядит немного резко. Мои эстетические чувства были задеты, и я разработал своё решение.
Не встретив на просторах Интернета чего-либо подобного, я взял на себя ответственность назвать этот метод SITH (Soft Image Transition on :Hover) — плавный переход изображения при наведении.

Под хабракатом Вы найдёте полное описание техники, весь код, несколько скриншотов и ссылку на демонстрационную версию.
+98
Java сертификация. Подготовка к SCJP
5 min
71KВ этом месяце я сдавал экзамен SCJP. В этом топике я расскажу о подготовке и экзамене.
В основном для тех, кто собирается сдавать и кому нужно больше информации об этом.
Так как Sun'a больше нет, то и экзамена SCJP тоже нет. Теперь он значится так:
1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam.
В основном для тех, кто собирается сдавать и кому нужно больше информации об этом.
Уточнение
Так как Sun'a больше нет, то и экзамена SCJP тоже нет. Теперь он значится так:
1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam.
+79
Кеширующий прокси-сервер на nginx. Хитрая конфигурация
7 min
40KНа Хабре уже есть несколько описаний Nginx, но, думаю, моя конфигурация тоже будет интересна.
Ситуация выглядит следующим образом: есть размещённый на нескольких серверах IIS сайт (интернет-магазин), перед ним расположен балансировщик. Между ними решено установить nginx для уменьшения нагрузки на IIS.
Основная масса динамического контента отображается Ajax-ом, так что кеширование страниц каталога товаров вполне безопасно. Однако на них могут быть отзывы о товаре, за которые можно проголосовать — совсем как на Хабре, что тоже надо учесть.
Плюс к этому хочется поддерживать валидность популярных страниц в кеше автоматически.
Ситуация выглядит следующим образом: есть размещённый на нескольких серверах IIS сайт (интернет-магазин), перед ним расположен балансировщик. Между ними решено установить nginx для уменьшения нагрузки на IIS.
Основная масса динамического контента отображается Ajax-ом, так что кеширование страниц каталога товаров вполне безопасно. Однако на них могут быть отзывы о товаре, за которые можно проголосовать — совсем как на Хабре, что тоже надо учесть.
Плюс к этому хочется поддерживать валидность популярных страниц в кеше автоматически.
+67
Subtle Patterns: фоновые текстуры для вашего сайта
1 min
72KЕсли вы запускаете новый сайт и заканчиваете его оформление, то есть смысл посмотреть коллекцию Subtle Patterns: отлично оформленную коллекцию фоновых текстур (паттернов) под лицензией Creative Commons Attribution 3.0 Unported. Их можно использовать без ограничений.

Сайт привлекает удобным предварительным просмотром: каждую текстуру можно мгновенно применить на всей странице в качестве фона. Сейчас там 93 работы, коллекция еженедельно пополняется отличными новинками.
Все текстуры на сайте Subtle Patterns являются повторяющимися, то есть склеиваются в бесшовную заливку.

Сайт привлекает удобным предварительным просмотром: каждую текстуру можно мгновенно применить на всей странице в качестве фона. Сейчас там 93 работы, коллекция еженедельно пополняется отличными новинками.
Все текстуры на сайте Subtle Patterns являются повторяющимися, то есть склеиваются в бесшовную заливку.
+232
Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install
5 min
177KК написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install. |

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и об
+293
Блеск и нищета GWT (или почему я не верю в Dart часть 2)
6 min
11K
Для Гугла это не первый проект подобного рода. С 2006 года существует Google Web Toolkit, позволяющий создавать веб-приложения полностью на Java. На нём, например, работают Adwords и Google Wave.
Но, не смотря на красивые обещания и очень серьезные, особенно по меркам 2006 года, возможности, GWT так и «не взлетел». Да, проект поддерживается и развивается, но сообщество разработчиков так и не сложилось. Сторонних компонентов мало, они не поддерживаются, знакомых с системой программистов найти сложно.
Практически все «плюшки» языка Dart, которые сейчас рекламирует Google, уже были реализованы в Webtoolkit-е. В этой статье я хочу проанализировать достоинства и недостатки GWT в попытке рассмотреть мутные очертания будущего Dart.
+175
12+ полезных Google Chrome chrome:// команд
2 min
400KВсе знают, что для того чтобы попасть в меню у Хрома, нужно нажать на Гаечный ключ в правом верхнем углу.
Однако есть несколько особенностей, которые не доступны из меню, которые вы можете увидеть только с помощью chrome:// команд.
Под катом приведены 12 самых полезных chrome:// команд, которые должны знать все.
Однако есть несколько особенностей, которые не доступны из меню, которые вы можете увидеть только с помощью chrome:// команд.
Под катом приведены 12 самых полезных chrome:// команд, которые должны знать все.
+175
Радио Pianorama. В небеса за неделю
2 min
2.2KПодозреваю, многие из вас думали создать свою онлайн-радиостанцию с преферансом и поэтессами.
Но ещё несколько лет назад интернет-радио не было настолько актуальным, потому что безлимитный интернет в регионах не был достаточно распространён и каналы были не те.
Сейчас же, на мой взгляд, у интернет-радиостанций появился шанс даже потягаться с аналоговыми.
Так вот, неделю назад, во время очередного отключения света в нашем провинциальном городе, мне пришла мысль создать интернет-радио, в эфире которого играет только фортепианная музыка.

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

Откладывать задумку в долгий ящик не стал.
+181
Подборка видео с различных конференций
2 min
4.2KНа конференции попасть получается не всегда, а умных людей послушать хочется. Решил собрать воедино скопившиеся ссылки на видеоматериалы. Надеюсь кому то пригодится.
Известные
- Yet another Conference от Яндекс 2010 2011 — раз, два, три
- Application Developer Days
- DevPoint
- HighLoad++ Последние видео за 2009 год, но вроде как обещали выложить с недавно прошедшей
- РИТ
- JavaTechDays 2010, 2011
- DevСon'11
- Percona.TV Видео по MySQL
- PyCon — 2009-2011
+148
DealHunter – как мы делали foursquare для любителей скидок и распродаж
5 min
946Привет всем! Хочу рассказать об опыте создания и запуска мобильного геосоциального сервиса DealHunter, в котором мы постарались совместить несколько наиболее актуальных и интересных трендов и механик.
Идея сервиса, где пользователи могли бы сами добавлять скидки и распродажи, родилась больше года назад, когда в интернете и мобильных приложениях стремительно набирало силу два тренда: daily deals (порожденный Groupon и подхваченный сотнями аналогичных сервисов) и геосоциальные приложения с игровой механикой (одними из первых были Foursquare и Gowalla, потом Foodspotting и чекинизация всего и вся – от факт просмотра телепередачи до количества выпитых кружек пива). Причина, по которой Foursquare за последние 2 года набрал больше 10 миллионов пользователей и собрал с помощью них беспрецедентную базу данных о различных местах и заведениях по всему миру – это влияние еще одного тренда – применение игровых механик к неигровым сервисам (gamification). С одной стороны многие сделали это ради баллов и бейджей – то есть статуса в игровой вселенной Foursquare. Но многих также мотивировал и простой альтруизм, желание предостеречь других пользователей от посещения «плохих» мест и порекомендовать хорошие.

На перекрестке всех этих трендов, от любви к скидкам и прочей халяве до желания обойти других в статусах и рейтингах родился Deal Hunter. Если раньше о распродаже в магазине или о бизнес-ланче в ближайшем кафе узнавали только ваши друзья и коллеги, то почему бы не дать возможность рассказать об этом другим людям вокруг вас, которых вы никогда не видели, но которым эта информация может быть полезна. А вы за это получите очередную виртуальную награду.
От трендов к идее
Идея сервиса, где пользователи могли бы сами добавлять скидки и распродажи, родилась больше года назад, когда в интернете и мобильных приложениях стремительно набирало силу два тренда: daily deals (порожденный Groupon и подхваченный сотнями аналогичных сервисов) и геосоциальные приложения с игровой механикой (одними из первых были Foursquare и Gowalla, потом Foodspotting и чекинизация всего и вся – от факт просмотра телепередачи до количества выпитых кружек пива). Причина, по которой Foursquare за последние 2 года набрал больше 10 миллионов пользователей и собрал с помощью них беспрецедентную базу данных о различных местах и заведениях по всему миру – это влияние еще одного тренда – применение игровых механик к неигровым сервисам (gamification). С одной стороны многие сделали это ради баллов и бейджей – то есть статуса в игровой вселенной Foursquare. Но многих также мотивировал и простой альтруизм, желание предостеречь других пользователей от посещения «плохих» мест и порекомендовать хорошие.

На перекрестке всех этих трендов, от любви к скидкам и прочей халяве до желания обойти других в статусах и рейтингах родился Deal Hunter. Если раньше о распродаже в магазине или о бизнес-ланче в ближайшем кафе узнавали только ваши друзья и коллеги, то почему бы не дать возможность рассказать об этом другим людям вокруг вас, которых вы никогда не видели, но которым эта информация может быть полезна. А вы за это получите очередную виртуальную награду.
+33
Отслеживание статуса небольшого проекта
3 min
7.1KСразу хочу сказать, что речь идет о небольших проектах — 2-5 человек, продолжительностью около года или менее.
Столкнувшись уже несколько раз с необходимостью стать менеджером такого небольшого проекта, решил:
а) поделиться своими мыслями и
б) спросить совета (ведь наверняка я не первый, кто столкнулся с описанным ниже).
Итак, столкнулся я прежде всего вот с чем. Одна из главных (для меня) задач была оценка статуса проекта. Нужно было понять, все ли идет по плану, и если нет, то своевременно обнаружить отклонение от расписания и предвидеть новую дату завершения.
К моему большому удивлению, я так и не смог найти простого решения этой задачи. В компании использовали Microsoft Project, который, на мой взгляд, эту задачу решает очень плохо.
Столкнувшись уже несколько раз с необходимостью стать менеджером такого небольшого проекта, решил:
а) поделиться своими мыслями и
б) спросить совета (ведь наверняка я не первый, кто столкнулся с описанным ниже).
Итак, столкнулся я прежде всего вот с чем. Одна из главных (для меня) задач была оценка статуса проекта. Нужно было понять, все ли идет по плану, и если нет, то своевременно обнаружить отклонение от расписания и предвидеть новую дату завершения.
К моему большому удивлению, я так и не смог найти простого решения этой задачи. В компании использовали Microsoft Project, который, на мой взгляд, эту задачу решает очень плохо.
+4
Information
- Rating
- Does not participate
- Registered
- Activity