• Как сделать простенькую MVC модель в php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Итак, займемся переводом для начала

    на главной создаю объект:

    В точке входа/во фронт контроллере. Объект этот завется маршрутизатор или раутер. Имеет отношение к MVC - нет.

    вот что в файле hello.class.php:

    Такое именование файлов и классов было модным во времена php4. Отройте для себя PSR0 (и еще отдельно про PSR-4 можете почитать).

    Т.е. при обращении по url: site.localhost/hello я вижу hello!!!! на экране.

    Поздравляю вас с первым контроллером... хоть и убогим слегка. Читаем про контроллеры в контексте GRASP

    ну в htaccess я прописал нужную конструкцию

    Верни мне мой 2007-ой, когда все было круто и все хвастались своими ЧПУ на модреврайтах. Подумайте в сторону единой точки входа и перенаправления всех запросов, для которых не нашлось файлов на эту точку входа. Но это так... просто... совет. Это упростит жизнь при миграции скажем на nginx или черокки какой.

    Вот я и поплыл в этих терминах.

    Заходим на википедию и выплываем.

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


    Советую почитать полную статью и пройтись по ссылкам. Особенно по части модели данных. Это должно прояснить для вас такой момент что модель это модель данных. То есть у вас есть данные, например блог-пост, есть его модель (просто класс Post который имеет поля id, title, body и т.д.). Проще говоря модель это представления данных в приложении. А view - это слой который занимается тем что переводит данные из формата модели в формат запрашиваемый пользователем. Причем вам не запрещается работать из контроллера с базой. Ну то есть как, есть такие вещи как сервисный слой и тонкие контроллеры, но мы же пока только учимся да?). В любом случае модель не должна знать ничего о том где и как она хранится.

    Теперь по поводу view. Давайте вспомним что такое запрос в контексте WEB-приложений. Это старый добрый HTTP запрос. У запроса есть заголовок - Accept который говорит что хочет получить пользователь (пользователи могут быть не живыми и хотеть что-то другое, например JSON). Через него браузер говорит что хочет получить. Например он говорит "хочу text/html" и мы должны выполнить следующие стэпы:
    - вызвать контроллер
    - контроллер достает из закрамов модельки которые хочет пользователь и отдает их во view.
    - view переводит данные из формата приложения в формат который хочет увидеть пользователь.

    В очень грубой форме view может быть таким:
    PostView {
        
        private $post;    
    
        public function __construct(Post $post) {
            $this->post = $post;
        }
    
        public function renderTitle() {
             return sprintf("<h1>%s</h1>", $this->post->getTitle());
        }
        // и еще пара методов    
        public function render() {
             $this->renderTitle();
             $this->renderBody();
        }
    }


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

    Практическое задание:
    Если все что делает контроллер это отдает отрендренный шаблон без какой либо переменной в нем.... Это MVC? Где тут модель?
    Ответ написан
    3 комментария
  • Лучше начать с декларативной парадигмы или императивной?

    FedrBodr
    @FedrBodr
    8 лет в javaEE, теперь свой бизнес, снова java )
    Изучение любого разовьет мышление)
    А если серьезно - рекомендую определиться что вам интереснее программировать и в этом направлении и развиваться - там и понятнее будет с парадигмой.
    Ответ написан
    Комментировать
  • Несколько вопросов по Scheme и языкам функционального программирования?

    @bromzh
    Drugs-driven development
    Смотря какую цель ты ставишь перед собой. Обычно подбирают инструмент под задачу, а не наоборот. Изучать ради изучения - не самая лучшая идея. Но знать основы функциональщины никогда не повредит.
    Да и важно понимать, что в функциональном стиле можно писать практически на любых языках, а не только на чисто функциональных.

    1) Схема очень проста, но непривычна. Прочитай SICP, отличная книга по программированию в целом.
    2) Почти никаких. Так уж вышло, что она не особо популярна в прикладных областях. Ну а в самом Racket можно выбирать разные диалекты, посмотри там.
    3) Эрланг, в силу устройства самой платформы, отлично подходит для быстрых асинхронных сетевых приложений (и никакого коллбечного ада). Для скалы есть хорошие веб-фреймворки: Play 2, Lift, etc. Для кложы не так много, но последние 2 - это JVM, соответственно, можно использовать многие Java-либы.
    4) Питон никуда не ориентирован. Что мешает комбинировать разные парадигмы? Просто в питоне всё есть объект. Это облегчает ООП, да. Многие типы данных там мутабельны. Но и функциональный подход там тоже часто применяют (декораторы, например - частое явление). Map'в и reduce'ы тоже присутствуют, плюс, есть целый пакет functools. И numpy.

    В общем, почитай SICP =)
    Ответ написан
    2 комментария
  • На каких языках можно писать под Android?

    deadbyelpy
    @deadbyelpy
    веб-шмеб
    С++, Java, Python, Ruby, Js и так далее.
    Разработка под Android не ограничивается одной Jav'ой
    Ответ написан
    5 комментариев
  • А вы знаете стандартные структуры и алгоритмы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    пузырек не напишет только тот, кто не знает что это такое. Ну и да, нужно знать примерно как они работают и сложность различных алгоритмов для различных случаев что бы писать более эффективный код.

    Вообще все упирается в знание сложности алгоритмов, из этого вытекает что вы должны знать хотя бы примерно как эти алгоритмы работают. Скажем вы должны знать что при таком-то случае, с которым у вас чаще сталкивается программа, алгоритм А имеет сложность O(N) а другой при таком же случае всего то O(logN).... при том что в большинстве других задач тот же самый алгоритм A c определенными допущениями может иметь сложность O(1).

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

    Сейчас вот собираюсь перечитать Кромена, "Алгоритмы: построение и анализ". Ибо поймал себя на мысли что я уже плохо помню все это дело.
    Ответ написан
    6 комментариев
  • Что делать, если твои коллеги(и ты сам) только что освоили git, и каммитят все подряд?

    opium
    @opium
    Просто люблю качественно работать
    в целом достаточно понятные и разнообразные коммиты, не очень понятно чем они вам не нравятся?
    большие задачи оформлять в один коммит , но вижу что у вас все маленькие и объединять их нет смысла
    Ответ написан
    7 комментариев
  • Можно ли выкупить красивый IP в личное пользование и использовать его вместо домена?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Продам 192.168.1.0. Недорого. К лотку приучен. Жрёт мало.
    Ответ написан
    Комментировать
  • Как осуществлять поиск в json на jquery?

    ivaynberg.github.io/select2 - вам очень подойдет. Умеет искать по любому значению при желании и выпадающий список тоже имеется.
    Ответ написан
    Комментировать
  • Есть ли способ автоматически выставлять отступы в python?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возьмите PyCharm, да и я как-то думаю что вообще в любом редакторе нормальном есть функция auto-indent.
    Ответ написан
    4 комментария
  • Что нужно знать, чтобы стать хакером?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ей, хе хей!

    Ну народ, давайте называть вещи своими вещами. Конечно, есть толковый словарик, но нередко он ошибается, так как пытается охватить неохватываемое.

    Хакер - это не тот, кто взламывает, ломает. Ближе всего, конечно, определение, как хулиган. Но тоже не совсем верное. Это скорее безбашенный человек, который не знает слова "невозможно" и пытается докопаться до порой недокапываемого. Но к тому же, он весьма просвещён в области Computer Science (понимает, когда есть смысл, а когда нет смысла вскрывать RSA и подобное). К тому же он далеко не профан в схемотехнике: паяльник держит ровно, мозг может выдать схемку, а руки всё ровно сотворить.

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

    Теперь о том, что собственно хакеры делают. Они исследуют. Исследуют новое и, возможно, не очень важное. Но весьма и весьма интересное. Если Вам не интересно, почему виртуалиция кода очень крута и зачем в Windows до сих пор литеральное монтирование дисков, то возможно стезя хакера не Ваша. Научиться этому всему можно, но вряд ли Вам это будет интересно.

    Многие мои знакомые узнавали об устройстве компьютера едва ли не сами, методом проб и ошибок. Запомните это: на границе исследованного этот метод, пожалуй, единственный. Больше ничего нет просто потому что никто ничего не продумал.

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

    Кевин Митник - хакер информационной безопасности
    Джон Кармак - хакер трёхмерной графики
    Джулиан Ассанж - хакер информационной безопасности
    Линус Торвальдс - хакер just for fun'а

    Есть ещё много реально крутых хакеров. Если Ваш путь - информационная безопасность, то вот небольшой roadway: в первую очередь следует изучить теорию чисел, разобраться в криптографии, потом разобраться в сетевых технологиях (здесь очень много всего: от iptables до сетевых интерфейсов как в софте, так и в железе), наконец потом немного драйверов, userland'а и kerneland'а: как работает ОС, где слабые места. В перерывах кормим себя web'ом: apache, ngix и прочая сетевая утварь; также изучаем багрепорты и те дыры, которые уже были найдены когда-то, пытаемся найти и то, как они были найдены, в каких обстоятельствах.

    Проникаемся всей этой атмосферой. Порой вытворяем безумное. Нет, не пытаясь получить премию Дарвина, скорее пытаемся решить задачу тысячелетия и/или взломать пентагон.
    Ответ написан
    3 комментария
  • Как заставить работать социальные share-кнопки Pluso с turbolinks Rails?

    viktorvsk
    @viktorvsk
    Послать в жопу турболинкс, очевидно же
    чего вы им хотите добиться?
    Ответ написан
    3 комментария
  • Какую легкую IDE выбрать для php?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Ели хотите подсвечивание ошибки - вам нужна тежелая артилерия в виде PhpStorm - там будет точно проще.
    Легкая IDE странное словосочетание.
    Ставьте EAP версию - она бесплатная 30 дней, в течении этого периода обычно выходит новая версия, иногда не одна.
    confluence.jetbrains.com/display/PhpStorm/PhpStorm...
    Ответ написан
    Комментировать
  • Как сделать, чтобы меню отображалось на разных страницах по-разному?

    @IceJOKER
    Web/Android developer
    поздравляем ! =)
    Ответ написан
    Комментировать
  • Laravel 4. За какой срок можно создать проект "Каталог ресторанов + бронирование"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если подходить с толком, часов 100-160 на изучение Laravel и часов 160-1000 на реализацию. Такой разброс потому что хз что вы собираетесь делать.
    Ответ написан
    2 комментария
  • Что изучать, на что тратить свободное время, чтобы в будущем стать востребованным программистом с нормальным заработком?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ответ на вопрос будет сильно зависеть от того, в каком направлении вы думаете развиваться.
    Будет ли это сетевое программирование? Тогда это си, в основном.
    Может быть, веб-программирование? Тогда тут могут быть php, javascript, python, ruby.
    Захотите разрабатывать программы на десктоп? Вам нужны c# или java.
    На мобильные платформы? тогда java и objective c (плюс swift).
    Или податься в разработку игр? Тогда либо c++, либо с# (для Юнити - наверное, самой популярной платформе).
    Хотите экзотики? Приглядитесь к функциональным языкам - Erlang и Haskell.
    Разработка железа и драйверов для железа? тогда си (без плюсов) и ассемблер.
    Определитесь, что вы хотите, потому что всё объять не получится. Выберите один (или два) направления и добейтесь хорошего уровня в нём. А потом вам будет уже легче двигаться дальше.

    Мой совет - попробуйте изучать C# или Java (они во многом похожи) для софта, или Javascript и php/python для веб-приложений и сайтов.

    Добавлю, что очень правильный совет дал @tsarevfs - помимо языка программирования, хороший программист должен знать несколько инструментов - и в первую очередь, это система контроля версий, например, git. Плюс юнит-тестирование (хотя это можно начать изучать позже, через годик-два). Плюс - нужно хорошо знать свою IDE, в которой работаете; не вздумайте работать в блокнотиках!

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

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

    UPD. Важное дополнение из обсуждения в комментариях (спасибо @Argentum88 @Deerenaros )
    Чтобы стать профессионалом и "востребованным программистом с нормальным заработком", нужно очень хорошо понимать внутреннее устройство тех систем (платформ, фреймворков), на которых идёт работа.
    Для этого нужно заглядывать вглубь. Изучив различные мейнстрим-инструменты, посмотреть на аналогичные менее популярные системы. Изучать исходный код используемых open-source библиотек. Написать свою подобную систему. Для web - написать свою CMS (хотя бы базовую). Для десктоп-программ - попробовать программировать без навороченных библиотек, которые делают рутинную работу за программиста. Для разработчика игр - сделать простую игру на базовом инструментарии платформы, где всё придётся делать своими руками.
    Всё это даст возможность проникнуться, почему всё делается именно так, даст понимание взаимосвязей разных частей программы.
    А потом, осознав это, выбрать один из уже готовых инструментов, и продолжать писать на нём, уже обладая более глубоким его пониманием.
    Ответ написан
    21 комментарий
  • Как зашифровать ajax?

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

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

    есть еще много другого, но подумайте, стоит ли заморачиваться? Т.к. смысла нет.
    Ответ написан
    5 комментариев
  • Где найти нормальную форму обратной связи?

    Ищи :) Готовых решений миллионы, поиском тоже нужно уметь пользоваться.
    Ответ написан
    Комментировать
  • От блоговой CMS до крупного интернет магазина. Так ли это важно?

    @Lici
    Битрикс не так хорош, как принято думать. Грубо говоря, у него просто репутация хорошая и с легким налетом "элитарности", а затраты на программистов и контент-менеджеров растут сразу в несколько раз как минимум. А еще не стоит забывать, что и сам битрикс - платный.
    Ответ написан
    Комментировать
  • Где лучше хранить контент?

    @stas3572
    Конечно из базы! Также стоит задуматься о хранении скриптов и стилей в отдельных табличках.
    Выгода: колоссальная, вы только представьте в вашем index.php будут в итоге всего лишь несколько запросов к базе - на подключение разметки/шаблона, скриптов и стилей, а не всякий лапшакод из html, js, css и php вперемешку
    Ответ написан
    4 комментария