Home
Максим Новиков
Столько шумихи поднялось по поводу этих часовых поясов, хотя, по сути, это была самая незначительная часть послания президента. Просто в реализацию и выгоду от всего остального люди не верят, а многим остальное даже и понять сложно. А вот часовые пояса - просто, и, что называется, со вкусом. Откомментирую эту тему и я.

Сказано было про сокращение числа поясов (для справки, сейчас часовые пояса распределены так: http://upload.wikimedia.org/wikipedia/commons/3/3d/Timezones_optimized.png). Но что имелось ввиду? Все поняли это, как сокращение разницы во времени между Москвой и Петропавловским-Камчатским. Предлагают сократить с 11 до 5 часовых поясов. Господа, это удар ниже пояса. Москва будет вставать на 2,5 часа раньше, чем сейчас (а Калининград вообще на 3,5 часа), а Петропавловск-Камчатский на 2,5 часа позже, и это считается нормальным? Тогда я еду жить в Петропавловск-Камчатский. А Калининград просто обидется, и выйдет из состава России.

Конечно, избыточное дробление России по часовым поясам явно налицо. Непонятно, зачем нужен пояс +4 (Самара), которого всего ничего, а также пояса +6 и +8, которые с успехом отсутствуют в более северных областях. Конечно, эти северные области практически не населены, и разница там в 2 часа между соседями никого не напрягает, но мне думается, она и густозаселённых соседей не напряжёт. Напрягает сам факт разницы, а её размер уже не так важен, если он находится в пределах рабочего дня.

Таким образом, я бы предложил просто исключить пояса +2 (Калининград), +4 (Самара), +6, +8, +10 и +12, присовокупив их к оставшимся +3, +5, +7, +9 и +11. А сжимать время от Калининграда до Петропавловска-Камчатского выглядит, извиняюсь, комиксоподобно. А то, что госслужащие из Петропавловска-Камчатского не могут дозвониться до коллег из Москвы... При моём делении разница составит уже не 9, а 8 часов - рабочий день. С учётом того, что по утрам в Москве обычно планёрки и т.п., то действительно, трудности есть и при моём делении. Значит, надо налаживать иные средства решения вопросов с центром. В конце концов, есть электронная почта, не требующая прямого контакта, а также можно более чётко организовать работу в регионах, чтобы не приходилось так часто созваниваться. Что касается бизнеса, то думаю, он сам решит эти вопросы. Насколько я вижу, в бизнесе люди работают дольше 8 часов в день, и разница в 8 часов - не такая уж и помеха. А что делать - страна длинная! :)

Теперь, что касается летнего и зимнего времени. Скажу, как КИП-овец и программист. Это очень неудобно. Например, счётчики энергорессурсов и так живут по зимнему времени всегда (иначе пришлось бы существенно усложнять логику обработки результатов а также их конструкцию для корректного подсчёта), и очень затруднительно анализировать их распечатки летом. А синхронизация файлов в компьютере и на сайте? Программа Dreamweaver требовала после перехода на другое время закачать на хостинг весь сайт, потому что не узнавало время файлов, пока я нафиг не отключил функцию зимнего/летнего времени, и не стал корректировать часы, просто переводя стрелки. Думаю, я перечислил далеко не все неудобства для людей, привязанных ко времени, ибо выпадения часа или наоборот, его лишнее появление - алогично для вычислительных систем, работающих в длительных промежутках времени.

Теперь насчёт влияния на здоровье. Сейчас мне, если честно, пофиг. Но вот когда мне приходилось вставать на работу или учёбу во-время, я очень страдал из-за перевода на час вперёд. Итак, я за отмену перевода стрелок на летнее или зимнее время.

P.S.: Одновременно со сменой часовых поясов неплохо было бы выпрямить границы регионов, ибо столь витиеватое деление не имеет большого смысла. Заодно разовьётся и дорожная сеть, ибо подозреваю, что границы регионов диктовались удобством подъезда к тому или иному населённому пункту.
 
 
Максим Новиков
1 этап - появления информации о госуслугах в сводном реестре и на едином портале gosuslugi.ru - должно случиться 15 ноября. На самом портале говорится, правда, что заработает он только в последний день года.

2 этап - в декабре 2009 г. на портале должны появиться формы заявлений.

3 этап -  граждане смогут через него подавать документы.

4 этап - отслеживание ими хода исполнения заявок.

