• Сколько стоит час веб-разработчика-фрилансера?

    @deliro
    Ты веcь такой кругом молодец, то знаешь, это знаешь. А теперь представь себе среднестатистический проект, который должен приносить бизнесу деньги. За две недели работы ты едва напишешь хлипкий CRUD для данных, неправильно смаппив бизнес-сущности в объекты ORM, ещё через месяц натянешь какой-то слайдер на jQ, попутно захватив 2мб JS кривых библиотек, а через два заказчик поставит тебе плохую оценку, потому что твой ценник он оплатил не за то, что ему нужно, а потому что ты знаешь монады, которые ему даром не сдались.

    А теперь давай представим простого программиста. Из алгоритмов он с трудом вспоминает сортировку пузырьком, а двусвязный список — предел его знаний о структурах данных, и даже этим списком он пользовался два раза в жизни. Хаскель он никогда не видел в глаза, C++ учил только в школе, вместо этого пишет неэффективный код на PHP. И у него есть опыт. За день он распишет сущности, за второй сделает универсальный CRUD, на третий день поднимет фронт на React'е с SSR. Да, внутренности проекта будут "медленными". Вместо O(logN) что-то будет выполняться за O(N) или даже O(N^2), но всем похер. Пока всё работает на приемлемом уровне — бизнес радуется.

    Кстати, к чему эта поучительная лапша? Я хотел сказать, что всеми этими модными словами можно пугать друзей и преподавателей, но в реальной жизни все алгоритмы уже реализованы, все типы данных уже подобраны оптимально. Знать их полезно для себя (чтобы мозг не атрофировался), но не для работы. Для работы тебе нужны такие навыки как:

    * Оптимальный баланс между говнокодом и идеальным кодом
    * Оптимальный баланс между скоростью разработки и оптимизацией кода
    * Оптимальный баланс между поддерживаемым кодом и костылями
    * Умение использовать те инструменты, с которыми ты работаешь. Опять же, для того, чтобы писать быстро, при этом имея минимальное количество говнокода и обеспечивая максимальную поддерживаемость (в пределах сроков). Например, можешь выкинуть в помойку свой Vim, как бы круто ты себя не чувствовал, разрабатывая в консольном редакторе, если продукты от JetBrains позволят за это же время сделать что-то лучше или чего-то больше
    * Чувство "знаю больше менеджеров". Это то чувство, когда тебе кажется, что "вот эта фича скоро изменится" и надо сделать архитектуру заранее более гибкой. Или "вот эту фичу мы через месяц выпилим" и не надо тратить на неё силы — напиши костыль и через месяц с чистой совестью удали его
    * Знания, как сделать ту или иную фичу. Потому что фичи повторяются (немного видоизменяясь) от проекта к проекту. И если ты сделал что-то за два дня, в следующий раз ты похожее сделаешь за три часа

    Что касается инструментов, выбери любой полноценный фреймворк, который умеет решать 90%+ потребностей "из коробки": Symfony, Django, Laravel

    Всякие "минималистичные" поделия вроде Falcon, Flask (в PHP не знаю, я на питоне пишу) оставь хипстерам. Пусть они говорят: "Мой фалкон такой быстрый, он написан на Cython". Тебя это не должно волновать, потому что бизнес с твоей скоростью разработки уже заработал достаточно денег, чтобы купить ещё десять серверов, пока фалконисты неделю гуглили, как прикрутить миграциии и запустить юнит-тесты на VPSке за пять баксов.
    Ответ написан
    5 комментариев
  • Как запретить просмотр отдельных листов Таблицы Гугл?

    ProgrammerForever
    @ProgrammerForever Автор вопроса, куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Нашёл как обойти все ограничения. IMPORTRANGE не подходил, т.к. была вероятность того что юзер скопирует ссылку, скопирует документ и расчехлит документ как захочет. Сделал так: Файл - Опубликовать в Интернете. И юзеры видят свои данные, и до материнского файла не докопаться. Спасибо всем откликнувшимся
    Ответ написан
    2 комментария
  • Актуальность swift?

    @iMaximus
    На вашем месте я изучал бы swift, да полно еще библиотек которые на obj c но их подключил и забыл, дальше все равно пишешь на swift. Есть еще работодатели которые до сих пор поддерживают проекты на obj c и их не мало, да и в целом знание obj c помогает. Но если ставить вопрос так, как его ставите вы, то однозначно swift. Работодатели смотрят отлично, на рынке нехватка swift программистов, многие уже пишут только на нем, например Тинькофф.
    Ответ написан
    1 комментарий
  • PHP сокеты не работают по wss://. Как исправить?

    @Teran123 Автор вопроса
    Проблему, к счастью, получилось решить самостоятельно через hproxy

    Поэтапно:

    Устанавливаем hproxy:
    wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.3.tar.gz
    tar -zxvf haproxy-1.5.3.tar.gz
    cd haproxy-1.5.3
    make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1
    make install

    При первом make мне выдало ошибку
    fatal error: pcre.h: No such file or directory
    Лично мне на Ubuntu помогло
    sudo apt-get install libpcre3-dev
    Источник: https://stackoverflow.com/questions/22555561/error...

    Дальше создаем файл настроек(я создал его в /etc/hproxy.cfg):
    Где
    WSS_SOCKET_PORT - порт, по которому вы будете обращаться к сокетам через wss://(в моём случае - 3033 и обращаюсь я теперь по wss://sitename.com:3033)
    SOCKET_SERVER_PORT - порт, который вы забиндили в php и который доступен по ws://(в моём случае - 3003)
    /etc/path/to/full.pem - путь к сертификату, который должен содержать внутри себя и сертификат и ключ сертификата.
    Если у вас ключ и сам сертификат отдельно друг от друга(как было у меня), то вам поможет простая команда(и соотв. в пути уже указывайте путь к объединенному .pem файлу)
    cat /etc/path/to/crt.pem /etc/path/to/key.pem > /etc/path/to/full.pem


    global
            log     127.0.0.1       local0
            maxconn 10000
            daemon
    
    defaults
            mode                    http
            log                     global
            option                  httplog
            retries                 3
            backlog                 10000
            timeout client          30s
            timeout connect         30s
            timeout server          30s
            timeout tunnel          3600s
            timeout http-keep-alive 1s
            timeout http-request    15s
    
    frontend public
            bind            *:WSS_SOCKET_PORT ssl crt /etc/path/to/full.pem
            acl             is_websocket hdr(Upgrade) -i WebSocket
            use_backend     ws if is_websocket
            default_backend www
    
    backend ws
            server  ws1     127.0.0.1:SOCKET_SERVER_PORT
    
    backend www
            timeout server  30s
            server  www1    127.0.0.1:8080


    После этого в JS меням порт коннекта к сокету на тот, который указали в WSS_SOCKET_PORT
    window.phpSocket = new ab.Session('wss://sitename.com:3033',

    Затем запускаем haproxy с нашим конфигом
    haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -D

    И пробуем подключится.
    У меня заработало)
    Ответ написан
    Комментировать
  • Отправка сообщений через ZMQ

    papahoolio
    @papahoolio
    Второй скрипт создает сервер ØMQ на 5555 порту. Логично, что если этот скрипт умрет, то и сервера на 5555 не будет. Поэтому надо чтобы второй скрипт работал непрерывно.

    Первый скрипт открывает соединение с сервером ØMQ (клиент) и отправляет сообщение. Надо ли ему дальше жить? Судя по коду нет - он единождый отправил и свою работу выполнил. А если не по коду - who knows.
    Ответ написан
    2 комментария
  • Где взять актуальную базу России регионов->городов->улиц в формате sql?

    andrew72ru
    @andrew72ru
    системный администратор, веб-разработчик
    Ответ написан
    Комментировать
  • Где взять актуальную базу России регионов->городов->улиц в формате sql?

    denis_bardak
    @denis_bardak Автор вопроса
    Web Developer
    нашел еще вариант, уже веселее https://kladr-api.ru/
    В итоге хватило api dadata https://dadata.ru/api/suggest/
    Ответ написан
    Комментировать
  • Как реализовать Websocket клиент на PHP?

    $client = stream_socket_client($this->config['websocket'], $errorNumber, $errorString, 1);
    fwrite($client, "GET / HTTP/1.1\r\nHost: localhost\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: tQXaRIOk4sOhgoq7SBs43g==\r\nSec-WebSocket-Version: 13\r\n\r\n");
    Ответ написан
    Комментировать
  • Как эффективнее всего изучать yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Читать документацию, смотреть проекты на github, пытаться написать своё решение для какой-либо задачи....
    Вот несколько ссылок, которые Вам помогут:
    1) rmcreative.ru (блог одного из разработчиков yii2)
    2) https://github.com/samdark/yii2-cookbook (рецепты от того же разработчика)
    3) www.elisdn.ru/blog/tag/Yii2 (один из блогов, где можно учиться работать с yii2)
    4) https://github.com/yiisoft/yii2/tree/master/docs/g... (документация на русском от разработчиков yii2)
    Ответ написан
    1 комментарий
  • Будет ли учитываться трафик провайдера (дом), если я использую vpn (работа)?

    AloneCoder
    @AloneCoder
    [object Object]
    Будет, вы же до вашего vpn'a не силой мысли пакеты будете доставлять
    Ответ написан
    Комментировать