Как стать автором
Обновить
25
0
Михаил Аксёнов @xeningem

Пользователь

Отправить сообщение
Спасибо, интересно. Один из часто задаваемых вопросов — как «развернуть» строку(кортеж, список):
>>>s = «Hello Dolly!»[::-1]
>>>print s
!ylloD ,olleH

Прекрасно, я считаю — интуитивно понятно, коротко и ясно.
Спасибо. С Вашего разрешения не буду удалять — потому, что вначале поискал как мог, а на блог «Киберпанк» я не подписан. И думаю я не первый, кто будет повторно «постить» этот ролик.
Жуйк — микроблог, которым он должен быть.
Я и привёл конкретный пример.
Просто мой пример не содержит COM, IUnknown и прочей «неведомой фигни» (для меня неведомой, и не имею ни малейшего желания знакомиться с ней ближе).
>>использование RTTI и таких подходов — 90 процентов ошибка в проектировании.
Использовать ORM?

>>пример с Qt и метаобъектов неверен, потому как он используется намного в более широком применении и использует совсем другие подходы
Интересная логика — этот пример не подходит, потому, что я знаю более узкий и с другим подходом…

>>Советую ознакопится с какой-нибудь документацией о проектировании приложений. Их хватает.
Пример такой документации?

Ещё раз — это решение конкретной, узкой задачи, которая описана в статье. Простое решение, простой задачи. «Большой» базовый класс, простые виртуальные функции (которые можно легко генерировать кодогенератором — к примеру CodeWorker'ом), простое использование, быстрое и без сторонних средств.
Возможно вы не заметили, но тут как раз использование шаблонов и есть.
Поясню… INT_NULL в данном случае — произвольная константа, она запросто может быть и 0 — ничего от этого не изменится. Абсолютно. Потому, что это именованная константа. А создавать свой nullable тип только для того, чтобы можно было «идеалогически правильно» как-то ну совсем не верно. И используется для отображения NULL значений полей, которые в БД записаны как целые. В моей области применения вполне хватит 32-х бит, на первое время.
INT_NULL, на мой взгляд, достаточно говорящее название.
Ну да. Такой вот NULL-тип, очень удобно отображать в базу данных и из неё, прозрачно проходит через границы раздела (веб-сервисы, сохранение в файл, загрузка из файла).
И всё же, уважаемый, что именно Вам доставляет эта запись?
В частности для того, чтобы можно было не зная, с каким именно типом работаешь, а зная только какого типа поле и как оно называется получить его. Как-то так.
Тут интересная история получилась — пока этого механизма не было — не очень-то и надо было, а после его появления некое количество «фишек» стали не просто удобнее, а вообще возможны, к примеру — использование в стандартных алгоритмах (посредством функшиноидов).
Реальный пример — есть вектор значений, построить на его основе карты (std::map) у которых ключами будут являтся разные поля методов (Имя и Идентификатор).
Подобная реализация позволяет сделать это двумя функциями (точнее двумя «инстансами» одной шаблонной). s-c.me/1jt
p.s. Я не паскалист.
Тут не совсем сериализация — подавляющее число операций производятся непосредственно с полями. И только изредка посредством такой «неведомой фигни» — к примеру нужно сделать карту у которой ключом будет идентификатор — не вопрос, говорим мы и делаем шаблон в котором выбираем по ".Id", который есть почти у каждого нашего класса. А тут «внезапно» неплохо было бы сделать карту с ключём «ParentId», а для другого типа — по имени, и т.д.
В результате получается — есть объект заданного типа, мы его один раз «сериализуем», а после этого мы можем брать любые поля этого типа, путём присваивания и получения (думаю — стоит ли код писать или и так непонятно?).
А ещё есть возможность создать функциональный объект, указать ему применять такие-то функции к таким-то полям для сравнения, и использовать его для фильтрации.
А так, да — велосипедище. Но родное велосипедище. :)
По порядку — статики — для того, чтобы писать одну функцию, а не делать шаблонный класс. А так получается по функции на тип, и по контейнеру на тип. С удалением правда не очень хорошо получилось, в том плане, что если явно не удалять — будут копиться «висячие указатели», но они удаляются, просто не очень красиво.
«Тайпдефы» просто для того чтобы не показывать, что в изначальном варианте там были UnicodeString (а вдруг кто-то захочет тоже поэкспериментировать?).
Приведение к войду указателя на себя — а что не нравится? Ну да, можно было бы явно хранить указатель на базовый класс, не спорю, было бы лучше (и как я это проглядел).
Вооот. Такому провайдеру и заплатить не жалко :)
// Как увидел 6-ти значные числа, так и забыл, что на что надо делить…
32 Кбит/с 25 681,92 ~ 5500 р.
1024 Кбит/с 567 681,24 ~ 120000 р.
Ужас какой…
Это следствие инфраструктуры или того, что провайдер «зажрался»?
Воронеж,
дом, Интеркон = 2 Мб/с за 600 р. + локальная сеть на 100 Мб/с.

работа, Интеркон для юридических лиц (тарифная сетка хитрая, после превышения трафика — скорость обрезается)
Тариф Цена Траф. После превышения
Бизнес-Старт 2900 5000 200
Бизнес-ХИТ 5900 8000 600
Бизнес-Практик 12900 15000 1000
Бизнес-Комфорт 16900 20000 2000 (фактически — вот он 2 Мб/с безлимит за 17 тыс. рублей)
Бизнес-Престиж 39900 50000 5000

Спасибо за статью. Список игр показывает большую проделанную работу.
Сильно не бейте — тайное шаманское знание ;)
Весёлая ферма от Alawar — на wine старше 1.0.1 дико тормозит.
Мне понравилось. Может будет отчёт. Спасибо за помощь тебе лично, да и всех конференции в целом.
2 дня спустя — всё вокруг такое медленное, тягучее… :)
wine-1.1.22
Полёт нормальный. Единственное, что видимо придётся подкладывать библиотеки для TLS/SSL — последние цать версий Миранды используют их из системы — а wine видимо их не полностью предоставляет, по крайней мере соединяться по 5222/5223 портам заставить не смог.

Информация

В рейтинге
Не участвует
Откуда
Воронеж, Воронежская обл., Россия
Дата рождения
Зарегистрирован
Активность