All streams
Search
Write a publication
Pull to refresh
0
0
Roman @rv82

User

Send message
Осмелюсь предположить, что данный пример на смолтоке применим только к GNU Smalltalk. Попробовал сделать аналогичный пример на Pharo, только с небольшими отличиями, продиктованными особенностями настоящего смолтока: 1. невозможностью присвоить классовой (и объектной тоже) переменной значение при объявлении класса; 2. невозможностью объявить а дочернем классе ту же классовую переменную, что и в суперклассе. Если попробовать сделать это, будет выдано сообщение об ошибке, говорящее о повторном объявлении ранее объявленной переменной. Это же, кстати, касается и объектных переменных.

Собственно, код:
Object subclass: #MyClass
	instanceVariableNames: ''
	classVariableNames: ''
	package: 'Roman-Pkg'

MyClass class
	instanceVariableNames: 'classvar'


Класс MyClass содержит классовую переменную classvar. Теперь делаем акцессоры к этой переменной:
MyClass class>>classvar
	^ classvar

MyClass class>>classvar: anObject
	classvar := anObject


И методы экземпляра, для получения и установки значения классовой переменной:
MyClass>>classvar
	^ self class classvar

MyClass>>classvar: anObject
	self class classvar: anObject


Проверяем всё это в Playground (Workspace):
|mc child|
mc:=MyClass classvar: 10; new.
child:=MyChildClass classvar: 20; new.
Transcript show: child classvar; cr; show: mc classvar; cr
child classvar: 50.
Transcript show: child classvar; cr; show: mc classvar; cr.


Т.е., создаём сначала объект класса 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 двумя строками, в порядке следования.

Теперь можно сделать такой скрипт:
#!/bin/sh
ecryptfs-add-passphrase --fnek
mount.ecryptfs_private encrypted

и положить его, например, в ~/.local/bin (не забыв добавить этот каталог в PATH). Теперь при запуске этого скрипта, он будет запрашивать пароль и монтировать хранилище, в случае успешного ввода пароля. Сам пользуюсь подобным скриптом. Всё устраивает.
Добавлю ещё свои 5 копеек: SQLite Manager — неплохое кроссплатформенное решение в виде дополнения для Firefox. Вполне удобен в работе.
Здорово! Даже 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-привода.
2

Information

Rating
Does not participate
Registered
Activity