readability

Advanced Human Light 1.0
Advanced Human Light is a GTK theme that uses the Murrine, Aurora, and, Clearlooks engines. more>>
Advanced Human Light 1.0 is yet another beautiful theme for Gnome users. It is actually a GTK theme that uses the Murrine, Aurora, and, Clearlooks engines.
This supports rgba* in the main window while leaving buttons, tabs, and text areas opaque so as to enhance readability and usability without sacrificing eye candy.
GNOME is an international effort to build a complete desktop environment-the graphical user interface which sits on top of a computer operating system-entirely from free software. This goal includes creating software development frameworks, selecting application software for the desktop, and working on the programs which manage application launching, file handling, and window and task management.
GNOME is part of the GNU Project and can be used with various Unix-like operating systems, most notably Linux, and as part of Java Desktop System in Solaris.
The name originally stood for GNU Network Object Model Environment, though this acronym is deprecated. The GNOME project puts heavy emphasis on simplicity, usability, and making things "just work".
Requirements:
- GTK 2.x
- GNOME 2.x
pam_dotfile 0.7
pam_dotfileis a PAM module which allows users to have more than one password for a single account, each for a different service. more>>
This is desirable because many users have objections to using the same password for (as an example) an IMAP4 mailbox and SSH access.
The IMAP4 password should be distinct from the SSH password because the user wants to save the former in the configuration of his mail agent, but not the latter. The same applies to POP3 mailboxes, FTP and comparable services.
PAM parameters
debug - Be very verbose to syslog(3)
use_first_pass - Dont issue a password prompt, use one supplied by a previous modules
try_first_pass - Nearly the same as use_first_pass, but dont fail if no password was supplied, instead query the user
use_authtok - Synonym for use_first_pass
rootok - Dont deny access for users with uid == 0
nullok - Dont deny access for null passwords
fork - Always fork before trying to open the password files via the helper tool
nofork - Never fork
no_warn - Suppress warnings to syslog(3)
stat_only_home - verifies group/world readability only inside the home directory. e.g. if the configuration file is /home/waldo/.pam/service only /home/waldo/.pam and /home/waldo are tested. This is sometimes necessary if the home directories are symbolic links.
nocompat05 - Disable compatibility with pam_dotfile<<less
Genomorama: Genome Visualization 1.5
Genomorama: Genome Visualization is a multi-scale, multi-genome, multi-platform visualization and analysis program. more>>
Genomorama is written in portable, highly optimized C++ and comes in three "flavors" that allow it to run natively on (most) modern operating systems: OS X (using Carbon), Microsoft Windows (using MFC), and Linux (using Motif). Executables and source code are freely provided for all flavors.
Main features:
- High performance has not been sacrificed on the altar of portability
- OpenGL graphics take advantage of the video-game optimized graphics cards available in most desktop and laptop computers.
- C++ allows transparent and complete utilization of system resources (like memory).
- Native windowing toolkits (Carbon, MFC and Motif) for every operating system facilitate responsiveness and ease of use.
- A stand-alone, self-contained executable frees Genomorama from dependence on third party applications.
- Source code for all platforms is freely available.
- An attractive, full featured user interface
- Genomorama presents a clean, uncluttered user interface.
- Multi-scale rendering displays relevant details while maintaining readability.
- Use a keyboard or a mouse to efficiently zoom, pan and explore genomes of arbitrary size.
- Attractive WYSIWYG Postscript and GIF output formats yield publication quality images.
- Novel features to aid genome analysis
- In addition to the standard searching options (like query by sequence and gene name), Genomorama offers "forward and reverse" DNA hybridization based searches.
- Provide a pair of PCR primers, and Genomorama will output the amplicons.
- Provide a hybridization probe and Genomorama will find binding sites.
- Provide a pair of Padlock probes and Genomorama will identify binding locations
- Provide a set of PCR primer criteria (length, melting temperature, base composition, etc.) and Genomorama will find PCR primers.
- Genomorama can display and search an arbitrary number of genomes (limited only by computer memory).
- Harness the power of the NCBI toolkit to directly access and search the NCBI Entrez database.
- Compute melting profile, in addition to traditional base composition plots (i.e. %G+C, %A+T, etc).
Enhancements:
- This release fixes the following bugs: parsing gbk files that contain single base annotations on the complement strand;
- missed exact matches at 3 end of target sequence;
- fragile parsing of annotation range;
- downloading of very large Genbank records (i.e. human chromosomes);
- and omitted intergenic space following single base annotations (i.e. SNPs).
- Custom color records are now saved to and read from GBK files.
- An OS X Intel-specific executable has been added.
- The information dialog box has been made resizable.
AVL Array 1.2
AVL Array is an STL-like container for C++ that fills the gap between vector. more>>
This is not a map; in an avl_array, the "keys" always range from 0 to size-1, and they automatically change on insertion or removal. As a sequence container, like vector and list, it respects the order of elements.
Enhancements:
- documentation
- source reorganized for readability
- compliance with higher standards
- performance improvements
CurlyML 0.1.1
CurlyML is a simple, concise format for storing and transmitting structured data and documents. more>>
CurlyML allows you describe structured data in a way that is efficiently, easily readable and writeable to both human beings and machines, with no extraneous fuss or redundant markup.
Essentially, CurlyML is designed to get out of your way so you can get on with describing your data. This is in direct contrast with XML, which is overkill for the vast majority of tasks.
The rules:
- Nodes with children (parent nodes) are only allowed to have alphanumeric names, although in the interests of readability, underscores and hyphens are also allowed in parent node names.
- Multiple top level nodes are allowed in a document. The document itself is considered the real root node.
- Leaf nodes (i.e. those with no children or an empty child list "{}") can contain any text.
- Child node text can be contained in double quotes in order to display text with space characters preserved, or in order to display text which contains curly braces (or quotes).
- Quoted text in child nodes can use C/Java-style escape characters: n (newline) r (carriage return) t (tab) " (quote itself) uXXXX (unicode character).
- Any unquoted text starting with the comment sequence (#) is considered to be a comment, until the end of the line (i.e. n or r or EOF is encountered). If the # forms part of an existing word being parsed, however, it will not be treated as a comment. The reasoning for this is that this character will often form part of HTML links, and its more intutive to have a comment beginning after a space or newline than to potentially cause unexpected breakage due to using # in otherwise valid strings. The parser doesnt care if you have spaces in a comment, but you do need to have a space or newline before a comment.
- A word followed by an opening curly declares the beginning of a parent node named by that word.
- Opening and closing curly counts must match (curlies inside quoted text not included).
- Default character set is UTF-8.
Set::Array 0.14
Set::Array Perl module contains arrays as objects with lots of handy methods and support for method chaining. more>>
SYNOPSIS
my $sao1 = Set::Array->new(1,2,4,"hello",undef);
my $sao2 = Set::Array->new(qw(a b c a b c));
print $sao1->length; # prints 5
$sao2->unique->length->print; # prints 3
Set::Array allows you to create arrays as objects and use OO-style methods on them. Many convenient methods are provided here that appear in the FAQs, the Perl Cookbook or posts from comp.lang.perl.misc. In addition, there are Set methods with corresponding (overloaded) operators for the purpose of Set comparison, i.e. +, ==, etc.
The purpose is to provide built-in methods for operations that people are always asking how to do, and which already exist in languages like Ruby. This should (hopefully) improve code readability and/or maintainability. The other advantage to this module is method-chaining by which any number of methods may be called on a single object in a single statement.
OBJECT BEHAVIOR
The exact behavior of the methods depends largely on the calling context.
Here are the rules:
* If a method is called in void context, the object itself is modified.
* If the method called is not the last method in a chain (i.e. its called in object context), the object itself is modified by that method regardless of the final context or method call.
* If a method is called in list or scalar context, a list or list refererence is returned, respectively. The object itself is NOT modified.
Heres a quick example:
my $sao = Set::Array->new(1,2,3,2,3);
my @uniq = $sao->unique(); # Object unmodified. @uniq contains 3 values.
$sao->unique(); # Object modified, now contains 3 values
Here are the exceptions:
* Methods that report a value, such as boolean methods like exists() or other methods such as at() or as_hash(), never modify the object.
* The methods clear(), delete(), delete_at(), and splice will always modify the object. It seemed much too counterintuitive to call these methods in any context without actually deleting/clearing/substituting the items!
* The methods shift() and pop() will modify the object AND return the value that was shifted or popped from the array. Again, it seemed much too counterintuitive for something like $val = $sao->shift to return a value while leaving the objects list unchanged. If you really want the first or last value without modifying the object, you can always use the first() or last() method, respectively.
* The join() method always returns a string and is really meant for use in conjunction with the print() method.
BOOLEAN METHODS
exists(val) - Returns 1 if val exists within the array, 0 otherwise. If no value (or undef) is passed, then this method will test for the existence of undefined values within the array.
is_empty() - Returns 1 if the array is empty, 0 otherwise. Empty is defined as having a length of 0.
STANDARD METHODS
at(index) - Returns the item at the given index (or undef). A negative index may be used to count from the end of the array. If no value (or undef) is specified, it will look for the first item that is not defined.
clear() - Empties the array (i.e. length becomes 0). You may pass a 1 to this method to set each element of the array to undef rather than truly empty it.
compact() - Removes undefined elements from the array.
count(?val?) - Returns the number of instances of val within the array. If val is not specified (or is undef), the method will return the number of undefined values within the array.
delete(list) - Deletes all items within list from the array that match. This method will crash if list is not defined. If your goal is to delete undefined values from your object, use the compact() method instead.
delete_at(index, ?index?) - Deletes the item at the specified index. If a second index is specified, a range of items is deleted. You may use -1 or the string end to refer to the last element of the array.
duplicates - Returns a list of N-1 elements for each element N in the set. For example, if you have set "X X Y Y Y", this method would return a the list "X Y Y".
fill(val,?start?,?length?) - Sets the selected elements of the array (which may be the entire array) to val. The default value for start is 0. If length is not specified the entire array, however long it may be at the time of the call, will be filled. Alternatively, a quoted integer range may be used.
e.g. $sao->fill(x,3-5);
The array length/size may not be expanded with this call - it is only meant to fill in already-existing elements.
first() - Returns the first element of the array (or undef).
flatten() - Causes a one-dimensional flattening of the array, recursively. That is, for every element that is an array (or hash, or a ref to either an array or hash), extract its elements into the array.
e.g. my $sa = Set::Array->new([1,3,2],{one=>a,two=>b},x,y,z);
$sao->flatten->join(,)->print; # prints "1,3,2,one,a,two,b,x,y,z"
foreach(sub ref) - Iterates over an array, executing the subroutine for each element in the array. If you wish to modify or otherwise act directly on the contents of the array, use $_ within your sub reference.
e.g. To increment all elements in the array by one...
$sao->foreach(sub{ ++$_ });
get - Alias for the indices() method.
index(val) - Returns the index of the first element of the array object that contains val. Returns undef if no value is found.
Note that there is no dereferencing here so if youre looking for an item nested within a ref, use the flatten method first.
indices(val1,?val2?, ?val...?) - Returns an array consisting of the elements at the specified indices or undef if the element is out of range.
A range may also be used. It must be a quoted string in 0..3 format.
join(?char?) - Joins the individual elements of the list into a single string with the elements separated by the value of char. Useful in conjunction with the print() method. If no character is specified, then char defaults to a comma.
e.g. $sao->join(-)->print;
last() - Returns the last element of the array (or undef).
length() - Returns the number of elements within the array.
max() - Returns the maximum value of an array. No effort is made to check for non-numeric data.
pack(template) - Packs the contents of the array into a string (in scalar context) or a single array element (in object or void context).
pop() - Removes the last element from the array. Returns the popped element.
print(?1?) - Prints the contents of the array. If a 1 is provided as an argument, the output will automatically be terminated with a newline.
This also doubles as a contents method, if you just want to make a copy of the array, e.g. my @copy = $sao->print;
Can be called in void or list context, e.g.
$sao->print(); # or... print "Contents of array are: ", $sao->print();
push(list) - Adds list to the end of the array, where list is either a scalar value or a list. Returns an array or array reference in list or scalar context, respectively. Note that it does not return the length in scalar context. Use the length method for that.
reverse() - Reverses the order of the contents of the array.
rindex(val) - Similar to the index() method, except that it returns the index of the last val found within the array.
set(index,value) - Sets the element at index to value, replacing whatever may have already been there.
shift() - Shifts the first element of the array and returns the shifted element.
sort(?coderef?) - Sorts the contents of the array in alphabetical order, or in the order specified by the optional coderef. Use your standard $a and $b variables within your calling program, e.g:
my $sao = Set::Array->new( { name => Berger, salary => 20000 }, { name => Berger, salary => 15000 }, { name => Vera, salary => 25000 }, );
my $subref = sub{ $b->{name} cmp $a->{name} || $b->{salary} $a->{salary} };
$sao14->sort($subref)->flatten->join->print(1);
splice(?offset?,?length?,?list?) - Splice the array starting at position offset up to length elements, and replace them with list. If no list is provided, all elements are deleted. If length is omitted, everything from offset onward is removed.
Returns an array or array ref in list or scalar context, respectively. This method always modifies the object, regardless of context. If your goal was to grab a range of values without modifying the object, use the indices method instead.
unique() - Removes/returns non-unique elements from the list.
unshift(list) - Prepends a scalar or list to array. Note that this method returns an array or array reference in list or scalar context, respectively. It does not return the length of the array in scalar context. Use the length method for that.
ODDBALL METHODS
as_hash() - Returns a hash based on the current array, with each even numbered element (including 0) serving as the key, and each odd element serving as the value. This can be switched by using the key_order option and setting it to odd, in which case the even values serve as the values, and the odd elements serve as the keys. The default is even.
Of course, if you dont care about insertion order, you could just as well do something like, $sao-reverse->as_hash;>
Carp::croaks if the array contains an odd number of elements. This method does not actually modify the object itself in any way. It just returns a plain hash in list context or a hash reference in scalar context. The reference is not blessed, therefore if this method is called as part of a chain, it must be the last method called.
impose(?append/prepend?,string) - Appends or prepends the specified string to each element in the array. Specify the method by using either the keyword append or prepend. The default is append.
randomize() - Randomizes the order of the elements within the array.
rotate(direction) - Moves the last item of the list to the front and shifts all other elements one to the right, or vice-versa, depending on what you pass as the direction - ftol (first to last) or ltof (last to first). The default is ltof.
e.g. my $sao = Set::Array->new(1,2,3);
$sao->rotate(); # order is now 3,1,2
$sao->rotate(ftol); # order is back to 1,2,3
MP3 as CD verifier 2 0.1a
MP3 as CD verifier 2 performs lookups on CDDB servers. more>>
Please remember that mp3ascd uses the alphabetically sorted list of .mp3 files per directory Hence it is possible that if your filenames are somehow mismatched (case?), they may be sorted incorrectly. If youre getting a mismatch that you think is wrong, run mp3ascd with default options to make sure that the enumerated list of files it finds is sorted correctly.
To install, firstly make sure the script is executable.
I copy mine into a directory in my PATH, such as /usr/bin/. It should work on a multitude of platforms, but if it does not work on yours, please let me know.
Enhancements:
- Improved readability
- Summary reports (recursive), including non-matching directories
- ID3 tag presence info shown in full display mode
jscl-meditor 2.3
jscl-meditor is a java symbolic computing library and mathematical editor. more>>
Main features:
- polynomial system solving
- vectors and matrices
- factorization
- derivatives
- integrals (rational functions)
- boolean algebra
- simplification
- MathML output
- Java code generation
- geometric algebra
Regarding readability, the goal is to produce a code as nice and short as the pseudo-code found in textbooks or research papers. As an illustration, here is what the Euclidean algorithm would look like:
Polynomial gcd(Polynomial p, Polynomial q) {
while(q.signum()!=0) {
Polynomial r=p.remainder(q);
p=q;
q=r;
}
return p;
}
It entails a dedicated development effort. This choice of clear coding, enabled by java, may have consequences in terms of performance compared to other software. But it could be worth the commitment, in the respect that understanding an algorithm just by looking at the code is made possible. For instance, object-orientation allows to hide ugly optimizations behind a clean, easy to use interface.
Some may doubt however that java will ever be as clear as C++ because it doesnt provide operator overloading, which means that a+b is written a.add(b), and will remain as such. The interested reader can look at the ongoing discussion on the matter at Sun.
As for portability, it means that a lot of platforms are available at no cost, from powerful unix workstations or servers to handheld devices. To make it possible, the project is split in two parts : the engine (jscl) and the mathematical editor front-end (meditor). The engine is usable interactively or in batch mode from a java shell interpreter (like BeanShell for instance), or as a java library in any third-party application.
The front-end has currently two implementations (see below). Among others, it is intended for taking course notes. With it, a student can perform the calculations asked by their teacher fast and reliably. The plain text format should make the exchange of notes easy. The produced worksheets can be published on-line thanks to the MathML output feature, for instance on meditorworld (MathML capable browser needed, tested to work with Mozilla).
Business Process Visual ARCHITECT 2.1
Business Process Visual ARCHITECT is a full-featured business process modeler. more>>
Business Process Visual ARCHITECT provides an easy-to-use diagramming environment for you to model your business process, and is a proven solution for bridging the gap between business analysts and IT professionals.
Main features:
- Frictionless business modeling environment
- On-the-fly syntax check and correction according to BPMN specification
- Advanced printing facility for outputting large business process diagram
- Share business process diagram among your company with Teamwork Server
- Incorporate user-defined images to the business process diagram to increase the readability.
Enhancements:
- Branch and tag capabilities were added to the VP Teamwork Server, including Subversion and CVS repository integration.
- This allows different modeling projects to be run in parallel while keeping the release quality project stable in the trunk.
- There were also a number of enhancements for various other features.
Danga::Socket 1.56
Danga::Socket is an event loop and event-driven async socket base class. more>>
SYNOPSIS
package My::Socket
use Danga::Socket;
use base (Danga::Socket);
use fields (my_attribute);
sub new {
my My::Socket $self = shift;
$self = fields::new($self) unless ref $self;
$self->SUPER::new( @_ );
$self->{my_attribute} = 1234;
return $self;
}
sub event_err { ... }
sub event_hup { ... }
sub event_write { ... }
sub event_read { ... }
sub close { ... }
$my_sock->tcp_cork($bool);
# write returns 1 if all writes have gone through, or 0 if there
# are writes in queue
$my_sock->write($scalar);
$my_sock->write($scalarref);
$my_sock->write(sub { ... }); # run when previous data written
$my_sock->write(undef); # kick-starts
# read max $bytecount bytes, or undef on connection closed
$scalar_ref = $my_sock->read($bytecount);
# watch for writability. not needed with ->write(). write()
# will automatically turn on watch_write when you wrote too much
# and turn it off when done
$my_sock->watch_write($bool);
# watch for readability
$my_sock->watch_read($bool);
# if you read too much and want to push some back on
# readable queue. (not incredibly well-tested)
$my_sock->push_back_read($buf); # scalar or scalar ref
Danga::Socket->AddOtherFds(..);
Danga::Socket->SetLoopTimeout($millisecs);
Danga::Socket->DescriptorMap();
Danga::Socket->WatchedSockets(); # count of DescriptorMap keys
Danga::Socket->SetPostLoopCallback($code);
Danga::Socket->EventLoop();
This is an abstract base class for objects backed by a socket which provides the basic framework for event-driven asynchronous IO, designed to be fast. Danga::Socket is both a base class for objects, and an event loop.
Callers subclass Danga::Socket. Danga::Sockets constructor registers itself with the Danga::Socket event loop, and invokes callbacks on the object for readability, writability, errors, and other conditions.
Because Danga::Socket uses the "fields" module, your subclasses must too.
JXHTMLEDIT 4.0.005
JXHTMLEDIT is a browser-based HTML/XHTML content authoring. more>>
JXHTMLEdit is a cross-platform WYSIWYG (What You See Is What You Get) HTML/XHTML content authoring tool, a very small Java Applet based on the Java 2 Platform. JXHTMLEdit provides word processor-like user interface that allows users to edit the XHTML document directly in the final form (as will be rendered). This empower non-technical users to become content contributors without any knowledge of HTML or XHTML.
Specifically designed and optimized to edit only the < body > portion of HTML/XHTML page, JXHTMLEdit outputs to your choice HTML or well-formed XHTML.
JXHTMLEDIT preloads the HTML/XHTML content during startup from a specified html form field (e.g.: < textarea >) where it also saves the generated code.
JXHTMLEdit has been designed to offer great flexibility and could be used to easily integrate WYSIWYG authoring functionality into existing websites, CMS, WMS or any other Web-based software. The Applet JAR archive is less than 150 KB and its cacheable, so it loads very quickly.
Main features:
- platform independent, works on most Operating Systems available today
- browser-based and cross-browser Java Applet, works fine with any Javascript-enabled internet browser that support Sun JavaTM Plug-in 1.4 or higher
- two different jar versions are available:
- signed (jxhtmledit.jar) : to support cut-and-paste to and from system clipboard;
- unsigned (jxhtmledit_u.jar) : support only local clipboard;
- applet jar is less than 150 KB, loads quickly
- WYSIWYG and source code editing (the source editor pane may be disabled)
- partial support for stylesheet CSS1
- support custom tags
- customizable charset encoding, support international character sets and html entities (require appropriate OS/browsers)
- output HTML or well-formed XHTML to your choice
- support XHTML indentation (to increase readability) or compact mode (to reduce code size)
- could be launched as a popup window or used as a textarea
- support copy, cut-n-paste, undo, redo, search and select-all
- buttons and combo boxes are configured using external XML file (java/config/buttons.xml)
- support custom buttons and custom selection boxes to add custom tags or execute predefined actions
- strings could be localized using external TMX file (java/config/tmx.xml)
- all x/HTML tags and relative attributes are defined using external XML files (java/config/tags.xml, attributes.xml, categories.xml, status.xml)
- support help tooltips (popup descriptions that appear when mouse pointer is over the button)
Enhancements:
- The license was changed to the GPL.
DEV web management system 1.5
Dev is powerful and very flexible content management system for web portals. more>>
DEV contains many modules required for system:
Articles
Dev provides easy way to publish articles for everyone visitor after registration. As site administrator, you have to check every article, and decide, if the article content is valid for publication. Only superusers can add articles directly without administrators check. DEV supports structuring articles into Zones and Sections
Articles equipment
Each article can be separately commented and discussed. Each article has a private statistics of readability. You can evaluate article by taking the poll.
News
You can also publish short news and create back-ends in xml format
Forums and Discussion boars
DEV provides a versatile spectrum of forums and discussion boards.
Polls
As each CMS system, DEV provides a polls too. Polls can be managed using the control panel.
Gallery
With DEV w.m.s., you are able to publish your multimedia files (videos, photos, pictures, etc...) quickly and easily using the Gallery module. This module supports creating thumbnails of your files. You can organize and categorize your multimedia stuff in sections. System can automatically scan selected directory with all subdirectories and add all multimedia content into gallery.
Download manager
Organize your files in "download section" this module allows you to manage download lists, each file has a separate download counter, etc ...
Advertisement
Manage advertisement on your site using this module.
Notification
Be informed about events on your site by wide range of notification functions.
Reports
System allows you to create system reports and export them into MS Excel or XML format.
Security
You can revoke access from some IP addresses. This is the good way to avoid sniper activitity of flooders, spammers, etc ... Note: Also, you can use broadcast addresses to wide range banning.
Control panel
You are allowed to administrate system by remote access using web-browser based control panel. Control panel provides you wide range of settings. Its optional for routine administration from any computer connected to the internet. All settings can be exported into file for backup or future use.
Design customizer
DEV w.m.s. allows you to change design using special user-friendly tool (contained in control panel) without editing html code! Using this tool, you are able to create variuos design schemes and share it with your friends. Also, if you dont want to use design customizer, there is way to create design manually by editing html and css sources.
Matrex 1.1
Matrex is a graphical tool to show, organize and calculate big amounts of data. more>>
Matrex is the perfect tool for mathematical models and for other statistical, engineering, physical, and generally scientific calculations.
Matrex is based on matrices, which are meant as square grids of numbers, texts, dates or booleans.
Matrex matrices can be real matrices, vectors or simple values.
Matrex uses also:
- functions to transform matrices to other matrices.
- presentations to show multiple matrices together in a spreadheet-like way.
- charts to show matrices graphically.
Advantages: simplicity, performance, multithreading, readability, easy projects sharing; and the feeling you have everything under control.
Matrex uses the following products:
- SWT for the graphical user interface
- JFreeChart for the 2D charts
- FreeHep for the 3D charts
- Jython as embedded scripting language
- Apache Commons Math to calculate pure matrices functions and statistical functions
- IzPack to install Matrex.
CSSTidy 1.3
CSSTidy is an opensource CSS parser and optimizer. more>>
In opposite to most other CSS parsers, no regular expressions are used and thus CSSTidy has full CSS2 support and a higher reliability.
Main features:
- colours like "black" or rgb(0,0,0) are converted to #000000 or rather #000 if possible. Some hex-codes are replaced by their colour names if they are shorter.
- a{property:x;property:y;} becomes a{property:y;} (all duplicate properties are merged)
- margin:1px 1px 1px 1px; becomes margin:1px;
- margin:0px; becomes margin:0;
- a{margin-top:10px; margin-bottom:10px; margin-left:10px; margin-right:10px;} becomes a{margin:10px;}
- margin:010.0px; becomes margin:10px;
- all unnecessary whitespace is removed, depending on the compression-level
- all background-properties are merged
- all comments are removed
- the last semicolon in every block can be removed
- missing semicolons are added, incorrect newlines in strings are fixed, missing units are added, bad colors (and color names) are fixed
- property:value ! important; becomes property:value !important.
Why optimise?
If you optimise your CSS code you have faster loading pages and lower traffic costs. So both you and your visitors benefit from an optimisation. If you are interested in a faster loading webpage, websiteoptimization.com might also be an interesting resource.
Compression ratio
The compression ratio mostly depends on the level of whitespace-removal. Using standard whitespace-removal (which preserves the readability) the compression ratio often is 30% and more. In theory the compression ratio can be 99,99% but only very "stupid" stylesheets will allow those ratios. Also have a look at the examples.
Apart from compression
If a high compression is not important for you, you can also use CSSTidy to format or fix CSS code for a higher browser compatibility. Apart from the 4 default templates you can specify custom templates so that you can easily format a lot of CSS code using your own coding style. Other features are sorting and changing the case of selectors and properties.
Enhancements:
- Note: This is the last version of CSSTidy. If youd like continue maintaining it, let me know.
- FS#146 - Quotes
- FS#147 - Universal selector before classes, IDs and attribute selectors
- FS#150 - Wrong trasformation of a big integer value
- FS#144 ? !important rule
- FS#140: Fixing Values of Invalid properties
- [ 1745894 ] @media merge strangeness (cssTidy.exe version)
- FS#143: Save some more bytes
Sigma Consolefonts 0.01
Sigma Consolefonts package contains a set of UTF-8 fonts which provide readability and wide coverage. more>>
Still interested ? Ok, here is a less than wonderful photograph of what the sigma-general version of this font can do. Apologies for the poor quality of the photo, I hope you can get an idea of what this does - and if you are using the linux console without a graphical desktop, youll just have to download it to try it out.
I aim to let people see as many characters as possible on their console. I know that most people assume a graphical desktop is necessary to see a wide range of characters, but the standard console can display 512 characters if you do without the bold colours.
Traditional console fonts have often used separate glyphs for cyrillic and latin letters of the same shape, but desktop fonts normally render them identically (e.g. latin A and cyrillic А), and so do I - this helps make some space available. I have used Dmitry Bolkhovityanovs perl script to select which glyphs are used in a particular psfu font, and to map multiple codepoints to the same glyph. There are a limited range of line-drawing characters (enough to give a decent display in the linux kernels make menuconfig).
The main use of these fonts is when you dont have a graphical desktop but still want to be able to read text in many languages. So, perhaps they are most appropriate to people running servers. For myself, they let me read my mail over ssh when I am building the graphical desktop for a new system.
The font itself started out as etl16 from one of the debian console packages. I altered it to give more balanced letters - longer descenders at the expense of less space above the letters, and bringing the accents closer to the letter. The cell format of a capital letter is 3 rows above the letter, 10 rows for the letter, and another 3 rows for the descender. In hex, that is 3A3, hence the name (U+03A3 is Σ).
Unlike traditional vga fonts hard-coded into the machine, these fonts are much less bright - you may have to increase your screens brightness. This is because they are thin (normally only one pixel wide). The 8x16 size is very much "one size fits all" - adequate for most accented latin, and for cyrillic and current greek, but not ideal where there are multiple accents (livonian, vietnamese, polytonic greek).
Unlike most other console fonts, these come with the source (a bdf font) and a series of map files to decide what to include. So, if you really dislike the form of one of the letters you can alter it - the bdf is just 16 lines of hex codes, e.g. a capital U has nine lines of x42 (0100 0010) and a baseline of x3C (0011 1100).
If you want to change a map, either to add something else, or to remove something you dont use, they are simple to edit.
The linux console cannot accomodate CJK languages, so this font is for people who use alphabetic languages. The armenian and georgian glyphs should be identical to what is in etl16, also the arabic and hebrew (and I really dont know how useful those are on a left-to-right terminal). Everything else has been tweaked to provide what I think is a satisfactory result.
The tarball includes my attempt at listing the alphabets for the languages covered - to answer the question, which glyphs do you need for a particular language. These files may also be useful if you are using xorg and want to check whether your fonts provide adequate coverage.
For most people, I think the general version should work well (latin, greek and the main european cyrillic letters). Some people may prefer the cyrillic variant (all current cyrillic, greek, some latin letters. There is also a caucasian variant (latin, cyrillic, armenian, georgian) and some other example and proof-of-concept variants, e.g. african, polytonic, vietnamese. Ultimately, the african languages are limited by a lack of precomposed glyphs in unicode (AFAIK, there is a lack of terminals which support combining diacriticals), but some languages such as venda should work. Languages with multiple accents above the letter (livonian, polytonic greek, vietnamese) are not wonderful in the 8x16 size, but they might suffice.