Get a free PDF Reader

Thu, 27 May 2010 01:11:55 +0000

Looking for some instructions for mozplugger embedding evince, besides the solution I found here, I also found a nice link to this campaign from the FSF Europe.

It is an appeal to use a free PDF Reader. Well, under Linux and other free systems, there are a lot of them, and they are all mostly good. I actually do not understand why there are still people who prefer the Adobe Reader under Linux. Not only are there a lot of alternatives, they are also mostly much better (faster, easier to use). Few PDFs are not working on them – the ones created with some strange WMF-Tools (M$ for the win) and of course the ones which are encrypted such that explicitly only Adobe Reader can open them. I had this situation exactly twice in my whole life – one time a PDF created with some strange settings from Scientific Workplace, and the other time from a Professor who wasnt allowed to publish parts of its book without encryption. Even commercial pdf-providers usually dont use this, because its basically useless – it is a crude form of DRM, but modern eBook-Formats have much better techniques for that.

Also under Windows, I dont want to use the Adobe Reader, but actually I mostly use (the non-free) Foxit Reader there. The FSE’s list names Evince for Windows – but Evince for Windows was in a Beta-State and I wouldnt have recommended it to normal people. Okular was stable but needed a full-blown KDE-Installation, and KDE for Windows is still no fun. I never tried Sumatra PDF though. I will have to do this.

Well, actually, I dont like PDF much. Many modern PDF-Files are bloated. I liked early versions of PostScript much better. And at the moment, I like djvu very much. At least for ebooks, djvu seems to be a good format. As a comparably simple format, I like SVG. I mean, its bloated with XML-Stuff, but at least the inner structure is simple.

Its a pity that only few pieces of free software work properly under Windows. Windows is still the main platform for most people, and to convince them of free software, it could be a good thing to actually make them work with it under Windows already.


Comment Feeds, Please! (and other things about blogging)

Wed, 12 May 2010 18:46:05 +0000

Well, there may be a lot of „professional“ and „famous“ bloggers out there who might say what they like or dislike when reading blogs and if you want to create a „professional“ blog rather than a private little blog about the things you are interested in, then you might ask these people better than reading on what I am going to write. Because I will now tell you about a few things I dont like on some Blogs, and reasons why a blog might be thrown out of my RSS-Feed-List.

Have and Maintain a Feed

Yes, there are still people who proudly write their own Blog-Software but dont provide any feed. Even though their site might have interesting content, there are thousands of other sites who provide interesting contents, too, and at least for me, its rather hard to produce something so interesting that I am willing to periodically go to your Site and watch for news.

These times are gone. There are too much people writing their opinion online. I have just counted 439 Newsfeeds in my Feed-Reader, and at least half of them are providing information that interests me, but most of them dont do this often. I cannot manage to watch 439 Websites every time, especially because mostly I am just reading this stuff in my free time, mostly without getting anything out of it I really need, i.e. just for fun.

And something that especially gets on my nerves is when I already subscribed to a feed and then the blogger changes his Software and with it the Feed-URL, without writing a note on the old newsfeed. So I only get notice about it by the error messages of my feed reader. This is annoying!

Ah, and especially: Make it easily findable. Provide feed-links as well as link-tags which Feedreaders can recognize. I dont want to have to „search“ your site for them.

I dont care much about design, just make your site work with as little as possible

Many people like Websites which put great efforts into their site-design. There is nothing wrong with that, except that these efforts often lead to huge requirements of your browser.

In particular: If I go to your site, then dont expect me to activate JavaScript, if there is no explicit reason. If you use jsMath because you cannot use LaTeX on your provider’s Server, or you are writing browser games and therefore need JavaScript, then kindly excuse yourself when I go to your site, and ask me to activate JavaScript, rather than commanding me to do so. JavaScript uses my system resources and might produce additional security vulnerabilities – and if you are just too lazy to provide an Interface that doesnt need JS, without really needing it, I am not willing to give you the trust of letting your code execute on my Computer!

Same for Flash-Animations. Flash is like a cullender when it comes to security. There are a few domains which I trust. For example, I trust large Video-Portals like YouTube, Vimeo or Dailymotion. Because if they would become vulnerable, then they would fix it as fast as they could. I dont want to see Flash on your Website, except when its really necessary. Ok, its still necessary for embedding videos or sound – I hope that these times will go away soon, but there is no other possibility that really works by now. So yeah, I can understand that you might use Flash when its impossible not to do so.

Advertisement-Services also sometimes use Flash. I dont see why they do it, instead of just using GIF-Animations, but well, I can understand that you want to get back the money you pay for your provider, so well, keep your Flash-Advertisements – I will block Flash anyway if you dont give me a reason not to do so.

But as soon as your site has some fancy-looking sidebar or other shit programmed in Flash, I will certainly not use it.

Ah, and dont use Cookies, if there is no reason for it. Some Ad-Services might require them, but I will block them if I dont see a reason to give you the opportunity to save data on my PC!

You might use Cascading Style Sheets, and well, if you really want, you might provide additional functionality using JavaScript and Cookies – yes, these technologies are nice for some purposes, and if I read your website for a long time, I might feel comfortable with giving you the opportunity to save small pieces of data and execute small pieces of code on my PC. But if you try to force me to do so, I will not give an inch.

Oh, and a note on CSS: CSS is made to put design on your site to make it viewable with many technologies. Maybe I want to go to your site using lynx. Then please put the boilerplate-elements below the interesting stuff. I dont want to have to scroll down 5 screens of stupid login-, blogroll- and linklist-information before I finally can get to the content I want to see.

Allow comments to all people

There is a lot of comment-spam so I can understand why you might want to look at the comments I write before publishing them. I can understand when you want me to enter a captcha, I can even understand when you require JavaScript for commenting to prevent spam. But if so, dont just assume I have JavaScript turned on, tell me that comments need JavaScript before producing strange errors (or just doing nothing).

You want my name (or a representative Nickname) and of course an E-Mail-Adress of mine. Maybe you are kindly even adding my Gravatar-Icons. But dont forget to give me the possibility to put some Website-URL of mine on top of my comments. Maybe you are not interested, but other people reading my comment might be interested to get to know more about me – I help you to keep your blog alive, so in exchange you can help me. Fair is fair.

Dont expect me to register anywhere or have an OpenID. Yes, I have an OpenID, and if you kindly ask me to provide one, I might think about it. But requiring to have such a service or even registering on your blog before I can post is arrogant and if you dont give something really awesome to me, I just wont post comments on your site. And if I cannot discuss about what you write, well, your site might get less interesting to me.

Of course I can understand you if you have a blog-provider not allowing this. But well, then you might consider changing the provider. At least WordPress allows comments in general. If a blogging service doesnt allow it, just dont use it.

Have thread-based comment-feeds or at least mailing-notifications

So well, you have managed to make me put a comment on your page. Con grats! Now maybe I expect some reaction by you or some other person. If you are using one of the larger blogging-services like WordPress, the thread I just posted in has a Comment-Feed, telling me about comments given there. Sometimes, Blogs dont provide this, but they provide Mailing-Notifications if some new comments come up. I can live with that (I gave you my mail-adress anyway).

But you have to give me something. Otherwise I will have to keep that tab with the comments open. And since I am working on at least 3 distinct computers, partially with distinct browsers, I will certainly not follow these comments for a long time.

But if I cant follow the reactions on my Comment, I will think twice before posting a comment anyway.

Dont be professional

Except when you are a real journalist who has already worked for newspapers or plans to do something like a newspaper, or you host a science blog, dont be professional. I am sick of all this „professional blogging“ stuff. For me, a weblog must not be professional, except maybe when its about science – if its professional, it becomes an online newspaper, but then, it should be stated as such, and compete with others of its kind. In blogs, I want to read the opinions of many unprofessional people.

Conclusion

Well, thats what you should do if you want me to read your blog. If you are a famous blogger, than you might as well ignore me, because you have so much other followers. But surprisingly, most famous bloggers meet my requirements – a coincidence?

I like private blogs. I like scientific blogs. I like small blogs that dont write much more than once a month, as well as bloggers who write five articles a day. I wouldnt read your blog because its special, I would read it because its one of many.

Always remember that you are unique – just like everybody else.


Personal Notes on LaTeX

Fri, 07 May 2010 02:34:08 +0000

I am making this post to finally have everything written down in a central place.

Firstly, everytime I can, I use TexMacs. I dont like LaTeX, I never found a real introduction that goes into the implementation details of latex or tells how to really write code with it – I mean its said to be turing-complete, but I dont actually know how to do some quite simple things with it.

However, TexMacs is said to be capable of vitally anything LaTeX also is, and its scriptable with scheme, but well, sometimes its not capable of some things, and its not as well-documented as latex is. If I just want to write lecture notes, then I use TexMacs because you can really typeset the stuff fast and looking very good.

