Задать вопрос
  • Как лучше изучать SQL, если сложно понять?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    www.sql-ex.ru/?Lang=0 ресурс специально для, выполни все упражнения
    Ответ написан
    Комментировать
  • Зачем нужны отдельные классы для работы с БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле это интересный вопрос. А, точнее, два: зачем нужен такой класс, и зачем их пишут.
    Ответ на первый становится очевиден, когда начинаешь не смотреть на код, а писать его ;)
    Практически все библиотеки, представленные в РНР, представляют в пользование программиста довольно низкоуровневые функции, которые позволяют, с одной стороны, довольно гибко управлять процессом, но с другой - делают этот процесс ну очень многословным. Самый яркий пример - CURL. Никто, находясь в здравом уме, не будет писать все время эти бесконечные curlopt. Надо пилить библиотеку, которая реализует стандартные методы пост, гет за один вызов, и только для исключительных случаев позволяет задать кастомные параметры.

    То же самое касается и работы с БД. К примеру, очень часто нам бывает нужно получить из БД массив. Сколько строк нужно написать для этого? Классическим говнокодом - 5:
    $ret = array();
    $res = mysql_query();
    while ($row = mysql_fetch_assoc($res)) {
        $ret[] = $row;
    }

    И такой код надо написать раз 15-20 за приложение. У программиста сразу руки зачешутся уничтожить этот повторяющийся код и написать функцию, которой передаешь запрос, а получаешь массив. За 1 вызов. Вот для этого библиотеки и пишут.

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

    Возьмем для примера код примера из мануала. Даже выкинув из него очевидные глупости, мы получаем пол-дюжины строк кода. Это на ОДИН запрос.
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($district);
        $stmt->fetch();
    }

    И это все - чтобы получить единственную строчку!

    В то время как с помощью (нормальной) библиотеки вся работа с БД сведется к 1 (одной) строчке, а все необходимые телодвижения будут выполнены библиотекой автоматически:
    $distr = $db->getOne("SELECT District FROM City WHERE Name=?", $city);

    Теперь перейдем ко второму вопрос - зачем их пишут.
    Самый основной мотив - "шоб було!" "У всех есть - значит, и у меня будет!". При этом, подходя к написанию библиотеки, новички наступают на одни и те же грабли.
    Чаще всего, из-за недостатка опыта авторов, код сокращается только для самых примитивных запросов. Но при этом работа с нестандартными запросами превращается в ад. Но самое ужасное - практически никогда такие самописные библиотеки не поддерживают работу с подготовленными выражениями. А это должно быть их главной фичей, без которых ценность сразу стремится к нулю. А точнее, даже к минусу, потому что инъекции. Ну и по мелочи: к примеру, если в коде действительно написано $db->FetchArray(); - то это ужас, летящий на крыльях ночи, потраченной на отлов неочевидных ошибок .
    Ответ написан
  • Как грамотно начать погружаться в разработку под iOS и что для этого нужно?

    @Sobakus
    Нормально начать разрабатывать для apple можно только на компьютерах apple. Это самая большая преграда. Не стоит связываться со всякими виртуальными машинами и прочими гениальными идеями. Экономия будет очень сомнительная. Только mac. Для начального уровня не важно что именно это будет: MacBook, Macmini, iMac. Если собираетесь брать новое устройство, то по мне лучше взять 13 MacBook Pro без Ретины. Причем взять минимальную конфигурацию. Почему именно ее? Эту модель можно доапгрейдить. Добавить Ram (до 16 Gb), поменять или добавит HD или SSD диск. В остальных MacBook'ах это уже сделать нельзя, память впаяна в плату. Retina, ну не знаю, все таки не бюджетный вариант. Retina хороша 15 дюймовая в топовой комплектации, но там и цены заоблачные. А у 13 дюймовых моделей все равно придете к тому, что нужен внешний монитор. Тогда смысл в ретине пропадает. По поводу устройств их можно вообще не иметь первый год -полтора. Эмуляторы прекрасно работают с основными функциями. Опять таки для запуска приложения на реальном устройстве нужна лицензия разработчика. Стоит она 100$ В год. (Для запуска на эмуляторах такая лицензия не нужна.)
    По поводу самого программирования: тут нужно начинать изучать с ООП, без этого никуда. ( Что такое классы, объекты, указатели, конструкторы и т.д.) т.е. изучать теорию. Лучший выбор это любая книжка про Objective C. Причем в начале просто сидеть и читать изучая термины. В начале будет такая каша в голове, что иногда будет казаться, как этот бред вообще можно понять и освоит. После посмотреть какое-либо обучающее видео на эту тему. И так постепенно, со временем что-то начнет усваиваться. Только ПОСЛЕ этого нужно Обязательно пойти на курсы. Там все систематизируют и раставят по полочкам. Сразу с 0 идти на курсы не советую, тяжело. Усвоите очень мало. Любую информацию нужно переварить, обдумать, а тут бац, новая подвалила, Эээ я еще это не запомнил и т.д. По опыту скажу курсы без подготовки, деньги на ветер.
    P.s. Если остались вопросы пишите, чем смогу помогу. (densobakacom собака mail.ru)
    Ответ написан
    1 комментарий
  • Жив ли Vanilla.js?

    Он живее всех остальных JS фреймворков.
    Vanilla JS - это Чак Норрис среди JS фреймворков.

    Пара ссылок:
    JavaScript MDN
    ECMAScript Programming Language

    vanilla-js.com - на этом сайте можно собрать VanillaJS под себя. Только посмотрите на размеры получаемого файла: 0 bytes uncompressed, 25 bytes gzipped.

    Это самый функциональный и одновременно самый оптимизированный JS фреймворк.
    Ответ написан
    2 комментария
  • Что такое такое rest api?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    API социальных сетей - это вполне типичные примеры реализации REST API.

    REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции.

    Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):
    1. получение данных с сервера (обычно в формате JSON, или XML)
    2. добавление новых данных на сервер
    3. модификация существующих данных на сервере
    4. удаление данных на сервере

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

    Для каждого типа операции используется свой метод HTTP-запроса:
    1. получение - GET
    2. добавление - POST
    3. модификация - PUT
    4. удаление - DELETE

    Т.е. :

    GET-запрос /rest/users - получение информации о всех пользователях
    GET-запрос /rest/users/125 - получение информации о пользователе с id=125
    POST-запрос /rest/users - добавление нового пользователя
    PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
    DELETE-запрос /rest/users/125 - удаление пользователя с id=125
    Ответ написан
    20 комментариев
  • Как вы делаете security аудит сайтов?

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

    Если же брать конкретный сайт и есть доступ к исходникам, то алгоритм следующий (для PHP)
    1) Открываем исходники в IDE
    2) Делаем поиск вызова функций типа eval и проверяем какие данные передаются в эти функции
    3) Делаем поиск обращения к переменным из массивов POST, GET, REQUEST и проверяем как данные фильтруются и используются
    4) Делаем поиск move_uploaded_file, file_get_contents и проверяем как фильтруются данные передаваемые в функцию

    Если же доступа к исходникам нет, то алгоритм следующий
    1) Пытаемся определить движок, например, тут 2ip.ru/cms/
    1.1) Пытаемся Определяем версию движка
    1.2) Чекаем наличие багов в данном движке
    2) Пытаемся найти админку (Admin Finder)
    2.1) Чекаем стандартные пары логин-пароль
    3) Чекаем наличие папки svn
    3.1) Делаем анализ исходников
    4) Проверяем наличие дампов (папка dump, файлы dump.sql, dump.zip и т.п.)
    4.1) Проверяем наличие паролей в архиве
    4.2) Делаем анализ исходников
    5) Составляем список уникальных URL (http://example.com/q/1 и example/q/2 — не уникальные, но example/q/1 и example.com/p/2 — уникальные).
    5.1) Если включено ЧПУ пытаемся подобрать имя GET переменной
    6) В адресную строку летят кавычки, преобразование переменных в массив (если удалось обнаружить имя GET переменной), HTML теги
    7) Проверяются cookie сайта. При наличии кукисов установленных самим сайтом меняем значения на свои (опять кавычки, html теги
    8) При наличии на сайе форм (комментарии, публикация статей, заметок, строк поиска и т.п.) с последующим выводом введенных данных на странице производится проверка на наличие XSS
    9) Тестируется работа сайта с кривым именем браузера
    Ответ написан
    Комментировать
  • Цвет рамки монитора - черный или серебристый, какой для глаз лучше?

    Iliapan
    @Iliapan
    Рабочее окружение — жесть. Лучше всего вам организовать место в отдельной комнате — кабинет называется.
    Ответ написан
    Комментировать