• PHP или Python, что удобнее и выгоднее?

    pavel_dolinin
    @pavel_dolinin
    Для фриланса однозначно начни с PHP
    Ответ написан
    1 комментарий
  • PHP или Python, что удобнее и выгоднее?

    nixischev
    @nixischev
    PHP backend developer
    Сначала выучи PHP, после чего учи Python, т.к. таким образом ты будешь иметь работу на фрилансе, а Python пусть остается как хобби на время изучения
    Ответ написан
    8 комментариев
  • Возможна ли работа web-приложения без CGI?

    VBart
    @VBart
    Такие вопросы на хабре задавать бесполезно. =)

    Большинство ответивших написали местами полную чушь. Основная масса веб-программистов дальше своих фреймворков не вылезают, и у них в итоге полная каша в голове. Например, кто-то путает интерфейс (WSGI, Pump, WEB3, PSGI, Rack, CGI и т.д.), сервер приложений (uWSGI, php-fpm, Rack, Gunicorn, unicorn, flup, Apache в данной роли, и ещё тысячи их) и протокол (HTTP, uwsgi, FastCGI, SCGI, CGI, AJP, WebSocket, да много их). Кто-то путает протокол, способ его реализации и способ запуска интерпретатора.

    Основное, что вам нужно знать, содержится в документации Django:
    docs.djangoproject.com/en/dev/howto/deployment/

    Ответом на ваш вопрос будет: да существует множество и каждый HTTP-сервер поддерживает целый набор протоколов для общения с сервером приложений. И сервера приложений могут поддерживать один или несколько протоколов, один или несколько интерфейсов. Некоторые HTTP-сервера умеют выполнять двойную роль, выступая и в роли сервера-приложения, предоставляя определенный интерфейс. А некоторые приложения сами содержат встроенный HTTP-сервер. Термин же «веб-сервер» слишком общий, и трактоваться может разными способами.
    Ответ написан
    2 комментария
  • Лучший ЯП для парсинга веб-сайтов

    seriyPS
    @seriyPS
    У меня половина опыта работы — именно написание пауков и веб-парсеров.
    Писал их и на PHP + CURL, потом на голом питоне + треды.
    Потом узнал о Scrapy (асинхронный фреймворк для граббинга сайтов на Python) и на нём штук 5 независимых проектов реализовал, в том числе один, где нужно аггрегировать и периодически обновлять информацию с 20 различных форумов. Основная его проблема — он асинхронный, но однопоточный. Так что больше одного ядра им не нагрузить и долгий запрос к БД не сделать. А так очень хороший фреймворк.
    Потом несколько пауков делал на Python с помощью Celery.
    А совсем недавно переписал довольно сильно нагруженного паука (50-70Мбит/с через списки прокси) с Python + Celery на Erlang и понял, что это ОНО! Мало того, что стал работать в 2-3 раза быстрее, но понял, что для этой задачи что-то более подходящее сложно придумать.
    Поясню — у паука на Erlang можно без остановки процесса, например, изменить число потоков, обновить код, перезагрузить конфиги. Можно на ходу отпрофилировать код чтобы узнать, почему скорость упала или что так нагружает CPU. Можно совмещать зеленые потоки, асинхронную работу с сетью и долгие запросы к БД. И всё это фактически из коробки. В конце концов, код получается более логичный.
    Ответ написан
    3 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    barker
    @barker
    Э… даже не знаю что тут ещё сказать можно, совершенно разные действия ведь. Грубо говоря, в первом случае ветка переставляется (со всеми коммитами), во втором отдельно взятый коммит (или несколько, схлопываются в один как вариант) патчится на другую ветку. Отсюда же и разное использование и разные ограничения. И механизм разный. Для понимания механизмов надо изучать всякие там progit и на дереве экспериментировать визуально. А если бы механизмы понимали, этого вопроса 100% не возникло бы :)
    Ответ написан
    4 комментария
  • Как лучше хранить много файлов — в базе данных или в виде файлов?

    @edogs
    На самом деле оба варианта по реализации настолько минимально отличаются, что хорошим советом будет «сделайте сейчас оба варианта, используйте сначала файлы, а когда файлов будет много померяете производительность».

    В 99% случаев файлы лучше, т.к. к ним есть прямой и очевидный доступ без всяких баз, а база в любом случае прослойка.

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

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

    Файлы при прочих равных однозначно лучше попадают в кэш, с другой стороны засирание кэша базой проще контроллировать.
    Ответ написан
    1 комментарий
  • Как в Photoshop замнить белый на прозрачный?

    Вот именно по этому я использую Gimp — там это делается одной командой «Цвет в альфа-канал».
    Ответ написан
    2 комментария
  • Аггрегаторы freelance сайтов

    aetbaev
    @aetbaev
    ayak.ru
    мониторит 16 фриланс бирж
    Ответ написан
    Комментировать
  • Open Server 4.4.6 - не работает SSI. Как исправить?

    Там уже разобрались, человек пробовал работу SSI в .html файлах вместо .shtml
    Отбой тревоги :-)
    Ответ написан
    1 комментарий
  • C#: с чего начать изучение?

    @Seekeer
    Я думаю, вы имели ввиду версию шарпа под дотнет, поэтому расскажу именно про неё.
    Для начала скачайте Visual Studio 2010. Express версия бесплатна.
    Потом определитесь, какую область вы хотите изучить. Упрощая, на c# можно кодить по следующим сценариям: десктоп приложения, веб, винфон.
    На десктоп можно писать и спользованием технологий WPF или WinForms. Так как вы начианаете с нуля, то изучайте ВПФ, винформс потихоньку отмирает, а впф пока неплохо развивается.
    Веб разработка: разработка сайтов на ASP.net и сервисов WCF. Ещё есть направление — веб приложения на Silverlight, эта платформа похожа на WPF.
    Мобильные приложения разрабатываются тоже на сильверлайте.
    Я так понимаю, вы хотите знакомиться с языком и технологиями на практике. Поэтому вам стит выбрать направление, технологию, прочитать пару вводных статей и начинать кодить потихоньку.
    Но если вы в будущем планируете писать на этом языке всерьёз, то параллельно вам нужно прочитать серьёзную книжку, где подробно объясняется платформа.нет и нюансы шарпа. В качестве такой книжки я бы посоветовал Рихтера: www.ozon.ru/context/detail/id/5047621/. Если английский знаете плохо, то www.ozon.ru/context/detail/id/3032556/, а то говорят, что 3е издание перевели отвратительно.
    Ответ написан
    4 комментария
  • Как правильно расставить индексы в БД?

    @Vampiro
    В общем случае, принципы построения индексов достаточно просты: индекс (кроме первичного) строится для ускорения запросов. Причем если есть WHERE по двум полям, то будет взят индекс, содержащий оба этих поля (если есть) и не важно сколько их там еще.

    Другими словами, один индекс по полям «A, B, C» будет более «полезен» для запроса, содержащего некие условия по полям A и B, чем два отдельных индекса по полям «A» и «B».

    Фактически, индексы A,B,C и A,C,D будут одинаковы в части поиска по полю «А». При поиске по полям А,B будет взят первый индекс. При поиске по полям A, C — второй.

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

    Не бойтесь добавлять слово EXPLAN в тело запроса и смотрите какие индексы он использует. Порой оптимизатор использует fullscan даже при наличии индексов.
    Ответ написан
    Комментировать
  • Аггрегаторы freelance сайтов

    Finom
    @Finom
    Как вариант, можно воспользоваться агрегатором RSS.
    Ответ написан
    1 комментарий
  • Аггрегаторы freelance сайтов

    bugaga0112358
    @bugaga0112358
    alllance.com/ — довольно удобен.
    Бесплатно — задержка в 20 минут, 1$ — получаете все без замедления.
    Есть приложение-клиент: висит в трее, по мере поступления заказов всплывают сообщения.
    Ответ написан
    2 комментария
  • [php] Защита от Sql и XSS

    @NiGP
    Сорри нажал на enter
    http://www.php.net/manual/en/book.pdo.php
    а точнее ознакомьтесь с
    bindParam

    от XSS есть не мало функции
    strip_tags() – вырезает теги HTML и PHP из строки.

    htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘»‘, »’, ‘<’ и ‘>’) в HTML сущности (‘&’, ‘"’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

    htmlentities() – конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

    stripslashes() – удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать)
    Ответ написан
    1 комментарий
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

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

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

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

    Damaskus
    @Damaskus
    Интерфейс не представляет из себя некую самостоятельную сущность. Как пульт от телевизора, например.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    @resurection
    Я бы сказал так:
    Интерфейс — это возможность задать жёсткую семантику.
    Абстрактный класс — это возможность вынести дублирующийся код и явно это отметить в иерархии.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    sainnr
    @sainnr
    Как пишут умные люди (Шилдт, Троелсен) в своих умных книжках, интерфейс определяет функциональные возможности, поведение — «что именно следует делать, но не как это делать» (Г.Шилдт, Полное руководство C#). В абстрактном классе «определяется лишь самая общая форма для всех его производных классов, а наполнение ее деталями предоставляется каждому из этих классов» (там же).

    Простой пример, в контексте графического редактора можно определить:
    Абстрактный класс — Figure (геометрическая фигура), от него могут быть образованы классы конкретных фигур — например, Rectangle, Circle и т.д.
    Интерфейс — Drawable (то, что можно нарисовать). Он может быть реализован как во всех классах конкретных фигур (Circle, Rectangle), так и в других классах, не образованных от абстрактного Figure.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    @Ano
    Интерфейсы надо использовать, когда классы, которые должны предоставлять один и тот же интерфейс, не должны быть (или не могут быть) связаны иерархически.
    Кроме того, если нужно предоставить несколько интерфейсов, а множественного наследования нет (как в PHP), то интерфейсы — единственный выход.
    Ответ написан
    1 комментарий
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев