• Какие существуют встраиваемые на сайт p2p веб-плееры?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Вот эти парни быстро прогрессируют. И, вроде, открыты для общения. Также, можно накодит и свой велосипед.
    Ах да, здесь подсказывают, что флэш из коробки поддерживает rtmfp.
    Ответ написан
    Комментировать
  • Ноутбуки Мак или Сони (выбор из двух зол)?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    По железу в попугаях, что забавно, будет лучше мак. Всё же haswell, да и никакие плюшки особо не заменят буст частоты на 0.6 GHz. Разве только ядер меньше, но не думаю, что простивающие ядра как-то улучшат работу. А вдовое больший HDD сильно поможет, уверяю. Говорю, как пользователь двух SSD 64GB: да быстро, но очень мало. Хотя, я наверное просто привык держать сиды на торрент трекерах по пару лет.

    В общем, если нет практически никаких преград по использованию OSX, то да, первый лучше.
    Ответ написан
    Комментировать
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • Объясните пожалуйста принцип работы vksaver

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну банально посмотрите на source страницы.
    <div class="play_btn fl_l">
        <div class="play_btn_wrap">
            <div class="play_new" id="play146007391_273404010">
            </div>
        </div>
        <input type="hidden" id="audio_info146007391_273404010" value="https://psv4.vk.me/c4708/u74422639/audios/4bd0302416df.mp3?extra=TQIL4DCU93rkBcrzcfMC59gN7O8z737SUAvxmev_aJQ2RdWknkiOd_SD7g1s8QIr-qJYlsfkDOt9CCdz3cebwMNe4EpVL95C7yE,231" />
    </div>


    То есть проходим по всем елементам с классом play_btn, смотрим на input внутри него (на аттрибут value), и добавляем ссылку с target=blank и содержимым - ссылкой на аудио вырванное из value.
    То есть, примерно так:
    var nodes = document.getElementsByClassName("play_btn");
    for(var i = 0; i < nodes.length; i++){
        var audio = nodes[i].getElementsByTagName("input")[0];
        audio = audio.getAttribute("value").spit("?")[0];
        //something else with UI here
    }
    Ответ написан
    1 комментарий
  • Какой лучший веб-редактор под Linux?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Странно, что никто не вспомнил про Atom. Правда он в разработке, но вроде можно и собрать - многообещающий проект.

    А вообще, есть, наверное, три пути.

    Костыльный: запустить под wine'ом, или поставить виртуалку. На самом деле, ставить виртуалку весьма оправданно, так как в этом случае получаете чистую систему, которую потом можно будет быстро развернуть где угодно и не получить ничего лишнего. Правда всё равно - ставить *nix, а на него винду ради Dreamweaver не айс.

    Нормальный: sublime text. Под него есть множество best и good practice, он действительно очень настраиваемый и в тоже время довольно удобный.

    Unix-way: vim. Из коробки очень не красивый, но пара настроек - и уже светиться всеми огнями. Юзабельность высокая даже без настроек. Из плюсов - работает и под ssh не плохо. Из минусов - долгая акклиматизация. Но потом будет сложно вернуться куда-либо.

    Алсо, часто слышу про webstorm - мощная штука. Да и с руби у jetbrains всё хорошо. Правда продукты платные, а лишних средств ради попробовать нет (пары недель на один проект вряд ли хватит, так что я даже не пробовал).

    С фотошопами всё и плохо и хорошо одновременно. Плохо - альтернатива, по сути, одна - gimp. Хорошо - gimp очень хорош. Суперская документация (которая, к сожалению, сейчас у меня не грузиться). Серьёзно - многие вещи, которые можно в фотожабе, можно и здесь, а также есть некоторые фишки, которых нет в фотожабе.

    UPD.
    Дистрибутив - сам пользуюсь ArchLinux. Но это довольно сложный вариант, хотя от документации наступает лёгкое чувство эйфории. Не хочу никуда переходить теперь, ибо Ubuntu для меня теперь - мощный и сложный китайский комбайн без нормальной документации, который непонятно как работает. Так что предпочитаю плугу - пусть и руками много работать, зато починить легко. Да и документация к этой плуге на уровне.
    Ещё немного пробовал на debian пересесть, когда появлялись проблемы со слишком новыми драйверами. В общем, впечатления хорошие. Но всё равно остаётся привкус недосказанности. Да и его стабильность преувеличена - нужный мне драйвер оказался слишком старым =) И плюшек нужных не получил. Так что откатился на opensource драйвер и попрощался с игрушками. Ещё пробовал Mint. На самом деле, очень симпатичный дистр. Шустрый, красивый и удобный настолько, насколько может быть Linux таким. То есть действительно очень быстрый, но немного не красивый и порой появляется некоторое чувство неудобства (впрочем, по сравнению с windows, с которым у меня это чувство почти постоянно, всё не так плохо).
    В общем, по уменьшению степени задротства (но увеличении кол-ва магии):
    ArchLinux, Debian, Mint, Ubuntu.
    Ответ написан
    2 комментария
  • Чем RoR лучше PHP?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Как уже сотни раз написали немного некорректно сравнивать RoR и PHP. Другое дело Ruby и PHP, но и то с натяжкой.

    Ruby - мультипарадигмальный язык, то есть язык, поддерживающий много разных (порой противоречащих) парадигм (стилей) программирования. У автора возможно и не было намерений сделать крутой язык для web-разработки. Соответственно, встроенная библиотека чуть обширней, но нет "из коробки" некоторых вещей. Впрочем, ruby - это целая экосистема для разработки и поддержки проектов, так что этот "вброс" сильно натянут - пара команд и проблемы как не бывало.
    PHP - бывший темплейтор для отображения динамических web-страниц. Соответственно, его спецификация намного ближе к web-разработке. И не смотря на PHP-Qt или phalanger, PHP очень редко используется для Desktop-приложений.

    Примечательно, что у обоих общее начало - Perl. Если первый хоть и разрабатывался с нуля, многие вещи были вдохновлены именно Perl'ом. И это чувствуется - именно поэтому он так хорошо подходит к web-разработке. Второй же вырос из набора скриптов на Perl для отображения динамического контента.

    Плюсы и минусы... Я не профессионал ни в одной из экосистем. Впрочем, вот личные наблюдения:
    Плюсы PHP:
    + огромнейшее сообщество от мала до велика, от дилетантов до спецов; от сюда и минус: по правилу 95% - 95% дилетанты, отсюда весьма странная репутация у илиты.
    + отличная производительность, конечно, он не сравниться с C++ или Java, да и с .NET тоже вряд ли сравнится, особенно с C#, но всё же производительность на уровне с тем же Ruby или Python, к тому же есть туча инструментов, позволяющие ускорить код буквально двумя телодвижениями: kPHP (правда потребуется своеобразный стиль программирования), phalanger (бонусом будет простейшая интеграция с .NET-инфраструктурой и/или -экосистемой) и прочие.
    + невероятная популярность у работодателей - программисты PHP, наверное, самые востребованные в IT-индустрии, отчасти потому, что очень много приходиться отсеивать из-за сильной некомпетентности, отчасти потому, что он очень прост для старта и на всю работает вирусный-маркетинг; забавно, но это первый ЯП, про который я услышал.
    + встроенный в синтаксис PHP html-темплейтор, хотя, вроде, пользоваться им моветон =/ ну или целый обряд его использования есть, честно - я так и не понял.
    Минусы PHP:
    - отсутствует какой-бы то ни был единый дизайн или guidelines, так что разработка сродни свободному полёту - пока летишь, всё хорошо, но если нет парашюта - падать больно, если не смертельно.
    - языком программирования он стал далеко не сразу, так что есть определённые рудименты, не очень приятные.
    - далеко не самая лаконичная запись, всё же использовать Си-стайл, так изящно изуродованный невероятно большим количество знаков доллара, что порой читать PHP-код ну очень сложно, особенно человеку, который редко за него садиться (в то же время, python-код может прочитать даже человек, который вообще очень редко программирует, лишь с минимальными комментариями особо сахарных мест).
    - личная неприязнь, непонятно с чем связанная.

    нечто вроде P.S. минусы у PHP кажутся слишком... субъективными; так оно и есть, и связано это с тем, что именно по этим субъективным причинам я его бросил


    Плюсы Ruby:
    + невероятное и очень сильное сообщество: лично мне всегда помогали и направляли к дзену.
    + шикарнейшая магия, недоступная простым смертным (язык невероятно сахарен, и в то же время всё очень лаконично, написать гавно-код на нём довольно сложно, при этом возможностей язык предоставляет предостаточно)
    + очень сильная встроенная библиотека, наверно имеющая возможности чуть ли не на все случаи жизни.
    + весьма и весьма лаконичная запись, всё лучшее из Си, Паскаля, Пайтона, Perl'а и Smalltalk'а.
    + то же самое про остальные аспекты языка: производительность (в 1.9 её очень сильно подняли), мощь, сжатость, ООП.
    + наконец, шикарная экосистема: это и rake, capistrano, gems и другие, с ними разработка очень проста, а идут они во многих дистрах linux'а одним пакетом, да и на винды с макосями аналогично: можно считать, что из коробки.
    Из минусов Ruby:
    - огромнейшее количество магии: без [stroked]крабовой[/stroked] магической палочки
    и ста грамм [stroked]водки[/stroked] эликсира маны не разберёшь.
    - своеборазный стиль кода: пусть он и лаконичный, но с наскока некоторые вещи совсем неочевидны.
    - до 1.9 в производительности проигрывала всем, даже черепахам аля 1С-битрикс, хотя работала стабильней многих.
    - в какой-то степени навязанная экосистема - если привыкли пилить свои велосипеды на каждый чих, первое время будет странное смешанное чувство комфорта и неуюта.

    Пару слов о Ruby on Rails. Это дичайший Фреймворк. Самый большой Фреймворк для ruby. Пожалуй, именно с ним ruby получил невероятную популярность.
    И вот что можно сказать о нём (RoR):
    + использует все сильные стороны ruby и старается (старался) завуалировать недостатки.
    + первое время была широчайшая свобода действия, сравнимая разве что с PHP, что на самом деле плохо, но даёт некое ощущение полёта.
    + в месте со свободой всё таки была дисциплина, сейчас она вышла на первое место.
    + если следовать всем правилам и best/good practice, то можно добиться невероятных результатов как в производительности труда, так и в качестве работы (читай продукта).
    Минусы... Не знаю. Я не искал у него минусов.

    Этот ответ сильно не полный, потому что я не знаю ни одного подобного Фреймворка для PHP. Слышал, что они существуют, но работать с ними не довелось.
    Ответ написан
    2 комментария
  • Qt. Стоит ли с С++ переходить на Python?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Забавные эти вопросы. Стоит ли изучать $programming_language1, чем лучше $programming_languageA $programming_languageB, etc. Просто забавны. Не то чтобы они не нужны - каждому делу свой инструмент. Сложно забивать гвозди отвёрткой, а вилкой вырезать по дереву (хотя и можно).

    Так вот, внесу свою лепту - конечно стоит! И даже не стоит, а требуется. Пайтон уверенно просачивается в жизнь и часто требуется специалист C++ со знанием (знакомством) пайтона. Немного расширяет кругозор - всё же динамическое программирование с небольшой функциональщиной.

    Но не стоит думать, что есть инструмент на все случаи жизни. Пайтон идеален там, где есть идея и больше ничего, хорош он и для прототипирования, очень не плох в научной среде. Но противопоказан для дальнейшего масштабирования, плох он и в стресс-тестированиях, в общем продакшн из него так себе, примерно как и у C++. Впрочем, он близок к средней по больнице.

    Я проходил этот путь. Было время, когда достаточно хорошо я знал только Си++ (даже не Си). И в этом были свои проблемы. Теперь я полиглот. Из плюсов - очень быстро учиться что-то новое. Буквально сразу цепляю различия и могу скопипастить целый проект - этот навык сложно переоценить. Уже сотни раз писали, что пайтон хорош для прототипирования - повторюсь: вбиваешь в терминал python и печатаешь. В лаборатории сразу появляются формулы, графики, отчёты. У стартапа сразу появляется UI, логика, прототип. Но... Есть огромные минусы: в какой-то момент без хорошей документации очень тяжело идти дальше - виной очень крутая динамическая типизация. try: catch'и: и тут и там - снова она, ибо никогда не знаешь что тебе подадут в аргументах. Теперь священные воины пробелы vs табы (аля K&R vs BSD) могут обрушить весь проект вместе со сроками.

    Ну и да. pyqt ужасен. Лучше использовать что-нибудь другое (хотя ничего другого особо и нет). Гейзенбаги (те, которые то появляются, то исчезают) - тысячи их. И та самая интерактивность сводиться на нет, дай только проекту разраститься до 100 строк - а это очень быстро произойдёт, никакой pythonic-way не поможет. Так померло много проектов, не успев начаться.

    Наконец, если хотим кросс-платформы, с горечью вспоминаются ночи (!) проведённые за попытками скомпилировать какую-то полузаброшенную boost-подобную либу-зависимость какого-то гика на гите, который единственный подумал скинуть пару примеров использования всеми забытого протокола.

    Зато все слухи про низкую производительность python'а - чушь и клевета. Эта @#$% очень быстра, по крайне менее, если писать подобающе, а не проходиться по словарям в миллионы элементов в сотый раз (если такие словари, пора уже БД подключать, наверное).
    Ответ написан
    Комментировать
  • Что можно реализовать на разных языках программирования? С++ Java Python на какие ОС?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Бессмысленный вопрос. Программировать можно на чём угодно. И всё это бред про "начинать стоит с основ".
    Сделать следует две вещи. Порядок не важен!

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

    Посмотрите на разные языки программирования. Здесь, наверное, следует исключить эзотерику и функциональщину, ибо с ними сложно что-то толковое сделать не имея опухоли мозга (шучу, конечно). Их много: python, c++, java, go, ecmascript, nasm, c# (mono)... Список огромен. Большинство из них распространились на огромные области. Не важно: геймдев, вебдизайн, банки, транспорт - в каждой из них можно применить практически любой инструмент. Более того, в каждой из них применяется часто сразу несколько инструментов. Так что первый выбор почти не на что не повлияет.

    Тут стоит сразу пару моментов осветить.
    Во-первых, матанозированность различна. Наименьшая она в вебе. Наибольшая, наверное, в банках. Где-то посредине геймдизайн, хотя не так давно, он был куда более матаноёмкий, сегодня большая часть матана закралась где-то в библиотеках (впрочем, с логикой всё равно придётся подружиться).
    Во-вторых, платформа. Некоторые языки заточены под одну платформу (c - *nix, c# - ms), что, в прочем, не запрещает их использовать на других платформах, там есть свои особенности (нормального чисто win'ового компайлера Си под вином до сих пор нет, а его WinAPI на Си убого чуть более чем полностью, тогда как порт c# - mono - имеет множество особенностей при работе на неродных платформах). А ECMAScript (js) вообще одно время работал только под браузером, хотя сегодня делать native-приложения на нём довольно затруднительно (если, конечно, ОС - это НЕ браузер), да и возможности его ограничены API браузеров, которые часто различаются между собой.

    Но это всё детали. Они есть везде. Можно делать backend на c++, можно на python, можно на node.js. Можно писать игры на C# (XNA/Unity/monogame), можно на js (браузерные игры сегодня распоряжаются и webgl). Так что что больше нравиться, то и изучайте. И не стоит с основ. И тем более не стоит отождествлять Си и "основы основ".
    Ответ написан
    Комментировать