5 этап - получение данных от госорганов в электронном виде. В зависимости от услуги это случится в период с декабря 2010 г., когда можно будет получить статистическую информацию Росстата по запросу, до декабря 2015 г., когда должно быть запущено получение для иностранцев вида на жительство и разрешения на временное проживание в России, а также регистрация по месту жительства и месту пребывания россиян.

Отправка запросов, о которой говорили президент и министр связи, будет возможной только после третьего этапа, т.е. в период с февраля до декабря 2010 г. в зависимости от услуги.

http://cnews.ru/news/top/index.shtml?2009/11/11/369283


МОЙ КОММЕНТАРИЙ:

Только наймите для этих работ дорогих специалистов, которые профи в своём деле, а не самых дешёвых, блин, с аукциона! Задолбали уже эти ублюдочные гос.сайты! Наймите не только программистов, но и специалистов по эргономике! Повторяю: ЭРГОНОМИКЕ. А то не разобраться не то что простым пользователям, но и людям со стажем работы в Интернете (намекаю на себя)!

 
 
Максим Новиков
Послание президента федеральному собранию все послушали?
Он наверно с моего предыдущего поста списывал :)))
И с дальнейших комментариев к нему :)

Вот только как это будет всё исполняться. Сопротивление прослойки уж очень велико.
 
 
Максим Новиков
Конечно, я не имею право судить о высшем образовании, поскольку никогда не обучался в высших учебных заведениях, ограничившись средним специальным образованием в ПТУ, и не прочувствовал весь этот вопрос изнутри. Понимаю, что рискую навлечь на себя шквал критики задетых за живое сограждан. Но мне тут вдруг подумалось...

Среди моих знакомых и друзей подавляющее большинство, если не сказать, что все, имеют высшее образование. И не раз я слышал из их уст тезис о том, что высшее образование не столько даёт знания, сколько учит эти знания добывать из различных источников. Меня всегда эта фраза немножко коробила. Но я думал, что, может быть, это как раз правильно - в первую очередь уметь работать с источниками. Тем более, как бывшему школьному двоечнику, мне очень импонировал такой метод обучения.

Сегодня же, по пути сюда, на работу, я вдруг понял, почему меня коробило от той фразы, и что мы имеем в итоге в стране из-за такого подхода. Итак, поскольку все, закончившие ВУЗы и университеты, хором и очень уверенно говорят о таком приоритете высшего образования, как добывание знаний путём работы с источниками, значит им об этом в процессе обучения неоднократно говорили преподаватели. То есть, это, можно сказать, официальная линия российского высшего образования. Студентов учат вертеться в этом мире, учат жить и выживать, а не овладевать конкретными знаниями. Да, для каждого отдельно взятого в небольшом отрезке времени индивидуума это благо - при минимуме затрат получить для себя максимум (кстати, именно из-за подобного подхода образование получается настолько универсальным, что человеку легче уйти в подвернувшуюся непрофильную специальность, чем заниматься профильными задачами), но если посмотреть на ситуацию в масштабе страны, выглядит это всё весьма печально.

Мало того, что получающаяся универсальность образования убивает специалистов своего дела, так из-за такой ориентации в/о оставшиеся в русле специалисты все хором работает с источниками, а именно - с уже имеющимися западными технологиями. Ничего своего у нас практически и нет. Вместо того, чтобы генерировать что-то самостоятельно на базе полученных знаний, молодой российский учёный, в соответствии с расставленными при обучении акцентами, штудирует западные источники в поисках готовых ответов. Разумеется, в них содержится информация далеко не первой свежести. Но придумать что-то своё он не может - его этому не обучали. Точнее, обучали, но получение реальных знаний в вузе или университете было всего лишь вторичным и, зачастую, необязательным действием.

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

Но переориентировать в/о - значит обречь государство на выделение существенных денег на науку. А это вложение слишком длинное, чтобы быть выгодным высоким руководителям, избирающимся на сравнительно короткие сроки. Поэтому выгоднее иметь "эконом-науку", работающую с источниками, и делать вид, что у нас самое лучшее высшее образование, чем реально готовить людей самостоятельно делать открытия.

