• Twitter следит за тобой, анонимус

      Часто приходиться слышать о том, что крупные корпорации вроде Google, Facebook или LG следят за каждым пуком несчастных пользователей. И исследовав некоторое из их software, я должен признать что таки да — они следят.

      Вчера я исследовал самый свежий (на момент написания этой статьи) официальный iOS-клиент Twitter версии 5.13.1. Мне, кроме всего прочего, было интересно посмотреть на трафик между клиентом и сервером. Поскольку клиент Twitter использует certificate pinning, его трафик довольно трудно перехватить с помощью Fiddler2 и подобных программ. Поэтому я написал define-команду для GDB, которая цепляется на точку останова в [NSURLConnection start] и дампит в консоль интересные мне поля NSURLConnection непосредственно перед вызовом этого самого start. Такой нехитрый в общем-то фокус позволяет видеть что именно программа посылает на сервер ещё до того как это «что именно» будет зашифровано для дальнейше передачи по HTTPs.

      И знаете что я увидел? Клиент Twitter, кроме своих обычных запросов (регистрация пользователя, авторизация, твит и т.п.) часто… нет, не так… очень часто отсылал на сервер POST запросы на некий загадочный URL api.twitter.com/1.1/jot/client_event. Эти запросы шли на сервер почти по любому поводу. Я запустил клиент — запрос пошел. Я нажал кнопку «Sign in» (ещё не залогинился, просто кнопку жмакнул) — запрос пошел. Вылез экран логина, поле «Username» получило фокус — запрос пошел. Я свернул клиент — запрос пошел… Я конечно удивился и полез разбираться.
      Разобраться
    • Руководство по разработке модулей расширений на C# для Visual Studio 2005-2012 и Atmel Studio

        Плагины для C#

        Аннотация


        Около года назад мы опубликовали в блоге цикл статей о разработке плагинов для Visual Studio на языке C#. Сейчас мы переработали эти материалы, добавили новые разделы и предлагаем вашему вниманию новый вариант руководства.
        Читать дальше →
        • +45
        • 36,8k
        • 6
      • Итоги 21-го конкурса IOCCC

          Объявлены победители 21-го международного конкурса обфусцированного кода на C. Как обычно, участники удивили способностью втиснуть совершенно невероятные вещи в программы до 4096 байт. Чтобы получить максимальное удовольствие, организаторы конкурса рекомендуют смотреть версию без спойлеров и пытаться понять по коду программы, что она делает.

          Например, что делает такая программа?
                       main(l
                  ,a,n,d)char**a;{
              for(d=atoi(a[1])/10*80-
             atoi(a[2])/5-596;n="@NKA\
            CLCCGZAAQBEAADAFaISADJABBA^\
            SNLGAQABDAXIMBAACTBATAHDBAN\
            ZcEMMCCCCAAhEIJFAEAAABAfHJE\
            TBdFLDAANEfDNBPHdBcBBBEA_AL\
             H E L L O,    W O R L D! "
               [l++-3];)for(;n-->64;)
                  putchar(!d+++33^
                       l&1);}

          Ответ
          Правильно, печатает карту мира.



          И не просто печатает, но ещё отмечает на карте место (символ " или # с координатами, которые можно указать при запуске).
          Кстати, это «лучшая маленькая программа» на IOCCC 1992 года.

          Другие спойлеры
        • Git up и все все все

          • Tutorial
          Комманда git up (аналог svn up) добавляется так:
          git config --global alias.up '!(git add . && git stash && git pull --rebase >&2) | grep -v "No local changes to save" && git stash pop'
          

          git up при надобности ныкает все ещё незакоммиченные изменения в stash, обновляет локальную ветку до свежайшей и восстанавливает локальные изменения назад. В том числе переносит ещё неотправленные локальные коммиты в самый конец, делая историю линейной как в Subversion, т.е. избегая лишних веток и merge-коммитов.
          Читать дальше →
        • Компиляция пакетов

          В Ubuntu используется философия пакетного менеджмента, то есть все программы ставятся из пакетов deb, в которых хранится, собственно сама программа и скрипты, которые корректно ставят/удаляют/обновляют. Пакеты deb можно найти в сети Интернет, на дисках. Самый лучший способ использовать репозитории, хранилища deb пакетов. Если использовать репозитории, то при появлении в них новых версий установленных у вас программ, вам будет проще и быстрей обновить их. Это очень удобно и позволяет держать систему актуальной и защищенной. Иногда требумой программы в репозитариях нет и приходится компилировать из исходников. Но это надо делать правильно.
          Сегодня я хочу предложить изящный метод, не раз помогавший мне.
          Читать дальше →
        • Обратная сторона луны

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

            Считается, что сборщик мусора – черный ящик, работу которого нельзя предугадать.

            А еще говорят, что GC в .NET практически не настраиваемый. А еще, что нельзя посмотреть исходники как классов .NET Framework, так и CLR, GC и т.п.

            А я скажу как бы ни так!

            В данной статье мы рассмотрим:
            • структура организации размещения объектов в памяти
            • CLR 4.5 Background Server GC
            • правильная настройка сборщика мусора
            • эффективный апгрейд приложений до .NET 4.0+
            • правильное ручное управление памятью

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