Pull to refresh
24
0

User

Send message

Функции высших порядков и монады для PHP`шников

Reading time10 min
Views23K

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


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


$jNumber = _do(function() {
    $number  = yield literal('-')->orElse( literal('+') )->orElse( just('') );
    $number .= yield takeOf('[0-9]')->onlyIf( notEmpty() );
    if ( yield literal('.')->orElse( just(false) ) ) {
        $number .= '.'. yield takeOf('[0-9]');
    }
    return +$number;
});

Кроме собственно функционального подхода можно обратить внимание на использование классов для создания DSL-подобного синтаксиса и на использование генераторов для упрощения синтаксиса комбинаторов.


UPDATE само-собой парсинг JSON уже давно решенная задача и конечно готовая и протестированная функция на C будет работать лучше. Статья использует эту задачу как пример для объяснения функционального подхода. Так же не пропагандируется использование именно такого кода в продакшене, каждый может почерпнуть себе какие-то идеи, которые могут упростить код и жизнь.


Полный код находится на github.

Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments45

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views681K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

(Не)безопасный frontend

Reading time13 min
Views60K

Интро


Не так давно я выступал на конференции FrontendConf 2015 (РИТ++) с темой данной статьи. И при подготовке доклада начал искать информацию, а кто вообще выступал на данную тему и что есть в Сети на данный момент.

Оказалось, что информации совсем немного, более-менее можно было бы отметить доклад mikewest.org/2013/09/frontend-security-frontendconf-2013 от Mike West из компании Google, но какой-то «непентестерский» взгляд и уж совсем мало материала. И www.slideshare.net/eoftedal/web-application-security-in-front-end где тема раскрыта более детально, но выступление 2011 года. А за 4 года технологии и атаки на месте не стояли.

Долго и сложно выбирая темы, что же все-таки рассказать разработчикам фронтендов про безопасность, при этом минимум касаясь бекэнда (местами все-таки это неделимо), получился доклад, а здесь — его текстовый пересказ.

О чем вообще разговор?


А действительно, о чем тут вообще можно разговаривать? Говоря про взломы и безопасность невольно приходят в голову тезисы — слили базу, получили доступ к выполнению команд ОС на сервере, прочитали чужую переписку. Но это все — server side код. А что ж может «нагородить» фронтэндер? Главная опасность, конечно же, в обходе атакующим SOP — Same Origin Policy, главной политики безопасности браузеров, которая регулирует работу в разных Origin. Но не только, давайте разбираться.

Читать дальше →
Total votes 64: ↑63 and ↓1+62
Comments4

10 способов хранить свои проводки

Reading time2 min
Views64K
wires
Уверен, у каждого хабрачеловека со временем количество различных проводов и шнуров от телефонов, КПК и прочих девайсов начинает превышать все разумные пределы. Стол-то не резиновый. Но не отказываться же в конце концов из-за этого от любимых гаджетов. В этой статье я хочу привести несколько изящных дизайнерских решений, чтобы вы могли «хранить свои проводки» в порядке и радости для глаз. Как и советовал профессор Губерт Фарнсворт.

Читать дальше →
Total votes 161: ↑151 and ↓10+141
Comments133

Выбор CMS для интернет-магазина

Reading time2 min
Views6.3K
image

Если вы в данный момент находитесь на стадии выбора движка для интернет-магазина или планируете заняться этим позже, возможно этот небольшой обзор вам поможет. В ближайшее время, я собираюсь заняться электронной коммерцией, а именно открытием интернет-магазина. При удачно раскладе, возможно, я смогу порадовать хабрасообщество интересными статьями на эту тему, а пока, предлагаю вам небольшой обзор движков и тему для обсуждения.
Читать дальше →
Total votes 26: ↑12 and ↓14-2
Comments57

Проба пера для запуска приложений через X-forwarding на сервере в интернете

Reading time3 min
Views3.4K

Привет, хабр!



Сегодня мы хотели бы поделиться своими наработками и гипотезами относительно применения старых добрых идей к современным тенденциям Web, в частности, Cloud Computing. Вы, наверное, и раньше замечали нехватку некоторой мощности или иных параметров вашего персонального компьютера и уж тем более перед каждым пользователем стоит вопрос о безопасном использовании сети Интернет для своего компьютера и своих же данных. Для пользователей Windows также не дает покоя проблема с вирусами, которые постоянно норовят просочиться на компьютер при посещении веб-сайтов и чтении почты. Предлагаем погрузиться немного в будущее и предоставить некоторый взгляд со стороны на удаленный запуск приложений на веб-сервере через X-forwarding.



Читать дальше →
Total votes 6: ↑3 and ↓30
Comments24

Synergy — управление несколькими ПК с одной клавиатуры

Reading time2 min
Views115K
К моему рабочему компьютеру не так давно добавился еще и лаптоп, который постоянно стоит на столе рядом с монитором. Работать за обоими компьютерами нужно одновременно, и мне начало надоедать постоянно перекладывать руки с одной клавиатуры/мыши на другую.

Я подумал: «Как было бы здорово сделать дисплей лаптопа продолжением дисплея настольного ПК, и при этом управлять ими одной и той же клавиатурой и мышью!». Оказалось, выход есть. И называется он Synergy.
Логотип Synergy
Читать дальше →
Total votes 107: ↑106 and ↓1+105
Comments138

Кладезь электронных книг и журналов на английском языке — Netbks

Reading time1 min
Views1.8K
Здравствуйте!

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

Читать дальше →
Total votes 59: ↑56 and ↓3+53
Comments46

Монтируем удаленную файловую систему через SSH.

Reading time2 min
Views23K
Во время работы часто приходится работать с удаленными файлами, часто через ssh. Gnome позволяет подключиться и работать с данными с помощью утилиты Places->Connect to Server, но, к сожалению, таким образом могут работать не все программы… Vim, например, а так как это основной мой редактор — я искал способ сделать это. И нашел :)
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments29

100 OpenSource инструментов для Web-мастера.

Reading time7 min
Views14K
В этой статье, опубликованной позавчера на DesignVitality, авторы приводят 100 инструментов для Вэб-мастера, включающих программы для дизайнера с открытым кодом, открытые шаблоны и ресурсы.


Лучшие порталы с открытыми шаблонами сайтов


В сети есть множество бесплатных шаблонов, но искать подходящий часто может быть очень долго, поэтому мы предлагаем вам посетить сначала следующие четыре портала:
Читать дальше →
Total votes 56: ↑51 and ↓5+46
Comments42

Деградация в интернете или веселые камменты

Reading time2 min
Views1.2K
UP.va1en0k, ну ты реально тупое недоразвитое быдло -)
Браво! Ты как никто другой подтвердил мой пост своими действиями.


Мне иногда становится страшно. Страшно от того — как сильно деградируют люди в сети. Я не говорю, что сеть всему виной. Сознание людей меняется из-за многих факторов, но в сети очень хорошо заметна разница между уровнем развития тех или иных групп.
Читать дальше →
Total votes 35: ↑16 and ↓19-3
Comments187

Джефф Барр разрешает редактировать свой деловой график

Reading time1 min
Views675
Джефф Барр, разработчик web-служб сайта Amazon.com, создал Wiki-страницу с расписанием своих встреч. Казалось, бы — создал и создал, что тут такого? Но всё дело в том, что каждый, кто хочет встретиться с Барром, может это расписание изменить.

На специально созданной странице отображается рабочий график Джеффа на май этого года. Чтобы назначить ему рандеву, нужно нажать на кнопку Edit Page и внести изменения (шутить, наверное, не стоит). В общем, признаёт Джефф, эксперимент оказался очень успешным — в краткие сроки ему удалось встретиться и познакомиться с нужными людьми. Наверное, многим людям со сжатым деловым графиком такая страничка пришлась бы кстати.

via Jeff Barr's blog
Total votes 24: ↑23 and ↓1+22
Comments10

Вардрайвинг в MAC OS X

Reading time5 min
Views96K


Стандартом де-факто в вардрайвинге обычно считается система Linux (модифицированные драйвера, Kismet в связке с aircrack-ng). Но немногие знают, что в маке есть мощные инструменты для взлома аудита безопасности беспроводных сетей, ни чуть не уступающие, а во многом и превосходящие по функционалу Linux-аналоги.
UPD: Описанные в статье инструменты на сегодняшний день устарели. Рекомендуется использовать Linux

Читать дальше →
Total votes 93: ↑82 and ↓11+71
Comments89

SQL-задачка

Reading time1 min
Views2K

Дано:


Таблица Numbers с одной колонкой ID типа INT.
Значение @ID
Значение @MaxAmount

Найти:


Одним SELECT'ом присвоить параметру @Available единицу (1) если количество записей в таблице не превышает @MaxAmount и в таблице нет записей со значеним равным @ID. В противном случае ничего не присваивать параметру @Available.

Усложнение:


Сделать все это без оператора CASE.

P.S. Я эту задачу для себя решил и она показалась мне настолько интересной, что я решил поделиться ею с вами. Это как задачи со звездочкой в учебниках по алгебре и геометрии.
Total votes 17: ↑12 and ↓5+7
Comments10

Из грязи в князи!

Reading time3 min
Views1.2K
Всего каких-то тройку лет назад раздать файл в сети для большой аудитории было существенной проблемой, доложу я вам. Как только бедные (в прямом смысле этого слова) «варезники» не извращались, а тот кто имел доступ на приватный ftp или мог раздавать файлы со своего ftp был очень крут и уважаем. В оборот шли взломанные аккаунты западных хостингов, файлы заворачивались в картинки и заливались на ужасно рестриктивные бесплатные хосты, счастливчики имеющие возможность раздавать со своего сервера использовали всевозможные антиличинговые системы экономя каждый байт трафика. Но эре мученичества суждено было кончиться, вот-вот в нескольких светлых немецких головах зародилась мысль — почему бы мол не сделать всё иначе? По всей видимости парни на момент старта не были особо уверены в своем успехе, посему и стартовали на домене DE и начали с мелочёвки, с файлов до 20 мега, но они понимали что хоть и двигаются на ощупь, но двигаются в правильном направлении, и как результат их трудов в первых числах 2005 года в сети заработал первый, ныне всем известный файловый хостинг – RAPIDSHARE.DE, сегодня также здравствующий под именем RAPIDSHARE.COM.
Читать дальше →
Total votes 54: ↑46 and ↓8+38
Comments50

Какой должна быть будущая технология параллельного программирования

Reading time4 min
Views1.2K
Увидел хабратопик «Программирование параллельных процессов — это слишком сложно?», и понял, что здесь есть хабралюди, которым это интересно. Не удержался выразить своё мнение по этому поводу.

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

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

Однако не всё так просто.
Читать дальше →
Total votes 34: ↑28 and ↓6+22
Comments81

33 способа бесплатно посмотреть видео-контент

Reading time6 min
Views9.7K


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

Ниже описание и ссылки на 33 портала с free видео-контентом
Total votes 30: ↑26 and ↓4+22
Comments31

Свой бизнес в Германии.

Reading time2 min
Views1.8K
Открытие своего дела в Германии, для некоторых это звучит как приговор.
Гешефты разваливаются, работы нет, мелкие фирмочки вообще лопаются как пузыри, а она предлагает заняться частным предпринемательством — скажите вы. Вот поэтому и предлагаю, в связи с ухудшением социальной и экономической ситуацией на немецкой стороне, хоть каким-то образом поправить своё финансовое положение.
Начнём с того, что открывать свой «русский магазин» мы не будем, Mix Markt давно уже вытеснил всех своих конкурентов по продаже русских традиционных национальных продуктов. Хотя и тут не без вариантов, на сколько я знаю Mix Markt работает так же по системе франчизе (Franchising). Franchising — коротко, вы платите взнос, вам предоставляют товар, оборудование в соответствии с логотипом фирмы и сетку тарифов, где вы продаёте продукт не дороже предоставленных цен и ведёте дело (заказ товара и менеджмент) самостоятельно. Но что, делать если мы не обладаем начальным капиталом в 20 тысяч евро, а имеем всего две.

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

И так, что же нам нужно, нам нужен товар недорогой и пользующийся спросом.
1. Где взять такой продукт.
В пунктах занимающихся оптовой торговлей (Grosshandel) или остаточным товаром (Restposten). Таких имеется великое множество и возможно где-то есть и дешевле, чем в моём примере. Я же не долго думая в google.de по запросам «Grosshandel» и «Restposten», вышлa на достаточно поулярную страницу Restposten.de где в поисковой форме Schnellsuche: сделалa запрос «player» и нашлa вероятный товар на странице www.restposten.de/article-1499890.html
это DK-Digital Slimline DVD Player++Brandneue Modelle+Direktabnehmer ab Werk 10 евро за штуку, минимальная партия 100 штук, прошу заострить своё вниманте, что я привожу лишь примеры совсем не значит, что мой пример является оптимальным вариантом(на своей практике встречалa новые DVD Player в паковке за 7 евро). 10 Евро умножаем на 100 штук минимальной партии получается 1000 евро, такие деньги у нас имееются.

2. Где продавать свой товар.
Как уже было сказанно, открыть свой магазин с двумя тысячами европейских рублей нереально, значит открываем свой магазин в интернет. Нет, нет мы не будем покупать свою вебстраничку и затем на протяжении неограниченного колличества времени делать, настраивать и самое главное раскручивать, чтобы в конце концов эдак через пол годика к нам заходила сотня пользователей в неделю. Всё гораздо проще, просто берём и заводим аккаунт на ebay.de, туда ежедневно заходит не одна сотня тысяч потенциальных клиентов. И Ваши новые DVD Players за 15 евро (не будем жадничать) найдут своего покупателя и будут продаваться.

P.S.: Я вижу все чаще на Ebay продавцов из Москвы, других городов России, Белоруссии, Украины. Регистрируйтесь
eBay Partnerprogramm
, продавайте,… результат будет.
Для информации, Ebay регистрация бесплатна,…
Total votes 19: ↑5 and ↓14-9
Comments8

Подборка полезных CSS рецептов, или чем мы занимаемся на голых пятницах

Reading time2 min
Views92K


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

Итак, представляем вашему вниманию сборку интересных и (надеемся) малоизвестных HTML и CSS-рецептов. Будем рады, если каждый из вас узнает что-то новое!
Вперед!
Total votes 143: ↑122 and ↓21+101
Comments75

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Registered
Activity