• Как создать библиотеку на go и использовать через php?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Можно собрать go код как расширение php
    https://github.com/kitech/php-go
    Ответ написан
    3 комментария
  • Нужно ли front-end разработчику изучать back-end?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Оттачивать фронтенд и знание английского.
    У нас работают фронтендеры, они PHP вообще не знаю, но знают принципы реализации бекенда (т.к. на JS работают).
    Пишут шикарные приложение под наши API.
    Товарищи полностью концентрируются на фронтовой части и именно это дает им преимущество.
    Сильного специалиста в своей области, найти довольно сложно. Не стоит в наше время сидеть на 2х стульях.
    Ответ написан
    Комментировать
  • Как спланировать свое обучение?

    voronkovich
    @voronkovich
    Есть одна волшебная книига: K&R "Язык программирования Си". Всего 200 страниц, но там и стековый калькулятор и аллокатор памяти и программировние для UNIX + множество разных упражнений.
    Прочтите эту книгу в течение этих 3-х недель. Хаскель может и подождать. В качестве упражнений делайте утилиты UNIX (coreutils): kill, nohup, ls и т.д.
    Кстати, я бы добавил в ваш список не хватает:
    1. Кент Бек. "Экстремальное программирование: разработка через тестирование"
    2. Бертран Мейер. "Почувствуй класс" (да, знаю это про Eiffel)
    Ответ написан
    4 комментария
  • Как оптимизировать сумму ряда?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Аналитически.
    59fe144ebe173368222815.gif
    Я нашёл этому поистине чудесное доказательство, но поле ввода слишком узко для него. (C) Ферма.
    Решение
    Рассмотрим дроби - слагаемые данной суммы. Очевидно, что знаменатели могут меняться от 2 до 2k.
    Попробуем определить, какие числители будут в дробях со знаменателем n. Для этого нам надо разложить n на пары x и y всеми возможными способами, учитывая ограничения 1 ≤ x ≤ k, 1 ≤ y ≤ k и взять допустимые значения x.
    Если 2 ≤ n ≤ k, то допустимыми значениями x будут 1 ... n-1. Для k+1 ≤ n ≤ 2k допустимыми значениями x будут n-k ... k. Таким образом, мы можем записать сумму числителей для каждого знаменателя:
    59fef5831ed62261528289.png
    Теперь, с учётом полученной системы запишем, как будет выглядеть полная сумма всех дробей:
    59fef5c331774953483286.png
    Заметим, что если в первой сумме начать суммирование не с 2, а с 1, то сумма не изменится, поскольку добавленное слагаемое равняется нулю. Во второй сумме перенесём k из пределов суммирования в слагаемое. Получим две суммы с одинаковыми пределами, а значит их можно объединить в одну:
    59fef699cef72869621752.png
    Ответ написан
    2 комментария
  • Зачем работать с базой ORACLE только через процедуры?

    @bizon2000
    Java-программист
    У меня был опыт участия в написании системы OLTP, в которой был достаточно высокий темп апдейтов, причем часто апдейтились одни и те же записи (из разных транзакций). Для того, чтобы избежать задержек, нужно было обеспечить быстрое завершение транзакций (явный commit или rollback). Если клиент обращается к БД не через хранимые процедуры, то управление транзакциями выполняется на стороне клиента, а значит, если клиент поведет себя некорректно (не станет быстро завершать транзакцию), или возникнут проблемы со связью в середине транзакции, то записи, которые апдейтят многие транзакции, окажутся заблокированы этой подвисшей транзакцией. Если же клиент взаимодействует через хранимые процедуры, то управление транзакциями осуществляется из таких процедур (явно начинается и явно завершается в одной и той же процедуре). Это минимизирует время транзакции. Для нас это было одной из основных причин применения хранимых процедур. Хотя, конечно, существенно было и то, что минимизировался трафик между клиентом и БД. На мой взгляд, эти две причины имеют достаточно большое значение именно для OLTP.
    В другом проекте (на MS SQL) были огромные объемы исходных данных. Для сокращения размера БД было разработано очень специфическое представление данных в таблицах, так что эффективно можно было выполнять только некоторые предопределенные запросы с обязательными параметрами. Если в этих запросах не задать обязательные параметры и/или добавить дополнительные условия, то оптимизатор мог запросто выбрать план выполнения, при котором сервер "уходил в себя" (результата дождаться было просто невозможно). Однако заказчик требовал обеспечить ему доступ к этим данным (например предоставить некие views) из его приложений. Если бы мы предоставили ему views, то при использовании их он мог бы не задать обязательные параметры, задать дополнительные условия, перевязать эти view с какими-то другими таблицами/views/подзапросами. При выполнении таких запросов запросто возникли бы проблемы с производительностью (причем, всего сервера БД). Мы передали заказчику набор хранимых процедур с обязательными параметрами (не задать их он уже не смог бы), возвращающие резалтсеты, которые он может вычитывать точно так же, как при выполнении обычного запроса.
    Ответ написан
    Комментировать
  • Зачем работать с базой ORACLE только через процедуры?

    @d-stream
    Готовые решения - не подаю, но...
    Простейшая ситуация: update нескольких таблиц по результатам отбор из других .
    Отдельные запросы "извне" рискуют не выполнится (например обрыв связи). Инициации транзакций в такой схеме - чревата при том же обрыве связи их незавершением.

    А процедура - можно считать ее неотъемлемой частью БД - гораздо меньше подвержена всему этому. Ну и как бы "атомарна" в рамках реализации бизнес-логики.

    Изменения структуры данных в данном случае могут затронуть лишь бд-сторону (структура таблиц и процедуры).
    Ответ написан
    Комментировать
  • Зачем работать с базой ORACLE только через процедуры?

    @Sumor
    Если проект простой, то конечно удобнее из клиентского приложения вызывать SELECT, UPDATE и INSERT.
    Но как только проект становится достаточно большим, или накладываются дополнительные ограничения на безопасность, то удобнее вынести часть бизнес-логики на сервер. В данном случае - на хранимые процедуры.
    Плюсы следующие:
    1. Хранимые процедуры и клиентское приложения могут писать разные люди (команды), с разной подготовкой. Хранимые процедуры - боле опытные, клиентское приложение - более неопытные.
    2. Хранимые процедуры могут обеспечить дополнительный уровень безопасности. Часть проверочной логики может быть реализовано на сервере. И клиентское ПО даже изменив или подделав вызовы не получит не принадлежащие им данные. Если вся логика приложения реализована на клиенте, то злоумышленник может переписать запросы и получить не принадлежащие ему данные. Помимо этого от клиентского ПО скрывается структура БД.
    3. Хранимые процедуры, как неинтерактивные модули, проще отлаживать и тестировать в автоматическом режиме.
    4. Написанные хранимки меньше, чем клиентское ПО, подвержены изменениям в ходе эволюции и активно повторно используются в разных клиентских модулях.
    Ответ написан
    Комментировать
  • Зачем работать с базой ORACLE только через процедуры?

    @res2001
    Developer, ex-admin
    Нормальный подход. 20 лет назад он был фактически стандартом.
    Разработчик баз данных обычно стоит дороже PHP разработчика.
    Сейчас, обычно, такой подход используют в корпоративных разработках, где могут позволить держать таких специалистов.
    А в mysql еще совсем недавно не было никаких хранимых процедур. С тех пор так и пошла мода всю логику запихивать в сервер-приложений.
    Это ни плохо и не хорошо, нужно идти от задачи и знать сильные и слабые стороны размещения бизнес-логики в сервер-приложений или в сервер базы данных.
    https://habrahabr.ru/post/219445/
    Ответ написан
    Комментировать
  • Возможно ли заразить компьютер вирусами ,если подключить жесткий диск через USB SATA/IDE?

    @Mercury13
    Программист на «си с крестами» и не только
    Можно. Если не запускать ничего — то зависит от версии Windows и стоящих на ней апдейтов.
    7+ вроде научилась не запускать ничего в DLL, чтобы подгрузить оттуда иконки, и не делать автозапуска ни для чего, кроме CD.
    В общем, советую для таких винтов обновлённую 7+ и двухпанельный коммандер, а не Проводник. Мало ли какой эксплойт попадётся, чтобы заразить комп через Проводник, а под коммандеры пока такого не пишут — да и путей подобного заражения меньше.
    UPD. И исполняемый файл сложнее принять за каталог на двухпанельном коммандере.
    UPD2. После этого тем же коммандером перетряхните скопированные каталоги, чтобы убедиться, что там законные файлы, а не исполняемые. После чего можно пользоваться даже Проводником — вероятность заразиться мизерна. Если там «левые» документы (DOC, PDF и прочее, что часто эксплойтят) — советую прогнать скопированное на проге типа CureIt.
    Ответ написан
    3 комментария
  • С чего нужно начать изучать программирование нейронных сетей?

    AgentProvocateur
    @AgentProvocateur
    методично, всерьёз и надолго погрузиться в тему

    Погружайся)) Методичнее некуда)
    59f726f14da9a668973662.png
    Ответ написан
    12 комментариев
  • Как добиться независимости в тестах (phpunit)?

    @kn0ckn0ck
    Продюсер
    Не стоит смешивать модульные тесты и интеграционные (или функциональные). Цель модульных тестов проверить работу одного модуля (класса, например). В этом случае все его зависимости мокаются. Целью интеграционных тестов является проверка взаимодействия цепочки модулей (сервисов, с БД и т.п.) друг с другом.

    То что вы написали похоже на интеграционные тесты. Очевидно, что такие тесты будут падать, если что-то не работает в любом месте всей тестируемой цепочки модулей. И это не связано с изоляцией тестов друг от друга.

    То есть правильно было бы сформулировать вопрос таким образом: "какой процент покрытия модульными тестами будет достаточным для моего кода?" Обычно останавливаются где-то на 70-80%

    Также очевидно, что 100% работающих модульных тестов не гарантирует работу интеграционных тестов или функциональных. Поэтому необходимо писать и те и другие.

    Я бы не стал фанатично закрывать все методы классов тестами, а только те, в которых имеется высокая цикломатическая сложность, либо которые скорее всего будут меняться. Короче, нет большого смысла в тестировании примитивных/стабильных участков кода.
    Ответ написан
    Комментировать
  • Для чего идеальна MongoDb? Примеры приложений, где монга будет лучше mysql?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Я расскажу Вам про личный опыт, без претензий на истину в последней инстанции...

    Для чего идеальна MongoDb? Примеры приложений, где монга будет лучше mysql?
    Для человека который привык работать с реляционными БД, смириться с логикой и вообще с подобными БД - довольно сложно. Для тех, кто работает с реляционными БД профессионально - сделать это ещё сложнее...

    Если сравнивать с реляционными БД и с оглядкой на конкретно MySQL - монга идеально вписывается там, где структура данных заранее неизвестна. Тут я хотел привести пример, но не смог придумать ни одного дельного примера, после того как начал плотно работать с PostgreSQL... Давайте попробую из практики. Мы один раз применяли монгу в проекте где есть десятки и сотни тысяч товарных позиций и у каждой из них свой уникальный набор различных свойств. На основе уже имеющихся свойств, "соседних" товаров, контентщику предлагался наиболее вероятный набор параметров, которые нужно заполнить, но в любой момент он мог удалить или добавить любое поле и/или множество значений одного из них, например, "Цвет: черный, серый, фиолетовый". Всё это дело попадало под разные динамические фильтры и далее по цепочке... В то время, насколько я помню ещё не было поддержки JSONB-формата у PostgreSQL, по этому мы остановились на MongoDB. Ну и конечно же, желание "воткнуть ультра новую и модную БД в проект" сыграло свою роль...

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

    Безусловно, не редко можно встретить проекты в которых даже в реляционных БД не прописаны, например, внешние ключи и контроля целостности данных как такового нет, но обычно это происходит по следующим причинам:
    1. Очень низкая квалификация администратора БД проекта
    2. В попытке выжать из базы больше производительности, не найдя других методов оптимизации
    3. Данных настолько много, что БД/ключи - начинают "сыпаться", не редко это связано с п.1

    Так же, последние тесты показывают, что PostgreSQL почти не уступает MongoDB даже в её родной среде (на уровне данных в формате JSON). А в некоторых аспектах даже превосходит её... Подробности Вы можете увидеть на некоторых конференциях по Postgres (да, на конференциях по MongoDB, Вы вряд ли увидите, как кто-то будет рассказывать, что [их любимая] монга "хуже" некоторых других движков...). Кстати, поддержку формата JSON стандартизировали (наконец-то) на уровне SQL-стандарта (если я не ошибаюсь) и в самом ближайшем будущем, думаю стоит ожидать полноценную поддержку оного в SQL-базах, в т.ч. поддержку в бинарном виде с возможностью индексации данных (кстати, некоторые SQL-базы уже такое умеют).

    Моё понимание, ответа на вопрос, "когда действительно стоит использовать MogoDB?" звучит примерно так: Исключительно в тех случаях, когда Вы понимаете, что она станет действительно хорошим решением для поставленной задачи и сейчас и в будущем. В моей практике, таких проектов можно было бы насчитать ничтожно мало, а точнее около нуля, особенно с учётом развития некоторых современных SQL-БД и вообще направления "JSON в SQL" в целом. Но, безусловно такие проекты могут быть и есть (в данном случае, не у меня). Но, тут стоит обратить внимание на крайне важный факт - когда всплывает такой проект, что бы адекватно оценить наиболее оптимальную БД под него - нужно знать как минимум пару-тройку SQL-БД, со всеми их особенностями, достоинствами и недостатками... причем не просто "знать", а хорошо знать, "изнутри". А так же знать все характерные черты монги, а так же её особенности, достоинства и т.д. То есть, если Вы задаётесь вопросом, "а хорошо ли впишется монга в проект N?" и не можете найти на него однозначного ответа, вероятнее всего, что в долгосрочной перспективе, в "проект N" она впишется плохо.

    P.S. В заключение, хочу ещё раз напомнить, что "JSON в SQL" - активно развивается... Со всеми вытекающими.
    Ответ написан
    7 комментариев
  • Powershell+Selenium. Как обойти каптчу?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    from selenium import webdriver
    from PIL import Image
    
    fox = webdriver.Firefox()
    fox.get('http://toster.ru/')
    
    # now that we have the preliminary stuff out of the way time to get that image :D
    element = fox.find_element_by_id('hlogo') # find part of the page you want image of
    location = element.location
    size = element.size
    fox.save_screenshot('screenshot.png') # saves screenshot of entire page
    fox.quit()
    
    im = Image.open('screenshot.png') # uses PIL library to open image in memory
    
    left = location['x']
    top = location['y']
    right = location['x'] + size['width']
    bottom = location['y'] + size['height']
    
    
    im = im.crop((left, top, right, bottom)) # defines crop points
    im.save('screenshot.png') # saves new cropped image


    иногда нужно бывает промотать до конца страницы, тогда чуть сложнее
    Ответ написан
    Комментировать
  • Взаимодействие PHP и JS?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Супер абстрактный пример:

    Через js делаем ajax запрос, php увидев его, запрашивает из базы по данному запросу данные и отдаёт вам.

    Пример кода на js:
    fetch('/contacts') // Запрашиваем у сервера данные по странице контакты
    .then((response) => {
       // Тут будет то, что вернул вам сервер
      console.log(response));
      
      // Далее вы раскидываете данные
      ...
    })
    .catch(error => console.error(error)); // Если вдруг была ошибка

    Сервер увидел, что к нему пришёл get запрос по странице контакты. Он пошёл в бд и взял оттуда данные по этой странице и вернул их в формате json.

    Вообщем и целом, вам необходимо прочитать про REST API, что это и как его готовить.
    Ответ написан
    3 комментария
  • Где найти такую js библиотеку?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    У mindmup.com исходники открыты вроде бы как https://github.com/mindmup/mapjs
    Аналоги
    https://www.npmjs.com/package/mindmaps
    https://github.com/d3/d3/wiki/Gallery
    Ответ написан
    1 комментарий
  • Какой стиль ООП выбрать?

    @synapse_people
    пример 2 и только
    Обьясню
    Например, SomeClass - сервис логгирования.
    Тогда сделаем ему интерфейс, создадим 2 подтипа - логер на файлах и в БД.
    Итого 1 интерфейс, 2 класса реализации.
    Параметры метода описаны в интерфейсе..
    Вот и имеем, что метод будет вызван с конкретным аргументом...
    В других случаях не понятно поведение подклассов, которые будут это реализовать.. А именно в плане того, что должен делать setItem в 1 случае, и ессно интерфейсы не могут описывать конструкторы как в примере 3...
    В итое имеем, что можно легко заменить объект другим объектом ТОЛЬКО в примере 2.
    Насчет геттеров - имхо, лучше создавать приватные свойства и геттер+сеттер
    Т.к. на больших проектах чаще всего получается лапша, да и в плане многопоточности, и опять же-интерфейсов -просто свойства не есть хорошо...
    Ответ написан
    Комментировать
  • Несколько простых вопросов по тестированию. Кто поможет?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Итак, для начала следует разобраться в разнице между юнит-тестированием, интеграционным тестированием, функциональным тестированием и тестом на регрессии.

    Юнит-тестирование предназначено для тестирования конкретного метода или класса.
    В вашем случае это будут тесты для модели, например проверка, что модель создает запись в базе с определенной структурой.

    Интеграционное тестирование означает проверку совместной работы компонентов системы. Например проверка того, что вызов метода контроллера создает запись в базе с определенной структурой. В данном случае проверяется интеграция контроллера с моделью. Более высокоуровневое интеграционное тестирование может быть проведено на уровне клиента, когда сервис возвращает нужный объект.

    Функциональное тестирование проверяет соотвествие требованиям проекта. Например, при нажатии кнопки Удалить появляется окно подтверждение с текстом "Вы уверены", затем при нажатии кнопки "Да", запись удаляется из БД и пользователю выводится сообщение "Запись успешно удалена!".

    Тест на регрессию - это повторная проверка работы конкретного участка кода. Как правило это участок кода, который не был покрыт тестами ранее.

    PHPUnit изначально предназначен для юнит-тестирования, однако это не мешает вам использовать его для других видов тестирования. Есть даже коннекторы к WebDriver.

    Тестирование контроллеров и моделей по отдельности - это юнит-тесты.
    Тестирование связки контроллер-модель - это интеграционное тестирование.
    Тестрование работы сайта целиком с помощью того же Selenium и т.п. - это функциональное тестирование.
    Ответ написан
    1 комментарий
  • Стоит ли использовать Docker на продакшене?

    @de1m
    У нас пять серверов в hetzner и несколько больших во внутреней сети, на них на всех крутяться контейнеры для разных вещей(mysql, mssql, bind, openvpn, etc). Начали со всем этим, где-то года три назад. Проблемы были, но небольшие и они уже исправлены, последние где-то месяцев 10 я ничего не вспомню.
    Если вы хотите CI/CD, то смотрите в сторону kubernetes. Его главный плюс, что можно всем управлять через API. Мы к этой идеи тоже пришли и я буквально неделю назад закончил установку kubernetes'а на трех серверах у hetzner и начал туда переводить наши сервисы.
    У докера я вижу два главных преимушества:
    1. Очень чёткое разделение между данными и системой. Выводишь нужные данные на volumes и делаешь с них бэкапы. Если сервер сгорел, заливаешь образы для docker'а и накатываешь данные и готово.
    2. Повторяемость окружения.
    Ответ написан
    1 комментарий
  • Стоит ли использовать Docker на продакшене?

    kumaxim
    @kumaxim
    Web-программист
    Если у Вас один-три сервера, скорей всего, Docker Вам не нужен. В этом случае для управления конфигурацией лучше используйте ansible.

    Потребность в Docker возникает либо в случае когда нужно расшарать одно окружение на множество машин, например, у меня и моих коллег сейчас девелоперское окружение(php + apache + mysql + redis) крутиться на контейнерах. Второй пример - нужно настроить динамическое горизонтальное масштабирование. Этот вариант Вам нужно рассматривать, только если Вы используйте AWS или что-то подобное.

    В целом, docker / ansible / chef / puppet и т.п. Вам нужны только в случае, если нужно шарить одно окружение на разные машины, причем часто, с уверенностью что оно везде одно. Другого примера использования придумать не могу.
    Ответ написан
    1 комментарий
  • Заражение вирусами в ОЧЕНЬ большой сети?

    @Gansterito
    Выше уже написали, что нужно сегментировать сеть. Эта задача и стратегическая (будете решать после устранения проблемы) и тактическая (ограничение распространения зловреда).

    Сегментировать нужно заменой коммутаторов на управляемые с функционалом vlan, acl, dhcp snooping (на перспективу), loopback detection. Закупить коммутаторов на ~ 6000 портов можно одним днем (это порядка 120 коммутаторов доступа не считая агрегацию и маршрутизатора). Выйдет все же дешевле финансовых и имиджевых потерь от простоев.

    Как именно нужно сегментировать - можно определить только по месту. Может быть сразу отсечь сегменты, не занятые в оперативной деятельности компании, отправив туда 1-2 человек для зачистки антивирусом, а основные силы бросить на приведение в порядок сети. Может быть есть смысл "заблокировать всё" и открывать доступ к тем или иным ресурсам по мере возникновения проблем. Из 15 админов на месте можно оставить 5, а остальных (35) отправить разбираться у кого чего не работает. Все общение должно быть сведено к:
    - Володя, это Сёмен, IP адрес 10.156.2.25, MAC-адрес заканчивается на 13-AC-F4 нужен доступ к 10.43.1.67, это рентген в кабинете 523
    - Готово проверяй
    - Да, есть, сделай тоже самое для XXX, YYY, ZZZ...
    Ответ написан
    Комментировать