Pull to refresh
  • by relevance
  • by date
  • by rating

PHP и ООП. Совмещаем \«несовмещаемое\»…

PHP
Объектно-ориентированное программирование — как стиль жизни. Это не просто применение конструкций типа class или interface — это способ мышления, когда любая сущность программы является не просто набором инструкций, а представляет из себя \«живое\» существо…

Думаю напоминать что такое ООП, в рамках данной статьи, будет лишним, посему перейду сразу к проблематике вопроса.

Разработчики, пришедшие в PHP из других языков программирования, и столкнувшиеся в нем (в РНР. тут и далее буду подразумевать РНР5 — прим.) с классами, недоумевают как их вообще возможно использовать. А все из-за того, что время жизни скрипта на РНР гораздо меньше, чем у прикладного ПО и составляет всего один цикл работы, в то время как прикладное ПО может жить и взаимодействовать со своими компонентами много дольше. В итоге миру является код, в котором классы реализуют всего-навсего отсутствующие в РНР namespaces.
Читать дальше →
Total votes 22: ↑16 and ↓6 +10
Views3.5K
Comments 62

Сервис монетизации (коммерциализации) проектов

Lumber room
Существует большое число интернет проектов созданных без учета возможностей монетизации (или по старому :) — коммерциализации) или с очевидной ее низкой эффективностью. Существует также большое количество специалистов и компаний которые либо сами успешно занимаются монетизацией собственных и чужих проектов, либо обучающих этому. Учитывая что я являюсь сторонником теории что каждое дело должен выполнять профессионал — предлагаю создать сервис объединяющий лиц успешно занимающихся данным вопросам, цель которой «помочь» монетизации проектов обратившихся к ним. Отличительной особенностью его должно стать что он специализируется именно на данном направлении (естественно с привлечением и других специалистов при необходимости) и то что он работает на результат, то есть за оговоренный процент от полученного проектом дохода. В конце концов обращение во всякие компании занимающиеся оптимизацией под поисковики – не что иное как попытка заработать больше денег (и не всегда выбирается верное направление) – почему бы сразу не предложить то что хотят, т.е. заработать?

Если заинтересуетесь, условия реализации здесь

UPD:
Все больше утверждаюсь в мысли что что-то подобное надо! Все же каждый должен заниматься тем, что ему больше интересно, но никто не должен оставаться в накладе. Посмотрите хотя бы хабровские посты про стартапы — многие заявляют что они создали и запустили (собираются) проект, но не знают еще как получить с него денег. При этом большинство вопросов к нему начинается именно с этого. Автору естественно приходится отмазываться стандартной фразой — для себя, для души или как там еще. А потом идти изучать, как же можно срубить бабла вместо того чтобы сделать проект еще лучше (может на деньги которые можно было бы уже заработать). Как правило первое что приходит на ум (и реализуется) — это яндекс-директ и гугл адвордс. Вот если бы к делу подключились специалисты по монетизации — все бы получили то что им надо в итоге.
Total votes 6: ↑3 and ↓3 0
Views338
Comments 12

ТАУ-Дарвинизм: реализация на Ruby

Ruby

Предисловие


Послушайте, ворона, а может быть собака,
А может быть корова, но тоже хорошо!
У вас такие перья, у вас рога такие,
Копыта очень стройные и добрая душа.

Мультфильм «Пластилиновая ворона».

В этой статье представляю Вашему вниманию реализацию эволюционного подхода к идентификации динамической системы. Программа написана на языке Ruby версии 1.9.2 (gems: NArray, GNUPlot). Заглянув под кат найдете пример вещественного кодирования генной информации и подходящего для него алгоритма скрещивания («flat crossover»).
Как узнать, кто есть кто, читать тут
Total votes 29: ↑21 and ↓8 +13
Views3.2K
Comments 8

Ход «Voronoi». Часть 2 — Бинарное дерево

Ruby

Введение


В этой статье хочется представить реализацию дерева бинарного поиска для задачи, изложенной в статье [1]. В описанной там задаче используется алгоритм «sweeping line», для которой нужно бинарное дерево с возможностью перемещения не только от корня дерева к дочерним узлам и листьям, но и по листьям в отдельности, начиная от крайнего листа (левого или правого). Задача показалась достаточно простой, потому не стал долго искать уже готовые реализации и решил сделать самостоятельно. При этом поставил дополнительную задачу — задание процедуры добавления нового листа в дерево снаружи.
Серия на пальцах продолжается...
Total votes 10: ↑8 and ↓2 +6
Views3.9K
Comments 0

Нужно ли быть программистом, что бы воплощать концепции?

Programming
Sandbox
Талантливости и даже гениальности, безусловно, сопутствует одно лишь трудолюбие. Однако есть люди, которые не в силу отсутствия оного, а в силу склада ума, навсегда остаются дилетантами в деле, к которому их тянет всю жизнь. Именно такими людьми, как мне кажется, были все писатели-фантасты (я имею ввиду научную фантастику); ими являются журналисты, посвятившие себя определённой тематике: спорту, музыке, кино; так же, например, тренеры и продюсеры. И ведь верно говорят, что хороший музыкальный критик — это просто очередной неудавшийся музыкант. Обратное, конечно не одинаково верно, но речь сейчас не о том.