Да, мне возразят, что есть профильные вузы, дающие реальные знания, и университеты, дающее широкое образование. Согласен, но в университетах тоже есть разные факультеты, а потому, если мы хотим видеть Россию с собственными высокими технологиями, подход и приоритеты обучения должны быть везде ориентированы именно на создание нового, а не на воровство чужих устаревающих технологий. И ориентация эта должна быть очень жёсткой, а халявщики найдутся всегда. Всегда найдутся те, кто очень быстро научится "работать с источниками" :) Тут можно не беспокоится.

Добавлю ещё. Пока у нас слесари-ПТУ-шники будут сисадминить (это я о себе), а учёные вечно "работать с источниками", делая вид, что занимаются чем-то важным, ничего путного у нас в стране не получится. Шоу маст гоу он?
 
 
Максим Новиков
Свершилось!!!

Собственно, вот: http://novikovmaxim.narod.ru/products/QtCologic/QtCologic.htm

Ссылка для скачивания под заголовком.

 
 
Максим Новиков
В настоящий момент ведётся разработка иконки для игры "Логика цвета". Скорее всего это будет изображение кубика Рубика на белом фоне, переходящим к краям в прозрачность. Принимаются также и другие предложения. Релиз близится!
 
 
Максим Новиков
Моя новая статья о добавлении иконки в приложение Windows при программировании в кроссплатформенной среде Netbeans.

http://novikovmaxim.narod.ru/linux/lin_progr/QtIcons.htm


Одна из глав:

Настройка проекта в Netbeans

В настоящий момент среда программирования Netbeans не предоставляет возможности напрямую вставлять иконку приложения в компилируемую программу. Однако это не сложно сделать вручную. Для этого сохраните созданную в редакторе иконку в папку проекта. Далее, в той же папке, рядом с имеющимся файлом ресурсов ИмяПроекта_resource.rc создаёте текстовый файл ИмяПроекта_resource_icon.rc, содержащий внутри одну строчку:
    IDI_APPICON ICON DISCARDABLE "ИмяФайлаИконки.ico"
После этого в Netbeans в настройках проекта для всех конфигураций в подкатегории Qt в разделе Expert добавляем в параметр Custom Definitions строку:
    win32 { RC_FILE = ..\ИмяПроекта_resource_icon.rc }
Конструкция win32 { } нужна для того, чтобы файл иконки интегрировался в приложение только при компиляции в Windows. Другие операционные системы используют иные средства для отображения иконок файлов, которые мы в данной статье не рассматриваем.

Выход на внешний каталог «..\» перед именем файла используется из-за того, что файл с редактируемыми нами сейчас в Netbeans настройками проекта лежит в каталоге проекта в директории nbproject, а сам файл подключаемого ресурса — на внешнем уровне, в основной директории проекта.
 
 
Максим Новиков
Только сегодня узнал:

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

Однако если вы скопируете текст в каком-либо окне, затем закроете это окно, а после этого попытаетесь любым способом вставить куда-либо скопированный текст, то будете неприятно удивлены. Текст, который вы скопировали, пропал и вставить его не удасться. Это происходит потому, что в Gnome почему-то отсутствует менеджер буфера обмена.

Эта досадная неприятность исправляется установкой программы glipper (менеджера буфера обмена): http://glipper.sourceforge.net/
Программа glipper присутствует в официальном репозитории Ubuntu, для её установки достаточно набрать в консоли:

sudo apt-get install glipper

После установки glipper, иконка программы вручную добавляется на панель.

Также существует ещё одна, аналогичная программа parcellite: http://parcellite.sourceforge.net

sudo apt-get install parcellite

 
 
Максим Новиков
Покрутив немного Ubuntu 9.10 нашёл в ней пару плюсов для себя.

1. Наконец то заработала галочка "Автоматически запоминать запущенные приложения при выходе из сеанса" по адресу "Система - Параметры - Запускаемые приложения - Настройки". Теперь все окна, оставшиеся открытыми на рабочем столе при выключении системы, вновь могут открываться при загрузке.

2. Система стала быстрее загружаться (40 сек). Для интереса я выполнил промеры времени с момента включения до определённых этапов загрузки моего компьютера (Pentium 4, 3,2 ГГц, 2 Гб ОЗУ):

0 сек - нажатие на кнопку включения компьютера.
20 сек - появление надписи о загрузке GRUB (то есть аппаратные тесты заняли 20 секунд)
30 сек - появление меню выбора загрузки той или иной операционной системы (загрузчик GRUB отработал за 10 секунд, что, на мой взгляд, как-то многовато)
1 мин 10 сек - полная загрузка операционной системы и всех апплетов (чистое время загрузки ОС - 40 секунд), уже можно работать.
1 мин 25 сек - полная остановка жёсткого диска.

