Задать вопрос
  • Каким сервисом воспользоваться для кодировки php-кода?

    mlnkv
    @mlnkv
    JavaScript Developer
    Зачем вам кодировать код? Странная закономерность, все забугорные девелоперы стремятся поделиться своими наработками, почти все опен сорс, у нас же все пытаются спрятать свой код и никому не показывать)))
    Даю 99% что этот код ты сам у кого-то стянул)
    Ответ написан
    1 комментарий
  • Как и чем быстрее всего начать зарабатывать на программировании/веб-программировании?

    @CAMOKPYT
    Забудь про фриланс, сколько бы про него не говорили, это биржа ДЕШЕВОЙ рабочей силы со всеми вытекающими последствиями в виде кидалова, низкой зп, скучной работы, туда идут люди с серьезными проблемами вроде невозможности перебраться в город, социопатии, инвалидности, "утонченная личность", фриланс это почти всегда вынужденная мера. Вообще фриланс и стабильный заработок несовместимые понятия, просто потому что фриланс подразумевает постоянный поиск мелкой работы, никакой заказчик не будет давать большой серьезный проект фрилансеру никогда, потому что это большая ответственность, посмотрите соседние вопросы, пацики с рейтами 150баксов в час работают 10 часов в месяц, а остальное время ищут заказы, причем это люди с опытом и портфолио + отличный английский. Начинать карьеру с фриланса это 100% гарантия того что, все что можно сделать неправильно (техническая сторона), будет сделано неправильно, потому что работает, дедлайн вчера, а подсказать или сделать код ревью некому, никакие книжки тут не помогут, выбора не будет, ты либо читаешь либо работаешь. Так что не советую ввязываться в эту тему. Лучше начать работы в офисе под строгим надзором. Ну и конечно html+css+js это мало, нужно знать еще около программисткие штуки вроде систем контроля версий, багтрекеры, несколько ide/ текстовых редакторов, если это веб почти гарантированно надо иметь представления о http/https, ООП, возможно sql. Не то чтобы для 20к месяц все это нужно отлично знать, но как минимум иметь представление, чтобы не отвлекаться. Вот по фронтэнду. Для большой гарантии устройства на работу, как уже сказали выше, лучше сделать себе сайт, а еще лучше сделать небольшое портфолио и выложить на гитхаб, это сейчас очень модно. На изучения всего вышеперечисленного уйдет 1-2 месяца если сидеть по 8-4 часа в день примерно, свой сайт где-то неделю на разработку визитки и еще неделя на вылизывание, но оно того стоит, а в процессе поиска работы можно и на гитхаб по чуть-чуть кидать, хотя вряд ли получится много. Удачи.
    Ответ написан
    8 комментариев
  • Зачем программисту дискретная математика?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А как же булева алгебра, комбинаторика, теория автоматов, формальные грамматики? Это тоже всё разделы дискретной математики. Если Вы не представляете их применения, значит Вам ещё не попадались действительно сложные задачи. Попробуйте, например, написать простейший валидатор html по BNF-правилам.
    Ответ написан
    10 комментариев
  • Как получить количество подписчиков из сообществ вконтакте, фэйсбука, твиттера и рсс-ленты?

    @asn007
    Чтение документации по API социалок уже отменили? На худой конец всегда остается парсинг страниц. Поглядите, как это в виджетах реализовано, я не знаю.
    Если вас интересует именно часть склонения слова - http://habrahabr.ru/post/198544/.
    Ответ написан
    2 комментария
  • My WebMoney Linux хранит пароль в открытом виде

    nochkin
    @nochkin
    Возможно, идёт рассчёт на то, что права доступа на файл должны быть только у владельца аккаунта (например, права 0400 или 0600).
    Многие системы так хранят пароли. Ведь файл нельзя прочитать извне стандартными методами кому-то другому.

    А иначе даже зашифрованный пароль можно расшифровать, ведь ключ надо будет хранить на той же машине в бинарнике webmoney. То есть, ключ потенциально можно извлечь и тогда шифрованность пароля сильной разницы не будет делать.
    Ответ написан
    2 комментария
  • Чат в тяжелом проекте на symfony (в любом тяжелом бэкенд-движке) — как?

    @rozhik
    1. Да
    2. Нет. Если Вам нужен качественный, быстрый, и лёгкий чат. И «Да», если вам не важны эти характеристики.
    3. Я бы порекомендовал 2 фазную авторизацию. Когда на чат сервере — своя сессия. И он у симфонии (или наоборот) через RPC подвязывается сессия к пользователю.
    4. Лучше сообщения держать в памяти чат сервера. Если вам нужны логи, или модэрация — то сообщения можно выгружать в Мускуль. Но читать их от туда (кроме случая с стартом чат сервера) смысла нет совершенно.

    P.S. Примеров чат серверов и на longPooling, и на webSocket на node.js много. RPC реализаций — тоже. Прикрутить чат — дело пары часов (Вместе с кроссаутентификацией итп)
    Ответ написан
    5 комментариев
  • Node.js в качестве server-side для enterprise приложения?

    Stdit
    @Stdit
    По моему опыту, nodejs — удобная, стабильная и быстрая штука, имеющая отличное сообщество и много хороших библиотек в npm. Преимущества можно перечислять долго, лучше сразу перейти к проблемам.

    — Сложно найти готовых к работе толковых программистов, даже среди фронтендщиков. Но можно обучить. На обучение и понимание среды nodejs, API, асинхронности, замыканий, калбэков, событий, функционального подхода — уходит примерно месяц-два.
    — Библиотеки из форнтендов использовать можно, но только если они грамотно написаны и оптимизированы для перманентной работы. Иначе есть риск, что они сожрут всю память или повесятся.
    — Сервер nodejs обычно однопоточный, со всеми вытекающими. Имеется возможность форкать и открывать дочерные процессы, на это нужны дополнительные затраты труда. Но это требуется только в исключительных случаях.
    — Код пишется в основном легко, если следовать чёткому стандарту, который обычно навязывается используемым фреймворком. Однако javascript, ввиду своей нестрогости, неустойчив к коррозии, в спешке или по неопытности можно наделать рака и превратить жизнь своей команды в ад.
    — При сложной логике со множеством вызовов можно без злого умысла нагородить «лестниц» из калбеков. Однако, проблема решается разными вариантами библиотек управления задачами (async, Q, и т.д.). Вообще лучше делать максимальную декомпозицию кода, создавать бесчисленные функции внутри функций — не очень хорошая практика.

    По поводу камней:
    — Обычно, всякие руководства и мануалы типа «hello world» используют один сокет для соединения с БД. На практике оказалось, что если этот сокет зависает под тяжёлым запросом, то все остальные запросы прилежно ждут его освобождения. Поэтому первое, что нужно сделать в новом проекте — это подключить database connection pool.
    — Случилось так, что количество одновременных подключений к серверу перевалило за тысячу, и внезапно возникли необъяснимые аномалии и отказы. Как выяснилось, страшного ничего не произошло, и нужно было просто в операционной системе разрешить открывать на порядок больше файловых/сокетных дескрипторов.
    — Память для nodejs лучше ограничивать ключами запуска и отдавать больше для БД (если они на одной машине). В противном случае nodejs не спешит запусктать сборщик мусора (это ведь затратная операция) и разрастается.
    — Перезагрузки nodejs из-за внезапных падений от багов решаются специальными библиотеками, например forever.
    — Чтобы nodejs не вылетал из-за исключений, нужно ставить глобальный обработчик uncaughtException, который пишет их в лог или сразу шлёт на мыло ответственному лицу.
    — Нужно не забывать отвязыватсь обработчики от событий по окончании работы подписанного на событие объекта (removeListener()).

    По поводу фреймворков, используем express, потому что он красивый, простой и мы к нему привыкли.
    Ответ написан
    2 комментария
  • В чем смысл переходов на мой блог с левых сайтов?

    Dimitriys
    @Dimitriys
    1) не забывайте что рефереру верить нельзя, можно зайти к вам на сайте с опцией CURLOPT_REFERER = www.kremlin.ru/ а вы потом будете думать зачем это Путин ссылку на ваш блог у себя на сайте разместил :)
    Кстати надо взять себе на заметку… 10-20 переходов сделать друзьям :)) пусть повеселятся :))))
    2) вы не даете рекламу на директе, гугле, прочих? не обмениваетесь ссылками? не покупаете ссылки?
    Ответ написан
    4 комментария
  • Установка MongoDB на продакшн сервер

    7workers
    @7workers
    Если у Вас один сервер то вряд ли Вам понадобиться что-то делать, не открывайте порты да и всё.
    Ответ написан
    Комментировать
  • Компьютер и Кошки. Ревнуют ли Вас кошки к компьютеру?

    SLY_G
    @SLY_G
    журналист, переводчик, программист, стартапщик
    Игнорить не надо.
    Иначе зачем вообще заводить кошку? Это не игрушка, она живая, она обладает интеллектом, чувствами.
    Если её игнорировать, она будет привлекать внимание всё более брутальными методами, вплоть до порчи имущества.
    Как всё живое, ей нужна ласка и внимание. Чем моложе, тем больше.
    Если достаточное время играть с ней и общаться, то и своими делами тоже можно заняться будет спокойно.
    И из-за компа стоит отвлекаться — погладить, ласковое слово сказать. И вам тоже полезнее будет :)
    Ответ написан
    15 комментариев
  • Как найти бэкдор на взломанном сайте и отследить источник

    KEKSOV
    @KEKSOV
    Буквально вчера занимался подобной проблемой на сайте знакомых с Joomla.

    1. Зайдите по ssh и сделайте архив всего сайта, скачайте его к себе на машину.
    2. Натравите на архив Касперского или Sophos (опыт показал, что они отлично выявляют зловреды, хотя и не все)
    Все обнаруженные уязвимости вычистите прямо на сайте через vi. Если обнаружится, что eval запихали в EXIF картинок, то их просто надо пересохранить и залить обратно на сайт.

    Пока антивирус делает свое дело, займитесь следующим:
    1. Проверьте .htaccess на наличие левых редиректов. В моем случае все пользователи отправлялись на страницу phpinfo.php c какой-то порнухой.
    2. Поищите код, который не найдут антивирусы:
    2.1 В некоторых файлах встроена конструкция, позволяющая сохранить файл в произвольное место на сайте. В моем случае это находилось при помощи команды
    find. -type file | grep php | xargs grep -l "<?php if (@"

    2.2 Поищите и проанализируйте файлы, которые обращаются к exif
    find. -type file | grep php | xargs grep -l exif_read_data

    2.3 Найдите картинки с троянами
    find. -type file | grep jpg | xargs grep -l eval

    2.4 Поищите preg_replace, который потом выполняет код
    find. -type file | grep php | xargs grep -l preg_replace.*\/e

    3. Анитивирусы наверняка найдут какие-то файлы. Загляните в них на хостинге, как правило там идет закодированная хрень и проверка каких-нибудь паролей. Вот эти самые проверки могут дать дополнительные ключи для поиска. В моем случае я нашел еще ряд файлов при помощи команд
    find. -type file | grep php | xargs grep -l 2970d43d7bf4115cdc60e2453bf48b52
    find. -type file | grep php | xargs grep -l security_code

    4. Внимательно проанализируйте файлы, которые находятся рядом с файлами бекдоров, скорее всего именно в них и находится уязвимость.
    5. Слейте дамп базы и поищите в нем eval, preg_replace и прочие прелести
    6. После зачистки всей дряни снова сделайте бекапный архив сайта

    Это все были шаги по приведению сайта в рабочее состояние. К сожалению, они не могут дать ответ на вопрос, а как же нас ломанули. Переходим к активным действиям по выявлению точек входа.

    На сервере, где хостятся мои знакомые есть только cvs, им и воспользуемся. Аналогичные действия можно сделать и при помощи git или svn.

    1. Вышли в домашнюю директорию
    cd

    2. Создали пустую директорию для нашего репозитория
    mkdir cvsroot

    3. Заинитили репозиторий
    cvs -d ~/cvsroot init

    4. Перешли в директорию, где находится корень сайт. Пусть у вас есть такая структура /home/myusername/mysite/htdocs. Тогда
    cd ~/mysite/htdocs

    5. Делаем первичный импорт в репозиторий
    cvs -d ~/cvsroot import htdocs initial_import initial

    6. Сейчас будем удалять старый сайт и забирать его из репозитория
    cd ~/mysite
    mv htdocs htdocs.bak
    cvs -d ~/cvsroot checkout www

    7. Добавляем в .htaccess правило, защищающее служебные файлы
    RedirectMatch 404 /CVS(/|$)

    8. Что это нам дает? Возможно быстрой проверки измененных файлов
    cd ~/mysite/htdocs
    cvs -qn update

    Если все было сделано правильно, то ответ будет
    M .htaccess

    9. Записываем наши изменения в репозиторий
    cvs -q commit -m update

    Далее, включаем в cron команду cvs -q commit -m update, да хоть бы и раз в минуту (если сайт сильно посещаемый), включаем лог файлы и ловим изменения, которые происходят в системе. Определив время и изменившиеся файлы, по логам смотрим что, кто, куда и как делал.
    Ответ написан
    1 комментарий
  • Yii + Nginx «реврайт в реврайте»

    Tehnomag
    @Tehnomag
    Через yii средствами роута
    в config/yii

    'components'=>array(
    ...
    'urlManager'=>array(
      'urlFormat'=>'path',
      'showScriptName'=>false,
      'rules'=>array(
                    '/'=>'',
                    array('/aaa/default/index/id/58058', 'caseSensitive'=>false, 'pattern' => 'aaa', 'verb' => 'GET', 'parsingOnly' => true),
                    array('/bbb/default/index', 'caseSensitive'=>false,  'pattern' => 'bbb.php', 'verb' => 'GET', 'parsingOnly' => true),
                    array('/bbb/default/index', 'caseSensitive'=>false,  'pattern' => 'bbb', 'verb' => 'GET', 'parsingOnly' => true),
                    array('/ccc/default/index', 'caseSensitive'=>false,  'pattern' => 'ccc', 'verb' => 'GET', 'parsingOnly' => true),
      ),
     ),
    ),
    


    тогда по mysite.ru/aaa -> вызовет модуль aaa, котролер default, action index.

    повесить на 404 обработчик
     'components'=>array(
    ...
    'errorHandler' => array(
       // use 'site/error' action to display errors
       'errorAction' => 'site/error',
      ),
    ),
    

    вызовет контроле site, метод error
    там уже проверяем что выводить зависмости от кода ошибки
    public function actionError()
     {
      $error=Yii::app()->errorHandler->error;
      if($error) {
       
      if(Yii::app()->request->isAjaxRequest){ 
       echo $error['message'];  
       Yii::app()->end(); 
      
      } else {
    
       if(!empty($error['code']) && $error['code'] == 404 && !empty($error['traces'][0]['args'][0]))
       {
        echo 'Query : '.$error['traces'][0]['args'][0];
        $this->redirect(array('bbb/index','str'=>$error['traces'][0]['args'][0]));
       }
      echo $error['message'];
     }
    
     }
    


    в nginx:
    location / {
            try_files $uri $uri/ /index.php?$args;
      root /var/www/site;
      index index.php index.html index.htm;
     }
    
     location ~ \.php$ {
       
      try_files $fastcgi_script_name =404;
      include /etc/nginx/fastcgi_params;
      fastcgi_pass   PollFPM;
      fastcgi_index index.php;
      fastcgi_param  SCRIPT_FILENAME  /var/www/site$fastcgi_script_name;
     }
    Ответ написан
    1 комментарий
  • Не работает библиотека FileApi от Mail.ru в Opera 11.52

    RubaXa
    @RubaXa
    Если кто-то ещё раз столкнется с этой проблемой, то обязательно проверьте:
    1. Пример
    2. Flash настройки
    3. Обновитесь, возможно проблема уже была исправлена
    4. Посмотрите github issue, возможно мы уже знаем о проблеме и решаем её.

    P.S. Проблема TC возможна только в Opera < 12 (если «криво» настроен/работает флеш) и Android default browser, они обладают только частичной поддержкой File API, это было исправлено в последней версии 1.2.6.
    Ответ написан
    Комментировать
  • Зачем дисплеям края?

    DIHALT
    @DIHALT
    К пикселям надо каким то образом подвести питание. Делается это шлейфом по периметру. Причем у шлейфа есть минимальный радиус изгиба. Вот он и прячется за рамкой.
    Ответ написан
    4 комментария
  • На чем проще всего сделать веб-админку для сайта с игрой?

    @schroeder
    рекомендую посмотреть в сторону dvelum.ru/, за вечер сможете сделать работающий прототип. Я в своих проектах использовал, остался доволен.
    Ответ написан
    2 комментария
  • Организация базы данных предложений и ключевых слов

    Urvin
    @Urvin
    offers
    offer_id
    offer_name

    words
    word_id
    word_name

    matching
    matching_id
    offer_id
    word_id

    SELECT
      offer_name,
      matching_count
    FROM
      (
        SELECT
          offer_id,
          offer_name,
          COUNT(*) AS matching_count
        FROM
          words
          JOIN matching USING(word_id)
          JOIN offers USING(offer_id)
        WHERE
          word_name = 'KC1'
          OR word_name = 'KC2'
        GROUP BY
          offer_id,offer_name
      ) AS mt
    ORDER BY
      matching_count DESC
    


    Если хочется очень быстро — можно сфинксом попробовать
    Ответ написан
    5 комментариев
  • Как защитить свою репутацию от нечестных отзывов на free-lance?

    nochkin
    @nochkin
    Всем угодить просто физически невозможно — ни на фрилансе, на на App Store, ни где угодно.
    Единственный способ тут — продолжать выполнять работу качественно, что бы количество позитивных отзывов было значительно больше негативных. Пусть сурок подавится.
    Ответ написан
    Комментировать