• Как развить мышление для программирования?

    mrRontgen
    @mrRontgen
    Scala lover.
    Недавно закончил изучение Python.....

    Знание синтаксиса языка не не означает что Вы знаете язык. Закончите свою фразу до конца. Что в языке Вам понятно, что не понятно? Я знаю много людей, которые прочитали много книжек по математике, алгоритмам но применять эти знания они не могут. Высшая математика( как Вы ее назвали) - это уровень абстракции ( реальная задача превращается у выражение, уравнение). Вот например, сколько нужно купить обоев, что бы обклеить комнату? Замеряете размеры стен, узнаете ширину полотна обоев, записываете уравнение и вуаля!! Так же и в программировании. Есть реальная задача и Вы переводите ее на некий язык ( создаете абстракцию, модель). И что действительно дает математика, так это навык и умение работать с абстракциями. И чем лучше Вы научитесь мыслить абстракциями, тем лучше Вы сможете решать задачи( причем не обязательно в программировании). Что я хочу донести, так это то, что бы Вы не тратили время на простое изучение книжек! Найдите задачу и начните ее решать, а процессе решения у Вас появиться куча вопросов и ответы на них Вы и будете искать в книжках, на тематических сайтах и так далее. Более того Вы научитесь задавать вопросы по существу! А раз Вы говорите, что закончили изучение Python - то вот Вам и задачка: почему в питоне нет оптимизации хвостовой рекурсии?
    Ответ написан
    Комментировать
  • Как развить мышление для программирования?

    Опыт лучший учитель. Занимайся непосредственно программированием от легких задач к сложным. Я закончил физико-технический факультет и когда занялся программированием ничем не отличался от тебя путался в алгоритмах и с трудом строил циклы. Начинал с самого простого, брал учебник и разбирал примеры, придумывал задачки и храбро их решал, читал мануалы, находил толковые видеоуроки по нужному материалу. Терпение и труд делают свое черное дело, я занимаюсь Web-программированием и чем больше изучаю его, тем больше осознаю как много еще не знаю. Думаю, в программировании самое важное то, чтобы тебе самому было интересно им заниматься и ты с удовольствием тратишь на него свободное время и силы, все остальное придет со временем. Еще могу посоветовать найти компанию единомышленников или наставника, с кем можно посоветоваться и попросить помощи, мне в этом повезло, у меня лучший друг хороший программист, даже и не знаю, что бы без него делал)
    Ответ написан
    Комментировать
  • Как освоить Composer?

    @SilverSlice
    Обзор на русском можно посмотреть здесь . Дальше читайте и переводите документацию на официальном сайте, там всего несколько основных команд.
    А важность этого инструмента определяется вашими задачами: если вы пишите плагины под wordpress или настраиваете bitrix, знать его необязательно, а если используете современные фреймворки и open source библиотеки, то без него никуда.
    Ответ написан
    Комментировать
  • Doctrine 2 и Twig как получить доступ к объекту?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если у вас такие специфичные вещи, типа репорты и т.д. имеет смысл завернуть результат в DTO с простым интерфейсом и передавать в шаблон его.
    Ответ написан
    Комментировать
  • С чего начинать проектирование проекта под Symfony2 ?

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

    Далее обычно описывается модель (ORM). Про использование команды автогенерации гетеров/сеттеров - я бы не рекомендовал её использовать, т.к. у нас могут быть "свои" методы у entity. К тому же, любая IDE умеет генерировать гетеры/сеттеры автоматически.

    После создаем контроллеры + настраиваем роутинг, по необходимости создаем репозитории/менеджеры. Парралельно создаем views, тут уже все должно быть понятно.

    Если используете phpStorm ставьте плагины: Symfony2-plugin (незабываем настроить под проект и включить его), PHP Annotations и Symfony Clickable views. Все это сильно упростит разработку.

    Если только учите Symfony, я бы посоветовал разобраться с основными подсистемами поглубже (там все очень гибко, но со старта может показаться чересчур сложно, но это так кажется). Начинаем с routing, контейнера-зависимостей, конфигурации, security, form (два последние самые сложные) и попорядку.
    Ответ написан
    Комментировать
  • Насколько эффективно знать языки программирования ?

    virtyaluk
    @virtyaluk
    Если я все правильно понял, то гейм дев и системное программирование - это две большие разницы.
    Чтобы добиться какой-либо эффективности и знаний множества ЯП, нужно потратить очень большое количество времени, а как показывает практика - эффективность работы в одной плоскости со знаниями ЯП т.е. чем усерднее ты изучаешь и работаешь с одним ЯП, тем больше от этого толку, и наоборот, чем больше ЯП ты начинаешь изучать, тем меньше становится твоя эффективность (ибо "все и сразу" - так не бывает).

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

    Гейм дев. Тема очень огромная и предоставляет массу инструментов и решений для достижения цели. Лично я начинал с Microsoft XNA, до этого около 4-х лет писал на C#. В принципе, я прочитал 3 книги по "хне" и посмотрел один видеокурс от "линды" и этих знаний было достаточно для реализации практически любой задумки в 2d. Конечно, это не DircetX и C++, но для начала тоже неплохо.
    Потом майки клали на хну и я, имея хорошие навыки в JavaScript, переметнулся в HTML5 Canvas.
    В принципе, прочитав Steve Fulton, Jeff Fulton - HTML5 Canvas, я сразу начал делать браузерные 2d-платформеры. Конечно, на канвасе не напишешь очередной Кризис и по производительности он далек от идеала, но технология стремительно развивается и уже сейчас можно писать очень крутые проекты. Теперь подумываю освоить Unity, где в качестве скриптового языка используется C# и имеется обширная коллекция асетов и т.д. К тому же, юнити уже работает практически под любой платформой, легко портируется, "рисует" отличную картинку и имеет огромнейшее комюнити.
    Самое сложное в геймдеве - быть программистом, художником, саунд-продюсером и сценаристом одновременно. Без нужных людей очень трудно чего-то добиться.

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

    Надеюсь, мой совет вам поможет :)
    Ответ написан
    1 комментарий
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    @TroyashkA
    Самый лучший ответ для топикстартера - просто начни. С теорией у тебя всё плохо, зато с фантазией все хорошо и это отлично на самом деле. Как сказал @Kazmiruk, у него тоже в начале были велосипеды, вот с этого надо и начать. Однако, здесь не совсем явно был выделен один момент. Онлайн игра - это МНОГО графики. Если её качество будет плохим, то мало кто будет играть, за редким исключением, типа того же minecraft, но там автор сильно подумал, как компенсировать этот недостаток и превратил его в фичу.
    А если смотреть на вещи реально, то в данный момент, создавать рабочую реализацию тебе пока рановато, теорию и практику ой как подтянуть надо. Я бы на твоем месте сделал так: сделай первую версию и постепенно улучшай. Не сделаешь - значит еще не время для таких вещей.
    Ответ написан
    Комментировать
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    @dplsoft
    Сильно мне кажется, что вам в первую очредь надо понять/рассказатьНам что именно вы собираетесь писать, а уже потом - вам могут предлагать те или иные варинты решения.

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

    И что вы вкладываете в понятие "реалтаймовый"?
    вы понимаете, что если 2-х шахматистов ограничить регламентом - мол далайте ход раз в минуту и строго черезх минуту всегда - то это тоже будет _реалтаймовая игра_? "реалтаймовые шахматы с периодом 1 минута". Вас устроит такое?

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

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

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

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

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

    Вообще задача сильно глобальная - в том виде как задан вопрос.
    Может стоит попробовать начать с чего-то более простого? потому что если вы задаете вопрос про то "как открывать сокет" (технологический инструментарный вопрос) - но плохо представляете что делать если начнется "рассинхронизация" (это концепции логики работы распределнной системы сервер-клиенты) - то может стоит начать с чего-то попроще?

    например, сделать сервер для какой пошаговой игры?
    Ответ написан
    5 комментариев
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    @kazmiruk
    Вы задаете более-менее правильные вопросы, но на них нет правильных ответов. Каждый случай очень индивидуальный и кратким ответом тут не обойтись, тут нужны лекции с тоннами теории. Я в свое время писал игры: php (api) + flash (клиент) + C++ (сервер) + mysql (база данных) + memcache (кеш), php (api) + python gevent (сервер) + mongodb (база данных) + redis (кеш) + html5 (клиент), nodejs (сервер) + html5 (клиент) + redis (кеш) + postgresql (база данных). Все они были довольно проивзодительными. Такое разнообразие технологий отчасти обуславливалось моим любопытством (проект на nodejs писал для себя).
    В целом пытаясь ответить на Ваши вопросы:
    1. Не совсем понятно что Вы имеете ввиду. Уточните вопрос.
    2. Лучше всего передавать на сервер все действия клиента и обсчет производить на сервере для невозможности подделывания результатов действий, но это приводит к возрастанию нагрузки на сервер. Протокол - мне нравится bson с готовыми библиотеками, понятным форматом и небольшим размером. Но опять же его я использовал только во втором проекте, в остальных местах я создавал свои велосипеды, которые для конкретных случаев были наиболее эффективны (в моем представлении)
    3. В базе хранить все, что не должно пропадать между играми (условно говоря после выключения сервера ;)), в оперативной памяти дублировать все в идеале (для избавления от операций чтения с диска).
    4. Зависит от потребностей. Postgresql\mysql - более традиционны. Mongodb - модная ) Если Вы понимаете, что в Вашей игре вы можете пережить ограничения mongodb (к примеру отсутствие транзакций) - юзайте его, очень удобен для хранения игровых состояний. Если не уверены - используйте традиционные реляционки.
    5. Кеширование по сути и есть перемещение данных из БД в оперативную память. Причем перемещается таким образом, что скорость выборки из оперативной памяти не зависит от количества данных. Это так называемые хэш-таблицы.

    В общем, без обид, но судя по Вашим вопросам Вам надо очень серьезно подтянуть теорию, прежде чем браться за серьезную игру. Писать серверную часть на С++ - круто, если Вы его знаете на отлично. В целом большого профита Вы не получите, так как скорость С++ проявляется в числодробилках. А игровой сервер - в основном операции чтения\записи, которые будут одинаково выполняться на практически любом современном языке и их скорость больше зависит от построенной архитектуры.
    Мои рекомендации: читать про блокирующие\неблокирующие сокеты, многопточность, структуры данных, паттерны проектирования, оптимизация запросов (включая нормализацию и денормализацию данных), кеширование. Параллельно с этим можно делать простенький чатик постепенно улучшая и оптимизируя его. Таким образом Вы приобретете и теорию, и практику. После этого можно сделать какую-нибудь простенькую игру.
    Ответ написан
    4 комментария
  • Для какого типа веб проектов используют PHP фреймворки?

    copist
    @copist
    Empower people to give
    CMS расшифровывается как "Система управления контентом". Смотрите, какие обычно модули сайта подразумеваются под управлением контентом:
    1. прежде всего текстовый контент - то есть записи блогов, новости, статьи, wiki, описания товаров, объявления
    2. работа с пользователями - регистрация, управление правами
    3. медиа-материалы к контенту - встроенные картинки или поддержка видео-провайдеров (youtube, vimeo)
    4. структуризация контента - категории и теги (или таксономия, если быть точным)
    5. комментарии к контенту
    6. поиск по контенту и комментариям
    7. формы обратной связи и другие способы связи авторов проекта и пользователей
    8. встроенная система баннеров
    9. статистика
    N. и ещё несколько других. Не рекламы ради, а для наглядности: список модулей одной из популярных CMS take.ms/5k7Xd

    Так вот, если ты делаешь проект и тебе надо выбрать платформу, то посмотри на эту картинку - все ли нужные тебе для проекта модули перечислены на картинке?
    Если твой ответ "да", то твой выбор - это CMS. Нужно сконфигурировать её и покрасить в нужный цвет.
    Если ответ "нет", то нужно определить:
    * сколько модулей придётся дописать (запрограммировать, адаптировать);
    есть ли возможность расширять CMS нужными тебе модулями, например, с помощью системы плагинов;
    * достаточно ли документации на эту CMS, чтобы не заблудиться в коде.

    Для некоторых проектов окажется, что лучше не использовать CMS, а написать с нуля нужный функционал, а потом уже дописать к нему пару модулей, которые присущи именно CMS. Например твой проект касается деятельности Forex и тебе нужно добавить комментарии к текущему курсу валюты :)

    А фреймворки, самописные или популярные, используются потому, что позволяют упростить и организовать программный код, чтобы кодилось компактнее, быстрее и было понятнее для чтения.
    Ответ написан
    Комментировать
  • Как правильно разрабатывать web-проект?

    mrsombre
    @mrsombre
    Веб-программист
    Нормальный бук как переносное рабочее место. На него virtualbox (или denwer / zendserver), если с виртуалками сложно. Как ide - phpstorm. Вся разработка локально, если разработчик один - можно жить без гита, хотя с ним удобнее. Из phpstorm (да и из других ide современных) работать с гитом проще некуда. Нужно купить приватный акк на гитхаб, например, 7$ в месяц. Инициализировать репу. Клонировать ее из ide и только нажимать две кнопки commit-push и редко - pull. Релизить на сервер готовый код удобно встроенным в ide deployment tool.
    Раньше тоже работал на работе на одном компе, дома на другом. Но когда купил бук и стало все на одной машине жить, то я почувствовал радость от жизни )
    Ответ написан
    6 комментариев
  • Как далеким от программирования основателям найти ведущего разработчика в стартап?

    Informatikum
    @Informatikum
    Преподаю робототехнику и информатику в школе.
    Найти сотрудника по Вашим критериям будет сложно. Возможно стоит снизить критерии поиска и принять не одного, а двух или трех простых программистов (работяг).

    Брать в команду, делать партнёром, это большая ошибка и заблуждение. У меня была своя веб студия, 8 программистов. Было не легко, чертовски увлекательно. Как только я принял 2х в свой бизнес, всё рухнуло.

    Берите работника - чтобы работал. Партнёры - это управленцы, инвесторы, руководители. Никак не работники.

    1. Искать, искать, искать. Не переставать искать.
    2. Нанять тех, кто подходил и не выпендриваться.
    3. В процессе развития проекта, найти спеца.
    4. Лучшим вариантом, будет в процессе выбрать лучшего и его сделать руководителем.
    5. Забыть про утопичное партнёрство с рабами. :)
    Ответ написан
    8 комментариев
  • Какой язык программирования подходит для заработока?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Какой язык программирования подходит для заработока?

    Любой, кроме наверное, эзотерики типа брэйнфака.

    пофрилэйнсить

    бр...

    посоветуйте на какой язык перейти

    вы бы хоть сказали какая сфера интересует, WEB, мобильщина, все... а так... смотрите на вики любой язык программирования на ваш вкус. Мэйнстрим сейчас это java, c++, php, ruby, python, javascript...

    Java к сожалению не дается... Слишком она уж тугая после C# и справка на английском меня убивает....

    Может быть проблема в вас? Или вы хотите сказать что по Java, одному из самых популярных языков программирования в мире, мало литературы на русском?

    p/s: реально ли в ИТ сфере без английского?)

    Реально но тяжко. Так или иначе придется освоить.
    Ответ написан
    8 комментариев
  • Как проверить, есть ли значение в переменной javascript?

    cha-cha
    @cha-cha
    Потому что typeof null == object. Пишите так:
    if(cname == null){
     //...
    }
    Ответ написан
    Комментировать
  • Какую программу взять для учёта времени работы за компьютером (тайм-трекер)?

    rescuetime.com подходит под все ваши требования, разве не снимает скриншоты. Здесь можно скачать приложения для различных платформ rescuetime.com/get_rescuetime
    Ответ написан
    2 комментария
  • Как найти часть массива в массивах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $search = array_filter($arr, function (array $item) use ($needle) {
        foreach($needle as $key => $value) {
            if (!isset($item[$key]) || $item[$key] !== $value) {
                 return false;
            }
        }
    
        return true;
    }


    И еще вариантик....

    $search = array_filter($arr, function (array $item) use ($needle) {
         return $needle == array_intersect_key($item, $needle);
    }


    и еще один... если вам надо индекс найти... это же и для in_array будет работать если вам нужно только проверить.
    $search = array_search($needle, array_map(function (array $item) use ($needle) {
        return array_intersect_keys($item, $needle);
    }, $arr, false),


    Обновил код, перепутал местами аргументы для array_intersect_key.

    Добавляю быструю реализацию. Быстрее выше перечисленных (кроме первой) раз в 6.
    $search = [];
    foreach ($arr as $item) {
        if ($needle == array_intersect_key($item, $needle)) {
            $search[] = $item;
        }
    }
    Ответ написан
    9 комментариев
  • Как сделать разные php-fpm пулы для разных страниц сайта?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Сделать отдельный локейшин, настроить отдельный пул, завернуть фронтендом локейшин на этот пул.
    Ответ написан
  • Какую программу взять для учёта времени работы за компьютером (тайм-трекер)?

    @romsterdam
    www.staffcop.ru
    www.timedoctor.com - достаточно интересная
    crocotime.com/ru - бесплатная до 15 пользователей, удобная без снятия скриншов и т.п
    Ответ написан
    2 комментария
  • Какова правильная структура в MongoDB?

    qmax
    @qmax
    программер
    Вложенные документы имеют смысл, если их несколько и нет необходимости выборки внутри этой под-коллекции.
    Например, приаттаченные к комментарию картинки.

    Комментарии потенциально многочисленны и может возникнуть необходимость постраничной выборки, либо скрытия длинных веток (как жж или на d3)

    Упорядоченную иерархическую структуру (с оптимизированной выборкой и дорогим переставлением) можно сделать тремя полями:
    parent: id родительского комментария.
    ancestors: id всех предков от корня до родительского.
    level: уровень (длинна ancestors)

    Выборка любой ветки, начиная с threadid до глубины maxdepth осуществляется запросом
    { 'ancestors': threadid, 'level': { '$gt': maxdepth } }
    .

    Сортирвку в порядке линеаризации средствами mongo не получится, если только не вводить дополнительное хитровычисляемое поле для него. Например, строковую конкатенациею level всех предков.
    Ответ написан
    2 комментария
  • Как обратиться к data-параметру jQuery?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    data-id="345"
    
    .data('id')
    .data().id
    .get(0).dataset.id


    То есть для цикла по всем data-атрибутам нужно или data() в jQuery, или просто dataset в нативном JS.
    Ответ написан
    Комментировать