Приятно удивило и время выключения системы. Оно составило всего 7 секунд с момента нажатия на кнопку до полного выключения питания процессорного блока.

Для сравнения, чистое время загрузки моей Windows XP SP3 с деинсталлированным антивирусом - 2 мин. 40 сек. (это время с момента выбора операционной системы в меню GRUB) против 40 секунд в Ubuntu 9.10:

0 сек - выбор системы в меню загрузки
7 сек - появление первого графического экрана загрузки
35 сек. - появление стрелки графического курсора (за это время Ubuntu 9.10 уже загружена)
51 сек. - появление окна приветствия
1 мин 25 сек - появление пустого рабочего стола
1 мин 41 сек. - полная загрузка рабочего стола
2 мин 40 сек - полная загрузка всех плагинов и полная остановка жёсткого диска, когда с системой можно уже работать.

Время выключения Windows XP SP3 составило 14 секунд (это после того, как я провёл тотальную очистку системы CCleaner'ом и поудалял лишнее из автозагрузки. А до этого система задумывалась аж на 2 мин. 10 сек.)

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

X Neural Switcher 0.9.7

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

В общем, вылезшую серию глюков я обошёл, назначив для переключения раскладок  Капс Лок в системе и Контрол + Левый Шифт в программе. К сожалению, в программе нельзя назначить несколько вариантов комбинаций клавиш, а также комбинацию "Любой Контрол + Любой Шифт". Единственное, что осталось - это при переводе выделенного текста в другую раскладку в редакторе, после вставки добавляется перевод на новую строку и иногда сбивается общая работа этого перевода. В общем, программа всё ещё очень сырая.

Правда в новой версии сделано более корректное переключение раскладки набранного текста в адресной страке Фаерфокса. Так что вектор развития программы выбран правильно :)

Firefox 3.5.4

Порадовал наконец наличием кнопки "+" на панели вкладок для автоматического создания новой вкладки. Раньше это можно было достичь лишь установкой плагина. Но ребят... дизайн иконки "+"... в стиле Линукса, короче :) Большой зелёный крест, залитый сверху вниз градиентом. Что называется, опять сделано топором.

qutIM 0.2

Установил релиз. Наконец при загрузке этого лучшего на мой взгляд интернет-мессенджера протокол mrim коннектится автоматически. Вот только передача файлов по этому протоколу почему-то не работает. Баг-репорт об этом существует.
 
 
Максим Новиков
03 Ноябрь 2009 @ 10:59
Поставил вчера Ubuntu 9.10 с нуля.

Сегодня меня вытащили на работу к 9:30, что крайне рано, поэтому щас буду ругаться.

Этот грёбанный NetworkManager когда-нибудь будет работать нормально с pppoe (вкладка DSL)??? В версии убунты 9.10 он при включении отключает локалку, через которую этот pppoe и должен работать. Получается, что он не в состоянии держать активными несколько соединений одновременно - чё за херня? Уже третий релиз операционной системы - и не могут сделать нормальный сетевой менеджер! В прошлой версии системы он как-то работал, хотя тоже непонятно как. Мне то проще работать с конфигом, сгенерированным pppoeconf, но если по умолчанию этот нетворкменеджер устанавливается мне в панель, какого чёрта я не могу им воспользоваться?

Если я неправильно его настраиваю, то какого чёрта тогда его интерфейс интуитивно не даёт настроить так, как положено. В общем, уродская программа так и не исправилась за все полтора года моего знакомства с ней. Ругают её все, а результата - ноль.

Остальное всё вроде нормально пока.
 
 
Максим Новиков
30 Октябрь 2009 @ 20:19
Опубликовал на сайте статью про указатели, которую недавно публиковал в ЖЖ:

http://novikovmaxim.narod.ru/linux/lin_progr/Pointers.htm
 
 
Максим Новиков
30 Октябрь 2009 @ 12:18
Тут такая цитата на http://bash.org.ru/abysstop проскочила:

25: [ 30 ] добавлена 2009-10-29 15:26
Вчера по каким-то делам Путин и Медведев во Фрязино гоняли, путь туда пролегает через Щелково... Ну понятно что все пробки уберут и т.д... но чтоб так... В общем в Щелково с главной улицы (Пролетарский проспект) народ весь убрали, привезли 2 автобуса своих "обычных людей" (молодые пары, дети, мужчины, женщины в обычной гражданской одежде) и выпустили гулять вдоль проспекта, в макдак посадили... типа жители местные.
Это нормально? С ними всегда эта туса по всему миру катается?))