Клоню я вот к чему.
Читать дальше →
Total votes 26: ↑13 and ↓13 0
Views1.2K
Comments 28

Итеративный подход к решению инженерных задач

GTD
Ну вот, дожил и я до того дня, когда меня потянуло написать в этот блог.
Доброго времени суток, хабрачеловек!

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

Привыкнув к некоторой самостоятельности в своих действиях и не брезгуя принимать решения я зачастую сам создаю себе проблемы ставлю себе задачи, которые потом приходится решать. Этим, собственно, и зарабатываю на хлеб с маслом. Заимев за плечами некоторое множество успешно решенных задач и потратив на это кучу времени, пришла банальная мысль, что каждый раз сталкиваешься с одной и той же последовательностью шагов по их решению, при прохождении которых наступаешь на одни и те же грабли. Потерев в очередной раз ушибленный лоб, мои руки решили наконец положить конец такому положению вещей и начали что-то судорожно записывать в склерозник. В итоге родился хитроумный план по борьбе с шишками на лбу, который за последние несколько месяцев сэкономил мне некоторое количество человеко-часов. Подробности по катом.
Читать дальше →
Total votes 34: ↑28 and ↓6 +22
Views5.6K
Comments 23

Гипербург — трехмерный вариант игры «Каркассон»

Game development
Недавно на одном из форумов, посвященных многомерным пространствам, был задан вопрос: «А какие игры реализованы в нетривиальных пространствах, в частности, нет ли где реализации игры Каркассон на плоскости Лобачевского?» Вопрос мне показался интересным, тем более, что про эту игру я ни разу не слышал.

А зря! Игра оказалась достаточно простой для того, чтобы попробовать ее адаптировать на различные пространства. Игра эта настольная. Игроки по очереди выкладывают на стол карточки с фрагментами карты местности, пытаясь сложить связную карту. В процессе игры игроки могут захватывать некоторые элементы поля, и получать очки за достроенные элементы.

Понятно, что простор для обобщений в сторону нетривиальной геометрии огромен. Можно вместо квадратных карточек разработать треугольные или шестиугольные. Можно укладывать квадратные карточки на поверхность куба (появится 8 особых точек, в которых сходятся 3 а не 4 карточки, но это не очень принципиально). Можно нарисовать на плоскости Лобачевского квадратную сетку, в каждой вершине которой сходится 5 (или 6, или бесконечно много) квадратов. А можно заменить квадратные клетки на кубические и строить карту в пространстве.

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

Читать дальше →
Total votes 43: ↑41 and ↓2 +39
Views2K
Comments 25

Игровые циклы или ЭлектроКардиоГама

Game development
Translation
Игровой цикл — это пульс каждой игры. Ни одна игра не будет работать без этого. Однако, к несчастью каждого нового разработчика игр, в сети нет хороших статей, в которых уделено достаточное внимание этой теме. Но не печальтесь, потому как только что вы получили возможность прочитать единственную в своем роде статью, уделяющую вопросу игровых циклов заслуженное внимание. По долгу службы мне часто приходится иметь дело с большим количеством кода мелких мобильных игр. И я каждый раз удивляюсь сколь много существует реализаций игрового цикла. Вы тоже можете удивиться как можно для такой, казалось бы простой, вещи можно придумать множество имплементаций. А ведь можно! И в статье я постараюсь рассказать о достоинствах и недостатках наиболее популярных вариантов игровых циклов. Также я постараюсь описать наилучший на мой взгляд вариант реализации игрового цикла.
(Thanks to Kao Cardoso Félix this article is also available in Brazilian Portuguese) (Thanks for me, in Russian also, прим. перев.)
Читать дальше →
Total votes 59: ↑57 and ↓2 +55
Views46.6K
Comments 62

Корректная реализация разностной схемы ПИД регулятора

AlgorithmsMathematics
Tutorial
ПИД-регулятор является простейшим регулятором, имеющим эффективные аппаратные аналоговые реализации, и потому применяемый наиболее широко. Для своей работы требует настройки 3х коэффициентов под конкретный объект, позволяющие подобрать процесс регулирования согласно требованиям. Обладая простым физическим смыслом и простой математической записью, применяется широко и часто в регуляторах температуры, регуляторах расхода газа и других системах, где требуется поддерживать некий параметр на заданном уровне, с возможными переходами между разными заданными уровнями. Разумеется, существуют более сложные регуляторы, позволяющие более точно и быстро и с меньшими перерегулированиями выходить на заданные параметры, а так же учитывающие нелинейность или гистерезис регулируемого объекта, однако они обладают большей вычислительной сложностью и сложнее в настройке.

Несмотря на свою простоту как физического смысла, так и математической записи:

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

Причем проверить качество реализации ПИД регулятора крайне легко.
Читать дальше →
Total votes 43: ↑43 and ↓0 +43
Views72.9K
Comments 27

