• Критика протокола и оргподходов Telegram. Часть 1, техническая: опыт написания клиента с нуля — TL, MT

      В последнее время на Хабре стали чаще появляться посты о том, как хорош Telegram, как гениальны и опытны братья Дуровы в построении сетевых систем, и т.п. В то же время, очень мало кто действительно погружался в техническое устройство — как максимум, используют достаточно простой (и весьма отличающийся от MTProto) Bot API на базе JSON, а обычно просто принимают на веру все те дифирамбы и пиар, что крутятся вокруг мессенджера. Почти полтора года назад мой коллега по НПО "Эшелон" Василий (к сожалению, его учетку на Хабре стёрли вместе с черновиком) начал писать свой собственный клиент Telegram с нуля на Perl, позже присоединился и автор этих строк. Почему на Perl, немедленно спросят некоторые? Потому что на других языках такие проекты уже есть На самом деле, суть не в этом, мог быть любой другой язык, где еще нет готовой библиотеки, и соответственно автор должен пройти весь путь с нуля. Тем более, криптография дело такое — доверяй, но проверяй. С продуктом, нацеленным на безопасность, вы не можете просто взять и положиться на готовую библиотеку от производителя, слепо ему поверив (впрочем, это тема более для второй части). На данный момент библиотека вполне работает на "среднем" уровне (позволяет делать любые API-запросы).


      Тем не менее, в данной серии постов будет не так много криптографии и математики. Зато будет много других технических подробностей и архитектурных костылей (пригодится и тем, кто не будет писать с нуля, а будет пользоваться библиотекой на любом языке). Итак, главной целью было — попытаться реализовать клиент с нуля по официальной документации. То есть, предположим, что исходный код официальных клиентов закрыт (опять же во второй части подробнее раскроем тему того, что это и правда бывает так), но, как в старые времена, например, есть стандарт по типу RFC — возможно ли написать клиент по одной лишь спецификации, "не подглядывая" в исходники, хоть официальных (Telegram Desktop, мобильных), хоть неофициальных Telethon?

      Ответ на этот вопрос неоднозначен
    • Будущее вселенной

      • Translation
      Как-то я наткнулся на интересную тайм-ленту предполагаемых событий вселенной на википедии, но она была довольно скудной и без картинок, так что я залез в гугл и поискал «future time line», и первое, что увидел, — этот сайт. Мне очень понравилась эта статья и я решил перевести ее, заодно и вычитать ее получше.
      Все, что здесь изложено — лишь предположения и теории, вполне возможно, что все или некоторые события будут не такими. Весь пост представлен в виде тайм-ленты от 10000 до 10100 года, и содержит много интересных картинок и ссылок на вики, читать много и интересно.



      10 000 – 15 000 Н.Э.


      Гиперновая из звездной системы Эта Киля начинает воздействовать на наш регион Галактики


      Эта Киля – одна из самых больших и нестабильных звезд в нашей Галактике. Ее температура настолько высока, что ее гравитация не в состоянии удерживать газ, утекающий с ее поверхности по сформированным потокам вверх, от нее. Она впервые была замечена в 1843 году, когда ее звездная величина (читай величина свечения) достигла -0.8, сделав ее второй по яркости звездой в ночном небе.
      Она в дальнейшем утихла на какое-то время, и снова «засветила» в конце 1990-х. Эта флуктуация продолжается с периодичным вспыхиванием и затуханием, и будет продолжаться до тех пор, пока не случится неизбежное. Не в состоянии совладать с собственной массой и плотностью, она коллапсирует и, потом, превращается в одну из самых смертельных сил, известных в природе – в гиперновую.
      На какое-то время, этот колоссальный взрыв освещает всю галактику. Это будет достаточно ярко, чтобы заметить в дневное время с Земли, в то время как ночью это сравнимо с полной луной.
      Но гораздо больше вреда принесут убийственные струи гамма-излучения, выброшенные умирающей звездой. Они будут выброшены на таких высоких энергиях, что даже системы в тысячах световых лет от Эта Киля будут задеты. В результате, на многочисленных планетах в нашем регионе Галактики произойдет вымирание живых организмов в это время.

      Читать дальше →
    • Знакомства для айтишников

        Я сотрудник крупного сервиса знакомств в России. Недавно мне пришла в голову отличная, на мой взгляд, идея по его развитию.

        Предпосылки:
        — статистика сервиса знакомств: 1.1 млн уников в сутки и 10.7 млн уников в месяц;
        — высокая активность женской части аудитории сервиса;
        — 80% команды — программисты.

        Большая часть сотрудников в нашей команде — разработчики: наблюдая за ними, я задумался о специальном сервисе знакомств для программистов, а если брать шире — в принципе для айтишников. Оказалось, что осуществлению этой идеи многие из нашей команды были бы не против посвятить свое «внеурочное» время.



        Командное обсуждение сформулировало цели проекта
      • Командная строка на службе сервисов Google

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



        GoogleCL — это специальный проект, который упростит работу с сервисами Blogger, Picasa Web, YouTube, Google Docs и Google Calendar, благодаря командной строке. Это оболочка для Google Data API, поэтому вам сперва понадобится установить Python 2.6 (или 2.5) и Google Data APIs Python Client Library.
        Читать дальше →
      • Десятка лучших консольных команд

          imageВ данном посте я расскажу о наиболее интересных командах, которые могут быть очень полезны при работе в консоли. Однозначных критериев определения какая команда лучше другой — нет, каждый сам для своих условий выбирает лучшее. Я решил построить список команд на основе наиболее рейтинговых приемов работы с консолью от commandlinefu.com, кладовой консольных команд. Результат выполнения одной из таких команд под Linux приведен на картинке. Если заинтересовало, прошу под кат.
          Узнать больше
        • Pixel-perfect верстка Android макетов

            Разрабатывать интерфейс Android приложений — непростая задача. Приходится учитывать разнообразие разрешений и плотностей пикселей (DPI). Под катом практические советы о верстке макетов дизайна Android приложений в Layout, который совпадает с макетом на одном устройстве а на остальных растягивается без явных нарушений дизайна: выхода шрифтов за границы; огромных пустых мест и других артефактов.

            UPD: Пост спорный, но много ценных советов в комментариях


            Читать дальше →
          • Custom layout. Выплывающая панель + параллаксный скроллинг

              Привет, коллеги.

              Сегодня я хотел рассказать, как можно создать нестандартный менеджер разметки (layout manager) и вдохнуть в него жизнь при помощи анимаций.
              Нам в DataArt часто требуется реализовывать нестандартные компоненты для приложений заказчика, поэтому у меня накопился определенный опыт в этом деле, которым решил поделиться.
              В качестве примера решил реализовать аналог часто встречающейся в социальных сетях выплывающей снизу панели. Обычно этот прием используется при необходимости показать контент, например, фото, и добавить возможность комментировать на дополнительной панельке, которую пользователь может вытянуть снизу. При этом основной контент обычно тоже уплывает наверх, но немного медленнее, чем основная панель. Это называется «параллаксный скроллинг».
              Специально для этой статьи я решил с нуля реализовать подобный компонент. Сразу хочу заметить, что это не полноценный, стабильный и готовый для продакшен код, а всего лишь демонстрация, написанная за пару часов, чтобы показать основные приемы.

              Читать дальше →
            • Запуск Aircrack-ng и Reaver на Android

              Когда нечего делать или как я устанавливал aircrack и reaver на android.
              Я подумал а не попробовать ли мне установить kali-linux на android через linux installer, но затем передумал и решил просто установить reaver и aircrack на телефон. Но тут возник вопрос как перевести WiFi в режим монитора.

              image
              Читать дальше →
            • In-app Billing Subscriptions со стороны сервера

                In-app Billing Subscriptions (подписки) позволяют автоматизировать списание средств со счета пользователя для приложений, разработанных под Android. Данный инструмент — большой помощник в задаче повышения монетизации приложений. В общем виде схема работы с подписками выглядит следующим образом:

                1. Пользователь покупает подписку на некоторые плюшки приложения
                2. В случае успешной покупки, приложение получает данные заказа пользователя, в частности идентификатор транзакции и токен продажи подписки, и передает их на сервер
                3. Сервер осуществляет проверку подписи заказа в Google Play, контролирует уникальность транзакции, определяет время завершения подписки и начисляет положенные блага
                4. По завершении подписки, сервер может определить факт продления и, в случае успеха, продолжить начисление благ


                В статье представлены шаги по обеспечению серверной поддержки инструмента монетизации для In-App Billing version 2.
                Читать дальше →
                • +14
                • 17.8k
                • 8
              • Как инстаграммить по-черному или следи за печеньками



                Хэй, имярек, отгадай загадку! Какой стартап был продан в 2012 году за миллиард долларов? В какой очередной соцсети наш запасной президент завел блох в прошлом году? Какая соцсеть попыталась объявить своей собственностью генерируемый юзером контент?

                Ага, верно! Сегодня мы поговорим про Instagram.

                При всем медийном внимании к Instagram, я нигде не встречал анализа безопасности этого проекта, а там есть что анализировать. Instagram общается по открытому http (!) и если иногда и использует криптографию, то весьма странным образом.

                Много подробностей и клевый DIY хак под катом.
                Читать дальше →
              • Запускаем консольные Java приложения на Android



                  Речь пойдёт о проекте-утилитке, который может пригодиться всякому кто изучает Java и не всегда имеет под рукой ПК для просмотра работы примера кода в полевых условиях (как-то — в метро, маршрутке, кафешке и т.д.).
                  Читать дальше →
                • Вся правда об XSS или Почему межсайтовое выполнение сценариев не является уязвимостью?

                    Должен признаться, что чтение комментариев на Хабре к практически любым постам, описывающим очередную XSS на каком-либо популярном сервисе или сайте, способно повергнуть в уныние любого, кто так или иначе связан с безопасностью веб-приложений. С учетом распространенных среди разработчиков мифов и заблуждений о межсайтовом выполнении сценариев, нет ничего удивительного в том, что он и по сегодняшний день входит в число наиболее распространенных проблем безопасности веб-приложений: согласно данным отчета Positive Technologies за 2010-2011 годы, XSS были подвержены 40% проанализированных веб-приложений, а из отчета Firehost за второй квартал 2012 года следует, что XSS составила 27% от числа зарегистрированных хостером атак.

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

                      На Stackoverflow часто встречаются вопросы по выполнению на Android фоновых задач, в т.ч. и повторяющихся с заданным промежутком времени. Как правило, первое, что используется, это Service.

                      Такой подход в некоторых случаях может привести к тормозам и низкой скорости ответа пользовательского интерфейса. Расскажу когда так бывает и как с этим бороться…
                      Читать дальше →
                    • Малоизвестные особенности Java

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

                      Вот уже подоспела и вторая часть статьи.


                      1. Нестатические блоки инициализации.

                      Всем, я думаю, известно, что в Java существуют статические блоки инициализации (class initializers), код которых выполняется при первой загрузке класса.

                      class Foo {
                      	static List<Character> abc;
                      	static {
                      		abc = new LinkedList<Character>();
                      		for (char c = 'A'; c <= 'Z'; ++c) {
                      			abc.add( c );
                      		}
                      	}
                      }


                      Но существуют также и нестатические блоки инициализации (instance initializers). Они позволяют проводить инициализацию объектов вне зависимости от того, какой конструктор был вызван или, например, вести журналирование:

                      class Bar {
                      	{
                      		System.out.println("Bar: новый экземпляр");
                      	}
                      }


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

                      Map<String, String> map = new HashMap<String, String>() {{
                      	put("паук",  "арахнид");
                      	put("птица", "архозавр");
                      	put("кит",   "зверь");
                      }};


                      Очень даже мощное средство, не находите?

                      JFrame frame = new JFrame() {{
                      	add(new JPanel() {{
                      		add(new JLabel("Хабрахабр?") {{
                      			setBackground(Color.BLACK);
                      			setForeground(Color.WHITE);
                      		}});
                      
                      		add(new JButton("Торт!") {{
                      			addActionListener(new ActionListener() {
                      				public void actionPerformed(ActionEvent event) {
                      					System.out.println("Хабрахабр - торт!");
                      				}
                      			});
                      		}});
                      	}});
                      }};


                      Остальные четыре пункта под катом.
                      Читать дальше →
                    • RoboGuice или «Андроид подсел на инъекции»

                        imageRoboGuice — это библиотека, которая позволяет пользоваться всеми преимуществами Contexts and Dependency Injection при разработке приложений на Андроиде.
                        Как несложно догадаться, RoboGuice основан на Google Guice.
                        Сразу оговорюсь, что в качестве перевода слова «injection» я буду использовать слово «инъекция».

                        Зачем колоться?


                        Думаю, что у многих читателей сразу возникнет вопрос: «Зачем эти сложности с CDI на мобильной платформе? Наверняка это всё занимает много места и медленно работает.»
                        Попробую убедить таких читателей в обратном, а именно в том, что CDI на мобильной платформе очень даже жизнеспособен и существенно облегчает жизнь разработчикам.
                        Читать дальше →
                      • Эффективная обработка фотографий в Gimp

                        Прочитав недавно на Хабре статью по обработке фотографий в Photoshop, захотелось рассказать, как можно cделать практически то же самое без использования таких монстров, как Photoshop, и без перезагрузок в windows.
                        Читать дальше →
                      • SeekBar в настройках приложения



                          Для создания экранов настроек Android предоставляет очень удобный набор виджетов, таких как CheckBoxPreference, EditTextPreference, ListPreference. В случае, если существующие виджеты по каким-либо причинам не соответствуют требованиям, можно создать свой собственный на базе существующих.

                          Довольно часто встречается ситуация, когда та или иная целочисленная настройка имеет разумные пределы: яркость, громкость и т.д. В этом случае имеет смысл создать собственный виджет, чтобы многократно использовать его в приложении.
                          Читать дальше →
                        • 12 навыков создания защищенных веб-приложений

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

                            Большинство примеров кода не привязаны к какому-либо конкретному языку программирования, но для наглядности я буду использовать PHP.

                            Итак, поехали.

                            Читать дальше →
                          • Заметки об объектной системе языка Python ч.1

                            Несколько заметок об объектной системе python'a. Рассчитаны на тех, кто уже умеет программировать на python. Речь идет только о новых классах (new-style classes) в python 2.3 и выше. В этой статье рассказывается, что такое объекты и как происходит поиск атрибутов.

                            Читать дальше →
                          • Верстка почтовых рассылок: взгляд изнутри

                            • Tutorial
                            И снова здравствуйте!

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

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