• Как PM может помочь Open Source? С чего начать?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Наверное никак, либо:
    • вложить свои деньги в разработку какого-то продукта
    • вложить своё время в проработку (что называется "на бумаге") какой-то технологии или продукта
    • написать книгу, например взять интервью у 100 Golang разработчиков и попросить их свои лучшие куски кода что бы оформить в виде статьи или опять таки книги
    • научиться программировать и делать pull request в уже существующие проекты
    • научиться тестировать и делать тестинг уж имеющихся проектов
    • толкнуть речь на какой-нибудь конференции
    • найти спонсоров для какого-то проекта
    • найти спонсоров для создания нового проекта и начать платить разработчикам за внесение вклада в конкретные проекты
    • организовать Bounty программу для некоторых Open-Source проектов
    • стараться познакомить одних open-source разработчиков с другими open-source разработчиков из разных областей - например open-source дизайнеров с open-source программистами
    • генерировать идеи
    • красить забор - подавать кофе, выполнять другую мелкую работу
    • помогать open-source проектам в продвижении, внешних коммуникациях


    А что вы вообще умеете? Ну как человек.
    Ответ написан
    3 комментария
  • Как кешировать однотипные MYSQL UPDATE?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Накапливайте в памяти. Вы не указали язык программирования на котором такая задача.

    PHP - можно сделать in-memory таблицу в MySQL и делать туда всё теже UPDATE `news` SET `views`=`views`+1, раз в N минут обновлять основную таблицу данными из in-memory (добавлением, а не заменой значения, иначе при рестарте сервера при очередном обновлении потеряются часть показателей)
    Golang - хранить количество просмотров в памяти с RWMutex защитой, раз в N минут сохранять все накопленные изменения в MySQL базу

    Так же можно использовать Memcache, shared memory, любые другие базы данных, исходя из:
    • языка программирования
    • доступного инструментария


    Так же можно вынести views поле в отдельную таблицу или даже на другой MySQL сервер:
    • либо отдельно views
    • либо сделать копию таблицы news

    При этом можно добавить очередь (RedisMQ или что-либо другое) для асинхронного увеличения news.views, принцип следующий:
    • пользователь запросил страницу - сделалось SELECT
    • сделали задание в очередь на обновление статистики
    • пользователь получил страницу
    • через какое-то время задание по обновлению количества просмотров выполнилось и пользователь ничего не ждал
    Ответ написан
  • Как зашифровать css?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Как вариант - делать OpenGL или Canvas сайт, js зашифровать.


    Раньше для таких целей использовали Adobe Flash и Java Applet, но сейчас эти технологии не выполняют таких функций:
    • Adobe Flash - отключают в браузерах, в некоторых его нет изначально
    • Java Applet - было столько дыр в безопасности что тоже скоро вымрет, требует отдельной установки java

    Есть ли смысл делать сайты на OpenGL/WebGL и/или на Canvas исключительно с точки зрения защиты css? Скорее нет, разве что для использования их сильных (графических) сторон, так как современные сайты на столько сложны что украсть там что-то и так не представляется возможным, а сделать скриншот и скопировать графику всё равно можно.
    Ответ написан
    Комментировать
  • Какой ЯП выбрать для моделирования с учетом времени?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Выберите Golang, https://golang.org

    • сможете поработать с одним из самых современных языков программирования
    • каналы и горутины в вашей задаче очень пригодятся
    • сможете запустить как на Windows так и на любой другой поддерживаемой платформе (linux, OSX, other...)


    Сделать будет не очень сложно:)

    Второй язык который можно предложить - Python, там богатый математический аппарат, а значит язык полезен с научной и академической точки зрения (не исключая практическую составляющую), но это уже не совсем тоже самое и подходы будут не такими элегантными как в Golang для аналогичной задачи.
    Ответ написан
    Комментировать
  • Какой фомат БД использовать для большого количества записей и чтения и таблицы?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Если MySQL принципиален - попробуйте HandlerSocket, улучшит запись и чтение соответственно, но потребует изучения нового API.

    Небольшое описание со ссылками есть в другом моём ответе по смежному вопросу: Вопрос по подключению системы кэширования?
    Ответ написан
    Комментировать
  • Как работать с переводами тем Wordpress?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Сделать конвертацию po файлов в mo для gettext
    msgfmt ./plugin_name-ru_RU.po -o ./plugin_name-ru_RU.mo


    Что бы поставить gettext в Gentoo:
    # emerge -pv gettext
    [ebuild   R    ] sys-devel/gettext-0.19.4::gentoo  USE="acl cxx ncurses nls openmp -cvs -doc -emacs -git -java -static-libs" ABI_X86="(64) -32 (-x32)" 17 302 KiB

    В других операционках просто найдите соответствующий пакет. Если кто знает как делать под Windows/Mac OS - можете дополнить.

    Более подробно тут: https://codex.wordpress.org/Написание_плагина в разделе "Интернационализация плагина", это же относится и к шаблонам.
    Ответ написан
    Комментировать
  • Вопрос по подключению системы кэширования?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Почитайте, optimization.guide и вот вам немного теории:

    Кешировать можно:
    • целиком всю страницу (для каждой страницы своя запись в кеше)
    • отдельные части сайта


    Кешировать можно в файлах:
    • генераруя готового html
    • генерируя html+php, так работают smarty и прочие шаблонизаторы собирая множество шаблонов в один
    • в виде бинарного содержимого, сюда и готовый html и готовые значения вычислений и прочее
    • в виде сериализованного массива с чем угодно, от предыдущего пункта отличается только форматом хранения


    Кешировать можно в базе:
    • в mysql/postgresql и прочих SQL - будет храниться на диске и горячие данные в памяти
    • в mysql/postgresql и прочих SQL в in-memory таблицах - будет храниться в оперативке, но без дополнительных усилий кеш пропадёт при рестарте сервера
    • в in-memory базах данных, часто это memcache, redis и прочее - опять таки выключили сервер - данные пропали
    • в in-memory базах данных с сохранением на диск, это Tarantool, memcachedb и прочие если там заявлена такая функциональность


    Так же можно:
    • кешировать всё кроме вставок динамики
    • кешировать куски вставляя их в динамику

    Это два противоположных подхода которые при особом желании можно смешивать в рамках одного проекта.

    Обновлять кеш можно:
    • при каждом запросе проверяя что старый кеш устарел
    • предкеширование - отдельным кроном/демоном/сервисом генерировать кеш раз в N минут
    • по мере изменения данных сбрасывать кеш и следующий запрос сгенерирует новый
    • по мере изменения данных сбрасывать кеш путём генерации сразу нового и замены старого на новый


    Кеш можно хранить:
    • на том же сервере что и сайт - нет задержек в сети, но зато ресурсы теже, CPU, диск, оперативная память
    • на внешнем сервере - задержки в сети, зато ресурсы отдельно


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

    Если используете CMS/CMF - посмотрите готовые плагины для кеширования. Если у вас не sharing-хостинг с мини-сайтом - озаботтесь профилированием (xhproof) и мониторингом, это поможет понять где и что кешировать.

    Так же стоит рассмотреть кэширование байт-кода:
    • OpCache
    • APC
    • XCache

    Стоит прочитать вот эту статью:
    Сравнение скорости исполнения кода Drupal для PHP 5.3-5.6 и 7.0. «Битва оптимизаторов кода» apc vs xcache vs opcache https://habrahabr.ru/post/264775/

    Так же стоит:
    • увеличить буферы в MySQL (если памяти много)
    • потюнить другие системы, например поставить nginx вместо apache, раздавать статику с другого хоста
    • и конечно же - посмотреть как долго работают SQL запросы и по возможности их облегчить


    Кеширование в MySQL с использованием HandlerSocket:
    • данные хранятся в MySQL innodb базе, а значит чтение и запись можно делать как по старинке через SQL так и через HandlerSocket
    • можно сделать любое количество колонок, лишь бы это позволял MySQL
    • быстрая вставка
    • быстрая выборка
    • бинарный протокол передачи данных
    • есть несколько библиотек для PHP, как относительно новых так и старых
    • в Percona Server (форк MySQL) HandlerSocket.so есть в поставке по умолчанию, разве что нужно включить
    • в MySQL необходимо собрать HandlerSocket самостоятельно и включить в MySQL


    Можно почитать вот тут:
    Ответ написан
    3 комментария
  • Как исправить объявление на Freelancim о поиске веб-разработчика - сейчас совсем нет откликов?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Вам стоило составить конкретное и точное описание ТЗ по задаче, что бы программист не ломал голову где начинается одно и заканчивается другое.

    Например. Заголовок "Python-Django - сделать авторизацию и сервис вопросов, постоянное сотрудничество"

    Требуется Python-Django разработчик, для регулярной или периодической работы:
    - указывайте стоимость работы за час - это поможет нам сориентироваться по тому сколько будет стоить ваша работа
    - оцените первую задачу по времени и по стоимости (можно без учёта стоимости часа работы, так как мы понимаем что специфика у каждой задачи своя, сложность, трудоёмкость), в качестве времени укажите не количество часов которые потребуются если делать задачу за раз, а исходя из того когда вы сможете сдать работу.

    Задача: Сделать шаблонный сайт на django:
    - авторизация
    - регистрация
    - логаут
    - восстановление пароля
    - смена пароля

    - функционал "вопросов и ответов"
    -- создание вопроса - ввод само текста вопроса, плюс от 2 до 5 вариантов ответа
    -- сохранение, просмотр, редактирование и удаление вопроса
    -- отправка вопроса в мобильное приложение в требуемом формате

    Для оперативной работы напишите по скайпу: {ваш скайп}
    Ответ написан
    2 комментария
  • Как изменить символы в шаблоне, заменив {{ и }} на -на Golang?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Всегда можно попасть в ситуацию когда:
    • Delims менять нельзя (так как много кода уже с ним)
    • Когда Delims символы нужны только в одном месте и надо бы вывести их нативно
    <script>
        var title = '{{title}}';
        var obj = {{ { }}{{ } }}       // var obj = {}
    </script>
    Ответ написан
    Комментировать
  • Как сделать функционал привязки домена?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    На стороне dns-сервера:
    • поставить bind и настроить его работу на MySQL или любую другую SQL базу данных
    • генерировать текстовые конфиги для bind (или любого другого dns-сервера)
    • сделать конфиг где в любых случаях всех кто запросит любой домен с этого DNS отправлять на список IP принадлежащих сервису.


    Во всех трёх случаях slave сервера нужно будет настроить так же как master. Тоесть вряд ли у вас будет связка где master вы будете генерировать, а slave будут более глупыми и забирать зоны у master не зная их списка.

    На стороне веб-сервера:
    Если речь о vps/vds/collocation/dedication сервере то можно:
    • генерировать nginx конфиги виртуальных хостов
    • генерировать apache конфиги виртуальных хостов
    • сделать настройку по умолчанию на некий скрипт и уже в скрипте инклудить каталог с доменом
    • поискать в настройках nginx/apache (или какой вы там веб-сервер используете) возможность включить хост в адрес пути - уверен там такое должно быть


    Уверен можно придумать ещё два-три кейса на эту тему.
    Ответ написан
    Комментировать
  • Как лучше запустить серьезный GO веб-сервис в продакшен?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    supervisord и если его функций для внешнего мониторинга и управления в будущем не зватит - собственный supervisor написанный на Golang под собственные требования.

    Надо учитывать что supervisord это python программа, но со своей задачей справляется на ура и подходит для запуска чего угодно.
    Ответ написан
    Комментировать
  • Использовать ли глобальные переменные для конфигов в golang?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Вот вопросы которые возникают при написании движка для конфигов:
    • количество копий данных
    • конкуентный доступ (что если программа должна будет обновлять часть конфига на лету)
    • сохранение конфига на диск в случае изменения программой и мердж с уже имеющимся конфигом на диске в случае если он уже был изменен в ручную и не был загружен приложением до момента мерджа
    • доступ из нескольких пакетов (как правило тех где бизнес-логика, а не универсальных библиотек)
    • формат хранения данных, xml, json, ini или любой другой вариант, включая базу данных
    • своевременное обновление конфига при изменении из вне. С перезагрузкой приложения, без перезагрузки в автоматическом режиме (программа сама отслеживает изменился ли файл конфига) в режиме получения сигнала на то что конфиг нужно перечитать.


    Так же не стоит забывать о том что для конфигов есть сетевые сервисы с такими же особенностями, но со своей спецификой.

    Идеального конфига под Golang пока не видел, но есть очень интересные.

    Так же есть вопрос - что будет делать движок в случае если ваша программа ожидает одних данных в конфиге, а в самом файле ошибка или предположим каких-то полей нет.

    Некоторые конфиги работающие по принципу "возьмём файл и скиним его на структуру" в этом случае не работают потому что структура не совпадает. А не совпадать она может очень часто, потому что клиентам и их сотрудникам заранее не известно что это очень чувствительное место программы.
    Ответ написан
  • Что делать когда только начинаешь изучать веб но уже нужна работа?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Делаете что умеете - если компания из тех где принято выращивать своих сотрудников то будут смотреть на то как шёл ход мыслей и чему человек научился пока делал задание. Если же компания крупная и не заинтересована возиться с новыми сотрудниками то такие задачи отшивают не подходящих сотрудников.

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

    Так же при найме на работу учитывается возраст, точнее его соотношение с тем что знает кандидат. Если человеку лет 35-40-45 и позиция "начинающий js/html" то вероятность получить отказ очень высокая - способ этого избежать - спозиционировать себя как специалиста который что-то конкретное может и тем самым невилировать фейл с возрастом, ну и не претендовать на очень начальные позиции.
    Ответ написан
    Комментировать
  • Замена изображения при наведении?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Попробуйте более универсальный вариант. В этом случае даже если появится новый элемент набора с таким классом события распространятся и на него.

    <img class="image_hover" src="file.jpg" data-image-over="file.gif" data-image-out="file.jpg">
    
    <script>
    $(document).on("mouseover", "img.image_hover", function() {
        $(this).attr("src", $(this).data("imgOver"));
    });
    $(document).on("mouseout", "img.image_hover", function() {
        $(this).attr("src", $(this).data("imgOut"));
    });
    </script>
    Ответ написан
    Комментировать
  • Какой способ customer developmet наиболее эффективен?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    В маленьких городах приложение не перспективно. Ибо разброс цен между 90 рублей и 100 рублей не значительный. Другой вопрос удобства. Если ваше приложение будет удобно для решения проблемы поиска местного такси то супер.

    К примеру кейс: приезжаете в любой город, включаете своё любимое приложение и видите всех кто готов вас отвести и количество денег за сколько. А выбрав несколько таксокомпаний в избранное они всегда будут в первых строчках по конкретному поисковому запросу.

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

    Сделайте звонок в местные таксо-парки одной кнопкой в списке стоимостей и вот вы уже решили вопрос с поиском контактов. Если есть возможность отправить заявку без звонка - укажите это отдельно, для этого можно сделать модульную кнопку с разными состояниями. Например "Заказать" и "Заказать | [значок позвонить]"

    Для вас более важно понимать что есть рынок таких приложений и если вы будете в чём-то адекватно лучше то этот рынок постепенно станет наполнять вас пользователями из других таких же приложений. Важно сделать отрыв по удобству и комфорту пользования, а там уже и реклама своё дело сделает.
    Ответ написан
    Комментировать
  • Какой выбрать вектор дальнейшего обучения?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Читайте много книг, в идеале все по выбранному направлению и процентов 30-40% от смежных.

    Если конкретно по информационной безопасности то надо знать:
    • компилируемые языки, Си, Си++
    • разбираться в ядре операционной системы, можно ограничиться только миром Linux, а можно пройтись по всем основным, "Ядро Linux. Описание процесса разработки" Роберт Лав, у Таненбаума много потрясающих книг на тему распределённых систем и операционок как таковых, в чём-то базовые вещи
    • понимать алгоритмы - здесь вам в помощь бессмертные труды Кнута
    • желательно знать парочку интерпретируемых языков что бы искать баги и чинить уязвимости по всем фронтам
    • разбираться в компиляторах и понимать машинный код хотя бы на базовом уровне
    • разбираться в виртуализации, ключевые слова: kvm, quemu, xen, lxc, openvz, virtuozzo, docker, vagrant, прочеее...


    Читать https://www.opennet.ru и www.linux.org.ru , по сетям nag.ru
    Определиться со сферой деятельности и копать более углублённо по ней.
    Ответ написан
    3 комментария
  • Как вывести баннер посередине статьи?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    $arr = explode("\n", $text); 
       $centr = round(count($arr)/2); 
       $arr[$centr] = "<a href='http://site.ru/banner.gif'>Привет, это баннер</a>\r\n".$arr[$centr];
       return implode("\n", $text);

    Не идеальный код... не красивый код... зато простой.
    Ответ написан
    1 комментарий
  • Бесплатный проект для портфолио превратился в бесконечный. Как быть?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Достаточно просто сказать "Окей, я потратил 100500 часов, а сейчас я иду на пляж, можете забрать то что есть за 100500 денег и в понедельник обсудить список правок за отдельные деньги либо не получить ничего."
    Улыбнуться и пойти на пляж. Так вы узнаете нужен ли человеку проект который вы делаете или он просто развлекается. Если развлекается - это уже не интересный проект.

    Кстати не стоит вам работать бесплатно, вы продаёте прежде всего своё время. А время дорого. Цена вашего времени зависит от того что вы можете сделать, но опять таки - вряд ли ваше время ничего не стоит. Оценить просто:
    1. что я могу сделать за час:
    - первое
    - второе
    - третье
    2. сколько стоит то что я только что перечислил?
    3. сколько я готов был бы заплатить за то что я перечислил? А если буду делать это в два раза круче и с дополнительными плюшками?
    4. а много ли народу это умеет?
    5. сколько готовы заплатить другие люди которые в этом разбираются?
    6. сколько готовы заплатить другие люди которые в этом не разбираются?
    7. сколько нервных клеток мне стоит сделать то-то и то-то.

    И как только вы понимаете что вы делаете что-то не то - значит вы делаете что-то не то и вам нужно принимать решение. Либо спускать свою капитализацию на проект и заказчика который вас не ценит либо бросить это всё (с вариантами отдать бесплатно, продать или ещё как-то) и переосмыслить собственный путь.
    Ответ написан
    Комментировать
  • Почему DateTime некорректно отрабатывает?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Не надо передавать в new DateTime() timestamp, туда нужно отправлять обычный текстовый вариант даты.

    <?php
    $timezone = new DateTimeZone("Europe/Moscow");
    
    $start = new DateTime("01-10-2014 00:00:00", $timezone);
    $stop  = new DateTime("10-10-2014 24:00:00", $timezone);
    
    $interval = new DateInterval('P1D');
    $daterange = new DatePeriod($start, $interval ,$stop);
    
    foreach($daterange as $date){
        var_dump($date->format("d.m.Y"));
    }


    string(10) "01.10.2014"
    string(10) "02.10.2014"
    string(10) "03.10.2014"
    string(10) "04.10.2014"
    string(10) "05.10.2014"
    string(10) "06.10.2014"
    string(10) "07.10.2014"
    string(10) "08.10.2014"
    string(10) "09.10.2014"
    string(10) "10.10.2014"


    При этом обратите внимание на вторую дату, там время 24:00:00 для того что бы весь день учитывался, иначе дату 10.10.2014 получить было бы нельзя, впрочем, достаточно указать даже одну секунду что бы день засчитался (10-10-2014 00:00:01)
    Ответ написан
    Комментировать
  • Какое идеально оно - ТЗ для веб-дизайнера, веб-верстальщика, программиста?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Вам бы определиться с тем что вы хотите, а там уже и форма появится. К примеру очень удобно когда от ТЗ сущий формализм и определение тех мест где можно или нельзя проявлять творчество.

    К примеру, сделать:
    1. эту штуку
    2. эту штуку
    3. вот эту штуку
    4. а вот тут не понятно - предложить варианты
    5. а вот наш макет, на нём подчеркнуто это и вот это


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


    В остальном можно указать (а точнее договориться заранее)
    • какой этап сколько стоит
    • как передаются материалы
    • как происходит оплата, последовательность этапов


    Пример этапов:
    1. демонстрация на стороне исполнителя (на его сервере)
    2. оплата (способы которые устраивают обе стороны, причём заказчик по факту сможет выбрать вариант уже в момент оплаты)
    3. отправка результата заказчику (как, куда, входит ли в стоимость установка, развёртывание чего-либо)
    4. поддержка (как, сколько, когда, при каких обстоятельствах, платно или бесплатно и прочее в таком духе)
    Ответ написан
    Комментировать