• Objective-C с нуля

      У любого желающего писать программы для продукции фирмы Apple в жизни наступает такой момент, когда ему приходиться изучить новый язык программирования — Objective-C. Когда-то этот счастливый момент постиг и меня. А чтобы лучше запомнить основные особенности этого языка, решил законспектировать свои мысли во время осмысления его документации, которыми и делюсь с вами.
      Читать дальше →
    • Objective-C для C# разработчиков

      • Tutorial
      «Если единственный язык, который вы знаете — это Java или C#, я не думаю, что вы профессиональный программист — вы как молодой плотник, который пока работал только с одним видом дерева.»
      Дядя Боб


      Несколько месяцев назад я начал разрабатывать приложения для iPhone. Переключение с платформы .NET и C# на Cocoa и Objective-C проходило не без приключений, но было достаточно интересным и познавательным. Скоро мне предстоит помогать осваивать новую платформу и другим разработчикам нашей компании. Поэтому решил написать серию вводных заметок, которые, надеюсь, сделают этот переход более плавным.

      Читать дальше →
    • Создание программ для Mac OS X. Часть 1: вступление и Objective-C

        Вступление


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

        Сразу скажу, что не буду рассказывать про кроссплатформенные фреймворки и тулкиты(такие как Qt) или про создание консольных приложений, я расскажу про то, что в плане создания приложений отличает Mac OS X от других операционных систем, а именно — фреймворк Cocoa. Оговорюсь сразу, что буду стараться избегать сравнений с другими фреймворками, я хочу просто рассказать про Cocoa.
        Читать дальше →
      • О блоках и их использовании в Objective-C часть 1-ая

          В OS X 10.6 и iOS 4.0 компания Apple анонсировала поддержку блоков, по сути являющиx собою замыкания. Дальше о блоках в контексте разработки под IOS, Objective-C (тоесть работа без gc).
          Для использования блоков IOS ver. < 4.0 можно применить ESBlockRuntime или PLBlocks.

          Кратко о теории


          Экземпляр блока, тип блока и сам блоковый литерал обозначаются с помощью оператора ^, пример:

          typedef int (^MyBlock)(int);

          int multiplier = 7;
          MyBlock myBlock = ^(int num) {
           return num * multiplier;
          };


          * This source code was highlighted with Source Code Highlighter.

          или

          int multiplier = 7;
          int (^myBlock)(int) = ^(int num) {
            return num * multiplier;
          };


          * This source code was highlighted with Source Code Highlighter.

          Вызов блока аналогичен вызову обычной сишной функции. Например, так:

          myBlock( 3 )

          * This source code was highlighted with Source Code Highlighter.

          Главной особенностью блоков является их умение хранить контекст в котором они создавались. В примере выше «myBlock» всегда будет умножать число на 7. Как же это все работает?
          Читать дальше →
        • О блоках и их использовании в Objective-C часть 2-ая

            Продолжение топика — О блоках и их использовании в Objective-C часть 1-ая.

            Многие из тех кто впервые сталкивается с блоками (или замыканиями), задают вопрос — «а зачем? Если и без них можно». Да можно. Но использование блоков имеет не мало преимуществ, и первое из них — существенная экономия на количестве кода, а следовательно и на времени написания и поддержке. Дальше буду говорить примерами.

            Содержание:


            1. Работа с контейнерами на примере NSArray.
            2. Guards на примере UITableView.
            3. Использование блоков вместо классов на примере scheduled операций.
            4. Блоки вместо делегатов в UIAlertView.
            5. UIView анимации, последовательность анимаций.
            6. Асинхронные операции и управление ими. Переписываем пример с анимациями.
            Читать дальше →
          • Простая библиотека для парсинга HTML

              Недавно зарелизил Leaf, это небольшая библиотека для парсинга HTML на Python.
              Она уже довольно долгое время покрывает все мои нужды в парсинге, но еще есть идеи для развития.
              Эта библиотека по сути обертка над lxml, которая делает работу с ней гораздо приятней.
              далее...
            • Запуск Chaco и Mayavi на PySide

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

              В своей работе приходится пользоваться кроссплатформенными визуализатором Mayavi и построителем графиков Chaco (кому интересно — читаем code.enthought.com/chaco и code.enthought.com/projects/mayavi). Моей задачей было встроить их фрэймы в свое приложение HPGL-GUI. Изначально я писал все на PyQt4 и в меня устраивало все, кроме одной вещи. Проблемой стала лицензия. PySide выпускается под LGPL v2.1, что как раз подходит под коммерческие нужды.

              На помощь пришел PySide, который уже начали активно использовать в качестве бэкэнда к продуктам Enthought. Тут-то меня и ждали первые подводные камни.

              Отсутствие документации как именно использовать PySide для встраивания.
              Немного проблуждав по исходникам, выяснил, что достаточно указать переменную окружения 'QT_API' в значение 'pyside':

              import os
              os.environ['QT_API'] = 'pyside'

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

              Читать дальше →
            • Простой и эффективный метод отразить http DDoS от 50мбит с помощью nginx и iptables

                Здравствуй, Хабр!
                Предлагаю твоему вниманию простой и в то же время эффективный метод борьбы с http DDoS. На основе сервера Xeon 2.5GHz / 4Gb RAM / SAS можно отражать атаку примерно до 300 Мбит/с (значение получено методом экстраполяции).

                Способ реализация

                Производится тонкая настройка параметров системы. Так что север будет способен выдерживать больше подключений от ботнета, чем канал до сервера сможет пропустить.

                Область применения

                Борьба с Http DDoS на выделенном сервере или ВПС. Максимальная возможная мощность сдерживания DDoS атаки ограничивается физическими возможностями сервера и пропускной способностью канала.

                SEO под DDoS-ом

                Ваш сайт будет правильно индексироваться во время атаки, что позволит сохранить позиции в выдаче поисковых систем. Особенно актуально для сайтов с большими SEO бюджетами.

                Стоимость и эффективность

                На время атаки придется отказаться от некоторых сервисов вашего сайта. Возможно, придется расширить полосу канала, перенести сайт на более мощный сервер. Эффективность достигается максимизацией коэффициента масштабируемости системы. Обеспечивается быстрое наращивание аппаратных ресурсов при увеличении мощности атаки.
                Читать дальше →
              • jPlayer — плагин для проигрывания аудио и видео

                  imageЯ уже писал про скрипт audio.js, позволяющий проигрывать аудио файлы использую возможности html5 и flash. Пост был встречен хорошо, поэтому сейчас я хочу рассказать про jPlayer — jQuery плагин для проигрывания аудио и видео.
                  Читать дальше →
                • Двадцатка лучших веб-шрифтов

                  • Translation
                  Top 20 Fonts

                  Сейчас самое время повышать уровень дизайна своих работ с помощью веб-шрифтов


                  Без преувеличения, сейчас сетевая типографика переживает захватывающий период своей жизни. Недавние технологические скачки приблизили нас еще на шаг ближе к типографической нирване в интернете. Шаг, которого все так долго ждали.

                  Свобода использования веб-шрифтов вне безопасного списка на всех ведущих ОС стала возможной, по большому счету, благодаря трем основным, почти одновременным технологическим факторам: широко распространенной поддержке правила @font-face в браузерах; появлению таких «шрифтохранилищ» как Typekit и Fontdeck; создание нового формата шрифтов — архивированного файла шрифта WOFF.

                  Читать дальше →
                • Comet–приложение для Mochiweb c нагрузкой в 1 000 000 пользователей. Часть 3/3

                  • Translation
                  Часть 1 и Часть 2 в этом цикле статей показали, как создать приложение, используя mochiweb, и как передавать сообщения подключенным пользователям. Мы уменьшили постребление памяти до 8 Кб для каждого подключения. Мы повторили c10k тест. Мы сделали графики. Это была забава, но теперь пора повторить все для 1 миллиона соединений.

                  Это статья покрывает следующее:
                  • Использование базы данных Mnesia;
                  • Генерация правдоподобного набора данных вида «friends» для миллиона пользователей;
                  • Настройка Mnesia и ввод наших данных;
                  • Открытие миллиона соединений с одной машины;
                  • Сравнительный тест с 1 миллионом пользователей;
                  • Libevent + Си для обработки соединений;
                  • Финальные выводы.
                  Читать дальше →
                • 5 вещей, которые вы могли не знать о jQuery

                  • Translation
                  jQuery очень мощная библиотека, но некоторые его богатые возможности неясны, если вы не изучали исходный код jQuery и не читали книгу jQuery Pocket Reference (автор пишет my new book), вы можете не знать о них. В этой статье представлены отрывки из этой книги — 5 полезных вещей о которых вы могли не знать.

                  1) Вы вы не обязаны использовать $(document).ready() Если вы хотите выполнить функцию, когда документ готов для манипулированию просто передайте её в $()

                  2) Вы, наверное, уже знаете, что вы можете передать тэг в функцию $() для создания элемента этого типа и, что вы можете передать атрибуты объекта (в качестве второго аргумента), которые будут установлены на созданный элемент. Вторым аргументом может быть любое свойство, который вы передаете в метод attr(). Кроме того, если какое-либо свойство имеет тоже самое имя, что и событие (click, mouseover), то значение свойства используется в качестве функции обработчика данного события.
                  Следующий код, например, создает новый элемент, устанавливает три HTML атрибута и регистрирует функцию обработчика события(click) на нем:
                  var image = $("<img>", {
                                    src: image_url,
                                    alt: image_description,
                                    className: "translucent_image",
                                    click: function() {$(this).css("opacity", "50%");}
                                 });
                  

                  Читать дальше →
                • Свежая подборка jQuery плагинов

                  • Translation
                  Для меня jQuery ассоциируется с мощной и главное кросс-браузерной JavaScript библиотекой. Можно долго перечислять ее достоинства, холиварить по поводу и без, но думаю, никто не будет против посмотреть подборку интересных плагинов и уроков:
                  для удобства – каждая картинка ведет на демо

                  Hover Slide Effect



                  Демо | Урок
                  Галерея состоит из нескольких картинок, при наведении на одну из них она эффектно меняется на другую, а при клике на любую картинку — меняются все одновременно.

                  Остальные плагины
                • CSS-препроцессор LESS и его интеграция с Ruby on Rails

                  LESS — новый препроцессор для CSS. Проще говоря, LESS позволяет использовать в вашем CSS-файле переменные, операторы, классы и вложенные конструкции. В этой статье вы узнаете об основных возможностях LESS и о том, как быстро подключить его к популярному фреймворку Ruby on Rails 3.

                  Читать дальше →
                • PHPLego: Горячие клавиши — атрибут hotkey

                    PHPLego: PHPLego: Горячие клавиши - атрибут hotkey

                    Дорогие друзья! Сегодня я хочу поделиться с Вами 138-мью строчками кода, которые позволяют ссылки <a> и кнопки <input type='submit'> расширить атрибутом hotkey.

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

                    Подключив файлик hotkeys.js, который будет описан ниже, появляется возможность задавать горячие клавиши любым ссылками и кнопкам отправки форм вот так:
                    <a href='...' hotkey="Ctrl + Shift + D">удалить</a>
                    или
                    <input type='submit' hotkey='Ctrl + Enter' value='Отправить'>
                    


                    Читать дальше →
                  • Продвинутые формы — мультиселект с автокомплитом

                      Наши пользователи следят за спецпредложениями авиакомпаний и дешевыми перелетами, каждому интересно своё направление, пунктов вылета и прилета — тысячи, пользователи хотят одновременно следить за несколькоми городами, странами или регионами. Появилась задача — как предоставить удобный механизм подписки? Без долгого тыканья в мульти селект, без кнопок «Добавить пункт вылета». Ответ выглядит так —

                      Решением стал контрол из Фейсбука и Контакта — пользователи знакомы с ним, а значит не нужно объяснять как он работает. Осталось скрестить его с django.
                      Читать дальше →
                    • Настоящее скругление углов картинок на клиенте

                        О скруглении углов в html-верстке сказано уже столько, что я пойму тех кто прочитав заголовок иронично улыбнется и подумает «опять 25, ну сколько можно...». Поэтому я постараюсь кратко изложить суть, и сразу предупрежу, что этот метод вы едва ли могли видеть раньше.
                        Читать дальше →