• Чем скачать yandex-плейлист целиком?

    написал php-скрипт
    <?php
    
    const MP3_DIR = '/drive2/Dropbox/backup/mp3/';
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    $curl = new \Zelenin\Curl();
    
    $playlist_url = 'http://music.yandex.ru/?ncrnd=6537#!/users/Muz-winamp/playlists/1046';
    
    preg_match_all( '/users\/(.*)\/playlists\/(.*)/isu', $playlist_url, $matches );
    
    $owner = $matches[1][0];
    $playlist_id = $matches[2][0];
    
    $response = $curl->get( 'http://music.yandex.ru/get/playlist2.xml?kinds=' . $playlist_id . '&owner=' . $owner );
    
    $playlist = json_decode( $response['body'], true );
    
    $playlist_title = $playlist['playlists'][0]['title'];
    
    $tracks = implode( ',', $playlist['playlists'][0]['tracks'] );
    
    $response = $curl->get( 'http://music.yandex.ru/get/tracks.xml?tracks=' . urlencode( $tracks ) );
    
    $tracks = json_decode( $response['body'], true );
    $tracks = $tracks['tracks'];
    
    $playlist_dir = MP3_DIR . $playlist_title;
    if ( !file_exists( $playlist_dir ) && !is_dir( $playlist_dir ) ) {
    	mkdir( $playlist_dir );
    }
    
    foreach ( $tracks as $track ) {
    	$artist =  $track['artist'];
    	$title = $track['title'];
    
    	$response = $curl->get( 'http://storage.music.yandex.ru/download-info/' . $track['storage_dir'] . '/2.mp3' );
    
    	$xml = new DOMDocument();
    	$xml->loadXML( $response['body'] );
    
    	$host = $xml->getElementsByTagName( 'host' )->item(0)->nodeValue;
    	$ts = $xml->getElementsByTagName( 'ts' )->item(0)->nodeValue;
    	$path = $xml->getElementsByTagName( 'path' )->item(0)->nodeValue;
    	$s = $xml->getElementsByTagName( 's' )->item(0)->nodeValue;
    	$n = md5( 'XGRlBW9FXlekgbPrRHuSiA' . substr( $path, 1 ) . $s );
    
    	$mp3_url = 'http://' . $host . '/get-mp3/' . $n . '/' . $ts . $path;
    	
    	//echo $mp3_url . PHP_EOL;
    
    	$response = $curl->get( $mp3_url );
    	$mp3_name = addslashes( $artist . ' - ' . $title . '.mp3' );
    	echo $mp3_name . PHP_EOL;
    	file_put_contents( MP3_DIR . $playlist_title . '/' . $mp3_name, $response['body'] );
    }
    Ответ написан
    21 комментарий
  • Чем лучше scss от css?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    зачем нужен препроцессор sass если css нормальный

    Если проект маленький и стилей крайне мало, то действительно, смысла в SCSS нет. В остальных случаях SCSS качественно выигрывает перед ванильным CSS. У меня разработка на SCSS занимает до 50% меньше времени, про дальнейшую поддержку вообще молчу.

    Основные преимущества SCSS: вложенные классы и свойства, миксины и вагон преимуществ поменьше.
    Ответ написан
    Комментировать
  • MVC php на пальцах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ох...

    Model View Controller. Да ну его, ему уже 45 лет (придумали в 79-ом году). Давайте лучше про Model View Adapter погокорим. это то что все используют в популярных фреймворках последние лет так 10 так точно.

    mvc-mvp-mvvm-6-638.jpg?cb=1375170002

    Вообще в этом всем важно не только то, что каждая буква обозначает, а как они друг с дружкой связаны.

    View - это не только HTML, но и вообще представление в целом, а так же логика его формирования. Шаблонизаторы, фильтры, различные функции/объекты помогаютщие нам сформировать view (например форматирование дат, сериализаторы и т.д.) В подавляющем большинстве случаев "представление" наших данных - это HTTP запросы и HTTP ответы. HTML - э то лишь часть HTTP ответа.

    Model - Это целый слой, который может быть представлен в виде кучи отдельных объектиков, структур и т.д. Его задача - делать дела и хранить/менять состояние системы. Тут легко запутаться потому что термин "модель" много чего значит. Воспринимайте его как "слой логики" а не конкретные объекты. И да - база данных и прочая чушь - это детали реализации этого слоя. "не важные штуки" словом. Туда же и ActiveRecord, ORM-ки всякие. Это деталь реализации и все остальные чуваки (view и controller) о них знать ничего не должны (хотя иногда могут в целях упрощения).

    Controller или адаптер. Это опять же не обязательно один объект. это может быть цепочка адаптеров (еще называют фронт-контроллером, middlewares и т.д.). Его задача весьма простая. Получаем представление данных на входе (HTTP запрос), определяем что надо делать, и просим модель что-то сделать (ни в коем случае не меняем ничего самостоятельно в контроллере, он только просит). Потом мы можем попросить модель вернуть нужный нам кусок состояния, и попросить View сформировать представление (HTTP ответ).

    Как-то так. В целом же это я сейчас описал "идеальный мир". Вся суть этого подхода - разделение логики презентационной и логики приложения. Зачем это надо? что бы было проще жить! Обычно UI приложения или способы взаимодействия с ним меняются почаще логики или как минимум в разные моменты времени. Адаптеры в этом случае служат промежуточным слоем, они ничего сами не делают, это "переводчики". Они просто переводят то, что сказано в запросе в язык понятный приложению и обратно.

    Но на начальной стадии можно слегка нарушать эти правила, делать толстые контроллеры и т.д. В этом случае бизнес логика будет потихоньку "вытекать" из модели. Это не хорошо, и на хоть сколько нибудь больших проектах может привести к проблемам. Потому важно находить баланс.
    Ответ написан
    Комментировать
  • Windows загрузилась в исходном состоянии. Как понять причину?

    @res2001
    Developer, ex-admin
    Такое могло произойти, если система по каким-то причинам не смогла найти/создать профиль пользователя. Тогда винда создает временный профиль, который после выхода из системы будет удален.
    Если после перезагрузки профиль оказывается на месте, то винда, конечно, загрузит его.
    Чтоб узнать из какого каталога загружен профиль в командной строке винды введите команду:
    set USERPROFILE
    В нормально режиме вам выведется путь типа такого: C:\Users\<имя пользователя>
    При работе во временном профиле путь будет выглядеть примерно так: C:\Windows\Temp\<имя пользователя>
    Ответ написан
    5 комментариев
  • Что за ошибка при push в Git?

    v_decadence
    @v_decadence
    git init не нужен, если потом используется git clone.

    Ошибка из-за того, что на сервере есть изменения, которых у Вас нет в локальном хранилище.
    Нужно сделать git pull перед git push.
    Ответ написан
    6 комментариев
  • Разработка приложения интернет магазина на Android.С чего начать?

    @zetabit
    помимо всего выше сказанного я бы добавил это:
    -добавить api свое для вашего магазина, например в формате json принимайте и передавайте запросы (методом хоть гет хоть пост, а ответ получать в формате json) между приложением и сайтом
    -для этого нужно отдельно апи реализовать на сайте
    -научить приложение понимать json, есть всякие для этого готовые библиотеки
    -и на счет почитать, я бы читал хабр, гуглил что нужно и потихоньку реализовывал.... попробовать по существующему примеру создать максимально похожее по функционалу приложение ... быстро в первый раз вряд ли у вас получится...
    -как вариант, если знакомы с программированием на делфи или С++ посмотрите в сторону embarcadero (только она платная, очень платная)
    Ответ написан
    2 комментария
  • Взламывают, как защитить сайт?

    У вас в коде возможна sql инъекция.
    'SELECT * FROM `users` WHERE `id` = "'.$user_id.'"
    Инструкция как их избежать:
    habr
    php.net
    Ответ написан
    Комментировать
  • Что значит, когда в вакансиях пишут "Опыт с одним из фреймворков: Symfony, Laravel, Yii"?

    Helldar
    @Helldar
    Just do it.
    Специалисту и язык не помеха. Если он шарит в одном, то и в другой достаточно легко вольётся. То же и с фреймами. Если знаешь один, значит тебе не нужно объяснять принцип работы и их назначение.
    Плюс, да, слова впихивает для повышения выдачи в поиске. Например, у нас искали мощного фронтендера. Мои рекомендации по названию вакансии "frontend-разработчик (middle+)" побрили в пользу "html верстальщик", объяснив это "твой вариант 6 чел просматривали, а наш - 200+". Вот и выходит, что при их варианте из сотни поданных заявок 90 сразу отметаются, т.к. народ видит "верстальщик", а у нас требуется именно фронтендера, да ещё и с нехило опытом.
    Плюс, большинство вакансий составляют HR. Спрашивают у программеров умные слова и используют где не надо.
    Ответ написан
    Комментировать
  • Почему говорят не учить РНР?

    @Suicide676
    didusdev.com
    Когда-то давно, PHP действительно был "языком не очень". Также, масла в огонь подливало то, что порог входа очень низкий, и аудитория писала на нем много "плохого кода". Из-за этого, трушные программисты (Java, C++, C# и т.д.) начали говорить, что PHP плохой и учить его не стоит, да и вообще, что его обезьяна может изучить.

    Шли годы, сообщество менялось, язык PHP улучшался и занимал большую долю на рынке.

    Поэтому, советую не слушать тех, кто вам говорит, что PHP учить не нужно.
    Изучайте, приходите в WEB, работы полно (хоть в конторе, хоть на фрилансе).
    Ответ написан
    Комментировать
  • Как сделать подобный эффект на сайте или как называется такой эффект?

    @Cruper
    web-падаван
    Линия - это просто блок с размерами и черным фоном.
    Чтобы добиться такого эффекта, достаточно воспользоваться свойствами
    position: absolute; left: N; top: N; - чтобы убрать ее за пределы экрана
    transform: rotate(45deg); - чтобы повернуть ее на нужный угол (в данном случае 45 градусов)
    transition: 2s width; - чтобы анимировать изменение ширины
    А после загрузки страницы запустить js скрипт, который задаст новую ширину линии, такую, чтобы она вылезла из-за границы экрана
    window.onload = function () {
      var line = document.querySelector('#line');
      if (line) {
        line.style.width = '100px';
      }
    }

    Используя это, достаточно просто будет усложнить анимацию так, как вам хочется.
    Ответ написан
    Комментировать
  • Как сделать такие линии на css?

    Dare95
    @Dare95
    Веб-разработка
    А не проще ли использовать модуль Canvas? В смысле, это не подразумевает что все точки и углы придётся считать самому, есть же софтинка: www.htmlcanvasstudio.com

    И чтобы пасиба мне сказал!
    Ответ написан
    Комментировать
  • На youtub есть канал где читают код PHP?

    hack504
    @hack504
    Изучаю PHP рекомендуют читать чужой код.

    Даже спецы не читают чужой код, если их не заставят. Но было бы прикольно, действительно, посмотреть на youtub как разрабы читают чужой код, особенно на PHP
    1387209829_1176468776.gif
    Ответ написан
    10 комментариев
  • Как вы развиваетесь и откуда черпаете информацию?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Я пытаюсь развиваться в своей профессии, но есть проблема с тем, откуда черпать информацию.
    Проблема в том, что Вы пытаетесь черпать!
    А нужно - пытаться развиваться. ;)

    Банально:
    Например, есть тема про поиск заданного растр-объекта на произвольном изображении.
    Заходите в интернет, ищите, находите ссылки, кликаете первую попавшуюся и...
    ОМГ! Там есть туча формул и текста и нет исходника! и закрываете её, как бесполезную...

    А вот тут-то и была Ваша ошибка!

    Кратко:
    1. Знание английского.
    2. Гугл и синтаксис поисковой строки.
    3. Умение читать и осознавать, а не копипастить исходники.
    4. Сопоставление фактов (результат работы ВАШЕГО! кода) с теорией (оф. документации, алгоритмов) и с другими источниками, касательно изучаемого Вами направления (публикации: подходы реализации, архитектуры и структуры, методики, алгоритмы, репозитории кода и т.д.).

    Если выполнять все правила - никакие закладки будут не нужны: сами сможете быстро находить требуемую информацию (а не "мусорную"!) о новом направлении для своего развития или запомнить надолго результат своего труда: достигнутое понимание материала через личный опыт.
    Ответ написан
    4 комментария
  • Почему в адресной строке браузера можно запустить javascript-код?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А почему бы собственно и нет. К слову вроде как в последних версиях FF это вроде как уже нельзя делать или только собираются...

    Вообще так сложилось исторически, когда на рынке были только Netscape и IE. Тогда только только появился JS, W3C вроде как еще не стандартизировало DOM ивенты да и вообще какой-то трешачек творился. Кто-то из разработчиков браузеров сделал возможным делать так:
    <a href="javascript: alert('foo');">click me</a>
    людям понравилось. Другие разработчики подхватили идею. Что бы это все работало, решили сделать выполнение JS введенного как URL, со своим протоколом и все такое. Это эдакое наследие давних времен. Хотя это лишь одна из версий.

    Сейчас эта практика считается дурным тоном, а масса лемингов таким образом раздает на право и на лево свои куки, потому что любят копировать и вставлять все что не поподя.
    Ответ написан
    2 комментария