- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
<?php
/**
* Get category tree.
*
* @param db $db
* @return array
*/
function getCategoryTree ($db) {
$query = $db->query('SELECT * FROM dle_category ORDER BY posi');
if ($query->num_rows <= 0) {
return FALSE;
}
$categories = $query->fetch_all(MYSQLI_ASSOC);
$tree = array();
foreach ($categories as $cat) {
if ($cat['parentid'] == '0') {
$tree[$cat['id']] = $cat;
}
else {
$tree[$cat['parentid']]['subcategories'][] = $cat;
}
}
return $tree;
}
/**
* Display categories.
* Sorry for my french 'echo'.
*
* @param array $category
*/
function displayCategory ($category) {
$html = '';
foreach ($category as $cat) {
$html .= '<li class="lonely "><a href="/">' . $cat['name'] . '</a>';
if ($cat['subcategories']) {
$html .= '<span class="accordion"></span><ul>';
$html .= displayCategory ($cat['subcategories']);
$html .= '</ul>';
}
$html .= '</li>';
}
return $html;
}
// Getting categories
$categories = getCategoryTree($db);
if ($categories) {
echo displayCategory ($categories);
}
else {
echo '<li>Нету категорий</li>';
}
Мой говно модуль для DLE для отображения дерева категорий в меню.
Почему DLE разработчики не могли это из коробки сделать? И почему там куча говнокода внутри? (на Англ. комментарии потому что привык)
volter9 17.09.2014 23:02 # 0
bormand 17.09.2014 23:17 # 0
P.S. 33 и 38 строки не согласованы.
bormand 17.09.2014 23:22 # +1
volter9 17.09.2014 23:27 # 0
myaut 18.09.2014 08:14 # +1
> Нету
> у
Да тут говно не только в коде!
kegdan 18.09.2014 08:40 # 0
volter9 18.09.2014 08:49 # 0
kegdan 18.09.2014 08:51 # 0
bormand 18.09.2014 09:24 # +1
Монопенисуально же ;)
Писе нуар это что-то из другой области...
kegdan 18.09.2014 09:27 # +2
1024-- 18.09.2014 09:29 # 0
kegdan 18.09.2014 09:39 # 0
bormand 18.09.2014 09:54 # 0
kegdan 18.09.2014 10:26 # 0
Во всякой книге предисловие есть первая и даже журналов к буквальному значению слов. Иные ужасно обиделись, вместе с тем последняя вещь; оно или служит объяснением цели сочинения,. Во всякой книге предисловие есть первая и до нравственной цели сочинения, или служит объяснением. Во всякой книге предисловие есть первая и уродливыми, отчего же вы верили возможности существования всех трагических потому они не может иметь места; что ежели любовались вымыслами гораздо более острое, почти невидимое даже журналов к враждебным дворам, остался бы уверен, человек.
1024-- 18.09.2014 10:31 # 0
kegdan 18.09.2014 10:35 # 0
Подъехав к подошве Койшаурской горы, мы продолжали молча отвечал мне опять скажете, что каждый из маленькой кабардинской трубочки, обделанной в серебро. Боже его избави от этого не бывало, несмотря на перекладных из черного, полного мглою ущелья, тянется серебряною нитью и уродливыми, отчего же вы любовались вымыслами гораздо более острое, почти невидимое понимает басни, если в гору,. Большая часть из волшебных сказок у вас пощады?
kegdan 18.09.2014 10:48 # +4
Vasiliy 18.09.2014 11:25 # +1
inkanus-gray 18.09.2014 16:54 # +1
Если б день сделал меня, я б наверно помер.
Vasiliy 18.09.2014 18:20 # 0
Если бы багор сделал меня, я б наврено помер.
kegdan 18.09.2014 19:17 # +1
Если б я был на багре - я б наверно помер
inkanus-gray 18.09.2014 16:53 # 0
Но не обычной грязью пахли канавы. Нет, не той грязью, что поглощала средневековый Лондон. От канав веяло радиоактивным илом Киевского водохранилища. В воздухе ощущалось напряжение.
kegdan 18.09.2014 16:58 # +1
это был человек - электрик
inkanus-gray 18.09.2014 19:22 # +1
kegdan 18.09.2014 19:25 # 0
1024-- 18.09.2014 09:28 # +3
doo_dee_doo_dmt 19.09.2014 01:11 # 0
kegdan 19.09.2014 05:30 # 0
bormand 19.09.2014 06:08 # 0
kegdan 19.09.2014 06:21 # 0
volter9 19.09.2014 06:38 # 0
kegdan 19.09.2014 06:48 # 0
bormand 19.09.2014 11:10 # +3
kegdan 19.09.2014 14:19 # +1
А так - идеальный код на стенд - "Сбежал программист java. Пытается кодить на хаскелле вот так. при обнаружении кинуть ему под ноги андроид и вызвать милицию"
1024-- 19.09.2014 14:23 # 0
Судя по паттернам, это как понижение трудоёмкости алгоритма.
Без паттерна - С1*N^2, с паттерном - С2*N*log(N), но только бывает, что C2 >> C1.
kegdan 19.09.2014 14:27 # 0
Паттерны не понижают трудоемкость, паттерны - эбаут упрощение структуры и гибкость изменений
1024-- 19.09.2014 14:30 # +1
А упомянутая трудоёмкость проявляется в написании/поддержке/изменениях кода.
Скажем, без паттерна придётся добавлять новый тип фабрики за O(числа классов), а с паттерном - за O(1). Но для использования паттерна придётся написать ещё 6.66 своих классов.
kegdan 19.09.2014 14:40 # 0
У нах ты тогда пишешь эти псевдоформулы?
[минутка ненависти]
Паттерны - вообще еще то говно. Набор велосипедиков. Учить надо не юзать паттерны, а создавать свою архитектуру. Ибо если человек понимает как построить хорошую архитектру - ему не нужна эта херня, а если не умеет - один фиг не поможет
[/минутка]
roman-kashitsyn 19.09.2014 14:47 # +1
Напомнило
http://govnokod.ru/15505#comment221515
kegdan 19.09.2014 14:51 # 0
1024-- 19.09.2014 14:50 # 0
Для примера. Мне привычнее познавать мир на примерах и аналогиях, что я подсознательно переношу на других.
> Набор велосипедиков.
В http://habrahabr.ru/post/170125/ есть несколько слов в защиту паттернов.
Кратко: программист A использовал паттерн X, программист B посмотрел и сказал "О, это же X,
мне всё ясно". Понимание.
Кстати, паттерн может и трудоёмкость поменять..
kegdan 19.09.2014 14:55 # 0
Ага, краткий обмен информацией. в целом годно. Но все равно лучше один раз схему увидеть.
Когда то я верил, что люди могут круто и слажено работать в команде...
А теперь я понял - изолируешь, даешь интерфейс и пусть реализует. И не дай боже...
bormand 19.09.2014 15:06 # +1
Именно так. Причем чем сильнее изоляция - тем больше свободы, на самом деле. Самое сложное - подобрать место, где пройдет эта грань между подсистемами.
Эту хрень мы поняли еще на групповой практике... Курсы до нас пытались делать всё в одном экзешнике, и в последний день люто, бешено, страдали совмещая куски кода. А мы поступили проще - раз у нас 5 групп разрабов , значит пусть будет 5 независимых экзешек, общающихся между собой по жестко зафиксированным протоколам через TCP, СУБД и общие папки. Но как было сложно пропихнуть такую архитектуру закостенелой преподше... Ей то хотелось один экзешник, по традиции.
kegdan 19.09.2014 15:10 # 0
Грань - это задача архитекторов. У хорошего архитектора и связанность низкая и зацепление высокое
bormand 19.09.2014 15:14 # 0
Ага :) Главное, чтобы говно не переполнило модуль и не полилось через интерфейсы в соседние...
Пример из практики: надо было из астериска передать номер телефона по HTTP. urlencode нету. Ну я и написал тупо ...&exten=${EXTEN}. Тем самым я испортил интерфейс, и поплатился за это - на HTTP серваке пришлось заменять пробел на плюсик.
kegdan 19.09.2014 22:34 # 0
1024-- 19.09.2014 22:37 # 0
"Процессор, быстро заменять пробел на плюсик, а то щас как выключу"
kegdan 19.09.2014 22:41 # 0
http://www.youtube.com/watch?v=RHaIjAk0X7Y
wvxvw 20.09.2014 00:58 # +1
Pattern'ы надо избегать, а не использовать. Т.е. видя pattern нужно использовать какую-то технику, которая заменит повторяющийся код одной конструкцией.
doo_dee_doo_dmt 19.09.2014 22:21 # 0
kegdan 19.09.2014 22:31 # +1
1024-- 19.09.2014 22:34 # +1
(1) ФФ ---> Ф1, (2) для всех Ф1 ---> О != Ф1
Если создаёт, ФФ ---> ФФ => ФФ ---> О != ФФ, правило 2 нарушается
Если не создаёт, ФФ --X> ФФ => ФФ ---> О != ФФ, правило 2 не нарушается
Значит создавать не может. Парадокса вроде бы нет, но если "исключительно" заменить на "все возможные", парадокс точно будет.
kegdan 19.09.2014 22:37 # −2
1024-- 19.09.2014 22:40 # +2
kegdan 19.09.2014 22:43 # −2
CCCCombo!
1024-- 19.09.2014 22:51 # +3
Откроем викисловарь и посмотрим определение слова "зануда".
Зануда - надоедливый человек, тот, чьи действия вызывают тоску и раздражение.
Рассмотрим мои комментарии. Они полны радости, надежды и стремления к светлому будущему. Как они могут вызывать тоску?
Откроем Википедию и посмотрим, что там написано про тоску:
Тоска́ — отрицательно окрашенная эмоция, тяжёлое, гнетущее чувство[2]. Близкими чувствами являются грусть, уныние, тревога[2][3].
Как же полные радости комментарии могут вызывать отрицательно окрашенные эмоции?
Тоска отличается выраженным снижением настроения и ухудшением общего самочувствия.
То есть Вы, милейший, обвиняете меня практически в отравлении посетителей ГК своей мелкой твёрдой психозой? Но ведь это абсурд!
Пойдём далее, чьи действия вызывают тоску и раздражение. Как мои, направленные на мир во всём мире действия, могут вызывать чьё-то раздражение?
Нет, сэр, я не зануда.
kegdan 19.09.2014 22:55 # 0
doo_dee_doo_dmt 19.09.2014 22:51 # 0
bormand 19.09.2014 22:59 # 0
1024-- 19.09.2014 23:04 # 0
> Если она создавать не может - то может, т.к. она удовлетворяет правилу
А это откуда следует?
Фабрика не создаёт экземпляры своего класса, но при этом создает исключительно такие фабрики, которые не могут создавать объекты своего класса. При этом связь развязывается. Условия, действующие на фабрики, создаваемые фабрикой фабрик могут быть уже любыми и не описывают фабрику фабрик.
P.S. противоречия, противореции...
doo_dee_doo_dmt 19.09.2014 23:38 # 0
class Factory
{
public function getInstance($class)
{
return new $class;
}
}
// Фабрика которая не может создавать объекты своего класса
class ExclusiveFactory extends Factory
{
public function getInstance($class)
{
if (is_a($class, static::class, true)) {
throw new Exception('Не могу создавать объект своего класса');
}
return parent::getInstance($class);
}
}
// Невозможная фабрика
class ImpossibleFactory extends Factory // или ExclusiveFactory?
{
public function getInstance($class)
{
// Все ок, но тогда я могу сам себя создавать, а это противоречие!
// Типо я должен тогда быть ExclusiveFactory
// ок если я ExclusiveFactory - то условие пройдет и я создам объект сво
его класса - противоречие
if (!is_a($class, 'ExclusiveFactory', true)) {
throw new Exception('Могу создавать только фабрики не могущие создать объект своего класса');
}
return parent::getInstance($class);
}
}
doo_dee_doo_dmt 20.09.2014 00:06 # 0
Короче, если наследуем просто Factory
(new ImpossibleFactory)->getInstance('ImpossibleFactory');
Будет ексепшн:
Могу создавать только фабрики не могущие создать объект своего класса
Так блин, ну? Не смогли же создать объект своего класса? Так какого фига?
Или если делаем ее ExclusiveFactory
тот же
(new ImpossibleFactory)->getInstance('ImpossibleFactory');
Выдаст второй ексепшн:
Не могу создавать объект своего класса
Хм... не можешь - ну ок, так тогда типо должна же была создать.
bormand 20.09.2014 00:41 # 0
ФФ может создать объект своего класса? Нет. Значит среди того, что она может создать её самой нет и быть не может. Зато она может запиливать другие фабрики, которые не могут запилить себя. ВСЕ такие фабрики она запиливать не обязана по условию. Противоречия нет.
Вот если ты исправишь условие на "ФФ может создавать экземпляр ЛЮБОЙ фабрики, которая не может запилить оьъект своего класса" - будет противоречие.
doo_dee_doo_dmt 20.09.2014 00:54 # +1
А если потребовать "любую" - то, кажись, все таки будет противоречие.
1024-- 20.09.2014 00:46 # 0
Попробуйте [code]ваш код[/code]
Предварительный диагноз - использование дополнительного условия, в первом комментарии не озвученного (вот и Борманд про условие говорит):
Единственному деревенскому брадобрею приказали: «Брить всякого, кто сам не бреется, и не брить того, кто сам бреется». Кто побреет брадобрея?
↓ ↓ ↓
Единственная фабрика фабрик запрограммирована, чтобы: «Создавать все фабрики, которые не могут создавать объекты своего класса, и не создавать фабрики, которые могут создавать объекты своего класса». Кто создаст фабрику фабрик?
(вроде бы при такой формулировке парадокс будет)
А я пока беру таймаут на сон и раздумья над кодом.
bormand 20.09.2014 00:49 # 0
kegdan 20.09.2014 06:21 # 0
Пойду смотреть доктора. Первого. В оригинале. Блин, я тоже задрот.
bormand 20.09.2014 07:31 # 0
Дакимакуры с Аской нету, мульты смотрю относительно редко, в тусовке не участвую...
kegdan 20.09.2014 07:40 # 0