But for „larger“ things like my project thesis, I decided to use LaTeX. And before I knew TexMacs (which is – unfortunately – very unknown), I also used LaTeX, and before I knew LaTeX, I used the OpenOffice.org-Math-Editor (which isnt that bad at all).

And so, here a few notes of problems that I had and their solutions:

Sometimes one wants to have one page without a page number. Setting \pagestyle{empty} should work in most cases. But not in all. When you use \maketitlepage, it somehow changes the pagestyle, so you have to use \thispagestyle{empty} afterwards instead. Setting the pagestyle back to the „default“ value is done by \pagestyle{plain}, which is the default, afaik.

Well, then there are dedication-pages. What I want is a single page which is empty except for one small text in the center of the page. Well, there are the commands \hfill and \vfill, filling up a line horizontally and a page vertically. Using these should make this possible. So I tried something like \vfill \hfill my-dedication \hfill \vfill \newpage. Didnt work. After a lot of trying around, finally, I „hacked“ around it by just using empty formulas, which make LaTeX think that it has to keep place: $ $\vfill$ $ \hfill my-dedication \hfill $ $ \vfill $ $. Well, not perfect, but it works.

For Code-Listings I finally found the LaTeX-Package „listings“ and this nice tutorial (which is in german). This is yet another of these „I can do everything“-Packages of which LaTeX has so many. In my opinion, a language should give you the possibilities of defining your own routines and only help you for this, but not keeping you as good as it can from doing anything yourself, while providing packages for „everything“.

Meanwhile I always use UTF-8. I dont see any reason for using anything else for my documents. Especially, when I want to include special characters like Hiragana or Katakana. Just to prevent the encoding hell. Actually, I dont quite understand why anybody is using anything else than UTF-8. Ok, some software needs encodings with an equal width, but these are special needs. For vitally everything the user has to handle with, UTF-8 should be the best.

Including graphics is also one major problem which always occurs. There may be a lot of packages which should place the graphics somewhere special, etc. – but none of them actually worked everywhere. Using pdf-files with \includegraphics from the graphicx-Package was sufficient for me so far – especially because I couldnt find anything that really worked better so far.

Then linebreaks. If I have a large formula, or a large word, or a large \tt-form, then LaTeX either goes over the side-boundaries, or gives up completely. I already used \emergencystretch=10000pt which sort of solved this problem (that is, it made some lines stretched pretty hard, but I didnt mind), but it created widows and orphans (seems to undermine the prevention-mechanisms somehow). Ok, it is a problem to choose what to do then. But the default I found was „just do it by hand“, but seriously, this cannot be a solution. Especially since the solution for me was clear: Use your algorithm where you can, but if a line would become too empty to stretch it, then simply dont do this with that line, just use \flushleft for this line. In my opinion, that sounds like the only thing one really can do about it – that is, even if I did it by hand, I would do it that way. But I couldnt find any pre-defined package or instruction defining this behaviour. So what I basically did was to just use \flushleft everywhere. It doesnt look that „pretty“, but well, it also doesnt look that „bad“, at least it looks continuous.


Besser weniger JavaScript

Thu, 06 May 2010 01:24:39 +0000

Nachdem ich ja jetzt mein MacBook bei Ebay versteigere (nur um das nochmal anzumerken), hatte ich viel Gelegenheit, das Ebay-Interface zu benutzen.

Eigentlich sollten gerade Unternehmen wie Ebay, Amazon, Microsoft, etc., ein besonders großes Interesse daran haben, dass das Internet „sicher“ wird – zumindest sollen nur die Leute an die Informationen kommen, von denen sie das wollen, z.B. die Werbekunden.

Eine Sicherheitslücke die immer wieder mal ausgenutzt wird wären da zum Beispiel nicht richtig eingeschränkte Cookies. Es ist nicht gut, durch das Internet zu gehen, und alle Cookies anzunehmen. Es gibt gute Cookie-Filter. Wie wäre es zum Beispiel, wenn man einfach „*.microsoft.com“ freigeben müsste, bzw. „*.msn.de“, um sich bei MSN einzuloggen? Können die nicht Subdomains anlegen, die auf ihre Werbekunden weiterleiten?