Вопрос к жителям Щёлково - это правда? :)
 
 
Максим Новиков
30 Октябрь 2009 @ 11:11
Сегодня ночью я редактировал в визуальном редакторе сайтов Dreamweaver CS4 свою новую статью про указатели (я уже публиковал её не так давно на страницах ЖЖ), а в ней надо было много раз использовать угловые кавычки, которых нет на клавиатуре (т.н. "ёлочки", то есть так: «ёлочки»). И тут я вспомнил, что в одной из старых версий Dreamweaver MX я делал специальные команды, вставляющие в разрабатываемую страницу сайта разные неклавиатурные символы из числа Unicode, и даже писал об этом статью: http://novikovmaxim.narod.ru/statyi/web_help/dwmx.htm

Я решил попробовать перенести методику на последнюю версию Dreamweaver CS4, что мне с некоторыми коррективами удалось. Тогда я скорректировал статью применительно к последней версии этого редактора, а когда стал дописывать дату коррекции, то оказалось, что она отличается от даты написания статьи ровно на 4 года! Именно 4 года назад 30 октября день в день я опубликовал эту статью впервые!

P.S.: У нас тут на работе все кашляют, чихают, меряют температуру, а кое кто уже и на больничном. А сегодня, пока я шёл на работу, меня основательно обдуло ледяным ветром. У нас конец Кастанаевской - как аэродинамическая труба - всегда ветер там. Вот теперь сижу, оттаиваю ухи, заледеневшие до самых перепонных барабанок! :(
 
 
Максим Новиков
Хочу "пропиарить" две свои новые статьи.

Qt. Кроссплатформенное программирование в Windows - статья о выборе среды программирования, фреймворка и языка для написания кроссплатформенных приложений. Рассматривается установка и настройка в Windows кроссплатформенной интегрированной среды разработки Netbeans, кроссплатформенного фреймворка Qt и компилятора C++.

Qt. Статическая сборка проекта - статья о переориентировании библиотеки Qt на статическую компиляцию проектов, когда код библиотеки включается в состав исполнимого файла. По умолчанию Qt - системная динамическая библиотека, рассчитанная на постоянное присутствие её dll-файлов в системе.
 
 
Максим Новиков
28 Октябрь 2009 @ 13:14
Почему сайты большинства государственных учреждений такие неструктуированные? Ничего найти нельзя. На главной странице, как правило, куча самой разной информации! Пока не прочтёшь всю страницу, вникая в малознакомые понятия, в поиске нужной инфы, уже обед начнётся! Примеры:

1. О чём этот сайт? http://dnpp.mos.ru/

2. Почему я должен штудировать все подробнейшие (написанные явно для дебилов) инструкции к этому сайту (ссылку на которые ещё надо найти в остальном месиве информации), прежде чем пойму, что это за сайт и как им в общих чертах пользоваться? http://zakupki.gov.ru/

Ну и остальные не лучше. Туйва хуча инфы на главной странице, и ничего не найти.

(подозреваю, что не соображающие в эргономике начальники в приказном порядке заставляют низкооплачиваемых веб-дизайнеров выкладывать всё на первую страницу)
 
 
Максим Новиков
20 Октябрь 2009 @ 20:32
Уже второй день не могу заняться собственно компиляцией своего проекта под Windows.

Для статической линковки (когда все библиотеки включаются в один исполняемый файл) требуется перенастроить и пересобрать всю библиотеку Qt. Вчерашний день ушёл на поиск и изучение методики перенастройки и пересборки. Сегодня же, во время автоматической пересборки библиотеки, которая занимает несколько часов, выяснилось, что на диске виртуальной машины с Windows, на которой и происходила описываемая пересборка, закончилось свободное место, отчего машина просто принудительно стала останавливать гостевую ОС, и даже не давала снова в неё загрузиться, чтобы освободить место.

Кроме того, не было ни одного предупреждения о нехватке места ни от гостевой ОС, ни от виртуальной машины. Догадался я о причинах остановки ОС только потому, что как-то она уже останавливалась по той-же причине, но с предварительными предупреждениями. В итоге я добавил в виртуальную машину новый диск, выделенный на другом физическом диске, где было достаточно места, загрузился с образа диска Убунты, и из-под неё уже отформатировал диск в NTFS и удалил с первого диска кое-какие папки.

Попробовал копировать из-под той же Убунты папку с Qt на другой диск - она написала, что будет коприовать 1,7 Гб целый час. Мне это не понравилось. Перезагрузился в незагружавшуюся ранее из за недостачи места гостевую Windows. В ней копирование предлагалось сделать за 15 минут. В ней и закончил все необходимые манипуляции по освобождению места путём переноса некоторых других папок на новый диск.

Пока писал этот пост, винда скопировала папку с Qt, пойду её мучить дальше. Кстати, параллельно пишу статью про настройку рабочего места программиста для работы с Qt. Собираю в одно место материал и про статическую линковку, и про инсталляцию и настройку сред программирования. Так что скоро на сайте должна появиться ещё одна статья :)

