• Корректный экспорт csv в utf-8 with BOM

    glukkkk
    @glukkkk
    У меня всё корректно Excel определяет. Использую разделитель точка с запятой и перед записью в .csv вставляю BOM:

    $csv = fopen('file.csv', 'w');
    fprintf($csv, chr(0xEF).chr(0xBB).chr(0xBF));
    ...
    Ответ написан
    Комментировать
  • Как осуществить непрерывное воспроизведение музыки на сайте?

    @Nc_Soft
    ajax + push state
    Ответ написан
    Комментировать
  • Как осуществить непрерывное воспроизведение музыки на сайте?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ajax (xmlhttprequest), history api. Синхронизация музыки идет через localStorage.

    Возьмите к примеру angular.js/ember.js/meteor.js и балуйтесь.
    Ответ написан
    4 комментария
  • Как осуществить непрерывное воспроизведение музыки на сайте?

    slaykovsky
    @slaykovsky
    AJAX, не?
    Ответ написан
    Комментировать
  • Как вывести все поля с максимальным совпадением значений полей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT `t`.`user_id` AS `user1`, `s`.`user_id` AS `user2`, count(`s`.`user_id`) AS `num`
      FROM `table` AS `t`
        JOIN `table` AS `s` ON (`t`.`data` = `s`.`data` AND `t`.`user_id` != `s`.`user_id`)
      GROUP BY `user1`, `user2`
      ORDER BY `user1`, `num` DESC, `user2`
    Ответ написан
    Комментировать
  • Как вывести все поля с максимальным совпадением значений полей?

    svd71
    @svd71
    select u1.*, u2.* 
    from users u1, users u2
    where u1.data = u2.data and u1.id <> u2.id
    order by u1.id
    Ответ написан
    Комментировать
  • ООП - Как понимать Интерфейсы в java?

    VYakushev
    @VYakushev
    Разработчик Android в Nowtaxi
    Приведу пример на базе упрощенной биржи фриланса. Есть класс разработчик, и есть класс заказчик. У каждого из них свои интересы и задачи. Разработчик может выполнять какие-то работы, а какие-то нет.
    1. Поэтому он у себя в резюме пишет, что он, к примеру, может разрабатывать приложения для Android (объявляет интерфейс Android-разработчик).
    2. На бирже он находит всех заказчиков, которые раньше давали заказы под Android. Пишет им в личку и говорит, что если что готов рассмотреть их предложения и выполнить работы (подписывается как слушатель).
    3. Однажды у заказчика возникает идея приложения. Он поднимает список своих контактов и находит тех, кто может разрабатывать под Android (то есть своих "слушателей"). И рассылает им сообщения.

    Пример не совсем полный, но я старался показать что интерфейс - это своего рода контракт. Класс говорит, что я хотел бы принимать определенные события от других классов и у меня есть всё необходимое для этого. Интерфейс описывает как раз, какие методы должен содержать класс, чтобы реагировать на нужные события.
    Ответ написан
    Комментировать
  • ООП - Как понимать Интерфейсы в java?

    Sild
    @Sild
    Интерфейс обязывает реализующий класс придерживаться некоего поведения.
    Если ты реализуешь интерфейс, то есть гарантия, что все методы, описанные в интерфейсе, будут доступны пользователю (под пользователем понимается программист, использующий реализующий класс). И ему нет необходимости знакомиться с логикой метода, важно только знать что у объекта этот метод точно есть.
    Это связано не столько с ООП, сколько с архитектурой приложения в целом.
    Ответ написан
    Комментировать
  • ООП - Как понимать Интерфейсы в java?

    Интерфейсы позволяют избегать множественного наследования, грубо говоря. Но, не в этом суть. Интерфейс - это группа методов, которые определяют некоторое поведение. То есть, если класс реализует интерфейс - "наполняет" его методы содержанием, это значит, что он наделяется некоторыми способностями. Например, если класс реализует интерфейс Stack с методами push и pop, то он наделяется поведением стека (не смотря на то, что эти методы делают на самом деле, т.е. не обязательно объектами этого класса можно пользоваться, как стеком). Это позволяет абстрагироваться от класса, и отталкиваться только от того, реализует ли класс данного объекта определенный интерфейс или нет.
    Ответ написан
    Комментировать
  • ООП - Как понимать Интерфейсы в java?

    @ProkletyiPirat
    идея
    смотрите, вы создаёте объект "Кнопка" и этот объект может изменять своё состояние (нажата кнопка да\нет это и есть состояние). Другие программисты в других проектах будут использовать ваш объект "Кнопка", и эти программисты хотят что бы при изменение состояния что то происходило. При этом вы не знаете что именно должно происходить во всех этих проектах (это знают только их разработчики).

    как это можно сделать?
    убогая банальщина: вы делаете метод .получитьТекущееСостояние() и другие программисты в каком-то цикле опрашивают вашу кнопку через этот метод, да ещё и хранят предыдущее состояние (надо же с чем то сравнивать). Как видите довольно убого... пользователю-программисту нужно писать кучу кода с проверками и в добавок тратить впустую память и время процессора (то есть программа лагает и жрёт дохрена ресурсов...).

    нормальная реализация: пусть сама кнопка вызывает нужные действия, веть она же знает когда её состояние изменилось. Значит кнопка должна вызывать какую-то функцию но при этом не знать что именно эта функция должна делать. Вот тут и приходят на помощь интерфейсы и паттерны проектирования в данном случае Listeners (aka Observers). Вот как раз OnClickListener это и есть интерфейс. Что касается кнопки то она хранит список объектов которые нужно уведомить при изменении состояния, тип этих объектов "OnClickListener". Таким образом "Кнопке" плевать "что где и как" должно происходить при изменении состояния, но при этом она обеспечивает возможность выполнения этого "что где и как" и при этом гарантирует что не произойдёт ошибки из за отсутствия вызываемого метода.

    ru.wikibooks.org/wiki/Java/Listeners
    citforum.ru/SE/project/pattern
    Ответ написан
    3 комментария
  • Как осуществить подключение нескольких шрифтов в css?

    Zoxon
    @Zoxon
    Веб-разработчик
    @font-face {
    font-family: "PT Serif";
      src: url("../fonts/ptserif-normal.eot");
      src: local('☺'), 
      url("../fonts/ptserif-normal.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-normal.woff") format("woff"),
      url("../fonts/ptserif-normal.ttf") format("truetype"), 
      url("../fonts/ptserif-normal.svg#PT Serif") format("svg");
    
      font-weight: normal;
      font-style: normal;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-bold.eot");
      src: local('☺'), 
      url("../fonts/ptserif-bold.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-bold.woff") format("woff"), 
      url("../fonts/ptserif-bold.ttf") format("truetype"), 
      url("../fonts/ptserif-bold.svg#PT Serif") format("svg");
    
      font-weight: bold;
      font-style: normal;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-italic.eot");
      src: local('☺'), 
      url("../fonts/ptserif-italic.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-italic.woff") format("woff"), 
      url("../fonts/ptserif-italic.ttf") format("truetype"), 
      url("../fonts/ptserif-italic.svg#PT Serif") format("svg");
    
      font-weight: normal;
      font-style: italic;
    }
    
    @font-face {
      font-family: "PT Serif";
      src: url("../fonts/ptserif-bolditalic.eot");
      src: local('☺'), 
      url("../fonts/ptserif-bolditalic.eot?#iefix") format("embedded-opentype"), 
      url("../fonts/ptserif-bolditalic.woff") format("woff"), 
      url("../fonts/ptserif-bolditalic.ttf") format("truetype"), 
      url("../fonts/ptserif-bolditalic.svg#PT Serif") format("svg");
    
      font-weight: bold;
      font-style: italic;
    }


    В font-weight можно использовать не ключевые слова, а цифры

    100 Ultra Light
    200 Thin
    300 Light
    400 Regular, Normal
    500 Roman
    600 Medium, SemiBold
    700 Bold
    800 Heavy, ExtraBold
    900 Black

    При использовании указывать font-weight и font-style, в зависимости от их комбинаций будет выбран нужный файл шрифта

    UPD: Если вам не нужно поддерживать совсем уж древние браузеры IE8 (eot) и Android 4.3 (ttf) то достаточно подключить только woff и woff2.
    Svg нужен для Safari версии ниже 5.1

    Подробнее смотрите на caniuse.com

    Хорошая статья на эту тему nicothin.pro/page/web-fonts

    @font-face { 
      font-family: 'Web font'; 
      src: url('webfont.woff2') format('woff2'), 
           url('webfont.ttf')  format('truetype'), /* Только если нужна поддержка старых Android, иначе закомментировать */ 
           url('webfont.woff') format('woff'); 
      font-weight: normal; 
      font-style: normal; 
    }
    Ответ написан
    4 комментария
  • Где приобрести базу или доступ к api с Id фильмов на kinopoisk и imdb?

    @NewTypes
    На себя
    Существует ли API Кинопоиска

    Таций: "Уже сейчас на «Кинопоиске» есть закрытое API, посредством которого мы отдаем часть своей информации о кино некоторым партнерам: онлайн-кинотеатрам, прокатчикам, lifestyle-ресурсам, обычным кинотеатрам и т.д."
    gazeta.ru/business/2013/08/16/5574285.shtml

    "Q: У КиноПоиска есть API?
    A:Нет и не будет."
    forum.kinopoisk.ru/showthread.php?t=140077

    есть такое:
    www.kinopoisk.ru/rating/89515.xml.

    Я бы сделал вывод рейтинга через javascript, предварительно спарсив названия-id. Человек заходит на сайт и дергает рейтинг с кинопоиска. У вас всегда свежий рейтинг и не нужно думать, что вас забанят при парсинге. Проблем несколько: кинопоиск может начать проверять куки-реферрер-итп, откл js на клиенте (таких очень мало), кинопоиск может сменить id фильма (вряд ли).

    stackoverflow.com/questions/1966503/does-imdb-prov...
    Ответ написан
    1 комментарий
  • С какой шириной вы рисуете адаптивные сайты?

    @Step_M
    На основе практики создания адаптивных сайтов, используем вот такой комплект ширин (для верстки с использованием брейкпоинтов):
    320 или 480 — телефоны/смартфоны
    800 — смартфоны/планшеты
    1024 — ноутбуки/планшеты
    1280 — десктопы/планшеты/ноутбуки
    1600 — десктопы

    А вообще, суть адаптивного сайта автоматически подстраиваться под любой размер экрана, и в идеале лучше вообще обойтись без переломных точек, а просто плавно подстраивать элементы сайта (размеры блоков, размеры шрифтов и т.д.) под размер экрана.
    Ответ написан
    1 комментарий
  • С какой шириной вы рисуете адаптивные сайты?

    Pasha4ur
    @Pasha4ur Автор вопроса
    Чтобы не искали, из Twitter Bootstrap:
    Large display 1200px and up
    Default 980px and up
    Portrait tablets 768px
    Phones to tablets 767px
    Phones 480px and below


    Хотя я для планшетов остановлюсь все-таки на 720. Андроид-планшеты популярны с HD Ready 720p.

    P.S. Неимоверно рад, что теперь на Хабре. Есть возможность спросить у профессионалов, которые реально занимаются подобным.
    Ответ написан
    Комментировать
  • php, ещё раз о кодировке

    Ogra
    @Ogra
    "Àëèíà Ãðîñó — Ìåëîì íà àñôàëüòå" — вам приходит в какой кодировке?
    Если это однобайтовая кодировка, то вам достаточно
    $string = iconv('cp1251', 'utf-8', $string);
    


    Если же это вам приходит в utf-8, то вам нужно сделать так:
    $string = iconv('utf-8', 'cp1252', $string);
    $string = iconv('cp1251', 'utf-8', $string);
    
    Ответ написан
    11 комментариев