Noch viel schlimmer als Cookies sind Scripts. Die modernen „AJAX“-Interfaces. Aktuell musste ich mich ja mit dem Interface von Ebay herumärgern. Erstmal wieder das Problem mit Cookies. Es gibt ebay.com und ebay.de – gut, das sei ja verziehen. Dann gibt es aber noch ebaystatic.com, ebayobjects.com, und weiß der Geier was mir jetzt noch alles nicht einfällt. Immer wieder hat irgendwas gefailed, immer wieder wurden meine Formulardaten zurückgesetzt, weil ich nicht wusste, für welche Domains ich Cookies und JavaScript freigeben musste. Die Integration von PayPal war dann nochmal ein riesen Generve. Am Ende hatte ich einem ganzen Haufen von Domains Scripting und Cookies erlaubt. Und ich frage mich: Wofür? Wie wäre es denn stattdessen mit static.ebay.com, de.ebay.com, objects.ebay.com? Dann müsste ich *.ebay.com und ebay.de freigeben, und gut wäre es.

Außerdem verstehe ich bei diesem Interface ohnehin nicht, wozu es JavaScript verwendet. Einzig der HTML-Editor scheint JS wirklich sinnvoll einzusetzen. Ansonsten werden irgendwelche Werte On-The-Fly aktualisiert – klar, das ist möglicherweise „komfortabler“, aber einen „Wert neu Berechnen“-Button zu Clicken sollte man jedem Ebay-Nutzer zutrauen können.

Das Problem hierbei ist: Wo ein komplexes Interface ist, sind auch einen haufen komplexe Bugs. Man hat zum Beispiel die Möglichkeit, in seinen Angeboten HTML-Code anzugeben. Es muss nur irgendeiner der Webmaster irgendwann mal etwas übersehen, und schon können Leute ihre eigenen Scripts einschleusen, und so schlimmstenfalls an Session-IDs und sonstige Daten der Nutzer kommen. Deshalb wäre es eigentlich doch sehr sinnvoll, sein Interface lieber auf IFrames aufzubauen, dem Nutzer ein paar Buttonclicks mehr zuzumuten, und stattdessen diesem zu empfehlen, JavaScript zu deaktivieren, vor Allem, da JavaScript keinen wirklich erheblichen Vorteil liefert.

Aber wenn schon JavaScript, dann bitte doch nur von der selben Domain. Also meinetwegen *.ebay.com. Lediglich den Nutzer-Content kann man in eine eigene Domain packen, für den man dann JavaScript in seinem Browser deaktivieren kann.


Unicode Math Entities

Tue, 09 Mar 2010 03:38:20 +0000

There are plenty of possibilities to embed mathematical formulas into webpages. Besides JSMath and several possibilities to include LaTeX-Generated png’s into Websites there is MathML – which should have been preferrable, but just didnt find broad usage.

I just read that there is a collection of Math-GIFs for mathematical symbols.

I dont really know whats the purpose of the latter. Making Formulas visible inside HTML is a problem which is not properly solvable. But for small formulas, you will find a Unicode Character for most of the things you want to express – just look at the plenty of character tables. Embedding these in HTML is not harder than embedding a GIF. Of course, with Unicode, you are bound to a linear notation. But to express small formulas, that is more than enough.

For anything else, I would still prefer LaTeX-Rendered PNG’s with LaTeX-ALT-Strings. That is, because even a blind person should be able to read it – at least with enough efforts, they can interpret the LaTeX-ALT-Strings. Of course, even for this, MathML would be the better choice. But LaTeX has spread. So well, why not use it for formula notation. Even inside HTML. Its a compromise. Its not perfect, but its good enough.


What „Lispy“ means to me

Sat, 12 Dec 2009 03:48:02 +0000

Well, its quite a long time ago since I had my last real Meta-Lisp-Post, so well, why not having it now, while waiting to get tired to go to bed.

So well, „Lispyness“ is something which is sometimes discussed when talking about solutions for problems. „Lispyness“ is the reason why it is so hard to create widely-accepted and widely-used ffi-bindings, „Lispyness“ is the reason why some software is less efficient than it could be made, and in general, „Lispyness“ can be the reason for quite a lot design decisions. But even though there is a common sense about some aspects of  „Lispyness“, the concept „Lispy“ is not clearly defined.

I am now giving a few things which are essential for a programming language (or concept) to be „Lispy“. They are just my opinions, and they are likely to change in the future – at least partially.

Simple – one thing which is essential. Having a small core which can be easily implemented. And removing boundaries rather than adding new features. An example for such a lisp-feature is the reader-macro technology of common lisp (even though common lisp doesnt really have a small core) – you dont have to change the standard of the language to add new syntax structures to it. The syntax in general – bare S-Expressions – are such a thing. Macros in general are such a feature. In fact, this was one aspect which convinced me of Java (at a time when I didnt know Lisp). Java had about 50 keywords, a simple Reflection API, and a huge library – but these keywords were well-defined, and you could basically do everything whith them, while the library was just a bunch of classes which is a nice thing to have, but is not part of the core of Java. With a simple parser, one could produce an own Java-Interpreter and Compiler – unfortunately, the Java Bytecode is a lot less simple, and most of the Library was already compiled.

