• Как провести отладку скрипта, подгруженного через ajax?

    HDApache
    @HDApache
    PHP программист
    Я может и ошибаюсь, но что то подсказывает мне, что подгружать JS ajax-ом не совсем true way. Может имеет смысл пересмотреть архитектуру?
    Ответ написан
    5 комментариев
  • JQuery, обращение к элементу через атрибут data-*?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ничего не нужно выдумывать. Обычный селектор по атрибуту. И работает он так же как и все остальные селекторы по скорости (если конечно вы не про ie7 какой-нибудь). Скорость работы селектора равноценна его специфичности. Скажем селектор #dataset [data-toggle] будет работать медленнее чем #dataset > [data-toggle] или же просто [data-toggle]. Селекторы все же с права на лево обрабатываются. И да, так мы жестко даем понять что мы должны добавить атрибут а не через метод $.fn.data назначить что-то.
    Ответ написан
    1 комментарий
  • JQuery, обращение к элементу через атрибут data-*?

    RubaXa
    @RubaXa
    Вполне нормальный селектор, только контекст добавить не мешало бы и использовать $.fn.children (если задача/разметка позволяет):
    var $item = $('#dataset').children('[data-id="'+id+'"]');
    Ответ написан
    Комментировать
  • Как парсить почту Украины?

    @sashok1337
    Недавно на своём личном трекере посылок тоже обнаружил эту проблему. Там теперь используется какая-то хитрая система с редиректами.

    В итоге решил проще - там есть отслеживание треков из файла (до 200т шт). Я эмулирую отправку файла, в который записываю все треки, и потом парсером вытягиваю из таблицу нужные значения.

    Вот код (php, YII):
    protected static $apiURL = 'http://services.ukrposhta.com/barcodestatistic/Default.aspx';
    
        public static function updateTrackingInfo($sendEmail = false) {
            Yii::import('application.lib.simpleHtmlDom.*');
    
            $packages = Tracking::model()->findAll();
            if (empty($packages)) {
                return;
            }
    
            $ttns = array();
            $ttnsObj = array();
            foreach ($packages as $package) {
                $ttns[] = $package->tr_num;
                $ttnsObj[$package->tr_num] = $package;
            }
    
            $result = self::uploadTTNs($ttns);
            
            if(empty($result)){
              return;
            }
            
            $html = new simple_html_dom();
            $html->load($result);
            $rows = $html->find('#ctl00_centerContent_ListBarcodes tr');
            foreach ($rows as $row) {
                $trackNum = trim($row->find('td', 0)->plaintext);
                $package = $ttnsObj[$trackNum];
                if (!empty($trackNum) && !empty($package)) {
                    $status = trim($row->find('td', 3)->plaintext);
    
                    if ($status !== $package->last_status) {
                        $package->last_status = $status;
                        $package->last_update = time();
                        $package->notified = 0;
                    }
                    
                    $package->save();
                }
            }        
        }
    
        public static function uploadTTNs($ttns) {
            if (0 === count($ttns))
                return FALSE;
    
            $fields = array(
                '__VIEWSTATE' => array(
                    'content' => ''
                ),
                'ctl00$centerContent$btnUpload' => array(
                    'content' => 'Пошук'
                ),
                'ctl00$centerContent$fileUploadXmlBarcodes' => array(
                    'filename' => 'ttn.txt',
                    'type' => 'text/plain',
                    'content' => implode("\r\n", $ttns)
                ),
            );
    
            $data = '';
            $delimiter = '-------------' . uniqid();
    
            foreach ($fields as $name => $field) {
                $data .= "--" . $delimiter . "\r\n";
    
                $data .= 'Content-Disposition: form-data; name="' . $name . '"';
    
                if (!empty($field['filename'])) {
                    $data.= '; filename="' . $field['filename'] . '"' . "\r\n";
                    $data .= 'Content-Type: ' . $field['type'];
                }
                $data .= "\r\n\r\n";
    
                $data .= $field['content'] . "\r\n";
            }
            $data .= "--" . $delimiter . "--\r\n";
    
            $handle = curl_init(self::$apiURL);
    
            $options = array(
                CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)',
                CURLOPT_POST => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS => $data,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: multipart/form-data; boundary=' . $delimiter,
                    'Content-Length: ' . strlen($data))
            );
            curl_setopt_array($handle, $options);
    
            $result = curl_exec($handle);
            curl_close($handle);
    
            return $result;
        }
    Ответ написан
    7 комментариев
  • Как в php отключить округление цифр?

    $a = 9.9;
    $b = 100;
    $c = 30;
    $res = $a/$b*$c;
    echo $res; //2.97


    Скорее всего вы:
    1) где-то сами округляете
    2) приводите к целочисленному типу данных
    Ответ написан
    Комментировать
  • Какие библиотеки изучить, чтобы создать 2D игру?

    MAXH0
    @MAXH0
    Бедняга!
    Ты понимаешь на что подписался?

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

    2. Организовать командную разработку в классе - ад кромешный. Даже если класс малокомплектный 15 учеников как положено на информатике. Детский коллектив - там свои лидеры и аутсайдеры, разный уровень знаний, разный темп усвоения материала.

    3. Всплывут проблемы с школьным курсом. Например вектор дети понимают весьма смутно - хоть и проходили.

    4. Трудно разбить разработку игры по темам урока. Неизбежно какие то важные вещи будут пропускаться (поскольку для разработки игры они не важны), а на механические придется потратить основную массу времени.

    ЗЫ как вы поняли - я занимался чем то похожим но на JS
    Ответ написан
  • Контекстный и дочерний селекторы - в чём разница? И что за [class*="..."]?

    @CrackedSapphire
    1. Контекстный выберет все элементы, дочерний только прямых потомков.
    Ответ написан
    Комментировать
  • Как организовать процесс проверки авторизации пользователей в php скриптах?

    @Nc_Soft
    Вариант 1 : закрыть скрипт от доступа посредством basic авторизации с помощью веб-сервера.
    Вариант 2: использовать систему сессий
    Вариант 3: писать признак авторизации в куки (с шифрованием чтобы не подделали)
    Ответ написан
    2 комментария
  • Что означает конструкция (function($){$(function(){ })})($)?

    GeneMoss
    @GeneMoss
    void
    $(function(){}) — это мы запускаем действие в момент загрузки страницы. А оборачиваем в анонимную функцию (function($){ })($);, чтобы избежать конфликта имен с $.

    Автор плагина предусмотрел случай, когда доллар занят под другую библиотеку/функцию/переменную. Чтобы избежать конфликта имен, достаточно будет заменить доллар на jQuery, вот так (хотя сразу так и нужно было писать):
    (function($){$(function(){
        $('select').styleThis();
    })})(jQuery);


    Т.е. передав один раз нужный параметр, нам нет нужды переписывать весь плагин.
    Ответ написан
    1 комментарий
  • Какой выбрать php-фреймворк для простых и средних проектов?

    Mx21
    @Mx21
    Software engineer
    Yii
    Ответ написан
    Комментировать
  • С чего начать организацию сети из компов в школе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В оптимуме - один компьютер под *NIX для интернет-шлюза и два компьютера под WinServer с контроллерами Active Directory (основной и резервный). На одном из них WSUS для автоматического обновления Windows.
    1, 2. Расшареный каталог на одном из Windows серверов или Samba на *NIX.
    3, 6. Программы удалённого управления - TeamViewer, Remote Admin, бесплатная - TightVNC.
    4. Файрвол на шлюзе и прокси-сервер со списком белых адресов, например Squid.
    5. Либо расшаренные папки, либо переносимый профиль Active Directory с ограничением объёма файлов.
    7. Настройка прав, обычный пользователь не должен работать с правами выше "Пользователь". Можно через Active Directory.
    8. SMS или позвонить по сотовому.

    Начать лучше с поиска средств, поскольку удовольствие не из дешёвых, два Windows Server и минимум Windows Pro на компьютер каждого пользователя (Windows Home в домен не включить). Затем поднимать домен, вводить в него все компьютеры под Windows, заводить учётки и раздавать права. Поднимать WSUS. Ставить шлюз, прокси со связкой к AD, определять список разрешённых адресов. Поднимать файловый сервер на одном из Windows Server или на *NIX (Samba), привязывать к домену, создавать папки и распределять права.
    Ответ написан
    Комментировать
  • Указание классов в autoload()

    @Nc_Soft
    autoload() это скорее роутинг, там внутри прописывается откуда подгружать класс, имя которого передано в аргументе.
    php.net
    Ответ написан
    1 комментарий
  • Какие могут возникнуть проблемы из-за поломки лопасти кулера в ноутбуке?

    alexyat
    @alexyat
    iOS Developer
    Отломайте еще одну лопасть с другой стороны, чтобы была симметрия и все будет ок.
    Ответ написан
    7 комментариев
  • Какие могут возникнуть проблемы из-за поломки лопасти кулера в ноутбуке?

    oia
    @oia
    самое плохое это вибрация и выход из строя движка кулера , смотреть на барахолках ебей и итд сайтах , можно в сервисах уточнить
    Ответ написан
    1 комментарий
  • Каковы перспективы Junior'а в маленьком городе?

    Tyranron
    @Tyranron
    Если вопрос в том, чтобы как можно быстрее начать зарабатывать деньги, тогда Ваши пункты 3, 4 и 5. Бояться ничего не надо, наоборот, чем больше в жизни перемен - тем лучше.
    Но, если острой потребности в деньгах нет, и Вы, в принципе, на плаву, то лучше действительно идите в ВУЗ как и планировали. Нормальное обучение в нормальном ВУЗе немного вправит мозги и поможет научиться мыслить определенным образом, быстрее обучаться, даст системный подход, общие базовые знания. Помимо того, в ВУЗе у Вас будет гораздо больше свободного времени, нежели при работе Junior'ом, которое как раз можно с пользой потратить на самообучение: углубиться в ту область, которая Вам понравилась, поучаствовать в open source проектах, в конце-концов склепать пару своих проектов, если есть сильное желание. Всё будет зависеть конкретно от Вашего желания и от Вашего упорства, ну и немного фантазии.
    То-есть в дальновидном плане гораздо перспективнее, так как у Вас будет достаточно времени, чтобы научиться. Потому что работа - это в основном рутина, потребуется время, чтобы научиться делать какие-то рутинные вещи хорошо и качественно, но после этого, количество того, чему Вы научитесь на работе упадет в разы, и чтобы саморазвитие не остановилось, Вам нужно будет самостоятельно изучать новое и хорошо забытое старое, и оно уже гораздо реже будет пересекаться с Вашей рутиной, потому на него останется гораздо меньше времени, нежели у Вас было бы в ВУЗе.
    Ответ написан
    1 комментарий
  • Как лучше организовать веб-сайт?

    JS Rich-фронтед лучше потому что у клиента не перегружаются страницы и ресурсы - меньше трафика, быстрее скорость отклика.

    Допустим можно сделать на Angular.js или Backbone и реализовать JSON RESTful API, для его документирования смотреть в сторону Swagger - есть привязки к tastypie. И проганять весь фронтенд на node.js через prerender.io что бы была у роботов возможность индексировать нормально страницы.

    Вот "серверная или клиентская шаблонизация" тут уже было много-много холиваров.
    Люди пытались писать гетерогенные шаблонизаторы которые исполняются и на сервере и на клиенте, Jade к примеру. Поддерживать такое бывает довольно сложно, но никто не запрещает попробовать. Поисковые роботы индексируют "без JS", либо гугл 2-3 раза в неделю "с JS", что собственно полная лажа для SEO. Я пошёл путём наименьшего сопротивления, сначала делал prerender в phantomjs, а потом вышел prerender.io и счастью моему не было придела.

    Важно понимать что node.js в таком случае не резиновый, и при больших нагрузках важно обеспечить хорошее http кэширование - расстановку if-modified-since, и etag'ов. Для этого я использую специально допиленный кэширующий плагин nginx. Вообще поддержка http кэширования в rich frontend'ах сейчас очень больная тема. Её просто нет, и это вызывает много проблем.
    Ответ написан
    Комментировать
  • Есть ли сервис или инструмент для переноса исходного кода в печатный вид?

    KingOfNothing
    @KingOfNothing
    Интересный вопрос. Я немного поискал и нашел в этот проект https://code.google.com/p/code-to-pdf/

    Из описания понятно, что он печатает 1 файл. Но если проект хорошо делает эту задачу, то автоматизировать обход дерева файлов проекта и вызов этой тулзы для каждого файла должно быть легко. Полученные пдф-ки можно склеить какой-то другой тулзой.

    Возможно, этот проект может печатать в пдф сразу много файлов (дерево файлов возможно).

    Лично не пробовал.

    UPD:

    Пусть source папка проекта, и допустим это джава. В папку output будем ложить пдфки.
    #!/bin/bash
    
    find source -name '*.java' -exec bash -c 'code-to-pdf $0 output/$0.pdf' {} \; //находим все файлы джава, дергаем для каждого код-ту-пдф и пдфку сохраняем в папке аутпут.
    
    convert output/*.pdf out.pdf // склеиваем все пдфки в один out.pdf
    Ответ написан
    5 комментариев