И ещё - я вчера подстригся :)
 
 
Максим Новиков
18 Октябрь 2009 @ 19:10
Программирование игры "Логика цвета" закончено. Теперь я изучаю вопрос её распространения, поскольку помимо самого файла программы к нему необходимо прикладывать файлы библиотек Qt (ведь не у всех она установлена). Сейчас буду изучать, как это сделать. :)
 
 
Максим Новиков
15 Октябрь 2009 @ 14:24
Во-первых, у меня сегодня день рождения! :)

Во-вторых, я тут почитал про новую версию Убунты, и пришёл к выводу, что всё-таки её следует установить на чистый раздел - слишком много у неё изменений, в частности - файловая система изменена с ext3 на бывшую в прошлой версии ещё в тестировании, и потому не установленную мной, ext4. На сайте Убунты делается оговорка, что при обновлении файловая система не обновляется, а ручное обновление не гарантирует максимальной производительности системы. Так что придётся ставить с нуля, а потом доустанавливать те нужные мне программы, которые не входят в штатную установку дистрибутива Убунты. Кстати, надо не забыть сохранить правила iptables, а то в прошлый раз забыл, и пришлось писать заново. Замечу, что выход Ubuntu 9.10 ожидается 29 октября.
 
 
Максим Новиков
Как я уже упоминал ранее, в процессе изучения кроссплатформенной библиотеки Qt (читается как "кьют") я пишу программу игры "Логика цвета" - аналога пластмассовой игрушки, бывшей у меня когда-то в детстве. Так вот, основной функционал игры написан, так что под Линуксом можно уже играть. Осталось немного подправить интерфейс и попробовать откомпилировать игру под Windows.

В процессе написания программы я отважился влезть своими погаными ручками в используемый мной в программе сторонний компонент выбора цвета, чтобы слегка изменить его функционал. Раньше я в чужие компоненты не влезал. Операция, в процессе которой компоненту была добавлена функция скрытия текущего цвета (вместо цвета компонент отображает знак вопроса на сером фоне), прошла успешно.
 
 
Максим Новиков
Наиболее трудным для понимания в C++ оказываются указатели, создание ссылок и взятие адреса. Это происходит из-за того, что оператор указателя (*) как части типа и создания ссылки (&) употребляется разными программистами и в разных случаях по разному (то вплотную к имени типа, то вплотную к имени переменной, то вообще с пробелами с обеих сторон - и это синтаксически допустимо); оператор взятия адреса (&) пытаются логически связать с оператором создания ссылки (&); указатель как часть типа смешивают с указателем как командой доступа к значению, на которое указывает указатель; поэтому всё это не укладывается в голове в общую систему. Однако, если чётко определить стиль использования этих операторов, а также различать разные, но похожие по написанию операторы в зависимости от места их употребления, то всё встаёт на свои места.


Итак, оператор указателя в объявлениях следует писать вплотную к типам, потому что он является частью этого типа:
int* a; //Это переменная "а" типа "указатель на int"

int* func(int*, float*); //Объявление функции с параметрами типа "указатель на int" и "указатель на float", 
                         //которая возвращает значение типа "указатель на int".
Тут следует заметить, что компилятор на самом деле рассматривает строку "int* a;" не как переменную "a" типа "указатель на int", а как переменную указателя "a" на тип "int", и с этой точки зрения следовало бы писать "int *a". Это подтверждает и результат одновременного объявления двух переменных:
int* a, b; //Это переменная "а" типа "указатель на int" и переменная "b" типа "int",
           //а не две переменные типа "указатель на int", как казалось бы.