Liberal – remove boundaries if there is no need for them. Something I often notice in computer science in general is that boundaries are made to systems, even though they do not really make any sense. They are just there, because nobody cares, but sometimes they can produce problems. For example, it really took a long while until finally someone added DrawingCanvases to webpages – for a rendering engine, such an object is not hard to realize. Same for videos and sound. But instead of just providing it, and maybe extending its API, a whole plugin technology evolved, trying to substitute this lack. Most lisps are liberal in what you can do. Macros let you generate code, but in theory, you can download that code while compiling – which is not nice and shouldnt be done, but can be useful in some certain situations, in which nobody has to find a hack around that problem. The point is to understand the difference between the things one can do and the things one should do.

Dynamic – also essential. You dont build ferroconcrete blocks, you build lumps of mud. You use dynamic structures like lists, trees and structured objects, rather than having some static structure which is hardly bound. Comparing the Apache Web Server with the Hunchentoot Web Server is maybe the best way of expressing this difference: Apache is a static webserver – it has a plugin technology, so it can be extended, at least if you know how to adapt the configuration files and you restart it everytime you change them. Under hunchentoot, you can have a REPL running inside the Lisp-Process running your webserver. You can add and modify sites on the fly, try new settings without restarting the server, and change its behavior while running. Outside of Lisp, this can be found inside JavaScript, for example – objects can simply be extended by new slots, almost nothing is static. I think this is something all the Lisp-Dialects share somehow. Another example is the CLOS – actually, what you do by extending generic functions is building dynamic case-decisions.

Imperative – arguable, but my opinion. I dont understand why Clojure and Scheme try to get rid of the imperative features they have. Imperative languages became discredited in the scientific world, maybe because many imperative languages lack of modern features. Anyway, to me Lisp shows how imperative programming can be done well. In many situations, a functional approach is the most natural approach of doing something. But sometimes, when doing tail-recursive loops, etc., it just gets artificial. Sometimes an imperative algorithm is just more natural than trying to put it into a tail-recursive form. And also, sometimes, prog-go-forms („goto“ – for the C-Programmer) is simply the easiest way of programming something. To quote one of my professors: Programming Languages are not made for the computer, they are made for the humans. And they are also not made for some strict Type-System, they are made to give an easy and convenient way of expressing algorithms. Standard ML also has imperative features. And even Haskell has them – encapsulated inside monads. Monads may solve formal problems, but in the end, to me they are as artificial as forbidding the usage of „goto“-commands – trying not to use something which can cause problems when not used correctly. Lispyness means Imperativeness to me. I think I wouldnt consider a language which is not imperative in some sense as a lisp.

Chaotic – also arguable, but to me also essential. If it is completed, it is not lisp. There is always something that can be made better. There is always some edge which needs an additional hack. There is always a library which doesnt run on some platform. Thats software – but most software tries to hide it. Its – to me – the spirit of lisp to just accept it, and try to get along with it as good as possible. Well, there is a huge standard for Common Lisp – but outside this official standard, few inofficial standards really evolved, and the different implementations of Common Lisp are really behaving different. This can get on ones nerves, but you can always find a simple workaround – and minimize the need of changes to the code you already wrote. When looking at C/C++, you basically have one possibility – namely preprocessing instructions – to influence the compiled code, and adapt it to the compiler you recently use – but often you have to write the same thing twice, and as far as I see, more often than under Common Lisp. For Scheme, there is only a small standard anyway, and the compilers differ – as far as I see – in almost anything besides this standard (and even inside it, sometimes). Portability is very important to me – but it can only be gained when anybody tries to make his own software as portable as possible, as there are situations in which portability is not possible or not even useful. When somebody writes a binding for some elementary Linux-Syscall to make file-access more efficient, of course this can not necessarily be used under Windows, and so, anybody using this binding will have to write a wrapper around it, using normal file-access (or something similar for windows), to run it under windows, but as long as everybody keeps trying to write his code as portable as possible, and in a way such that it can be easily ported if somebody needs it, portability of the software in the end will be only a small issue.

So. Some aspects of lispyness, or what it means to me.


Xml is like violence …

Tue, 27 Oct 2009 20:50:19 +0000

XML is like violence – if it doesn’t solve your problems, you are not using enough of it.“ (via bash.pilgerer.org)