• Есть ли нормальный переводчик для Firefox?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    есть несколько вариантов

    первый
    использовать один из внешних облачных сервисов перевода, как-то Bing, Google или Yandex
    но, для доступа к этим сервисам(api) естественно нужен соответствующий ключ.
    Подключается примерно следующим образом (пример для yandex)
    на странице about:config
    browser.translation.detectLanguage=true
    browser.translation.ui.show=true
    browser.translation.engine=Yandex
    browser.translation.yandex.apiKeyOverride=КЛЮЧ


    второй
    недавно в firefox, спустя несколько лет, таки реализовали возможность перевода на стороне браузера(локально, без всяких облачных сервисов) с помощью системы машинного перевода на основе проекта Bergamot. Всё это вылилось в возможность простой установки дополнения firefox-translations (проект на github-е)
    Ответ написан
  • В чем разница между int a() и int a=int()?

    @MiiNiPaa
    А теперь выведите typeid(first).name() на экран и удивитесь.

    Первая строчка это объявление функции first без параметров и возвращающая int. Имя функции превращается в указатель, указатель конвертируется в bool (true), который конвертируется в int (1).
    Ответ написан
    3 комментария
  • Программа для контроля версий папки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    обычный git
    хранит только измененные файлы.
    Есть встроенный git-k с интерфейсом, либо скачать любой гит с окошками.
    Ответ написан
  • Можно ли с помощью php защитить сайт от воровства?

    @zkrvndm
    Софт для автоматизации
    Здесь два метода борьбы, официальный и неофициальный.

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

    2. Неофицальный. Прячете на своём сайте троян, который будет потом скрытно пересылать контакты клиентов с сайта вашего конкурента вам. Соответственно, сможете в наглую уводить у них клиентов, пока не догадаются.
    Ответ написан
    2 комментария
  • Метод это функция или свойство?

    @twoone
    В классике метод (method) это функция ассоциированная с экземпляром класса (instance) (его объектом) или в случае статического метода непосредственно с самим классом. Свойствами (properties) называют геттеры (getters/get) или сетторы (setters/set). Так же геттер обозначают как акссесор, а сеттор как мутатор. Но зачастую можно встретить упоминание что геттер и сеттор, это аксессоры. Если метод содержит логику, то данные ассоциируются с полями (field). Методы, поля и свойства обозначают как члены (members) объекта\класса.

    Реализация классов в JavaScript отличается от классической поскольку построена на прототипах, что вносит некую долю путаницы. Путанница связанна с тем, что проблемы возникающие от потери контекста (this) вынуждают разработчиков изучать javascript намного глубже, чем это требуется в других классических языках. Из-за того что на уровне движка v8 все является членами объекта, то большинство склоняется что все в объекте это поля. И до момента объявления непосредственно методов {method(){}} это было справедливо. После необходимо разделять эти понятия даже если это всего лиш синтаксический сахар, поскольку даже в классических языках методы на самом низком уровне не могут быть чем-то отличными от полей. И всеже для ясности из называют методами.

    Исходя из всего этого методы точно не могут обозначатся свойствами.
    Ответ написан
    2 комментария
  • Upwork, самозанятый. Что указывать при выписке чека?

    @StatAdvice
    Деньги просто приходят на Ваш личный счёт, а в приложении для самозанятых указываете их как доход от иностранной фирмы. Название можно указать как "Upwork Inc." и наименование услуг тоже на ваше усмотрение. В этом плане все проще, чем у ИП.
    Ответ написан
    2 комментария
  • Что делает техник-программист?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    А что такое техник-программист, где вы взяли такой термин?
    Может быть спросить у тех, кто такое написал?

    В общем не слушайте, тех кто говорит плохо. Этот термин относится к бюрократической машине, которой как-то нужно назвать курс. Судя по тому, что в нем описано - там для ИТ отрасли вроде бы неплохая база. Оценить ее качество сложно, так как хорошая идея не равна хорошей реализации. Но тех тем, что там были перечислены должно быть достаточно для трудойстройства джуниором (естественно, если предположить что ученик занимается с должным усердием).
    Список тем достаточно обширен и не ограничивают в выборе дальнейшего профессионального роста - можно идти и в программисты и в сисадмины и в сетевики.
    Ответ написан
  • Можно ли из JS передать обработанное изображение в $_FILES?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    нет. в FILES попадают только инпуты файлов формы

    но как вы отправляете данные их нужно ловить через
    $rawData = file_get_contents("php://input");
    посмотрите примеры как через js ajax отправить в php://input
    Скорее всего var data = new FormData(); не нужен будет
    Ответ написан
    1 комментарий
  • Почему при удалении файла fwrite не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В процессе выполнения программы удаляю файл и вижу, что fwrite продолжает возвращать количество записанных байт, при этом файла нет, и он не пересоздается.

    Ты не файл удаляешь, а только его имя из каталога. Файл остаётся до тех пор, пока не будет закрыт последний дескриптор указывающий на него. Все процессы открывшие файл до удаления его имени будут иметь к нему доступ до тех пор. В этом можно убедиться заглянув в /proc/<pid>/fd твоего процесса.
    Ответ написан
    5 комментариев
  • Как задать путь к изображению wordpress в css?

    PavelMonro
    @PavelMonro
    В css такое и не будет работать. Задавайте сами путь в ручную, чаще всего так:
    background-image: url("../media/third.jpg");
    Т.е. путь будет на папку выше
    Ответ написан
    1 комментарий
  • Как определяют номер телефона у посетителей сайта?

    @granty
    Куки исключены, браузер не сохраняет их и не хранит историю.

    1. Про evercookie слышали? А про Web Fingerprint?
    На хакере перечислена масса способов хранить ID на вашем компе без использования Куков и кэша, а технология Web Fingerprint позволяет хранить цифровой отпечаток компа, браузера на сервере банка: Фингерпринтинг конкретного ПК с точностью 99,24%, не спасает даже смена браузера.

    Если вы - клиент банка и заходили в его интернет-банкинг, он легко может вас опознать при использовании того же браузера и того же компа.
    А если у вас на мобиле установлено приложение интернет-банкинга - вы вообще под колпаком :)

    2. Если вы лазите по инету залогиненым в Вконтакте/Яндексе, то через backdoors в их API можно определить ваш профиль и все ваши данные.
    Сайт Соцфишинг работает на этом принципе.
    Сам банк тоже может использовать соцфишинг и ставить невидимый ифрейм на своё меню, и при клике вы автоматически авторизуетесь через аккаунт, например, Вконтакте. Зная ваш ID на Вконтакте, ваш телефон легко узнаётся, их базы регулярно сливаются и продаются

    PS: Узнать как конкретно вас "слил" и каким образом - невозможно без исследования конкретной ситуации.

    факультатив

    Всё вышеперечисленное - детский лепет по сравнению с тем, какие возможности имеет Google (и, частично, Яндекс с Apple).
    У всех дома стоит точка WiFi, к которой коннектится ваш комп и мобильник с Андроид. Через мобильник Гугл знает все номера телефонов, которые подключаются к этой точке доступа (и все аккаунты соцсетей в которые вы логинились с мобильника). Поэтому когда вы лезете Хромом с компа через эту же точку доступа - Гугль уже знает, что это вы (или один из ваших домочадцев). По GPS на мобильнике он знает даже адрес вашего проживания с точностью до подъезда.
    Так что мы все давно уже добровольно "чипованы", чего удивляться что о нас всё известно.
    Ответ написан
    Комментировать
  • Как Сверстать направляющие от блока к блоку(border змейкой)?

    wapster92
    @wapster92 Куратор тега CSS
    Ответ написан
    Комментировать
  • Подводные камни при восстановлении данных с жесткого диска?

    15432
    @15432
    Системный программист ^_^
    Для восстановления данных диск полностью восстанавливают - меняют головки на донорские, меняют заклинивший мотор, плату.. В совсем тяжелых случаях переставляют блины на идентичную модель.
    Чтение блинов "напрямую" наверняка возможно но крайне затратно, не видал чтоб так делали
    Ответ написан
  • Что такое и зачем нужен новый тип данный Symbol в ES15?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Что такое

    Новый тип данных symbol - это попытка ввести уникальные идентификаторы. Все крутится вокруг функции Symbol. Это не конструктор в полном смысле слова, с new ее использовать не получится. Это скорее маленькая фабрика. Она просто возвращает новый символ каждый раз. Это важно. Каждый раз новый. В качестве аргумента можно передать строку, но она используется только для отладки.
    Symbol() === Symbol() // false

    Что такое глобальный символ? Какой еще реестр?

    Есть Symbol.for(), это еще один метод, который не просто возвращает символ, но и сохраняет информацию о том, для какого параметра он создавался. Внешне логика работы напоминает хеширование - для разных параметров символы получаются разные, а для одинаковых - одинаковые.
    Symbol.for('my-string') === Symbol.for('my-string') // true
    Symbol.for('my-string') === Symbol.for('another-string') // false


    Зачем это надо?

    Применение этого типа данных - предмет для споров. Большая часть кейсов из интернета - это попытки поиспользовать новую фишку только ради того, чтобы ее поиспользовать. Самые популярные и практически применимые варианты:
    • В качестве ключа для доступа к свойству объекта. Грубо говоря вместо obj[key] использовать obj[some-magic-unique-key]. Позволяет избежать коллизии этих самых ключей если вы расширяете существующий объект из сторонней библиотеки. На практике встречается не очень часто, особенно в небольших проектах, но по всей видимости это - причина появления символов в языке.
    • Некоторая иллюзия приватных свойств. Символы по-своему работают с циклами и многими методами, связанными со свойствами объекта, становясь невидимыми для них. В результате можно разделить "все свойства с обычными ключами" и "все свойства с ключами-символами". А еще можно запутать код до безобразия.
    • Также, пользуясь предыдущей мыслью, можно сделать что-то вроде метаданных для любого объекта, которые опять же не сломают существующий код, но могут быть использованы для хранения какой-то информации и мередачи ее между отдельными модулями. Штука довольно интересная.
    Ответ написан
    Комментировать
  • Анимация на canvas/js?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    На CSS вы это никак не сделаете - там неравномерное растяжение картинок присутствует. Тут "начальник отдела разработки" либо не шарит во фронтенде, либо пытается сбить цену. Но штука из разряда "ябзаверстал", а я тут как раз собираю коллекцию примеров с шейдерами, так что набросал похожий эффект для нее, только без кляксы в центре (там есть немного лишнего кода, но это издержки, чтобы серия примеров не сильно отличалась).


    * Если вдруг будете копировать себе, не забывайте про лицензию.
    Ответ написан
    8 комментариев
  • Макимальное количество socket.io подключений на nodejs?

    shai_hulud
    @shai_hulud
    то максимальное количество на IPv4 - 2^32 * 2^16 = 281474976710656 (на самом деле не все адреса можно использовать), даже если на одного пользователя будет уходить 16Kb (буферы, структурки, поинтеры итд) то это 4 398 046 511 104 Mb памяти :) Она то и кончится первой.

    Прикиньте сколько вы хотите памяти на сокеты, и поделите на 16Kb (из головы, для ноды можно самому замерить).

    Если отключить TCP keep-alive и WS ping, то сокеты пассивны и не кушают ЦПУ.
    Ответ написан
    Комментировать
  • Как настроить трафик через VPN?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    На просторах интернета что то пишут про open vpn. Не вдавался в подробности, так как хотелось бы использовать свой vpn сервер

    Так бери OpenVPN и используй свой сервер. Вот хорошая статья по настройке OpenVPN на сервере(Linux) и клиенте(Linux, Windows) :
    https://habrahabr.ru/post/233971/
    Ответ написан
    2 комментария
  • Как сделать простой php маршрутизатор (роутер)?

    devg
    @devg
    I am Yenior software developer
    Очень простой роутер, не без недостатков, но довольно быстрый и легко использовать, дописывать под себя.

    <?php
    /**
     * Простой роутер
     * @devg
     */
    final class RouterLite {
    
      public static $routes = array();
      private static $params = array();
      public static $requestedUrl = '';
    
      /**
       * Добавить маршрут
       */
      public static function addRoute($route, $destination=null) {
        if ($destination != null && !is_array($route)) {
          $route = array($route => $destination);
        }
        self::$routes = array_merge(self::$routes, $route);
      }
    
      /**
       * Разделить переданный URL на компоненты
       */
      public static function splitUrl($url) {
        return preg_split('/\//', $url, -1, PREG_SPLIT_NO_EMPTY);
      }
      
      /**
       * Текущий обработанный URL
       */    
      public static function getCurrentUrl() {
        return (self::$requestedUrl?:'/');
      }
    
      /**
       * Обработка переданного URL
       */
      public static function dispatch($requestedUrl = null) {
    
          // Если URL не передан, берем его из REQUEST_URI
          if ($requestedUrl === null) {
            $uri = reset(explode('?', $_SERVER["REQUEST_URI"]));
            $requestedUrl = urldecode(rtrim($uri, '/'));
          }
    
          self::$requestedUrl = $requestedUrl;
    
          // если URL и маршрут полностью совпадают
          if (isset(self::$routes[$requestedUrl])) {
            self::$params = self::splitUrl(self::$routes[$requestedUrl]);
            return self::executeAction();
          }
    
          foreach (self::$routes as $route => $uri) {
            // Заменяем wildcards на рег. выражения
            if (strpos($route, ':') !== false) {
              $route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route));
            }
    
            if (preg_match('#^'.$route.'$#', $requestedUrl)) {
              if (strpos($uri, '$') !== false && strpos($route, '(') !== false) {
                $uri = preg_replace('#^'.$route.'$#', $uri, $requestedUrl);
              }
              self::$params = self::splitUrl($uri);
                
              break; // URL обработан!
            }
          } 
          return self::executeAction();
      } 
    
     /**
       * Запуск соответствующего действия/экшена/метода контроллера
       */
      public static function executeAction() {
        $controller = isset(self::$params[0]) ? self::$params[0]: 'DefaultController';
        $action = isset(self::$params[1]) ? self::$params[1]: 'default_method';
        $params = array_slice(self::$params, 2);
    
        return call_user_func_array(array($controller, $action), $params);
      }
    
    }
    ?>


    Пример использования:
    <?php
    // маршруты (можно хранить в конфиге приложения)
    // можно использовать wildcards (подстановки):
    // :any - любое цифробуквенное сочетание
    // :num - только цифры
    // в результирующее выражение записываются как $1, $2 и т.д. по порядку
    
    $routes = array(
      // 'url' => 'контроллер/действие/параметр1/параметр2/параметр3'
      '/' => 'MainController/index', // главная страница
      '/contacts' => 'MainController/contacts', // страница контактов
      '/blog' => 'BlogController/index', // список постов блога
      '/blog/:num' => 'BlogController/viewPost/$1' // просмотр отдельного поста, например, /blog/123
      '/blog/:any/:num' => 'BlogController/$1/$2' // действия над постом, например, /blog/edit/123 или /blog/dеlete/123
      '/:any' => 'MainController/anyAction' // все остальные запросы обрабатываются здесь
    ));
    
    // добавляем все маршруты за раз
    RouterLite::addRoute($routes);
    
    // а можно добавлять по одному
    RouterLite::addRoute('/about', 'MainController/about');
    
    // непосредственно запуск обработки
    RouterLite::dispatch();
    ?>


    UPDATE (07.08.2017):
    Дальнейшее развитие данного роутера см. в проекте Litero (https://github.com/bit55/litero)
    Ответ написан
    1 комментарий
  • Зачем нужен sourcemap?

    @lemme
    Frontend
    Вот представь, собрал ты 10 файлов в 1 бандл, потом минифицировал, а как дебажить эту лапшу?

    На помощь приходит sourcemaps, который будет показывать реальную структуру файлов и.т.д
    Ответ написан
    2 комментария
  • Какой лучший отладчик на PHP?

    Aco
    @Aco
    Заклинатель кода
    1. xdebug + IDE = отличная пошаговая отладка
    2. xdebug + profiler + (kcachegrind или wincachegrind) = анализ затыков в производительности
    3. memtrack — поиск утечек памяти в кронах/демонах
    4. DTrace + PHP = анализ «how it work» и каждого чиха скриптов
    5. strace -p PID — анализ syscall-чихов скриптов.
    6. APD — слабый конкурент xdebug, но имеет в себе возможности memtrack. Плохо интегрируется с IDE, однако имеет консольные интерфейсы (см. usage).
    7. wireshark для анализа сетевого трафика, протоколов и т.д. (tcpdump + ssh pipe + wireshark = слежка за трафиком с боевого сервера)
    8. можно взять runkit и заменять php функции на свои (или делать прокси) для анализа проходящих данных/генерации исключительных данных/блокировки изменения данных.
    9. Централизированный syslog позволит вовремя реагировать на проблемы.

    Конечно, часть не в тему, но меня уже не остановить!
    Ответ написан
    3 комментария