Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

concolor

Пользователь
  • Зарегистрирован

  • Посещение

Весь контент concolor

  1. эт, я там был, правда недолго: до 9 всего. Ну ничо, здраво! Ночной зимний лес при свете почти полной луны - это термояд. В целом было не холодно, даже наверное тепло. Да, реальное место проведения мероприятия находится в километре от обозначенного красного района. upd: я прицепил карту местности, зеленая точка - фактическое место проведения мероприятия.
  2. жизненно, ёлы-палы! :D
  3. из того же источника, 28 сентября: http://oko-planet.su/pogoda/seismik/19897-...-na-severe.html Землетрясение магнитудой 4,0 произошло на севере Китая Землетрясение магнитудой 4,0 произошло в понедельник утром в автономном районе Внутренняя Монголия на севере КНР, передает новостная служба Sina. Подземные толчки зафиксированы в 07.18 по местному времени (03.18 мск), их эпицентр находился на глубине семи километров. Сообщений о жертвах и разрушениях пока не поступало. Китай постоянно "трясет" с мая 2008 года. Мощнейшее за последние 30 лет землетрясение магнитудой 8,0 произошло 12 мая минувшего года в провинции Сычуань на юго-западе страны. По официальным данным, тогда погибли и пропали без вести 87,15 тысячи человек, 374 тысячи получили ранения, миллионы остались без крыши над головой. upd: http://earthquake.usgs.gov/eqcenter/recent...region/Asia.php синяя точка - видимо оно и есть
  4. Сегодня (28.09.2009) днем (около 3-х часов дня) моя мама почуствовала некий толчок (на 9-ом этаже). Меня дома не было. Возможно ей это просто показалось. Если кто-нибудь ещё чувствовал нечто подобное, отпишитесь. Хотя вполне вероятно, что не было никакого землятрясения, но кто его знает....
  5. прошу прощения за некий оффтоп, но мне кажется кроме примеров "дурного кода" (фактически качественных характеристик), было бы недурно приводить и некоторые колическтвенные характеристики (ну нечто вроде простых програмных метрик), сигнализирующих о том, что наверное не все в порядке. Это навеяно постом Мурата об антипаттернах. В качестве примера могу предложить свой количественный критерий "раздутого класса": более 10 открытых методов || более 10 атрибутов || более 5 страниц кода в реализации (конечно зависит от размера экрана, но это все равно приблизительно). Ясно, что это неточный критерий, но тем не менее количественный. Понятно, что в силу тех или иных обстоятельств может оказаться что для данного класс именно большое число методов/атрибутов/страниц реализации является оптимальным решением, но в любом случае нужно четко понимать почему это так, т.е. почему данный класс является исключением из правила.
  6. хмм.. а они альфы принимают ?? если до 15 ноября альфу выпущу - то чем чорд не шутит правда мой проект хоть и свободный, но "самую малость" маргинальный, так што не уверен, что ваще стоит этим заниматься.
  7. забавный вопрос правда по ссылке очень странный опрос, что то вроде различных булевых комбинаций двух вопросов: "писал программы" и "зарабатывал на программизме" в настоящем и прошедшем временах. Я ответил "Писал, но не зарабатывал этим", хотя немного подумав понял, что наиболее близким ответом будет "Не помню точно" ("не понял точно"). по subj: я сомневаюсь, можно ли считать меня программистом. День программиста отмечать буду обязательно. Но, я и день сисадмина отмечаю, хотя таковым определенно не являюсь. Короче, мои взаимоотношения с программированием можно описать статусом вконтакте: "все сложно" :kos:
  8. Это прекрасный лозунг. С другой стороны, если термины существуют, значит они что-то обозначают. В вашем случае нужен сборщик мусора, некоторый вариант которого в Haskell есть. Если вы будете вместо него искать китайскую хитрость, то её в Haskell нет. Ок, давайте поговорим о том, что можно называть сборщиком мусора, а что нет. Для этого неплохо бы определиться с самим понятием мусора. Совершенно верное суждение. Мусором можно назвать то, что является лишним либо явно по логике программы (если явно вызван оператор delete), либо то, что в принципе недостижимо по логике программы (т.е. потеряны все ссылки на данный объект), т.е. является лишним неявно. Все остальное назвать мусором нельзя, ибо потенциально оно может пригодиться. То есть, свойство "быть мусором" определяется исключительно логикой программы. Теперь рассмотрим обсуждаемую ситуацию с этих позиций. Удаляются ли узлы дерева вариантов явным образом при заполнении всего основного фрагмента памяти? ответ - нет, не удаляются. Являются ли какие-либо узлы дерева вариантов недостижимыми после полного заполнения основного фрагмента памяти? ответ - нет, все достижимы. Получается что при полном заполнении основного фрагмента памяти мусора нет. Что происходит далее. Далее происходит копирование в резервную область, и в некоторый момент резервная область полностью заполняется. Все узлы дерева, которые до этого момента ещё не скопированы "пропадают", стираются. Можно ли их считать мусором ? ответ - нет, поскольку разделение между отбрасываемыми и оставляемыми узлами дерева не определяется свойствами узлов дерева по отношению к остальным элементам состояния программы, а зависят от совершенно коньюнктурного параметра - размера резервного фрагмента памяти (это отностится к менежджеры памяти), т.е. никак не зависит от достижимости этих объектов по логике программы (т.к. логику менеджера памяти мы не относим к логике программы). Получается что "а был ли мусор??... а может мусора то и не было??..." По вышеприведенным причинам я не называю применяемый мною алгоритм алгоритмом "сборки мусора", так как статус "мусора" определяется самим алгоритмом по факту исчерпания памяти, т.е. сам "сборщик мусора" становится частью алгоритма перебора. Насчет фаз копирования: в описанном мною алгоритме таковых две, и одна из них действительно может быть опущена. Но тогда сам менеджер памяти будет сложнее. А ошибки в менеджере памяти иногда ооочень нетривиально и долго ищутся (это говорит мой опыт, сын ошибок трудных), поэтому чем проще и прямолинейнее он будет - тем надежнее. Но описанная мною схема реально очень проста, и мне кажется, что упростить ее дальше просто никак не получится. По поводу эффективности. Я разрабатывю прувер (систему автоматического доказательства теорем), и оценка вершин дерева вариантов куда как более нетривиальная задача, и в вычислительном плане более затратная задача, чем копирование. Поэтому строиться такое дерево будет во много раз медленнее, чем копироваться и сортироваться. Поэтому для меня сортировка и копирование по определению быстрые алгоритмы. Истина где-то рядом. Как обычно. (с)
  9. Выложите, пожалуйста, фото стульчика.
  10. Вы описываете реализацию two-space copying garbage collector, хотя под ваши требования подходит даже mark-compact или mark-sweep. Вопрос отметки "неценных" объектов может быть решён избирательным применением weak references, но прямая помощь сборщику мусора в mark-фазе выглядит логично. В любом случае, это не "китайский хитрость", а некоторый вариант американского сборщика мусора. ну как это называть: "китайская хитрость" или "американский сборщик мусора", для меня не важно (спорить о терминологии - трата времени). Кстати, ярлык "китайский механизм" был навешан мною на этот алгоритм в процессе написания выше процитированного поста просто как метафора простого решения для непростого вопроса (когда отсекать ветви). Принципиален факт того что: а) это механизм решает задачу отложенного отсечения ветвей б) он крайне прост и эффективен в реализации. Насколько я понимаю, вопрос таки не в том, как это называется, кто это использует и где, а в том, может ли хаскелл со своими отложенными вычислениями конкурировать с китайским механизмом в двух номинациях: а) простота б) эффективность
  11. Позволю себе кое с чем не согласится. Итак, язык шаблонов с++: тьюринг полный - да, безусловно. чистый - да, безусловно. функциональный - а с функциональностью проблемы. Механизм частичной специализации шаблонов - это pattern matching (или унификация, говоря по прологовски), а не применение функционалов высших порядков. Хотя остальное вроде под функциональность попадает. утиная типизация. Поскольку недавно стало известно о том, что в c++0x не будет концептов (http://lambda-the-ultimate.org/node/3518), то типизация таки да, утиная. Хотя до этого сохранялась интрига. ммм... ситуация такая. Я точно знаю как оптимально перебирать бесконечные деревья в ограниченной памяти в процедурном стиле, используя специальный менеджер памяти. И алгоритмы эти тупые, т.е. простые и быстрые, (ничего кроме сортировки и копирования). Как это делать с отложенными вычислениями - не знаю. Ибо много тонкостей. Возможно много придется бегать по дереву (сомнительна эффективность). В чем есть проблема при переборе потенциально бесконечного дерева: непонятно когда отсекать ветки. Ибо если начинать отсекать ветки с самого начала, пусть даже используя супер-мега-алгоритмы для оценки узлов, то если мы отсекаем узел, мы никогда не узнаем, что там было сразу за ним. Большей частью конечно там будет ерунда, .... НО (!!!) за узлом, который мы отбрасываем в самом начале может оказться как раз то, что мы ищем. Мораль сего простая: отбрасывать узлы (т.е. отсекать ветки) нужно как можно позже. Предельная степень отложенности отсечения веток - полное исчерпание памяти (поиск в ширину). Но если уже вся память использована, то как же работать дальше ??.. И тут вступает в дело старинная китайская хитрость: на самом деле память не кончилась. Кончился некий большой кусок памяти, специально предназначенный для того, чтобы впитать в себя как можно больше узлов дерева. А ещё есть резервный кусочек памяти, в несколько раз поменьше, который нужен для того, чтобы когда память кончилась в основном, скопировать все ценное в резервный. При этом копирование производиться в порядке ценности ветвей: сначала копируются наиболее ценные ветви, потом менее ценные, И так до исчерпания памяти в резервной области. А потом мы копируем дерево ещё раз, на это раз обратно в основную область (которая теперь считается пустой). В этот раз оно копируется целиком, т.к. размер основной области в несколько раз больше резервной, и можно продолжать растить дерево дальше. Вот и весь старинный китайский фокус. Отбрасывание ветвей было максимально отложено, отсечение ветвей производится редко, зато метко. При этом старинный китайский механизм, осуществляющий подобный фокус, прост как 3 копейки. Ну да, это не стандартный менеджер памяти, но изготавливается самостоятельно в домашних условиях на раз.
  12. Какая-то философия уже. А что значит «помыслить структуру»? Не совсем философия, т.к. понятие порядка в программной системе можно уточнить, сделать формально точным. Что, определенно, переводит это понятие из философии в науку. Насчет осмысленной структуры: можно очень просто привести множество примеров совершенно бессмысленных структур. Например, если лексикографически линейно упорядочить все идентификаторы в программном тексте, получится структура, но бессмысленная. Другой пример (серия примеров): если разбить все идентификаторы в программе на двудольный (ну или n-дольный) граф: одна доля - это идентификаторы четной дллины, другая - нечетной (для n-долей аналогично (mod n) ). Вершины графа из разных долей соединены ребром, если соотв. идентификаторы имеют общий символ (два общих символа, три... - разные варианты). Получается совершенно бессмысленная структура.
  13. Уровней может быть и больше, да. Шаблоны в с++ - это отдельная песня, чисто stateless язык с весьма неудобным синтаксисом. Наверное даже можно назвать язык шаблонов с++ логическим языком, если инстанциирование шаблонов считать логическим выводом. Да, я немного подумал, наверное такая аналогия действительно имеет смысл. Насчет развесистых иерархий для с++, добро это или зло. Мне кажется, что чем больше порядка (в смысле осмысленной структуры) с программной системе, тем лучше (ну до разумного предела, конечно). Иерархия абстракций - это один из методов наведения порядка. Конечно, в наведении порядка можно переусердствовать, и наплодить больше сложностей, чем разрешить проблем. Весь вопрос в том, где следует остановиться в наведении порядка. Насчет качественно других языков.... вопрос не однозначный. С одной стороны, многие вещи могут и правда оказаться существенно проще. Но ... я уже слишком далеко зашел в своем проекте, самые тяжелые алгоритмы уже закодированы, так что поздняк метаться. Кроме того, я существенно использую ручное управление памятью, и это принципиально при моем способе перебора потенциально бесконечного дерева вариантов (если интересно, могу написать в чем там соль). можно ли использовать свой memory manager в хаскеле - я честно говоря не в курсе, А может оказаться и так, что в принципе мои алгоритмы будут на хаскеле плохо выглядеть. Если вкратце, то я хожу по узлам деревьев, точнее по узлам пары деревьев. Т.е. есть пара итераторов по деревьям, и с ней и происходят всякие интересные действия. В терминологии пар итераторов по деревьям выражений алгоритмы унификации множеств выражений и симификации (т.е. нахождения меры подобия множеств выражений, термин мой, по голове ногами не бить) достаточно естественно формулируются. Главное что алгоритмы эффективные. Как будет выглядеть пара итераторов по деревьям на хаскелле - даже предположить не могу.
  14. Ок, поясняю. Под уровенем астракции я понимаю синтаксический фрагмент языка (может быть задан формально грамматически), описывающий элемент некоторый языка (в данном случае это класс языка с++) с некоторой точностью. Между уровнями абстракции есть отношение частичного порядка, определяющееся следующим образом: уровень абстракции А не ниже уровня абстракции Б, если любые два объекта, не различимые на уровне Б будут также неразличимы и на уровне А. Уровень абстракции А строго выше уровня абстракции Б, если А не ниже Б, но Б не не ниже А (т.е. ниже А), Между уровнями абстракции также имеется отношение звисимости: А зависит от Б, если в любой корректной программе, содержащей Б должно также присутствовать А. В этом смысле все приведенные выше синтаксические фрагменты языка с++ будут линейно упорядоченнми уровнями абстракции. Декларация класса - это наивысший уровень абстракции, т.к. любой синтаксический фрагмент, описывающий некий класс, должен каким то образом ссылаться на имя класса. Аналогично, уровень реализации класса (5) - это наинизший уровень абстракции, т.к. содержит исчерпывающее описание класса. Но это все не интересно. Главное - это взаимная зависимость элементов разных уровней абстракции. В этом смысле уровни 1 и 2 в предложенной иерархии по отношению друг к другу совершенно аналогичны уровням 3 и 4 - они реализуют инверсию зависимости: компоненты интерфейсов уровня 2 зависят не от друг друга, а только от уровня 1.
  15. да, должен признать, чушь спорол насчет разрешения даймонда для абстрактых классов. virtual public наследование решает. Но вопрос о том, сколько всего требуется уровней абстракции - все равно остается. Можно переформулировать так: в каких случаях целесообразно верхний уровень абстракции (чисто абстактные классы) разбивать на подуровни, например в вышеприведенном духе ??
  16. Мой взгляд на subj. уровни абстракции таковы. 1) высший уровень: декларации абстрактных классов. Нужен чтобы иметь возможность использовать имена абстрактных классов в других абстр. классов без всяких телодвижений. Выглядит как набор деклараций: class Variables; class Term; 2) уровень компонент абстрактных классов. собственно на этом уровне описываются чисто абстрактные функции, и выделяются в блоки, реализующие ту или иную функциональность. не наследуются ни от чего, и это хорошо. Пример: namespace component { class Rule { public : virtual Variables* getVariables() const = 0; virtual Term* getTerm() const = 0; }; } Классы этого уровеня зависят только от предыдущего уровня и не зависят друг от друга 3) уровень самих абстрактных классов. На этом уровне собственно и описываются абстрактные классы при помощи наследования от компонент или других абстр. классов. Соответственно, зависят от предыдущего уровня и друг от друга (текущего уровня). не имеют собственных функций, т.е. ничего кроме наследования не используется. Пример: class Rule : public component :: Rule, public SomeOtherAbstractClass { }; 4) уровень - хедеры реализаций абстрактных классов. namespace implementation { class Rule : public :: Rule { virtual Variables* getVariables() const; virtual Term* getTerm() const; }; } 5) уровень - реализации хедеров из 4 уровня. Variables* implementation :: Rule :: getVariables() const {........} Term* implementation :: Rule :: getTerm() const {...........} Основной вопрос: зачем городить весь этот огород и уровень чисто абстрактных классов делить на 3 части?? Моя мотивация заключалась в борьбе с даймондами, возникающими при множственном наследовании чисто абстрактных классов. Применяя подобное разделение на 3 уровня, сами чисто абстрактные классы (интерфейсы) получаются комбинацией компонент, и можно легко исключить, в случае множественного наследования, повторяющиеся компоненты, исключая даймонд. С другой стороны, если даймонд возникает в иерархии чисто абстрактных классов - можно тупо наследование заменить на аггрегацию, и все решится. Но если так рассуждать, то множественное нследование вообще нафиг не нужно, т.к. всегда его можно заменить на аггрегацию. Както так.
  17. Рассуждаем следующим образом: я далеко не гуру, но в подобных тусовках участвовал неоднократно. Из чего следует, что участие негуру в данных мероприятиях не приводит к необратимым негативным последствиям для организма (по крайней мере в некоторых случаях). Както так.
  18. Типо может я немного туплю, но как мы словимся то в конечном итоге ?? Или в интервале 20:00-24:00 будем случайно шарахаться по peoples рассчитывая случайно встретиться (и узнать !) друг друга ??... Короче интересует алгоритм проведения мероприятия. :russian: ps. мой тел. для облегчения процесса: 8-913-900-9419. Планирую быть на месте слегка за 21:00
  19. поддерживаю предложение. Правда у меня семья, дети малые... поэтому гарантировать свое присутствие не могу. Оцениваю вероятность своего участия: 70% upd: семья дала добро на сегодняшний вечер, так что вероятность моего участия существенно повышается. :supdup:
  20. ?? "Пётр Николаевич" ?? ... Chouvak, ты отстал от жизни. :( да, я отстал от жызни. Старость не радость, охохонюшки хохо. :bayan: по топику: есть есть "клуб любителей современной академической музыки", то можно рассмотреть комплиментарный "клуб людителей не современной академической музыки"??.... При объединении этих клубов получится "клуб любителей академической музыки". А ещё жеж можно рассмотреть "клуб любителей академической живописи (танца, скульптуры, etc. различные виды искусства)" Если объединить все эти клубы, получится "клуб любителей академизма в искусстве". Я к тому, что КЛМН можно рассмотреть во внешнем контексте других подобных клубов, между которыми будет отношение частичного порядка по включению. На самом деле даже это будет булева алгебра клубов, если мы будем рассматривать отрицание, (как в примере с клубом любителей несовременной академической музыки). вот так и получается, что КЛМН - это элемент булевой алгебры. Кстати, внутри клуба есть своя структура: линейно упорядоченное дискретное множество заседаний, кадое из которых тоже наделено структурой (вступительное слово, отделения и т.д.). P.S. А ведь банный клуб АХ НГУ тоже можно рассмотреть с подобных позиций.
  21. ?? "Пётр Николаевич" ?? ...
  22. давайте знакомиться, наша собака Лада, сибирская Лайчарка :supdup:

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.