Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - vlad

Страницы: 1 [2] 3
16
Общий раздел / Прыжок из стратосферы
« : Октябрь 16, 2012, 04:25:07 am »
Дурацкий вопрос: а почему он, собственно, не сгорел?

17
Как известно, поддержка ООП в JavaScript весьма своезобразная. Настолько своеобразная, что лучше бы такой поддержки там совсем не было (чтоб народ не смущать). К сожалению, когда дело доходит до чего-то более сложного, чем обработка кнопки на веб-страничке - без человеческого ООП трудно. Поэтому народ массово лепит фрэймворки, которые пытаются эмулировать нормальное ООП (добавляя своих проблем, как и положено фрэймворкам).

Так получилось, что в задаче возникла иерархия типов и мне потребовалось проверить принадлженость объекта типу в иерархии. Без привлечения фрэймворков, минимальный вариант на голом JavaScript. В JavaScript для этого (как и положено ООП языку) есть оператор 'instanceof'. Проблема  в том, что пользовательских типов как таковых в JavaScript нет, поэтому и "наследуются" не типы, а объекты. Если погуглить по теме, то можно (легко) найти примерно такой вариант:
function A(){} // как бы конструктор класса А

function B(){} // как бы конструктор класса Б
B.prototype = new A(); // B наследует A

var b = new B();
assert(b instanceof A);

Проблемы начинаются, когда "конструкторы" начинаются делать что-то интересное - принимать параметры, вызывать базовые конструкторы, инциализировать поля объекта. Все потому, что смешиваются в одном два понятия: объект типа  и тип объекта.
Я делал несколь попыток отделить мух от котлет - наконец заработал вот такой вариант:
function AType(){}
function BType(){}
BType.prototype = new AType(); // BType наследует AType

function A(a){this.fieldA = a;}
A.prototype = new AType(); // A - конструктор типа AType

function B(a, b)
{
    A.call(this, a); // вызов базового конструктора
    this.fieldB = b;
}
B.prototype = new BType();  // B - конструктор типа AType

var b = new B('a', 'b');
assert(b instanceof AType);
assert(b instanceof BType);
assert(b.fieldA == 'a');
assert(b.fieldB == 'b');

В гугле ничего подобного не видел, поэтому решил написать сюда и обсудить. Может кто предложит более простое/правильное решение.

18
Общий раздел / Сопоставление с образцом
« : Сентябрь 19, 2012, 04:12:19 am »
Продолжаем строить правильные циклы.
Дан образец, в котором звездочка (*) обозначает любое количество любых символов. Определить соответствует ли строка образцу. Пример:
"12345abc" соответствует "123*abc"
"12345abc*d*" не соответствует "123*abc"

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

Рассуждаем про инварианты, формальные методы и т.д. Ждем info21 с циклом Дейкстры.

19
Общий раздел / Visual Studio
« : Август 01, 2012, 03:51:30 pm »
По мотивам: http://forum.oberoncore.ru/viewtopic.php?p=73690#p73690

Вопрос к Peter Almazov: а что, собственно, не так в студии? Я вот перепробовал какое-то количество (включая экстрим в виде vim) - и в студии комфортнее всего.

20
Под впечатлением последних обсуждений "линукс на ноутбуке не работет с nvidia". А так же в преддверии выхода очередной версии "world's most advanced desktop OS" (угадайте какой).

Стал интересен сабж :) Угадываем, пока не придет info21 (или еще кто точно знает) и не расскажет правду.

21
По мотивам: http://forum.oberoncore.ru/viewtopic.php?f=89&t=3986

С С++ все понятно - это инструмент для специалиста и для специальных областей.
С фортраном тоже все понятно - морально устарел до безобразия.
И даже с КП все понятно - info21 нашел с ним свое счастье и кто-то еще, возможно, найдет.

А вот если для мэйнстрима в физике - какой современный ЯП потянет? Я бы обозначил следующие критерии:
- высокая производительность
- масштабируемость
- независимость от платформы
- достаточная гибкость (на уровне ЯП общего назначения)
- легкость обучения

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

22
Общий раздел / fork()
« : Май 31, 2012, 05:49:54 am »
Есть ли какое-то оправдание существования сабжа, кроме "дешево и сердито"?

Т.е., с точки зрения разработчика ОС: полноценные потоки делать долго и нудно. С точки зрения разработчика приложения для ОС: устраивать полноценное межпроцессное общение (IPC) - тоже уныло. Поэтому сделали fork() - просто реализовать и упрощает IPC (передачу нужного контекста в другой процесс).

Или у fork() есть какие-то неочевидные особенности (не покрываемые потоками и полноценным IPC)?

23
Общий раздел / Очень простой цикл
« : Май 25, 2012, 03:02:45 pm »
Раз уж речь пошла про циклы... :) Дана последовательность. Найти позицию первого из двух последовательно идущих нулевых элементов. Кто какой цикл считает самым правильным?
1 0 1 1 0 1 0 1 0 0 ...
---------------^

P.S. 2Илья: твой вариант интересен как референсный от школы научного составления циклов.

24
Итак, играем в судоку. Никаких архитектурных изысков. Чистой воды алгоритмика и разминка для мозга (зашоренного этими самыми изысками и прочей фигней типа скрещивания ежа с ужом). В интернет не подглядваем. Делимся впечатлениями, меряемся и т.д.

Дано поле 9 x 9 клеток. В клетках цифры 1 - 9. Некоторые клетки открыты (даны цифры), остальные нужно открыть (определить цифру). Цифры в каждой колонке и ряде не повторяются. Кроме того, поле поделено на квадраты 3 x 3 и цифры в квадрате тоже не повторяются. Wikipedia: http://en.wikipedia.org/wiki/Sudoku.