Но тогда становятся непонятными типы в объявлении функций, где символ указателя используется без имени переменной. Рождаются какие-то новые сущности, не вписывающиеся в логику типов и только запутывающие программистов. Кроме того, при таком объявлении переменной (int *a), вместо образа некоего типа и образа обычной переменной в голове приходится представлять образ типа и образ указателя на переменную этого типа, что, согласитесь, сложнее. Вдобавок, инициализация указателя "int *a = 0" выглядит, как присвоение нуля значению, на которое указывает указатель, а не самому указателю, тогда как "int* a = 0" отражает фактическое положение дел, а именно присваивание ноля самой переменной a (инициализация указателя нулём). 

Поэтому я предлагаю не засорять голову, а просто запомнить в виде исключения эту особенность множественного объявления переменных типа "указатель на...", которые следует объявлять так:
int *a, *b; //Это переменные указателей "а" и "b" на тип "int".

Обращение же к значению, на которое указывает указатель, берётся так:
*a; //Значение, на которое указывает указатель "а".
Здесь символ "*" является не частью типа, а командой обращения по адресу, содержащемуся в переменной "a". Поэтому надо различать указатель как часть типа, и указатель, как команду разыменовывания - это две разные вещи.


Оператор создания ссылки также пишется вплотную к типу, поскольку он является как-бы частью типа "ссылка на ...":
int& b = a;   //Создание ссылки на переменную "a". Объявляется  "b" типа "ссылка на int", 
              //которая становится псевдонимом переменной "a".

int*& b = *a; //Создание ссылки на указатель "a". Объявляется  "b" типа "ссылка на указатель на int", 
              //которая становится псевдонимом указателя "a".

func(int&, float&); //Объявление функции с параметрами типа "ссылка на int" и "ссылка на float".

Существует ещё оператор взятия адреса, который выглядет также (&), но выполняет совсем другую функцию, а именно, функцию, обратную указателю:
&a; //Адрес, по которому располагается значение переменной "a".

Оператор ссылки и оператор взятия адреса хотя и пишутся одинаково, но фактически это разные операторы. Оператор ссылки (int& b = a) всегда является частью типа, тогда как оператор взятия адреса (&a) всегда используется вплотную к переменной, и просто возвращает адрес, по которому её значение расположено в памяти. Несмотря на внешнюю схожесть эти операторы нельзя смешивать логически, и пытаться понять сущность оператора ссылки исходя из знаний об операторе взятия адреса (иначе логичнее было бы создавать ссылку так: "int& b = &a", что не соответствует истине).

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


P.S.: Через несколько дней после написания этого поста я наткнулся на сайт Алексея Курзенкова, профессионального программиста (кстати, он тоже 1970 года рождения), и его заметку ещё двухлетней давности "Где поставить звёздочку?": http://www.sofmos.com/lyosha/Articles/CNotes_Asterisk.html. С большим интересом я прочёл его размышления на эту тему, которые, к моей радости полностью совпали с моими! Кроме того, в заметке объясняется даже историческая подоплёка текущего положения дел с синтаксисом указателей, а именно то, что конструкция множественного объявления указателей досталась языку C++ в наследство от C, и в C++ не рекомендуется (указатели следует инициализировать сразу после их объявления, чтобы в дальнейшем исключить возникновение трудновылавливаемых ошибок), что только подтверждает мою точку зрения.

Таким образом, не только я, оказывается, озаботился этим вопросом! :)


P.P.S: Если я ещё кого-то не убедил, предлагаю к ознакомлению книгу от создателя языка C++ Бьерна Страуструпа "Язык программирования C++" (только что наткнулся на неё): http://www.proklondike.com/books/cpp/straustrup_cpp.html. Думаю, более авторитетного автора по данной теме просто не найти! :))) Скачайте её (она в формате pdf) и откройте на странице 53. Глава 2.3.5 Указатели. Думаю, вы будете неприятно удивлены.
Кроме того, для общего развития и понимания причин существования в C++ вышеописонных мной исключений вроде множественного объявления указателей и т.п. можно почитать книгу того же автора "Дизайн и эволюция C++", где он описывает процесс создания языка C++: http://www.proklondike.com/books/cpp/cpp_cpp_straustrup_desing_evolution_cpp.html. Многое станет понятно.