Реализация словаря в Python 2.7

PythonAlgorithms
Sandbox
В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
Читать дальше →
Total votes 65: ↑64 and ↓1 +63
Views100.9K
Comments 37

Создание системы сцен для игрового движка

ProgrammingJavaGame development
Sandbox

Предисловие


В настоящее время я работаю над собственным игровым движком. С использованием минимального количества сторонних библиотек, после реализации игрового цикла (game loop), отрисовки кадра, функции «update», загрузки текстур и пр., основная «начинка» движка была готова. Пришло время реализации еще одной важной составляющей — сцены (scene).

Введение


В статье я предполагаю, что движок уже оснащен игровым циклом с «callback»-функциями. Весь код будет написан на Java, но может быть легко перенесен на любой другой язык, поддерживающий garbage collection. Что-ж, приступим.
Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views13.8K
Comments 2

Open-source реализации отечественных криптоГОСТов

Information SecurityCryptographyProgramming
На выходных решил поискать open-source реализации отечественных криптографических стандартов. Прежде всего интересовали новые: хэш-функция Стрибог (ГОСТ Р 34.11-2012), Кузнечик (ГОСТ Р 34.12-2015) и ЭЦП (ГОСТ Р 34.10-2012 или 2001 (без 512-бит) ). Старый ГОСТ 28147-89 специально не искал, поскольку найти его реализацию никаких проблем нет уже давно.
Итак, давайте посмотрим, что же получилось. Сразу предупреждаю, что корректность реализаций не проверял.
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Views47.5K
Comments 64

Реализация Swift словаря

ProgrammingООPSwift
Translation
Tutorial
image

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

Swift словарь:

  • Swift словарь состоит из двух общих типов: ключей (должны относиться к категории Hashable) и значений;
  • Можно создавать записи посредством введения ключа и его значения;
  • Значение может задаваться через ссылку на введенный ранее ключ;
  • Можно удалить запись, указав соответствующий ключ;
  • Каждый ключ связан с одним единственным значением.

Существует несколько способов хранения данных записей (ключей, значений), один из которых предполагает открытую адресацию посредством линейного пробирования, необходимого для запуска Swift-словаря.

Рассмотрим пример словаря, рассчитанного на 8 элементов: в нем предусмотрено максимум 7 записей (ключей, значений) и, как минимум, одно пустое место (так называемый пробел) в буфере словаря, благодаря которому происходит своеобразная блокировка поиска по выборкам/вставкам (retrivals/insertions).
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views12.5K
Comments 2

[DotNetBook] Реализация IDisposable: правильное использование

Seminars by Stanislav Sidristy corporate blogProgramming.NETC#
Tutorial
С этой статьей я начинаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

Disposing (Disposable Design Principle)



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

IDisposable



Если спросить, что такое IDisposable, вы наверняка ответите что это

public interface IDisposable 
{
	void Dispose();
} 


Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.

Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:




Читать дальше →
Total votes 45: ↑40 and ↓5 +35
Views27.7K
Comments 66

Венгерский алгоритм, или о том, как математика помогает в распределении назначений

AlgorithmsMathematicsRResearch and forecasts in IT
Tutorial
Привет, друзья! В этой статье хотел бы рассказать про интересный алгоритм из дисциплины «Исследование операций» а именно про Венгерский метод и как с его помощью решать задачи о назначениях. Немного затрону теории про то, в каких случаях и для каких задач применим данный алгоритм, поэтапно разберу его на мною выдуманном примере, и поделюсь своим скромным наброском кода его реализации на языке R. Приступим!

image
Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Views28.9K
Comments 23

Реализация целого типа в CPython

PythonProgramming
На Хабре уже были статьи о подробностях реализации менеджера памяти CPython, Pandas, я написал статью про реализацию словаря.

Казалось бы, что можно написать про обычный целочисленный тип? Однако тут не всё так просто и целочисленный тип не такой уж и очевидный.

Если вам интересно, почему x * 2 быстрее x << 1.

И как провернуть следующий трюк:

>>> 42 == 4
True
>>> 42
4
>>> 1 + 41
4

То вам стоит ознакомиться с данной статьёй.
Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Views12.7K
Comments 6

Архитектура — Декларативна. Реализация — Императивна. Все остальное — Бюрократия

Wrike corporate blogProgrammingSystem Analysis and DesignDevelopment ManagementMicroservices
🔥 Technotext 2020 🔥 Technotext 2020
Что такое Архитектура? Чем Архитектура отличается от Дизайна? Где граница между Архитектурой и Реализацией? Можно ли увидеть Архитектуру? Можно ли тестировать Архитектуру? Чем отличаются Инженерный и Эволюционный подходы к Архитектуре? Что такое Хорошая Архитектура? В чем состоит работа Архитектора? Чем она отличается от работы Разработчика? Какие инструменты доступны Архитектору? Можно ли менять Архитектуру отдельно от Реализации? Есть ли у Архитектуры ДНК?


Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Views6.2K
Comments 14