Осмелюсь предположить, что данный пример на смолтоке применим только к GNU Smalltalk. Попробовал сделать аналогичный пример на Pharo, только с небольшими отличиями, продиктованными особенностями настоящего смолтока: 1. невозможностью присвоить классовой (и объектной тоже) переменной значение при объявлении класса; 2. невозможностью объявить а дочернем классе ту же классовую переменную, что и в суперклассе. Если попробовать сделать это, будет выдано сообщение об ошибке, говорящее о повторном объявлении ранее объявленной переменной. Это же, кстати, касается и объектных переменных.
Т.е., создаём сначала объект класса MyClass, предварительно присвоив классовой переменной значение 10. Затем создаём объект класса MyChildClass, предварительно присвоив классовой переменной значение 20. После чего выводим в транскрипт сначала значение классовой переменной производного класса, используя метод объекта. Затем производим аналогичное с классовой переменной суперкласса. После этого меняем значение классовой переменной в дочернем объекте и снова выводим всё на экран. В транскрипте отобразится 20\n10\n50\n10. Видим, что изменение значения классовой переменной в дочернем объекте никак не отразилось на таковой в базовом. Т.о., переменные базового и дочернего класса никак не конфликтуют друг с другом.
Данный пример не несёт никакого практического смысла, но показывает, что не стоит бояться классовых переменных в смолтоке. Они не страшнее, чем объектные. И самое главное, что настоящий смолток не позволит сделать тот выкрутас, что позволяет сделать GNU Smalltalk. Самое обидное, что когда-то и GNU Smalltalk был настоящим смолтоком. Но потом, к версии 3, по моему, его сильно порезали и превратили в то, чем он является сейчас.
Что касается классовых переменных в Руби, то это, опять же, просто особенность языка. Ничего в этом страшного нет. Просто надо помнить об этой особенности, чтобы не нарваться на неожиданные проблемы.
Если не трудно, то приложите пожалуйста. Что-то я ничего вменяемого не нашёл, кроме официальной документации. И, если я правильно понял, библатех не умеет сортировать библиографический список в порядке использования ссылок. Или умеет?
Есть ещё один простой способ — использовать утилиту mount.ecryptfs_private с именем «хранилища». Эта утилита не требует прав root'а. Пусть хранилище будет называться encrypted, рабочий каталог — ~/encr, а каталог с зашифрованными файлами — ~/.encr:
создаём каталоги ~/encr и ~/.encr;
создаём файл ~/.ecryptfs/encrypted.conf со следующим содержимым:
/home/username/.encr /home/username/encr ecryptfs
выполняем команду ecryptfs-add-passphrase, которая запросит ввести пароль, после чего выведет сигнатуру ключа;
сигнатуру ключа вставляем в файл ~/.ecryptfs/encrypted.sig .
Теперь для монтирования хранилища можно использовать команду
$ mount.ecryptfs_private encrypted
Для отмонтирования:
$ umount.ecryptfs_private encrypted
Кроме того, если использовать утилиту ecryptfs-add-passphrase с опцией --fnek, то в хранилище ключей будет добавлен ключ для шифрования имён файлов. Она выдаст две сигнатуры. Обе они должны быть добавлены в ~/.ecryptfs/encrypted.sig двумя строками, в порядке следования.
и положить его, например, в ~/.local/bin (не забыв добавить этот каталог в PATH). Теперь при запуске этого скрипта, он будет запрашивать пароль и монтировать хранилище, в случае успешного ввода пароля. Сам пользуюсь подобным скриптом. Всё устраивает.
Здорово! Даже Developer Tools есть! Теперь ждём синхронизацию.
Эх, после фактической смерти Opera я довольно сильно прирос к Firefox. Похоже, теперь придётся опять от него уходить или мирно сосуществовать с обоими браузерами.
Полезная статья. Спасибо! Для построения приложений с web-интерфейсом использую qooxdoo. А выбор js-библиотеки для обычных сайтов был проблемой. Захотелось попробовать что-то альтернативное jQuery и qooxdoo (к сожалению, у qooxdoo совершенно разные подходы к созданию web-приложений и сайтов). Решил поискать чего-нибудь про dojo. Попалась Ваша статья. В результате, после нескольких экспериментов и краткого изучения документации выбор был сделан.
Только вчера разул глаза и прочитал, что на fat32 можно записать файл, размером не более 4 ГБ. Посмотрел на флешку — образ диска как раз весит 4 ГБ. Это при том, что образ на винчестере весит ~4,3 ГБ. Т.е. кусок, размером ~300 МБ был откушен. При этом, при копировании образа Caja даже не ругнулся. И установка системы прошла нормально. Видимо, просто повезло, что ничего нужного для установки не было в откушенном хвосте.
На досуге попробую отформатировать флешку в UDF и загрузить систему из образа. Может и потянет, если UEFI умеет работать с UDF.
На флешке? Если да, то у меня так оно и есть. Хотя, более чем уверен, что ФС может быть любая из поддерживаемых grub'ом (это я про установку из образа). Если же речь идёт про загрузочный раздел EFI, то, насколько я знаю, только fat16/32 + флаг загрузки на разделе.
Точно! И чтобы в дальнейшем использовать флешку по прямому назначению, нужно будет сначала её отформатировать. А в моём случае на ней лежит несколько образов, с любого из которых я могу загрузиться. И флешка при этом — именно флешка, а не имитация USB-CD-привода.
Собственно, код:
Класс MyClass содержит классовую переменную classvar. Теперь делаем акцессоры к этой переменной:
И методы экземпляра, для получения и установки значения классовой переменной:
Проверяем всё это в Playground (Workspace):
Т.е., создаём сначала объект класса MyClass, предварительно присвоив классовой переменной значение 10. Затем создаём объект класса MyChildClass, предварительно присвоив классовой переменной значение 20. После чего выводим в транскрипт сначала значение классовой переменной производного класса, используя метод объекта. Затем производим аналогичное с классовой переменной суперкласса. После этого меняем значение классовой переменной в дочернем объекте и снова выводим всё на экран. В транскрипте отобразится 20\n10\n50\n10. Видим, что изменение значения классовой переменной в дочернем объекте никак не отразилось на таковой в базовом. Т.о., переменные базового и дочернего класса никак не конфликтуют друг с другом.
Данный пример не несёт никакого практического смысла, но показывает, что не стоит бояться классовых переменных в смолтоке. Они не страшнее, чем объектные. И самое главное, что настоящий смолток не позволит сделать тот выкрутас, что позволяет сделать GNU Smalltalk. Самое обидное, что когда-то и GNU Smalltalk был настоящим смолтоком. Но потом, к версии 3, по моему, его сильно порезали и превратили в то, чем он является сейчас.
Что касается классовых переменных в Руби, то это, опять же, просто особенность языка. Ничего в этом страшного нет. Просто надо помнить об этой особенности, чтобы не нарваться на неожиданные проблемы.
Теперь для монтирования хранилища можно использовать команду
Для отмонтирования:
Кроме того, если использовать утилиту ecryptfs-add-passphrase с опцией --fnek, то в хранилище ключей будет добавлен ключ для шифрования имён файлов. Она выдаст две сигнатуры. Обе они должны быть добавлены в ~/.ecryptfs/encrypted.sig двумя строками, в порядке следования.
Теперь можно сделать такой скрипт:
и положить его, например, в ~/.local/bin (не забыв добавить этот каталог в PATH). Теперь при запуске этого скрипта, он будет запрашивать пароль и монтировать хранилище, в случае успешного ввода пароля. Сам пользуюсь подобным скриптом. Всё устраивает.
Эх, после фактической смерти Opera я довольно сильно прирос к Firefox. Похоже, теперь придётся опять от него уходить или мирно сосуществовать с обоими браузерами.
На досуге попробую отформатировать флешку в UDF и загрузить систему из образа. Может и потянет, если UEFI умеет работать с UDF.