-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathREADME
More file actions
2236 lines (1577 loc) · 110 KB
/
README
File metadata and controls
2236 lines (1577 loc) · 110 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
libferris is an attempt to offer a filesystem like interface to
everything. Many familiar command line tools have been written
to take advantage of the extended features offered by libferris.
These include the extraction of metadata, the ability to look into
files as directories automatically, custom top level URL schemes.
Libferris is a virtual filesystem that runs outside of the kernel.
Many programs such as ls, cp etc have custom versions such as ferrisls
which operate directly on a libferris filesystem. You can also mount
libferris through FUSE to allow normal Linux kernel access.
Metadata on files is offered through an Extended Attribute interface.
The metadata might be directly stored or it may be made available on
demand. For example, the width of an image may be figured out by
understanding the image format. That might be offered simply as the
"width" attribute for supported images.
Make sure you have run the following
$ ferris-first-time-user --setup-defaults
to setup each user who is going to use libferris.
Files installed into /etc/skel should setup new users created
after libferris was installed. The ferris-first-time-user also
updates skel files with sane values from the user environment.
When you are installing libferris don't forget to run
cc/capplets/logging/ferris-capplet-logging and make sure your debug
levels are set to None or Emergency using the ``all'' slider. Running
ferris-first-time-user should do that automatically for you. Though
when you update to a new libferris, new functionality might be
included with default logging levels higher than you might like.
C++ Virtual file system
As of version 1.1.61 the test suite has been moved out of the main
distro tarball to save space and because the testing needs the machine
to be setup in a given way. Testing should now be performed in a
virtual machine.
This is a Virtual file system implementation that relies quite a lot
on the Extended Attributes (EA) paradigm. With EA, key-value pairs are
associated with files and directories to offer create, read, write and
update access to metadata about files. This metadata and the file
contents can also be indexed with libferris to provide powerful search
capabilities. Access to file content is done using std::iostreams.
The design is also flexable enough to allow internet protocols to
integrate providing C++ IOStreams and EA about each object.
There is an 'ls' client for the VFS.
Requirements:
gcc (15.x tested in dev)
ferrisloki see github
libferrisstreams see github
stldb4 see github
fam++2 see github
openssl
glib/gtk2
Qt 4.5+
Soprano (Installed with KDE4 by default)
libsigc++ 3.x
xerces-c 3.3.0
xalan-c 1.10+ (optional but recommended)
a MIME engine either gnome, KDE, or libfile.
Optional but very highly recommended (only needed at build time):
pccts 1.33mr22
Optional but very highly recommended:
gimp 3
Imlib2 1.12
libjpeg 6b
libpng 1.6.x
ImageMagick-c++ 7.1.x
libattr (xfs) 1.1.3 (http://oss.sgi.com/projects/xfs/)
xqilla
Optional recommended:
See configure.ac, plugins/context and plugins/eagenerators
and see if something looks like it is interesting.
There is optional support for building against STLPort
(that might be being phased out as of 2026 as it is not needed as much now)
Note that many of the icons in media/icons are by jimmac
http://jimmac.musichall.cz/
Thanks for the nice icons jimmac :)
--------------------------------------------------------------------------------
SORTING:
A sort filter is made up of
:!#:attrName
Where the :!#: part is optional extra information about the sort.
The attribute name is the name of the attribute
to sort on. The default action is a case sensitive sort, so for example to sort
a dir by filename you can use
./ls . --sort=name
And to reverse that sort
./ls . --sort=':!:name'
The # in the above example means to perform comparisons numerically instead of
as a string. so
$ ./ls . --sort=':!#:size'
Will sort a directory by size with the largest file first.
The other option at this point in time is CIS
./ls . --sort=':CIS:name'
Which sorts using a case insensitive scheme. There is really no
gain to using CIS as it is slower to use and looses information.
--------------------------------------------------------------------------------
Some assumptions that are worth knowing:
* For subclasses of ChainedViewContext it is assumed that a context will wrap
a chainedContext of its own type around the underlying child for a read()
* Reference counting has some querks for the root of a ChainedViewContext, one
must call setIsChainedViewContextRoot() for the root of a chained tree.
--------------------------------------------------------------------------------
Setting up apps://
use the scripts and apps in apps/importdesktop/
--------------------------------------------------------------------------------
The directory mg/ contains code that was nicked from the mg system
most files are left intact as were and a wrapper created in
FerrisMG.hh to be more C++ friendly. I have tried to limit changes to
the other files, except where global variables needed to be changed or
other such library friendly changes are needed.
http://www.cs.mu.oz.au/mg/
For some custom coded indexing stuff check out
Ferris/Indexing/ # contains custom lexicon/inverted file storage classes
Ferris/FullTextIndexer.hh
Ferris/FullTextIndexer.cpp
Ferris/FullTextQuery.hh
Ferris/FullTextQuery.cpp
--------------------------------------------------------------------------------
Some internal headers from xerces-c are included verbatim from the xerces-c
codebase because it seems most public interfaces are pure in xerces-c and
I don't really feel like reimplmeneting treeWalker etc to do the same thing as
the code already in the xerces-c library.
This creates a maintainance problem in libferris but perhaps the xerces-c guys
will decide at some point to offer the "defualt" implementations of some things
in the public API.
--------------------------------------------------------------------------------
ACLOCAL="aclocal -I macros" autoreconf -vfi
To create a blank RDF database using redland
mkdir -p ~/.ferris/rdfdb
cd ~/.ferris/rdfdb
rdfproc myrdf -c add a b c
--------------------------------------------------------------------------------
In non technical terms libferris makes the file system and other
hierarchical storage systems easier to use. For the geeks out there,
libferris is a virtual file system (VFS) that runs in the user address
space. The FAQ contains entries related to installation, configuration
and the usage of libferris.
As of July 2005 libferris can mount many interesting things ranging
from a filesystem from your local Linux kernel through to LDAP,
Evolution, PostgreSQL, dbXML, and RDF. To get an impression of the
current capabilities of libferris mounting see the plugins/context
directory of the lastest release. New things to mount are always being
added :)
Other than mounting things as a filesystem, the other core concept of
libferris is extraction of interesting metadata from your libferris
filesystems. This means that simple things like width and height of an
image file become first class metadata citizens along with a file's
size and modification time. The limits on what metadata is available
extend far beyond image metadata to include XMP, EXIF, music ID tags,
geospatial tags, rpm metadata, SELinux integration, partially ordered
emblem categories and arbitrary personal RDF stores of metadata.
Though some consider the last point of purely academic interest the
end result is that you can add metadata to *all* libferris objects
even those you only have read access too, for example, you can attach
emblems to this website just as you would a normal file. The metadata
interface gives all metadata from file size to digital signature
status information equal standing. As such you can sort a directory by
any metadata just as easily as you would ls -Sh to sort by file size.
Sorting on multiple metadata values is also supported in libferris,
you can easily sort your files by mimetype, then image width, then
modification time with all three pieces of metadata contributing to
the final directory ordering.
http://witme.sourceforge.net/libferris.web/images/ego-kdelook-sort-by-height-then-name.png
Late in 2004 extensive support for both fulltext and metadata indexing
was added to libferris. This means you can supply queries against the
contents or metadata of any libferris accessable object and have the
results returned as a virtual filesystem. With the above mentioned
metadata available for searching, finding your files can be done in
many different ways instead of being forced to generate fixed
directory trees using part of a file collections semantics as
directory names. The metadata and virtual filesystem play together
here allowing you to geospatially tag both your digital pictures, trip
plans, and relevent websites and recall these objects in a single
virtual directory no matter what their path or URL may be.
http://www.linuxjournal.com/article/7771
There is also a Samba VFS module which allows you to expose a
libferris filesystem as a Samba share. Kfsmd uses the inotify kernel
interface to allow libferris to watch changes made to your kernel
filesystem by non libferris applications and update its indexes
appropriately. Ferriscreate provides a command line and GTK+2
application for creating "new files" with libferris. With this you can
create a new db4 database, dbXML database or fulltext index just as
easily as you can make a regular file.
http://witme.sourceforge.net/libferris.web/images/Ego-July-03-create-ea-emblem.png
The ego filemanager is a GTK+2 interface built on top of libferris. It
provides GTK treeview, gevas/edje and gecko based interfaces and makes
extensive use of libferris' clients to provide its functionality.
http://witme.sourceforge.net/libferris.web/images/Ego-July-03-egomedallions.png
http://witme.sourceforge.net/libferris.web/images/ego-medallions-kdelook-july05.png
If you have a project you wish to use libferris with and want
extensions made don't hesitate to contact one of the developers to
arrange consulting.
For the geeks out there, libferris is a virtual file system (VFS) that
runs in the user address space. At the moment libferris is a shared
object that each application can dynamically link to in order to see
the file system through a nicer abstraction.
New additions to the XML module allow for data to be converted from
one format to another by the VFS for you. To copy data to an XML file:
fcreate --create-type=xml --rdn=2.xml root-element=fred /tmp
gfcp -av Makefile.am /tmp/2.xml/fred
To copy data to a db4 file
fcreate --create-type=db4 --rdn=2.db /tmp
gfcp -av Makefile.am /tmp/2.db
Ferris presents a C++ interface that makes heavy use of the STL and
IOStreams. Currently ferris has two main internal abstractions:
Context and Attribute. A context is much like a traditional file or
directory in a file system, the major differences being that a context
can have both byte content (like a file) and subcontexts (like a
directory). An attribute is a chunk of metadata about a context.
Contexts can have many attributes. Some attributes may be large, for
example a base 64 encoded version of the context's content (133%
context size). On the other hand an attribute can be small, for
example the file size is exposed as an attribute.
Access to all contexts and attributes is performed by first requesting
either an IStream or IOStream for that context or attribute. In this
way the same context/attribute can be open many times at the same
time, just like normal kernel based IO.
Ferris uses Loki from "Modern C++ Design" by Alexandrescu. Most
objects use automatic garbage collection based on the SmartPtr<>
template class from Loki. Where possible objects in ferris use a
FerrisRefCounted policy to provide COM like intrusive reference
counting. This style is used for Context, Attribute and special
wrappers of IOStreams that are provided. IOStreams are wrapped to
provide a more flexible API than could be offered using references to
IOStreams. There are also new stream classes provided, for example
NullStream and LimitingStream. Templates are provided to make
SmartPtr<>s to standard IOStreams act just like the underlying stream
would, for example, one can have SmartPtr<> ss; ss >> stringObj; and
does not have to dereference the SmartPtr<> to use standard IOStreams
extractors or inserters.
Ferris uses GModule from glib2 to dynamically load both context and
attribute classes at run-time. This way resources are conserved until
they are needed. The native file system context is statically linked
to ferris at present. When loading either context's or attribute
classes ferris uses a double dispatch factory method. Put simply this
means that for each plugin there are two libraries, one that tells
ferris if the main one really needs to be loaded or not. Using this
scheme ferris can load all the meta factory classes at any time and
use these very small meta factories to check if the main factory can
create objects that are going to be useful. This scheme is of great
use for attribute classes. Attribute classes take a context and can
"generate" attributes from the context. An example of this sort of
class would be a MD5 or Base64 attribute. Both can be generated from
the base context. More interesting attributes are PCM audio and
RGBA-32bpp image data. By using the double dispatch factory ferris can
handle a great deal of attribute generators and load them on demand.
Ferris currently can decode mp3, read id3 tags, decode many image
formats and break some animation formats into frames. This makes
ferris a solid starting point for multimedia applications.
Ferris will automatically mount sub file systems for you. Examples of
a sub file system include a Berkeley database or XML file. For example
it is possible to read a context such as /tmp/myxml.xml/mynode. Using
this automatic mounting the differences between storage formats
effectively disappear. To a ferris enabled application loading data
from a native disk file, a Berkeley database, and XML file, or mbox
file appear to be the same. This allows the user of the application to
choose the correct storage for the data at hand.
It is planned to move to a microkernel architecture in Version 2.1 of
ferris. I choose 2.1 so that ferris does not fall into version 2
syndrome :)
Features
--------
This section gives a very high level of what features the libferris
semantic virtual filesystem has. The main library is libferris.so,
graphical support is in libferrisui.so and XSLT support is in
libferrisxslt.so.
There are optional wrapper libraries allowing Perl, Python and OCaml
to access libferris.
The core of libferris is to provide a C++ abstraction over many tree
like structures and present the main content of each object in the
tree as an IOStream. This core abstraction also provides STL style
iterators for a begin() to end() iteration of a directory. Arbitrary
metadata for a file is accessable via getStrAttr() and setStrAttr().
Some of the metadata is automatically extracted from files and
presented through this same interface, some of the plugins to extract
/ handle such attributes are listed below.
Many other features like transparent compression of content, xml
serialization, metadata indexing, full text indexing, automatic file
classification through manchine learning agents are also provided to
enhance the VFS.
The following sections describe what things libferris can mount, what
sort of metadata is supported and what clients currently exist.
The following clients exist in the tarball, graphical versions use GTK+2:
ferriscp, a superset of coreutils 'cp' command. A graphical version of cp called gfcp which has progress displays and nice 'cp -i' interface.
ferrisls, a superset of coreutils 'ls' command.
ferrisrm, replacement for coreutils 'rm' command. A graphical version called gfrm.
ferrismv, replacement for coreutils 'mv' command. A graphical version called gfmv.
fcat, replacement for coreutils 'cat' command.
ferriscd, bash2 'cd' which handles XPath resolution
ftouch, a superset of coreutils 'touch' command.
fmkdir, replacement for coreutils 'mkdir command.
fclipcopy, fclipcut, fcliplink, fclippaste, fclipredo fclipundo: command line tools for performing file movements. (Cut a file and paste it someplace to "move" that file).
findexadd, feaindexadd: clients to add new items to fulltext and EA indexes.
findexquery, feaindexquery: clients to query to fulltext and EA indexes.
findexcompact, feaindexcompact: clients to compact indexes, performing costly reclaim operations. Such tools are needed to allow index evolution without loosing great deals of query performance.
fschema: interaction with attribute schemas
fmedallion: querying and setting emblem associations for files.
fcompress: setting up and removing transparent (un)compression for files.
ferris-import-desktop-file, ferris-import-desktop-hive.sh: adding new freedesktop.org ".desktop" files to the apps:// filesystem.
ferris-first-time-user: setting up "~/.ferris"
gfdl: download manager using the http and ftp filesystems (which use libcurl).
gfproperties: view all the lstat(2) information for a file in a GTK2 GUI. Also presents the emblem attachemnts for a file.
FerrisXalanTransform: like XalanTransform except some libferris functions are exported for the XSLT to use (see xsltfunctions/ for more detail).
ferris-capplet-auth, ferris-capplet-curl-ftp, ferris-capplet-general, ferris-capplet-index, ferris-capplet-locale, ferris-capplet-logging, ferris-capplet-version: tools for setting up libferris.
The following attributes are supported:
native kernel XFS EA
data available from lstat(2)
cryto hashes like md5 and sha1
as-xml serialization
schema data
emblem attachment metadata
many file system synthetic EA
ID3 tags in mp3/ogg files
jpeg images
png images
images loadable via ImageMagick
mpeg2 video
dolby ac3 information
djvu images
images loadable via imlib2
jasper images
Take a look in Ferris.cpp and Native.cpp for tryAddStateLessAttribute() for many other attributes of interest.
libferris can mount the following:
http
ftp
berkeley db4
sleepycats dbxml (libferris 1.1.11+)
video dvd
edb
eet
tdb
gdbm
ssh
rpm files
tar files
sysv IPC (shared memory)
LDAP
mbox
sockets
mysql
XML
Accepted conference papers
--------------------------
Spatial Indexing for Scalability in FCA
Published in
The Fourth International Conference on Formal Concept Analysis (ICFCA 2006)
Dresden, Germany,
February 13-17 in 2006
Abstract
The paper provides evidence that spatial indexing structures offer
faster resolution of Formal Concept Analysis queries than B-Tree/Hash
methods. We show that many Formal Concept Analysis operations,
computing the contingent and extent sizes as well as listing the
matching objects, enjoy improved performance with the use of spatial
indexing structures such as the RD-Tree. Speed improvements can vary
up to eighty times faster depending on the data and query. The
motivation for our study is the application of Formal Concept Analysis
to Semantic File Systems. In such applications millions of formal
objects must be dealt with. It has been found that spatial indexing
also provides an effective indexing technique for more general purpose
applications requiring scalability in Formal Concept Analysis systems.
The coverage and benchmarking are presented with general applications
in mind.
--
Applying Formal Concept Analysis to Semantic File Systems Leveraging Wordnet
Published in
Proceedings of the 10th Australasian Document Computing Symposium,
Sydney, Australia,
December 12, 2005.
Abstract
FCA can be used to obtain both a natural clustering of documents along
with a partial ordering over those clusters. The application of FCA
requires input to be in the form of a binary relation between two
sets. This paper investigates how a semantic filesystem can be used to
generate such binary relations. The manner in which the binary
relation is generated impacts how useful the result of FCA will be for
navigating one's filesystem.
--
Formal Concept Analysis and Semantic File Systems
Published in
The Second International Conference on Formal Concept Analysis (ICFCA 04)
Sydney, Australia,
February 23-26 in 2004
Abstract
This document presents and contrasts current efforts at applying
Formal Concept Analysis (FCA) to some semi structured document
collections and file systems in general. Existing efforts are then
contrasted with ongoing efforts using the libferris Virtual File
System (VFS) as a base for FCA on file systems.
--
File system wide file classification with agents
Published in
Proceedings of the 8th Australasian Document Computing Symposium,
Canberra, Australia,
December 15, 2003.
Abstract
Many semi structured information systems such as file systems and
email clients allow data to be tagged as belonging in many categories.
Some such systems support notions similar to emblems, where files can
be semantically tagged as fitting into a broad category by associating
a file with an emblem. This paper presents a file system that makes
use of Supervised machine learning for the creation of agents to offer
fuzzy assertions and retractions of semantic tags on a per file basis.
Such assertions are then subject to a belief resolution system to
obtain an overall picture for a file's emblem attachments.
---
Informal documentation
----------------------
http://witme.sourceforge.net/libferris.web/kongress05-martin.pdf
Linux Kongress 2005 paper
An overview of the system as well as using it for indexing and search.
http://witme.sourceforge.net/libferris.web/FerrisNotes/index.php
FerrisNotes
Gives a reasonable introduction to libferris and details some of the
indexing in it, leads into using libferris to perform Formal Concept
Analysis. Note that this document is not final and you should check
back and contribute patches to it.
http://witme.sourceforge.net/libferris.web/ferrisAsyncIO.paper2002/index.html
Async IO and network fetching with libferris
Details on how to perform async IO with libferris and explicit mention
of using async io to fetch information from an HTTP site where header
information is gleemed from libferris before the contents of the
request are read or transfered over the network.
http://witme.sourceforge.net/libferris.web/FerrisFileUtilsClients.paper2002/index.php
Design of console and graphical fileutils clients for libferris
This paper details the key interactions of the ferriscp, gfcp,
ferrismv, gfmv, ferrisrm, and gfrm clients with the ferris and
ferrisui shared libraries. These clients accept the same command line
options as the fileutils cp, rm and mv programs. Where API changes in
the core library are anticipated they are mentioned in this paper so
that the paper will be relevant to the newer versions of ferris as
well as the current codebase. The paper aims to allow both the
maintainer (given time away from the code) and other interested
parties enough information to either add to existing clients or start
creating new ones.
http://witme.sourceforge.net/libferris.web/FerrisXSLT2.paper2002/index.php
CGI invocation of parameterized SQL using XSLT, XML, and Ferris
An XSQL like solution for exposing a relational database through
server side parameterized SQL queries invoked through XSQL like CGI
roundtrips. Ferris is used as the underlying tool to mount SQL queries
and expose the results as a Filesystem or DOM.
http://witme.sourceforge.net/libferris.web/FerrisXSLT.paper2002/index.html
XSLT, DOM, SQL and the web
The selection of information from a relational database using both SQL
and XSLT for delivery on the web. Focus is on the use of Ferris to
bring the relational database into the world of XML by mounting either
a table or query and presenting that data as parsed XML in the form of
a Document Object Model (DOM). The DOM is then transformed into HTML
using XSL.
http://witme.sourceforge.net/libferris.web/ferriscreate.paper2001/index.html
XML UI: from XSD to XML
Exploration of creating XML documents from XSD schema files using a
forms based interface is presented. An implementation using Gtk+
1.3.11, libglade2 and ferriscreate is presented as a case study
leading to future trends in XML user interface generation and style.
----------------------
Extended Attribute (EA) descriptions
What do all of these attributes mean?
General information
The below tables do not take into account all EA for the system. They
are designed as a guide to the libferris 1.1.40+ EA. Once an EA is in
the system it rarely changes so these tables should be suitable for
future versions of libferris.
Some EA generated from libextractor, native kernel EA and RDF sources
are impossible to fully enumerate here in a timely manner. Also when
you mount a relational database or XML file/database attributes are
created to export information of interest. For example a relational
database when mounted shows its rows as files and its columns as EA on
those files. One should keep this in mind and consider the tables as a
reference to only some of the EAs in the system.
Another section that is only briefly mentioned is the emblem EAs. This
is because each user is expected to have their own emblem collection
with their own partial ordering over their emblems. See the ADCS03
paper in the papers section of the site for a starting guide to
emblems and one of their considered uses. The EAs everyone should be
aware of
This table describes important EA.
EA name description
as-rdf All the EA for the file presented as an RDF/XML document
as-xml All the EA for the file presented as an XML document
as-text A plain text representation of the file. May loose formatting information.
content The file's contents.
url The file's URL. eg. file://tmp/foobar.tar
path Path for this file. eg. /tmp/foobar.tar
name-extension File's extension. eg. tar
atime Time of last access. In seconds since UNIX epoch (1/Jan/1970)
atime-ctime ctime(3) formated string showing the atime EA
atime-display atime EA shown in a user selectable presentation format
atime-day-granularity atime EA rounded down to nearest day
atime-month-granularity atime EA rounded down to nearest month
atime-year-granularity atime EA rounded down to nearest year
ctime Same collection of EA as for atime
ferris-current-time Same collection of EA as for atime
mtime Same collection of EA as for atime
attribute-count Total number of EAs for this file
ea-names A list of the names of all EA for this file.
recommended-ea The names of EA which should be interesting to the user for this file.
recommended-ea-short A shortened version of recommended-ea
recommended-ea-union The union of recommended-ea for all files/dirs in a directory.
treeicon The URL of an image that is appropriate for this file.
emblem:list A complete listing of all emblems as a comma seperated list
emblem:list-ui A listing of all important emblems as a comma seperated list
emblem:x-mtime The last time data about the "x" emblem was changed. This also has the "-ctime", "-display" EA for accessing this time in a formatted manner.
emblem:has-x Is this file associated with emblem "x"
emblem:has-fuzzy-x Based on supervised machine learning should this file be associated with emblem "x"
is-active-view Will this directory update itself to reflect changes made by other apps
is-animation-object Is the MIME major type animation
is-audio-object Is the MIME major type audio
is-image-object Is the MIME major type image
is-source-object Is this file source code
is-dir Underlying kernel object is a directory
is-file Underlying kernel object is a file
language-human What is the human language for this file. eg. english
mimetype MIME type of the file perhaps based on quick guessing
mimetype-from-content MIME type of the file definately based on inspecting file bytes.
is-native Using kernel based filesystem (a file:// URL)
is-remote Is this file remote to this machine
size Size of the file
size-human-readable Size of the file in human readable format (similar to ls -lh)
md2 Checksums calculated from the file's byte content when the EA are read.
mdc2 Checksums calculated from the file's byte content when the EA are read.
md5 Checksums calculated from the file's byte content when the EA are read.
sha1 Checksums calculated from the file's byte content when the EA are read.
Native file:// EAs
This table describes various EA which are likely to be only found for
file:// URLs. For file:// URLs there is also a "dontfollow-" prefixed
version of some EA which present the values found from a lstat(2)
call. By default the stat(2) call values are shown which means that
the EA values for link files are for the link target not the link
itself.
EA name description
device st_dev from stat(2)
device-type st_rdev from stat(2)
filesystem-filetype string describing the type of this file.
force-passive-view Has the user elected not to monitor this directory for changes
fs-available-block-count f_bavail from statfs(2)
fs-block-count f_blocks from statfs(2)
fs-block-size f_bsize from statfs(2)
fs-file-name-length-maximum f_namelen from statfs(2)
fs-file-nodes-free f_ffree from statfs(2)
fs-file-nodes-total f_files from statfs(2)
fs-free-block-count f_bfree from statfs(2)
fs-id f_fsid from statfs(2)
fs-name Name of filesystem this file is on. eg. ext2
fs-type f_type from statfs(2)
group-executable File mode has g+x
group-readable File mode has g+r
group-writable File mode has g+w
group-owner-name Name of group owning file
group-owner-number Number of group owning file
hard-link-count st_nlink from stat(2)
has-holes Does the file contain holes?
has-subcontexts-guess A quick guess if this object has children
has-valid-signature Is there a valid digital signature for this file
inode INode for this file
is-link Underlying kernel object is a link
is-special Underlying kernel object is a special object
mode st_mode from stat(2)
protection-ls mode EA formatted for ls(1) display
other-executable File mode has o+x
other-readable File mode has o+r
other-writable File mode has o+w
readable Can the user reading this EA read the file?
writable Can the user reading this EA write to the file?
realpath For links returns the realpath(3) string
runable Can the user reading this EA run this file?
deletable Can the user reading this EA delete this file? eg. A directory with +wx permissions set for other implicitly allows all users to delete any file in that directory.
user-executable File mode has u+x
user-readable File mode has u+r
user-writable File mode has u+w
user-owner-name Name of owner of this file
user-owner-number Number for owner of this file
block-count Number of disk blocks occupied by this file
block-size Size of the disk blocks used by this file
Image related EAs
These will be likely available for many image formats depending on
what support for images your build of libferris was created with. Note
that some EAs such as the EXIF and XMP generated EAs are not described
here but have similar names to the attributes of the underlying
specification where spaces and underscores are replaced with "-".
EA name description
aspect-ratio Image data's width to height ratio
depth Number of bits per pixel
depth-per-color Number of bits per colour
gamma Gamma adjustment for this image
has-alpha true if there is an alpha channel
height Height of the image
width Width of the image
rgba-32bpp Decoded image data in RGBA 32 bit per pixel format
exif:has-thumbnail Is there an EXIF thumbnal in this image
exif:thumbnail-update Echoing 1 into this will recreate the EXIF thumbnail
exif:thumbnail-height EXIF thumbnal height
exif:thumbnail-width EXIF thumbnal width
exif:thumbnail-rgba-32bpp Decoded thumbnail image. Same format as rgba-32bpp
exif:... All EXIF tag metadata is exported with logical EA names
been-downloaded Has this image been downloaded from the digital camera already
deletable Can we delete this image from the digital camera.
Audio related EAs
These will be available on some or all of your audio files providing
interesting metadata about them.
EA name description
a52-bit-rate bit rate of an ac3/a52 audio stream. The a52-* information is also provided for mpeg2 files that have such audio embedded in them.
a52-sample-rate
a52-has-base Is there a base channel
a52-frame-length
a52-channels Number of audio channels
a52-channels-front Number of 'front' audio channels
a52-channels-rear
title ID3: track title
artist ID3: artist for track
album ID3: Name of album containing track
year ID3: Year the album/single containing this track was released
track ID3: Number of this track from its album. eg. 7
Video related EAs
These will be available on some or all of your video files providing
interesting metadata about them.
EA name description
pgmpipe A stream of YUV images containing the decoded images from the video file
width Width of the video file
height Height of the video file
frame-count number of video frames in file
duration Duration of video in seconds
aspect-ratio Ratio of width to height of how video should be shown
letterbox Is video letterboxed
EA which relate to branch filesystems
Branch filesystems present information about a file via a virtual
filesystem. For example for a digitally signed file the people who
have signed the file, when they signed it and if the signature is
valid are all expressed via a branch filesystem.
EA name description
associated-branches List of all "branchfs-" EA for this file
associated-branches-url URL for a filesystem showing all "branchfs-" EA for this file
branchfs-attributes URL which will show this file's EA as directory containing files
branchfs-medallions URL which will show this file's emblems as a directory containing files
branchfs-parents URL which will show All the parents of this file
branchfs-signatures URL which will show the people who have signed this file and when
RPM EA
These EAs are available on RPM based Linux distributions. They provide
information about each file that is taken from the rpm database on the
machine. See rpm(8) for more information.
EA name description
rpm-info-url
rpm-is-config
rpm-is-doc
rpm-is-ghost
rpm-is-license
rpm-is-pubkey
rpm-is-readme
rpm-package RPM package which installed this file
rpm-release release of rpm-package that installed this file
rpm-verify-device
rpm-verify-group
rpm-verify-md5 true if the file has not been changed since it was installed.
rpm-verify-mode
rpm-verify-mtime
rpm-verify-owner
rpm-verify-size
rpm-version
Miscellaneous EA which are very handy for specific use cases
These have been added to the system over time usually to solve specific problems.
EA name description
parent-name Name of the parent dir. eg. for /tmp/foobar.tar, parent-name=tmp
download-if-mtime-since Before reading a document from HTTP/FTP a time can be written to this EA and an exception will be thrown if the remove document has not been modified since the written time. Also has the same collection of EA as for atime
size-cdrom-count Number of 700Mb CDROMs required for this file
size-dvd-count Number of 4.4Gb DVDs required for this file
recursive-subcontext-* The "recursive-" prefix EA return similar information for a whole tree. They can be slow to read as a full traversal of all children may be required.
subcontext-* The "subcontext-" EA return information about direct children.
----------------------------
Build order and dependencies
If you are building libferris and ego from sources then this page
describes which ordering you can expect to build things in. Arrows
that are not filled in are optional dependencies that will be taken
advantage of if present at configure time. Transitive dependencies are
usually not shown explicitly, for example, ego might directly use
stldb4 but since its a requirement of libferris which ego already
requires because ferriscreate requires libferris then no link exists
from ego to stldb4.
There are also many packages that are optional and detected at
configure time for libferris. For example if the tdb database library
is detected when building libferris then a plugin will be created to
allow libferris to mount tdb files. Similar things are true for id3lib
which allows ID3 tags to be presented from audio files. Looking in the
plugins directory of a libferris tarball should give a reasonable idea
of what optional modules can be compiled in this fashion.
You may find that many of the lower level dependancies are already met
by your Linux distribution. One may expect fam, libsigc++, xerces-c,
xalan-c, gnome-vfs2 or kde3, pccts, xmms, swig and imlib2 to already
be present.
Note that you have the choice to build against STLport or the STL and
IOStreams from g++. The default is to build against STLport if it can
be detected during a ./configure. If you have stlport installed but do
not wish to build libferris against it use the --disable-stlport
option to ./configure. This default behaviour applies to ferrisstreams
and most tarballs available from this project's sf.net download page.
Note that if you choose to build against stlport then some of the C++
libraries which libferris uses must themselves be built against
STLPort to avoid having the library which libferris is linking to
expecting a different std namespace implementation. You will have to
compile ferrisstreams, libpqxx and fampp2 against STLport for example.
You will get build errors for some libferris clients if your xalan-c
is not built against STLport, if you are not planning on using XSLT
with libferris you can always ignore these clients.
Another major choice you have to make when building is which version
of libsigc++ you want to use. To preserve build compatibility, by
default the 1.2 version is used. To use the newer version run
configure with --with-sigcxx-2x=yes. Note that you should configure
all packages to use the same major version of libsigc++.
If you find any major omissions here please mail the mailing list with
your updates.
http://witme.sourceforge.net/libferris.web/images/ferris-deps.png
----------------------------
Screenshots
http://witme.sourceforge.net/libferris.web/images/libferris-and-google-earth.avi
GoogleEarth integration
will feature in libferris 1.1.96+. The above animation shows the
application of geoemblems to four image files with the ego
filemanager. Watch the status bar when the second Zwinger image is
tagged to see the command line driven minibuffer tagging mode. After
"zw" is typed a tab completes the emblem name and return will apply
that emblem to the current file. The feaindexadd command is then run
to force a reindex of these files. A file is then opened with
googleearth which zooms the map into the area of the geoemblem
associated with that file. Clicking on the marker for that location
will then show a menu of "desktop search" options. In this case I
decide to search for image files within 15km of the marker. Notice how
in the ego filelist which results the sacre cure image is listed. This
is because it is marked with a geoemblem that is within 15km of Notre
Dame in Paris.
http://witme.sourceforge.net/libferris.web/images/mounting-firefox-dec-2005.png
Mounting Firefox
is supported in libferris 1.1.73+. You can get at all the anchor tags,
images and mount the DOM for each web page. Also you can send new web
pages to Firefox by writing to firefox://localhost/username.
http://witme.sourceforge.net/libferris.web/images/ego-kdelook-sort-by-height-then-name.png
Sorting
is supported for both ascending and descending on a single column or
an arbitrary collection of columns. This is very handy when you want
to group by an attribute such as mimetype and then on the file's name.
Versioned sorting is similar to ls -v in that a series of files with a
numeric component near the end of the filename will sort using mixed
string and numeric sorting on the same column. See the ls -v man page
for a description. Your sorting preferences can be saved away with a
name for later recall, so setting up a sort based on 4 columns only
has to be done once. The default sorting order can also be saved for
each directory or for the root of a whole directory tree. Sorting /tmp
and below on mtime by default can be very handy.
http://witme.sourceforge.net/libferris.web/images/ego-medallions-kdelook-july05.png
gevas view
provides both static thumbnails for image directories and animated
alpha blended icons for video files and pdf documents. A medallion
sidepanel allows you to quickly attach emblems to your files.
http://witme.sourceforge.net/libferris.web/images/ferris-agents-sep03.png
Agents
finally making their way into the filesystem in the upcoming libferris
1.1.10 release. Shown in the top left of the shot is the agent capplet
which allows you to create persistent agents and tell which emblems
are to be assigned beliefs by these agents. Agents make their
assertions using a given personality so that you can tell which agent
made what assertion and allow a pool of agents to share a
personality... Smith :). In the top right is the gfproperties with
extended medallion view to show fuzzy assertion. The config emblem has
been fully asserted by the user, the docs has been fully retracted by
the user. Agents have expressed slight partial retraction for the exe
emblem and very slight partial assertion for the favs emblem. The
shell at the bottom is showing how to train agents and get them to
classify based on their training. Its in debug mode to get the
bogofilter command line options just right.
http://witme.sourceforge.net/libferris.web/images/Ego-July-03-egomedallions.png
Both views
support medallions in ego 0.8.1+. A sidepanel page is available for
editing the emblems attached to a file and the context menu for files