Sunday, December 28, 2008
Saturday, December 27, 2008
lhc uses odbms
The Large Hadron Collider at CERN in Switzerland uses an Objectivity DB. The database is currently being tested in the hundreds of terabytes at data rates up to 35 MB/second.
via Why Aren't You Using An Object Oriented Database Management System?
via Why Aren't You Using An Object Oriented Database Management System?
Tuesday, December 23, 2008
ganja
я бегло читаю не всегда верно, потом понимаю что что-то не то, возвращаюсь, смотрю какое же там слово на самом деле написано. сегодня прочитал вместо
pgDesigner is an open source program for graphic design database to PostgreSQL. The code is written in the language Gambas, ...
... код написан на языке Ганджубас, ...
первая мысль была: весело же им писалось =), потом перечитал, узнал что писали они не на Ганджубасе а на Гамбасе http://gambas.sourceforge.net/
pgDesigner is an open source program for graphic design database to PostgreSQL. The code is written in the language Gambas, ...
... код написан на языке Ганджубас, ...
первая мысль была: весело же им писалось =), потом перечитал, узнал что писали они не на Ганджубасе а на Гамбасе http://gambas.sourceforge.net/
Saturday, December 20, 2008
dao or pl?
я не сплю шестые сутки и виденья у меня.
уже несколько дней бьюсь над вопросом: data access objects vs. generic persistence layer. (в контексте spring + hibernate)
и то и другое такое вкусненькое. точнее у меня три выбора:
1) красивое и аккуратное dao. все как положено, отдельные дао классы для каждой сущности, отдельные дао классы для получения родителей к детям.
2) половина дао. корневые объекты мы получаем через дао классы, а вот привязку детей перекладываем на hibernate (lazy loading), оставляя сессию открытой. но ведь так теряются основные преимущества дао в возможности переноса используемого хранилища объектов.
3) generic persistence layer, привязываемый, скажем, к контроллеру. который будет выполнять с hibernate операции, используемые в контроллере.
4) нельзя не учитывать и вариант что мы будет банально обращаться к hibernate сессии из контроллера, но мне этого не позволяет внутренний перфекционизм.
вроде все раскритиковал, кроме первого варианта. в нем мне не нравится то, что для того получения детей объекта нужен отдельный класс. или даже 2. плюс по интерфейсу на каждый класс.
но стоит ли это тех усилий и тех 6 классов и 6 интерфейсов?
скажите мне что я сплю, что все написанное выше -- бред и что все намного проще!
p.s. я, оказывается, не раскритиковал третий вариант. с persistence layer. может зря он мне кажется неправильным?
по большому счету это класс типа
может это и есть то, что назвается "красиво" и зря я это отвергаю?
может dao никто не использует и его изобрели для красоты? =)
уже несколько дней бьюсь над вопросом: data access objects vs. generic persistence layer. (в контексте spring + hibernate)
и то и другое такое вкусненькое. точнее у меня три выбора:
1) красивое и аккуратное dao. все как положено, отдельные дао классы для каждой сущности, отдельные дао классы для получения родителей к детям.
2) половина дао. корневые объекты мы получаем через дао классы, а вот привязку детей перекладываем на hibernate (lazy loading), оставляя сессию открытой. но ведь так теряются основные преимущества дао в возможности переноса используемого хранилища объектов.
3) generic persistence layer, привязываемый, скажем, к контроллеру. который будет выполнять с hibernate операции, используемые в контроллере.
4) нельзя не учитывать и вариант что мы будет банально обращаться к hibernate сессии из контроллера, но мне этого не позволяет внутренний перфекционизм.
вроде все раскритиковал, кроме первого варианта. в нем мне не нравится то, что для того получения детей объекта нужен отдельный класс. или даже 2. плюс по интерфейсу на каждый класс.
// например, есть классы, в которых определены методы
class Parent {
List <Child> children;
public List<Child> getChildren(){
return children;
}
}
class Child {
Parent parent;
public Parent getParent(){
return parent;
}
}
// есть еще маппинги к ним, да.
// если напрямую использовать hibernate session factory (вариант 4),
// то код получения родителя:
Parent parent = (Parent) session.get(Parent.class, parentId);
// а код получения его детей:
List<Child> children = parent.getChildren();
// все остальное за нас сделает hibernate
// если же все делать "по красивому" то получается что-то вроде
interface ParentDao {
public Parent getById(int id);
}
class ParentDaoHibernateImpl implements ParentDao {
SessionFactory sessionFactory;
public Parent getById(int id) {
return (Parent)sessionFactory.getCurrentSession().get(Parent.class,id);
}
}
interface ParentService {
public Parent getById(int id);
}
class ParentServiceDaoImpl implements ParentService {
ParentDao parentDao;
public Parent getById(int id) {
return parentDao.getById(id);
}
}
interface ChildDao {
public Child getById(int id);
}
class ChildDaoHibernateImpl implements ChildDao {
SessionFactory sessionFactory;
public Child getById(int id) {
return (Child)sessionFactory.getCurrentSession().get(Child.class,id);
}
}
interface ChildService {
public Child getById(int id);
}
class ChildServiceDaoImpl implements ChildService {
ChildDao childDao;
public Child getById(int id) {
return childDao.getById(id);
}
}
interface ParnetsChildrenDao {
public List<Child> getByParent(Parent parent);
}
class ParnetsChildrenDaoHibernateImpl implements ParnetsChildrenDao {
public List<Child> getByParent(Parent parent) {
return parent.getChildren();
}
}
interface ParnetsChildrenService {
public List<Child> getByParent(Parent parent);
}
class ParnetsChildrenServiceDaoImpl implements ChildService {
ParnetsChildrenDao parnetsChildrenDao;
public List<Child> getByParent(Parent parent) {
return parnetsChildrenDao.getByParent(parent);
}
}
// плюс в каждом классе геттеры-сеттеры для членов.
// хорошо хоть это все можно описать как beans
// и объекты сами подставяттся по маппингу
// т.е. sessionFactory будет инициализирован
// и куда надо в интерфейсы будут поставлены нужные реализации
// parentDao --> ParentDaoHibernateImpl
// childDao --> ChildDaoHibernateImpl
// parnetsChildrenDao --> ParnetsChildrenDaoHibernateImpl
// и в контреллере заведутся две инициализированные переменные
// parentService и parentService
// да, реализация в контреллере оставется в две строчки:
// да еще и две красивых строчки:
Parent parent = parentService.getById(parentId);
List<Child> children = parnetsChildrenService.getByParentId(parent);
но стоит ли это тех усилий и тех 6 классов и 6 интерфейсов?
скажите мне что я сплю, что все написанное выше -- бред и что все намного проще!
p.s. я, оказывается, не раскритиковал третий вариант. с persistence layer. может зря он мне кажется неправильным?
по большому счету это класс типа
class MyAppPL {
SessionFactory sessionFactory;
public Parent getParentById(int id) {
return (Parent)sessionFactory.getCurrentSession().get(Parent.class,id);
}
public List<Child> getParentsChilren(Parent parent) {
return parent.getChildren();
}
}
может это и есть то, что назвается "красиво" и зря я это отвергаю?
может dao никто не использует и его изобрели для красоты? =)
Friday, December 19, 2008
syntaxhighliter in blogger
проблема была в том что сервер, размещенную на котором css-ку syntaxhighliter'a я решил брать, отдавал всем mimetype text/plain вместо text/css, на что фф ругался в консоли:
Error: The stylesheet http://syntaxhighlighter.googlecode.com/svn-history/r55/tags/1.5.1/Styles/SyntaxHighlighter.css was not loaded because its MIME type, "text/plain", is not "text/css".
и работало оно не у всех и не всегда.
я поступил очень некрасиво и просто вставил содержимое css файла в шаблон. при этом я чувствую что должна быть возможность сделать все по-приличному, ведь там где я подсмотрел, оно работает:
http://72miles.com/blog/posts/spring-opensessioninviewinterceptor-opensessioninviewfilter-examples/
итого я сделал:
вставил в head в стили содержимое файла http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Styles/SyntaxHighlighter.css
и вставил перед закрытием </body> немного скриптов:
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shCore.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCSharp.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushPhp.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushJScript.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushJava.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushVb.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushSql.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushXml.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushDelphi.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushPython.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushRuby.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCss.js'/>
<script class='javascript' src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCpp.js'/>
<script class='javascript' type='text/javascript'>
//<![CDATA[
dp.SyntaxHighlighter.ClipboardSwf = 'http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/clipboard.swf';
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
//]]>
</script>
сам код, который требыется подсветить вставляется внутри тэга <pre> с прописыванием нужного языка:
<pre name="code" class="xml">
то что будет подсвечено
<pre>
причем, у всего что внитри, обязательно есть замена < и > на < и > соответственно, т.е. предыдущий код в html выглядел вот так:
<pre name="code" class="xml">
<pre name="code" class="xml">
то что будет подсвечено
<pre>
<pre>
p.s. supported languages
syntaxhighliter test
class myfirstjavaprog
{
public static void main(String args[])
{
System.out.println("Hello World!");
}
}
Wednesday, December 17, 2008
他妈的
他妈的 или ファック -- самая распостранненная мысль вечера.
а натолкнула меня на нее вполне мирная фраза 开发组成员列表:
которая описывала замечательный код http://code.google.com/p/sns20080718/
осталось узнать как все это чудо произносить)
а натолкнула меня на нее вполне мирная фраза 开发组成员列表:
которая описывала замечательный код http://code.google.com/p/sns20080718/
осталось узнать как все это чудо произносить)
Tuesday, December 16, 2008
belarusjug meeting @ 18 Dec
в четверг вечером (18 декабря 2008 в 18:00) встреча belarusjug. два доклада:
"Платформа JavaFX и язык JavaFX Script - новые средства разработки от Sun Microsystems"
«Adobe Flex and AIR platform: integration with Java back-ends»
http://www.belarusjug.org/
"Платформа JavaFX и язык JavaFX Script - новые средства разработки от Sun Microsystems"
«Adobe Flex and AIR platform: integration with Java back-ends»
http://www.belarusjug.org/
hsqldb doesn't save data (shutdown solution)
== hsqldb doesn't move data from .log to .script
Since HSQLDB > 1.7.1 an explict shutdown command is required in order to keep data persistant. So, if one follows the steps in chapter 1 of hibernates documentation
an uses for example hsqldb-1.8.0.2 (currently the latest release) the newly created Event's will in most cases not stored in the db.
This can be fixed by passing the required hsql driver property shutdown=true within the connection url.
I changed the proposed hibernate.cfg.xml property file to use
<property name="connection.url">jdbc:hsqldb:file:data/tutorial;shutdown=true</property>
rather
<property name="connection.url">jdbc:hsqldb:data/tutorial</property>
and things worked as expected.
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1114
fuck! I've spend hours and hours to find where the problem is and why I am doing everything like in the tutorial, but don't get the same result as I've been promised=)
Since HSQLDB > 1.7.1 an explict shutdown command is required in order to keep data persistant. So, if one follows the steps in chapter 1 of hibernates documentation
an uses for example hsqldb-1.8.0.2 (currently the latest release) the newly created Event's will in most cases not stored in the db.
This can be fixed by passing the required hsql driver property shutdown=true within the connection url.
I changed the proposed hibernate.cfg.xml property file to use
<property name="connection.url">jdbc:hsqldb:file:data/tutorial;shutdown=true</property>
rather
<property name="connection.url">jdbc:hsqldb:data/tutorial</property>
and things worked as expected.
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1114
fuck! I've spend hours and hours to find where the problem is and why I am doing everything like in the tutorial, but don't get the same result as I've been promised=)
Thursday, December 11, 2008
копирование из одной базы данный в другую [java+hibernate]
долго выискивал комбайн которым буду выдергивать сорняки у себя в горшочке, в конце концов соорудил пинцет из подручных инструментов и понял, что никакой комбайн мне был не нужен)
задача была скопировать все из одной базы данных в другую: юзер нам заливает hsqldb запакованную в tar, наша задача добавить все записи из этой базу в нашу основную postgres.
проблема была в том что там 3 таблицы, связанные ключами.
первая таблица содержит обычную строчку и ссылку на вторую таблицу.
во второй таблице хранится дикий ужас, представляющий файловую систему со всей ее древовидностью.
и иногда она содержит ссылку на третью таблицу.
просто скопировать и вставить ряды не получится: id всех элементов изменяются, а, значит, надо менять и ссылки на них.
просто запустить две сессии hibernate, в одной достать а в другую вставить обьект тоже не получится: тоже нет обновления id'шников для связанных с ним объектов.
выгрести объект, создать другой объект этого же класса, скопировать в него важные данные и вставить в базу тоже проблематично: все, что мы знаем про объект из второй таблицы (файлы) это то, что он является объектом, наследующим абстрактный класс ParsedFile, а таких классов около 10 штук. но нам на помощь приходит метод clone() из класса Object. как говорит документация, x.clone().getClass() == x.getClass(). т.е. то что нам нужно: не зная каков на самом деле класс нашего объекта, мы можем создать объект того же класса, да еще со всеми полями, скопированными из исходного объекта.
но в нашем классе
class MediaCollectionEntry {
Long id;
String name;
ParsedFile firstChild;
...
}
есть ссылка на дочерний объект, который тоже надо клонировать, для этого переопределяем метод clone() этого класса:
public MediaCollectionEntry clone() throws CloneNotSupportedException {
MediaCollectionEntry clone = (MediaCollectionEntry) super.clone();
clone.setId(null);
clone.setFirstChild(clone.getFirstChild().clone());
return clone;
}
мы обнуляем id, чтобы при вставке в базу он подставился самостоятельно и заменяем firstChild на его клон, где тоже будет обнулен id.
abstract class ParsedFile implements Cloneable {
protected Long id;
protected String fileName;
protected Set children = new HashSet();
public Set getChildren() {
return children;
}
public void setChildren(Set children) {
this.children = children;
}
public void addChild(ParsedFile child) {
child.setParent(this);
children.add(child);
}
...
public ParsedFile clone() throws CloneNotSupportedException {
ParsedFile clone = (ParsedFile) super.clone();
clone.setId(null);
Set cloneChildren = clone.getChildren();
clone.setChildren(new HashSet());
for(ParsedFile child : cloneChildren) {
clone.addChild(child.clone());
}
return clone;
}
}
и тут побежала рекурисия по всем деткам и внучкам)
в результате этого копирование данных из одной базы данных в другую свелось к двум строчкам:
MediaCollectionEntry mce1 = session1.load(MediaCollectionEntry.class, mediaCollectionEntryId);
MediaCollectionEntry mce2 = mce1.clone();
session2.save(mce2);
это скопирует не только MediaCollectionEntry но и его firstChild и всех детей к нему привязанных.
я к чему весь этот непонятный бред пишу. у меня по нему два вопроса:
не является ли это решение нерациональным?
как бы вы такое сделали на пхп?
p.s. связь с третьей таблицей есть у некоторых деток ParsedFile'a а именно у наследующих абстрактный класс AudioFile:
abstract class AudioFile extends ParsedFile implements Cloneable {
AudioInfo audioInfo;
...
public AudioFile clone() throws CloneNotSupportedException {
// этот вызов пойдет к методу clone() в классе ParsedFile
// скопирует все его поля а потом обработает здесь audioInfo
AudioFile clone = (AudioFile) super.clone();
AudioInfo audioInfo = clone.getAudioInfo().clone();
audioInfo.setFileObject(clone);
clone.setAudioInfo(audioInfo);
return clone;
}
}
задача была скопировать все из одной базы данных в другую: юзер нам заливает hsqldb запакованную в tar, наша задача добавить все записи из этой базу в нашу основную postgres.
проблема была в том что там 3 таблицы, связанные ключами.
первая таблица содержит обычную строчку и ссылку на вторую таблицу.
во второй таблице хранится дикий ужас, представляющий файловую систему со всей ее древовидностью.
и иногда она содержит ссылку на третью таблицу.
просто скопировать и вставить ряды не получится: id всех элементов изменяются, а, значит, надо менять и ссылки на них.
просто запустить две сессии hibernate, в одной достать а в другую вставить обьект тоже не получится: тоже нет обновления id'шников для связанных с ним объектов.
выгрести объект, создать другой объект этого же класса, скопировать в него важные данные и вставить в базу тоже проблематично: все, что мы знаем про объект из второй таблицы (файлы) это то, что он является объектом, наследующим абстрактный класс ParsedFile, а таких классов около 10 штук. но нам на помощь приходит метод clone() из класса Object. как говорит документация, x.clone().getClass() == x.getClass(). т.е. то что нам нужно: не зная каков на самом деле класс нашего объекта, мы можем создать объект того же класса, да еще со всеми полями, скопированными из исходного объекта.
но в нашем классе
class MediaCollectionEntry {
Long id;
String name;
ParsedFile firstChild;
...
}
есть ссылка на дочерний объект, который тоже надо клонировать, для этого переопределяем метод clone() этого класса:
public MediaCollectionEntry clone() throws CloneNotSupportedException {
MediaCollectionEntry clone = (MediaCollectionEntry) super.clone();
clone.setId(null);
clone.setFirstChild(clone.getFirstChild().clone());
return clone;
}
мы обнуляем id, чтобы при вставке в базу он подставился самостоятельно и заменяем firstChild на его клон, где тоже будет обнулен id.
abstract class ParsedFile implements Cloneable {
protected Long id;
protected String fileName;
protected Set
public Set
return children;
}
public void setChildren(Set
this.children = children;
}
public void addChild(ParsedFile child) {
child.setParent(this);
children.add(child);
}
...
public ParsedFile clone() throws CloneNotSupportedException {
ParsedFile clone = (ParsedFile) super.clone();
clone.setId(null);
Set
clone.setChildren(new HashSet
for(ParsedFile child : cloneChildren) {
clone.addChild(child.clone());
}
return clone;
}
}
и тут побежала рекурисия по всем деткам и внучкам)
в результате этого копирование данных из одной базы данных в другую свелось к двум строчкам:
MediaCollectionEntry mce1 = session1.load(MediaCollectionEntry.class, mediaCollectionEntryId);
MediaCollectionEntry mce2 = mce1.clone();
session2.save(mce2);
это скопирует не только MediaCollectionEntry но и его firstChild и всех детей к нему привязанных.
я к чему весь этот непонятный бред пишу. у меня по нему два вопроса:
не является ли это решение нерациональным?
как бы вы такое сделали на пхп?
p.s. связь с третьей таблицей есть у некоторых деток ParsedFile'a а именно у наследующих абстрактный класс AudioFile:
abstract class AudioFile extends ParsedFile implements Cloneable {
AudioInfo audioInfo;
...
public AudioFile clone() throws CloneNotSupportedException {
// этот вызов пойдет к методу clone() в классе ParsedFile
// скопирует все его поля а потом обработает здесь audioInfo
AudioFile clone = (AudioFile) super.clone();
AudioInfo audioInfo = clone.getAudioInfo().clone();
audioInfo.setFileObject(clone);
clone.setAudioInfo(audioInfo);
return clone;
}
}
Wednesday, December 10, 2008
укурился
днем раскуривал одну весьма ядерную штучку по бд, но о ней напишу завтра, если таки докурю.
сегодня, набегавшись за день, ложусь спать и обдумываю что завтра день рожденья у одной из преподавательниц в школе, надо бы что-нибудь подарить. и заодно надо узнать когда день рожденья у другой преподавательницы. представляю себе мысленно класс, похожу к ней, обращаюсь: inna.getDatabase().get ... в страшном ужасе я открываю глаза и вскакиваю с постели. срочно нужны доказательства что все вокруг не человекоподобные роботы, а, главное, что я тоже еще живой человек =)
сегодня, набегавшись за день, ложусь спать и обдумываю что завтра день рожденья у одной из преподавательниц в школе, надо бы что-нибудь подарить. и заодно надо узнать когда день рожденья у другой преподавательницы. представляю себе мысленно класс, похожу к ней, обращаюсь: inna.getDatabase().get ... в страшном ужасе я открываю глаза и вскакиваю с постели. срочно нужны доказательства что все вокруг не человекоподобные роботы, а, главное, что я тоже еще живой человек =)
Thursday, December 4, 2008
эйфория
пляски с бубном вокруг сервера продолжаются уже больше суток с небольшими перерывами на сон. за последние 3-4 дня режим дня превратился в полнейшую кашу: 4-6 часов работаю -- пару часов сплю -- вливаю в себя пару кружек крепкого чаю -- опять работаю -- опять сплю -- опять чай и опять все по кгугу. В этом я становлюсь похож на Леонардо Да Винчи, который спал по 15 минут каждые 4 часа.
в результате такого режима когда я просыпаюсь и открываю глаза я не могу понять какой сейчас день, какое время суток. дальше ко мне приходят более сложные вопросы, на которые взгляд на монитор мне ответить не может: почему я сейчас тут и кто мы в этом мире... а потом на несколько минут накатывается эйфория. как подсказывает википедия: эйфория (в широком смысле) -- феномен, включающий измененное состояние психики и различные соматические ощущения человека. именно такая) такая как у жителей Бэнтона в фильме interstate 60. кстати хороший фильм, я его и хотел этим постом вам порекоммендовать=)
в результате такого режима когда я просыпаюсь и открываю глаза я не могу понять какой сейчас день, какое время суток. дальше ко мне приходят более сложные вопросы, на которые взгляд на монитор мне ответить не может: почему я сейчас тут и кто мы в этом мире... а потом на несколько минут накатывается эйфория. как подсказывает википедия: эйфория (в широком смысле) -- феномен, включающий измененное состояние психики и различные соматические ощущения человека. именно такая) такая как у жителей Бэнтона в фильме interstate 60. кстати хороший фильм, я его и хотел этим постом вам порекоммендовать=)
RandomFontGenerator: No fonts found
com.octo.captcha.component.image.fontgenerator.RandomFontGenerator Constructor threw exception; nested exception is java.lang.Error: Probable fatal error: No fonts found
my os: centos linux
probable reason: in bean configuration are mentioned only windows fonts, that are not shipped by default with linux
<bean id="randomFontGenerator"
class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">
<!-- Minimal font size -->
<constructor-arg index="0">
<value>40</value>
</constructor-arg>
<!-- Maximal font size -->
<constructor-arg index="1">
<value>50</value>
</constructor-arg>
<!-- Allowed font list -->
<constructor-arg index="2">
<list>
<ref bean="fontArial" />
<ref bean="fontVerdana" />
</list>
</constructor-arg>
</bean>
this is bean configuration example from emforge (WEB-INF/classes/META-INF/spring/emforge-security-web.xml)
solution: just install a package that includes windows fonts (Arisl and Verdana). for centos it is yum install liberation-fonts
my os: centos linux
probable reason: in bean configuration are mentioned only windows fonts, that are not shipped by default with linux
<bean id="randomFontGenerator"
class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">
<!-- Minimal font size -->
<constructor-arg index="0">
<value>40</value>
</constructor-arg>
<!-- Maximal font size -->
<constructor-arg index="1">
<value>50</value>
</constructor-arg>
<!-- Allowed font list -->
<constructor-arg index="2">
<list>
<ref bean="fontArial" />
<ref bean="fontVerdana" />
</list>
</constructor-arg>
</bean>
this is bean configuration example from emforge (WEB-INF/classes/META-INF/spring/emforge-security-web.xml)
solution: just install a package that includes windows fonts (Arisl and Verdana). for centos it is yum install liberation-fonts
Tuesday, December 2, 2008
баш поможет филологам
и не только bash но и grep =)
задача была рассмотреть все случаи употребления инфинитивов в стихах Беллы Ахмадулиной. задачу можно рещать в лоб, просматривая полностью тексты стихов, а можно вначале выдрать строчки в которых употребляется инфинитивы (а так же строчки окружающие их), а потом, если нам этот случай интересен, смотреть его в полном тексте стихотворения. мы пойдем вторым путем.
единственная пролема -- кодировка файлов koi8-r а значит для начала надо конвертнуть в utf8
задача была рассмотреть все случаи употребления инфинитивов в стихах Беллы Ахмадулиной. задачу можно рещать в лоб, просматривая полностью тексты стихов, а можно вначале выдрать строчки в которых употребляется инфинитивы (а так же строчки окружающие их), а потом, если нам этот случай интересен, смотреть его в полном тексте стихотворения. мы пойдем вторым путем.
единственная пролема -- кодировка файлов koi8-r а значит для начала надо конвертнуть в utf8
iconv --from-code koi8-r $fileа дальше все идет как по маслу. пробегаемся фором по всем файлам в директории (благо wget-ом скачать страничку типа http://www.litera.ru/stixiya/authors/axmadulina.html и все ее подстранички не проблема). и для каждого файла выполняем
iconv --from-code koi8-r $file | grep -E "(ть|ти|ться|чь|чься)[^а-яА-Я]+" -A 1 -B 1т.е. конвертируем файл в utf8 и выбираем все строчки в которых встречаются слова заканчивающиеся на ть|ти|ться|чь|чься, а также выбираем 1 строчку перед строчкой с инфинитивом и одну строчку после таковой (параметры -A 1 -B 1)
for file in `ls .`; do
echo "<hr><a href='$file'>$file</a>" >> 1.html;
iconv --from-code koi8-r $file | grep -E "(ть|ти|ться|чь|чься)[^а-яА-Я]+" -A 1 -B 1 >> 1.html;
done
плюс к этому добавляем <hr> и ссылку на файл для наглядности
revoming symbolic links
in my home debian i had no problems with revoming symbolic links, i just used rm and it worked fine. but tuday, on a centos server rm replied: cannot remove directory ‘xxx/’ : Is a directory
the solution i've found was using unlink xxx:
When using the rm or unlink command to remove a symbolic link to a directory, make sure you don’t end the target with a ‘/’ character because it will create an error. Example:
thnx, Karl
the solution i've found was using unlink xxx:
When using the rm or unlink command to remove a symbolic link to a directory, make sure you don’t end the target with a ‘/’ character because it will create an error. Example:
$ mkdir dirfoo $ ln -s dirfoo lnfoo $ rm lnfoo/ rm cannot remove directory ‘lnfoo/’ : Is a directory $ unlink lnfoo/ unlink: cannot unlink ‘lnfoo/’: Not a directory $ unlink lnfoo $Notice how one complains it “Is a directory”, but the other complains it is “Not a directory”, which I found confusing. This is a problem if you have a tendency to use tab completion a lot, because it will stick a ‘/’ at the end.
thnx, Karl
Monday, December 1, 2008
.info @ $0.99
мы зарегистрируем вам домен за $1... все красиво, халява пришла к нам. ...и мы вам сожем предоставить услугу скрывания ваших приватных данных из баз whois за $9. пщщщ на них всех.
Subscribe to:
Posts (Atom)