• Сервис-ориентированная архитектура на django, как?

    @FireGM
    Обычно разделяют на разные сервера/порты разные приложения и ходят в них через какой-нибудь nginx и собирают внутри него. Либо можно через js на клиенте сходить. Естественно надо ставить таймаут и выводить заглушку, если вдруг что.
    У технопарка есть хорошие лекции
    Ответ написан
    Комментировать
  • Как скачать с дамп кеш памяти ответы на тест Elance?

    opium
    @opium
    Просто люблю качественно работать
    Записывайте их в блокнот
    Ответ написан
    Комментировать
  • Как получить оплату на почасовой работе oDesk?

    @maxloyko
    не паникуй
    если почасовая оплата то бабки прийдут только на 2 неделю в среду
    то есть если сегодня работал то бабки будут через неделю в среду
    Ответ написан
    2 комментария
  • Как выполнить php код при нажатии?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    На клиенте (в браузере) нет и не может быть никакого PHP.
    Ответ написан
    Комментировать
  • Можно ли в PHP заменить "< ?" и "? >" на произвольное значение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    нет

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

    подсказка: такая идея с заменой не приходила в голову ни одному из сотен тысяч разработчиков.
    это значит, что ты опять зафантазировался, и придумал какую-то бредятину, для реализации которой понадобилось заменять теги у пхп.
    Спустись с небес на землю и делай по-человечески.
    Ответ написан
    5 комментариев
  • Распознавание сканированной копии документа на веб сайте! С чего начать?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Совмещение чистого бланка с заполненным (очистка, контраст, размер, поворот).
    2. Вычитание (из заполненного бланка чистого).
    3. Пересечение "островного" шаблона областей (где должны быть надписи) с результатом п.2 и выявление заполненных и не заполненных полей.
    4. Профит!
    Ответ написан
    Комментировать
  • Как правильно сравнить вещественные числа в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А чем стандартные операторы сравнения не устраивают?
    Ты, главное, преобразуй запятую в точку.
    А больше никаких проблем не вижу.

    Если бы надо было получать равенство - тут да, есть засады. А на больше-меньше проблем нет
    Ответ написан
    Комментировать
  • Какая разница между @include и include?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Собака не имеет никакого отношения к include. Это не один оператор, а два совершенно разных оператора.
    2. Увидев @ в коде ты можешь почти со стопроцентной уверенностью сказать, что его писал неграмотный пользователь, и пользоваться этим кодом не стоит.
    3. Увидев в коде @include ты можешь смело считать его автора абсолютным лохом и нубом, а сам код надо выкидывать немедленно. Потому что @include глушит не только саму ошибку включения файла, но и все ошибки в этом файле - то есть, поступает стократ хуже. Это значит, что если автор допускает такие косяки в коде, то и все остальное у него тоже ад кромешный.
    4. Самое главное. Ошибки надо не подавлять. Ошибки надо исправлять. Но опять же, делать это с умом. Начинающие программисты считают сообщения об ошибках своими личными врагами, и борются с ними всеми доступными средствами - с помощью @, error_reporting(0) и др. Получив линейкой по рукам и запомнив на всю жизнь, что так делать не надо, ониначинают с не меньшим рвением писать всякие проверки - лишь бы не допустить, не дай бог, ненавистного сообщения об ошибке. Например:

    if (file_exists($inc))
    {
        include $inc;
    } else {
        echo "Файл не найден";
    }

    Так вот, это - еще хуже. Для начала, часть ошибок этот код все равно не отловит. Но это даже не самое главное. Главное - что вот это вот "Файл не найден" не имеет ни малейшего смысла. Пользователю оно ничего не скажет. А программист о нем не узнает. А если и узнает, то ничего не поймет! Какой файл? Где не найден? По какой причине? Системное сообщение об ошибке содержит массу бесценной информации помогающей идентифицировать ошибку, сообщая нам где она произошла, какой файл не найден, по какой причине не найден. Выдавать вместо этого огрызок "файл не найден" - это мазохизм.

    И вот тут мы должны произвести натуральную революцию в неокрепшем детском мозгу: сообщение об ошибке не твой враг, а твой друг! И надо добиваться его появления всеми возможными способами! В том числе и выпиливанием бессмысленных проверок. Проверку можно ставить только если у нас есть сценарий обработки ошибки: к примеру, вместо этого файла мы можем заинклюдить какой-то другой, дефолтный. Тогда да - проверка имеет смысл. Но если это самый обычный инклюд, который всегда должен быть на своем месте, то его отсутствие обязано вызывать ошибку! Чтобы она была сразу показана на дев сервере и тут же исправлена. Чтобы она была записана в лог на продакшене и тут же исправлена.

    Ошибки не надо подавлять. Ошибки не надо прятать. Ошибки надо исправлять.
    Ответ написан
    3 комментария
  • Продажа собственного PHP кода: как правильно делать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Код никто никогда не продает.
    Продают всегда сервис.

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

    Вопрос "будут ли покупать" (АКА "есть ли потенциальные клиенты") ты должен был задать себе ДО того, как начинать садиться писать.

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

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

    Думается, прежде всего стоит определиться, - для чего вам нужно программирование. Вы хотите программировать для своей профессиональной математической деятельности? Матмоделирование? Матфизика? Железо?

    Предположим, что вы с этим определились, - и тогда стоит вопрос выбора инструмента. Например:

    Mathematica, коли вы с ней ещё не знакомы. Мультипарадигменная среда программирования чего угодно. Некоторая сумасшедшесть Стивена Вольфрама, кажется, идёт ей даже на пользу.

    Функциональные языки программирования общего назначения включают уже упомянутые Haskell, LISP, Scheme, Clojure. Я бы предложил Scala, которой занимаюсь сейчас сам. Вам, вероятно, легко дадутся лямбда-исчисление и теория категорий, на которых оно всё работает. Основа - JVM, в этом есть и слабые, и сильные стороны; преимущество в том, что вы сможете писать и веб-приложения, и настольные, и мобильные.

    C++ - это та ещё заморока; упоминаю его потому, что существуют книжки Александра Степанова - "Elements of Programming" и совсем недавно изданная "From Mathematics to Generic Programming", кои описывают программирование с точки зрения абстрактной алгебры. Базируются на языке, основанном на C++. Я не думаю, что с этого следует начинать, книжки трудные; но может быть, вам будет интересно просто полистать или сделать пометку на будущее.

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

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

    Ещё некоторые моменты, которые вам могут быть интересны.

    Конкретная математика за авторством Кнута, Грэхема, Паташника представляет собой учебник по математическим методам, которые авторы считали полезными в разработке программ.

    Упоминание Искусства программирования Кнута стало уже обязательным в каждой теме об обучении программированию. Однако, живой человек, живущий не на необитаемом острове, вряд ли способен проработать оную книгу целиком. Скорее можно использовать её как справочник и как источник вдохновения.
    Ответ написан
    Комментировать
  • Как поменять направление снежинок?

    Symphony
    @Symphony Куратор тега JavaScript
    Начинается...
    Ответ написан
    Комментировать
  • Сколько будет стоит купить сервер для сайта с посещаемостью 100к человек?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Научитесь уже нормально измерять нагрузку.
    Не бывает
    сайт с посещаемостью 100к человек

    Бывает
    Сайт с 3000000 реквестов в сутки, средний rps под нагрузкой ~100, пиковый rps ~500. Всего в базе 100 000 пользователей, на пользователя в среднем 50 mb хранимого контента, пиковое значение 5gb, таких пользователей ~0.1%. Трафик в сутки ...gb, пиковый трафик ...в секунду.
    Ожидаем увеличения нагрузки на 30% в следующие 12 месяцев.
    Сайт написан на php, базы mariadb, redis.

    Это какой то ну совсем минимальный набор из которого можно что то советовать.

    2. ...
    Ответ написан
    Комментировать
  • Как разобраться в философии symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Бандлы - самодостаточные модули инкапсулирующие какие-то сервисы и прочую штуку. По сути это расширения для DependencyInjection, если очень грубо.

    Модели - это те самые Entity грубо-говоря. Вообще есть такое понятие как Доменная-модель. Это просто структура данных, сущности которыми оперирует бизнес логика. Последняя должна быть инкапсулирована в сервисы (всякие UserManager, PostManager и т.д.). В Yii модели смешаны с сервисным слоем и по этому у вас получается путаница.

    Что до кода... есть распространенный подход иметь свой AppBundle и фигачить все в нем. Есть так же рекомендуемый подход - не использовать бандлы вообще. То есть.... бандлы должны быть самодостаточны и их основное предназначение - реюз логики между проектами. Бизнес-логику приложения реюзать у вас не выйдет, поэтому рекомендуется просто писать код и регистрировать его в app/Resources/config/services.yml или что-то в этом духе, как именно решать вам. Профит в том что вы на замарачиваетесь всей этой фигней с бандлами и у вас возникает меньше вопросов по структуре. А если же вы захотели что-то вынести в бандл - например сервисы для авторизации которые реально можно реюзать, то вам никто не помешает это сделать. В итоге у вас будет структура проекта приблизительно такая:

    | - app
    | - var
    | - src
      | - Controller
      | - Entity
      | - Bundle/
        | - MyAuthBundle/
    | - web


    ну как-то так. Как не странно такой подход не сильно распространен в Symfony-сообществе хотя его рекомендуют в недавно вышедшем бест практис буке и в принципе эта струтктура более чем логична.

    Что до виджетов, в Symfony2 есть HMVC. То есть вы можете сделать эдакие под-запросы на другие контроллеры внутри вьюшек. Можно скажем все "виджеты" инкапсулировать как отдельный контроллер с методами и дергать их из вьюшек.
    <div id="sidebar">
        {{ render(controller('AcmeArticleBundle:Article:recentArticles', {
            'max': 3
        })) }}
    </div>


    Это дает больше гибкости, внутри каждого контроллера можно дергать другие контроллеры. Можно прикрутить кеширование на уровне обработки запросов (кешировать скажем все подзапросы по каким-то критериям) и т.д.
    Ответ написан
    8 комментариев
  • Для чего используются транзакции в mysql?

    zeromodule
    @zeromodule
    PHP
    Транзакции в MySQL используются для того же, для чего и в любой другой БД.

    Классический пример - перевод денег с одного счёта на другой.
    Если делать это без транзакции, то может произойти ситуация, когда деньги со счёта отправителя спишутся (первый запрос выполнится), а на счёт получателя не зачислятся (второй вопрос по каким-то причинам не выполнится).
    Транзакция гарантирует что либо оба запроса будут выполнены, либо не будет выполнен ни один.
    Ответ написан
    Комментировать
  • Какие книги почитать о том, как работает Linux?

    azrail_dev
    @azrail_dev
    Посмотри на досуге. Интересные есть вещи.
    https://tech.yandex.ru/education/kit/
    Ответ написан
    Комментировать
  • Асинхронная многопоточность в PHP: для чего?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все очень просто. Вот вам приблизительное значение таймингов доступа к данным:
    io-cost.png

    То есть запросив данные в сети мы тупо ждем. Долго ждем и ничего не делаем.

    В случае с curl (он же HTTP) мы можем соорудить очередь запросов и послать их одним махом и ждать пока завершится загрузка всех документов в очереди для обработки результатов. Если мы хотим забрать 10 документов, то без multi curl у нас ушло бы времени "среднее время получения документа" * 10. И это примерно. В случае же с мультикурлом мы получаем время обработки 10 запросов как время выполнения самого долгого запроса. Если представить что время запросов всегда одинаковое, получаем выйгрыш примерно в 10 раз.

    С сокетами веселее. Они бывают блокируемые (по умолчанию) и неблокируемые (выставляется опцией O_NONBLOCK). Для начала давайте определимся что такое чтение данных из сокетов и как нам это дело предоставляет операционная система. Упрощенно, когда мы создаем сокет, мы просто просим операционную систему предоставить оный. У каждого сокета есть буфер чтения и буфер записи. Если буфер записи полный - ОС начинает отправку данных пока буфер не опустеет (буфер записи нужен для организации проверки дошли ли пакеты и переотправки в случае чего, так же этот буфер замешан в выборе операционкой размеров пакетов и т.д. Это не особо важно в контексте вопроса). Когда данные приходят в сокет, сначала они помещаются в буфер чтения. Там они лежат пока их не попросят вернуть из кода. Так мы можем быть уверены в том, что данные не пропадут.

    Так вот... возьмем блокирующие сокеты и попробуем запросить 1024 байт данных из оного. Причем клиент в данный момент ничего не отправляет, буфер чтения пустой. И так допустим минут 10. Как только мы сделали запрос за данными, и оказалось что буфер чтения пустой, процесс выполнения блокируется пока не появятся данные.

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

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

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

    Еще есть такая чудная штука, которую предоставляет операционная система как select или epol (в контексте php socket_select и stream_select). Данные функции позволяют нам скармливать массивы сокетов, за которыми вы следите (не сокетов, а их дескрипторов но не суть, и не один массив а три, массив дескрипторов что бы следить появились ли данные на чтение, записал ли сокет все и освободился ли буфер записи и третий отслеживает сокеты в которых произошли какие-то ошибки, например отвалилось соединение). Так же этой функции можно задавать таймаут, что очень удобно если мы сначала собираем данные с нескольких клиентов и если от них небыло вестей пару секунд, значит мы забрали все и можно начинать обработку.

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

    Но все что выше имеет смысл только с TCP/TLS, если бы у нас были UDP сокеты, то было бы еще веселее. Там нету никаких буферов. Не принял данные - потерял данные. Нету соединений. Нету блокировок. Есть только пакеты. Поэтому этот протокол используют (или используют как основу) для реализации реалтайм систем. Задержек нету, а если какой пает не дошел, велика вероятность что он уже не актуален. Правда если сеть не надежная и потери пакетов велики, то начинается боль и слезы и обычно все же для таких случаев дублируют все на TCP.
    Ответ написан
  • Нужен наставник по веб-программированию, поможете?

    @andreyqin
    Не обижайтесь, НО... кому вы нафиг сдались? Никто тут за вас не возьмется. Открыли поиск и вперед! Вы же как-то получили те знания, которыми обладаете, хотя, скорее всего, так же учились и занимались спортом. Если вы думаете, что у вас у одного времени мало, то вы глубоко ошибаетесь.
    Ответ написан
    Комментировать
  • Что почитать по Perl?

    @s1dney
    Ответ написан
    Комментировать
  • Как грамотно сформировать структуру проекта на PHP?

    Если хотите написать свою ORM, то возьмите пару уже готовых из каких-нибудь фреймворков, посмотрите как они устроены, возьмите лучшее из них и напишите свою). Еще рекомендую почитать вот эту книжку Фаулера www.williamspublishing.com/Books/5-8459-0579-6.html , главы 3, 9, 10 - там именно то, о чем вы спрашиваете.
    Ответ написан
    1 комментарий
  • Стоит ли сегодня переплачивать за сайт на ruby? Или сэкономить на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне не понятно почему в два раза дороже. Ладно бы там на 30% дороже, но в два? Сроки разработки этого проекта на Ruby даже чуть меньше, чем на PHP или приблизительно равны. Покрытие кода тестами и прочее сильно много разницы в сроках так же не дает.

    Вывод, либо вы нашли разработчика на Ruby с завышеным рейтом, либо разработчика на PHP с рейтом в два раза ниже. Если второе, то стоит задаться вопросом, а хватит ли у него квалифакации? Может быть во время оценки он не учел покрытие кода интеграционными/функциональными тестами, может еще чего.

    По хорошему стоимость не должна так уж сильно различаться. Рейт сильного Symfony девелопера не ниже рейта хорошего RoR девелопера. Сроки по вашему скудному описанию скорее меньше будут у RoR. Вывод, RoR должен обойтись дешевле. По возможностям Symfony больше подходит для долговременных проектов, он быстрее Ruby (на hhvm так прилично быстрее), но под RoR больше качественных готовых решений, что так же должно сократить сроки разработки.

    Словом... мутно как-то. Опишите как вы получили "в 2 раза дешевле".
    Ответ написан