Пример. Ввод:
*******18
**9*3****
*7*******
8**1*****
*****73**
2********
*3****96*
1**48****
***2*****

Вывод:
342976518
689531427
571842639
853194276
914627385
267358194
438715962
126489753
795263841

Мой вариант решения аттачнут.

25
Оригинальный пост Kemet, удаленный на оборонкоре:
Цитировать
Проблема "уникальности" в академичности. Большинство Оберон-проектов носят исследовательский или/и учебный характер - непрерывность процесса, неизменность платформы и динамичность надстройки (свистоперделок) вот основная черта такой линии. И для такой направленности это не только оправданно и оптимально, но и единственно возможно. Существует непрерывный процесс подготовки кадров, все проблемные места известны и рассмотрены под микроскопом и решены теоретически. Практическое решение проблемы - смена базиса - опрокинет эту идиллию, лишит любимой игрушки и учебного пособия.
Ещё раз повторю, что не то что ничего плохого в этом нет, а скорее наоборот, но именно в данном контексте применимости.
Но исследовательские проекты и системы имеют мало общего с системами промышленнымы, и, тем более, коммерческими. А коммерческого в БлэкБоксе нет ничего кроме цены, видимо взятой с потолка, как это и водится в научном сообществе.
Требования к коммерческому продукту сильно другие даже чем для промышленного программного обеспечения.
А авторы ББ решили немного подзаработать на имеющемся исследовательском процессе. взяли готовую поделку, добавили свистоперделки и выдали за новый продукт, хотя ничего революционно-нового там небыло. Текст как интерфейс - известный с древних оберон-времён - неплох для определенного применения, но нужна вменяемая среда разработки, к которой ББ не относится, нет в нём средств для эффективной разработки приложений, а специфичность такого подхода к интерфейсу и бинарный формат файлов исходного кода вкупе с примитивным редактором а-ля блокнот, не дают возможности эффективно использовать сторонние средства. БлэкБокс настолько в этом плане "удобен", что даже фанаты встречают плагины для Notepad++ с огромным восторгом и я что-то не вижу такого восторга у поклонников ВСтудии или RAD Delphi. COM? Да кому он нужен. А ведь на этом пытались сыграть - COM и Component Pascal.
И проблема WITH, которая известна всем и давно, это не проблема компилятора -чтобы закрыть её нужно вставить всего несколько строчек кода. Попытка совместить науку и коммерцию обречена на провал - либо наука умрёт, либо торговли не получится. Хорошо, что торговля не вышла...

26
Общий раздел / прочность vs размер
« : Апрель 25, 2012, 03:22:31 pm »
Все равно никто ничего не пишет :)

Я тут поиграл с китайским игрушечным вертолетом (рулез) и в очередной раз задался вопросом: почему оно не ломается, когда падает/врезается, а полноразмерный вариант сразу крэшится. Примеров "закона" можно найти массу. Например, животные/растения не эволюционируют больше определенного размера. Кошка пролетает много этажей и отделывается ушибом (обычно). И т.д. Т.е., "хрупкость" с размером растет быстрее "прочности". Какова физика процесса?

P.S. Сразу оговорюсь, сопромата (если это оттуда) в универе у меня не было.

27
Общий раздел / Рефакторинг в SQL
« : Апрель 13, 2012, 03:37:57 pm »
Раз уж пошла такая пьянка (про SQL)...

Рефакторинг, наверное, даже слишком громко сказано (alexus сразу начнет говорить "ибо нефиг")....
Просто. Была колонка CHAR(100). Стало мало. Надо сделать CHAR(255). Речь, естественно, не только о модификации таблицы, но и о модификации всяких триггеров и хранимых процедур. Их не очень много, но искать их (имеющих отношение к данной таблице) и в них нужное крайне трудоемко (по сравнению с традиционными статически типизированными языками). Что нужно делать, чтобы такие простые вещи не требовали столько усилий?

P.S. Применительно к M$ SQL. Я знаю, что в интербейзе было что-то типа typedef'ов. Не знаю насколько они полезны там, но в M$ SQL они тоже есть и они абсолютно бесполезны (для описанной проблемы).
P.S.S. Считаю SQL (как язык) полным говном. Не хотелось бы выплескивать негатив, но SQL мне кажется крайне неудачным языком для чего-либо кроме SELECT.

28
Общий раздел / Черный ящик
« : Март 16, 2012, 10:54:03 am »
В связи с последним крушением Ка-52 в очередной раз возникли дурацкие вопросы:

1. Почему его каждый раз надо "расшифровывать" (самое непостижимое для меня)? Долго расшифровывать. Т.е., устройство чтения изначально не предусматривается?
2. Что такое черный ящик? Коробка с катушкой проволоки, куда пишется телеметрия и переговоры экипажа. Или что-то еще?
3. Почему это не флешка (продублированная и т.д.) в свинцово-титаново-неразрушаемом корпусе с нормальными логами?

P.S. Вот когда программа крэшится - никто ведь не говорит про расшифровку логов или дампа... Логи читают, запускают дебагер... Анализируют...

29
Общий раздел / Утечки памяти
« : Март 14, 2012, 01:15:11 pm »
Что можно почитать про ловлю утечек памяти (в условиях GC)? Какие подходы существуют и все такое. А то как-то неэффективно у меня это получается...

30
В продолжении темы о частных велосипедах против стандартных решений.

Строится дерево. У него встречаются подобные узлы (с одинаковым атрибутом, например, именем). Эти узлы надо связать между собой.

Стандартное решение: строим дерево, потом бежим по нему и заносим ссылки на все узлы в отсортированную последовательность. Если очередной узел подобен найденному - связываем узлы.

Я подумал, что может я мыслю слишком шаблонно и есть более эффективный велосипед... :)

Страницы: 1 [2] 3