Monday, 30 December 2013

Conversion of PDF (size > A5) to Kindle compatible (readable) format

As I just got a new e-book reader that is to replace my IRex Iliad e100 model (A year 2006 Linux based E-book reader), an awesome reader, that really has no replacement today, but sadly has become to slow to really work with and the battery lasts only hours now... So I switched to Kindle, and with it all the issues it has with reading PDF documents.

The screen is just not ment to read a full size A5 or even bigger A4 PDF sized documents, also has issues with multi column text etc.

Enter calibre! The multi tool of e-book handling! Available on all major OS, can manage your e-book collection, but is it good enough to convert to a format Kindle can read/display comfortably? YMMV, in my case some PDFs are converted OK - depending on their complexity, some require additional steps to make them readable on Kindle itself.

The tool that helps the most here is called k2pdfopt, and can convert your PDF to a smaller sized format with a bit of its own digital wizardry ;) I have to say the results are quite OK, I converted a couple of technical PDFs and they are quite legible on my Kindle now.

There is however one downside. The k2pdfopt conversion creates PDF files that are quite a bit larger than the original. In my case for instance it converted a PDF file od 28MB in size and created output PDF of  276MB in size. Additional conversion to Kindle AZWF format created a file of 365MB which is quite substantial increase from the original 28MB. It is true though, that the first one was quite unreadable and the last one you can read comfortably on Kindle.

The good part about both the tools is that they are free and available on both Linux and Windows OS.

Another tool that has given me good results is also a free tool (only available for Windows sadly) which is called Mobipocket Creator. After you download the installer it asks you which version to install - both are free, but to convert the PDF files you need to install the Publisher edition.

For details on how to use the tools mentioned on this page please check the instructions on each specific page since they all have tutorials on them - or just play around with them, it is quite intuitive to do it anyway.

So good luck converting your own files too!

And a Happy 2014 to you all! 

Saturday, 28 September 2013

Windows server 2012 switching from Core to GUI (rant) and bloody Error: 0x800f0906

I have wasted quite some time figuring out why the hack would the change procedure for switching from Core to GUI not work when I know I have run the exactly same procedure before and it did work. But no, this time all I got was a nice error...
So, you do this (install GUI from the install.wim file with the index of 2 - Server 2012 Standard Full):

Install-WindowsFeature -Name "Server-Gui-Mgmt-Infra" -Restart:$false -source wim:D:\sources\install.wim:2

And receive a generous error of  0x800f0906 with the text saying that you should supply the source...
The same thing happens when you try to switch by using the DISM command (well not exact error but you get an error saying you should try adding the source).

Every possible web site I could find was telling me that all I needed to do was what I have already done - just add the -source to PowerShell commands or /Source to the DISM command and point it to the correct source (Either the SxS directory or a WIM image) for instance like on an excelent page like this one.
Well the issue seems to be that if you have installed Server Core at the beginning and then installed Windows updates (I had about 36 updates that needed to be added), your sources (SxS directory or WIM image file) are not the correct version any more and the commands will not recognize them as sources...

So what to do?

Well you can modify your WIM file by adding the updates to it - depending on how many updates you need it will take you some time to list them (link on how to do it here) and then download them all (link on to how/where to get updates here).
There is one thing you should do which the above page about downloading them does not tell you - you need to copy each individual .msu file to a common directory - normally when you would use the above procedure you will get files saved in their own directories named by the updates themselves, but the DISM /Add-Package command expects for them all to be in the same directory (or you would have to run the DISM command for each and every .msu file individually).

Another way to solve this issue might be to just use the SxS directory from a machine with the same OS Version, already updated to the same level (like another 2012 server with GUI), share that directory over the network and use it as the source for your Core to GUI upgrade (did not try that one but supposedly it should work).

Well probably the easiest way to not fall down this specific hole is to actually install the GUI when installing the system for the first time, and then switch to the Core version without removing the payload. It will use some disk space (compared to the pure Core version), but other than that you should be fine.

Comments?

Sending encrypted (7z AES-256) files to/from your Dropbox

Protecting your important files that you still want to have easily accessible on Dropbox can be done in multiple ways. There are quite some services out there that offer encryption on top of the existing Dropbox service, but most of them require installing additional software, or have some kind of limitations while using them on multiple OS/devices.
However using an open source utility souch as 7-zip enables you to do it a bit more multi OS capable, for no financial fee at all. It does however require you to utilise a set of scripts, which can be used for sending (encrypting) files to Dropbox and decrypting them when you want to access their content.

The article here by Anil Avadhani, describes how to create a set of scripts to utilise the above premisis - sending/encrypting and receiving/decrypting files on your Dropbox. It is focused on Windows OS (windows 7 to be precise), but with little shell scripting knowledge you can do the same on many varieties of GNU/Linux or BSD* OSs, probably also on Macs (I am not an expert on the latter). There are also utillities available for Android (I use ZArchiver) and iPhone that enable you to open files encrypted in such manner, so even if you are trying to access them via your mobile device you should be still able to do it.

What I have done here is changed a little bit of the scripts by Anil Avadhani, since his implementation uses password stored in plaintext inside the script itself, which is not up to my liking.

So I have created two simple scripts, one in PowerShell and one (a lot simpler) in WScript. You can utilise them by simple changing Anil's scripts in the following manner.
Anils original scripts (.bat files) conaint the following lines:
REM Set default password for encryption
SET keyphrase=Enter_Your_Password_Here_Using_Alphabets_And_Digits_Only


just change that to (add REM in front of the SET keyphrase=... line):
REM Set default password for encryption
REM SET keyphrase=Enter_Your_Password_Here_Using_Alphabets_And_Digits_Only


and add the following lines after it (uncommend - remove REM in front of the code you would like to use - WSCript - if you lack PowerShell or leave as it is to use PowerShell):
REM If your computer does not have PowerShell installed or if your execution policy is too restrictive use
REM the following VBS script, (less secure)
REM Read vbs script output and store it into a variable
REM for /f "tokens=*" %%i in ('cscript //nologo %~dp0Read_Pass.vbs') do set keyphrase=%%i
REM for computers with PowerShell use the following line
for /f "tokens=*" %%i in ('powershell -ExecutionPolicy Bypass -File %~dp0Read_Pass.ps1') do set keyphrase=%%i


You will of course need to add the two files to the same directory you have created Anils .bat files in. In my case I just put everything on the Dropbox folder and that way I don't have to recreate scripts on each computer I use them on, I just have to add the shortcuts to them to the "Send to" menu. Anils blog discribes the method on how to do it on Vista/Windows 7. To find the Send To folder on windows 8 just paste the following command into the run dialog:
shell:sendto


Here are the actual code for the PowerShell part (just copy/paste-it into a new file with a .ps1 extension):
## BEGIN PowerShell SCRIPT HERE
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Enter Password"
$objForm.Size = New-Object System.Drawing.Size(280,150)  #the size in px of the window length, height
$objForm.StartPosition = "CenterScreen" #loads the window in the center of the screen

$MaskedTextBox1 = New-Object System.Windows.Forms.MaskedTextBox
$MaskedTextBox1.PasswordChar = '*'
$MaskedTextBox1.Top = 40
$MaskedTextBox1.Left = 20
$objForm.Controls.Add($MaskedTextBox1)

$MaskedTextBox2 = New-Object System.Windows.Forms.MaskedTextBox
$MaskedTextBox2.PasswordChar = '*'
$MaskedTextBox2.Top = 60
$MaskedTextBox2.Left = 20
$objForm.Controls.Add($MaskedTextBox2)

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
{SubmitPWD}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
    {$objForm.Close()}})

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(15,85)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({SubmitPWD})
$objForm.Controls.Add($OKButton)

$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(90,85)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(5,10) 
$objLabel.Size = New-Object System.Drawing.Size(250,30) 
$objLabel.Text = "Please enter the password into both fields and press OK to continue:"
$objForm.Controls.Add($objLabel)

$objForm.Topmost = $True

function SubmitPWD {
if ($MaskedTextBox1.Text -eq $MaskedTextBox2.Text)
{
Write-Host $MaskedTextBox1.Text
$objForm.Close()
} else {
$objLabel.Font = New-Object System.Drawing.Font("Verdana",10)
$objLabel.BackColor = [System.Drawing.Color]::Red
$objLabel.Text = "Password entry mismatch, please reenter passwords:"
$MaskedTextBox1.Text = ""
$MaskedTextBox2.Text = ""
$OKButton.Text = "Retry"
$MaskedTextBox1.Focus()
}
}

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
## END PowerShell SCRIPT HERE

and for the WScript it is a bit simpler, just a couple of lines:
''' BEGIN WScript SCRIPT HERE
' Read_Pass.vbs
' Read password (input string) and echo it to console
' Sadly does not have any kind of text hashing without using external dll files
' you can improve it by using dll from: http://www.westmesatech.com/passdlg/
UserInput = InputBox( "Please enter the password (alphanumeric only): ", "Send to/from 7z AES/Dropbox PWD" )
WScript.Echo UserInput
''' END WScript SCRIPT HERE

And that should be it. If you find it usefull drop me a note. Big thanks to mr. Anil Avadhani for thinking of it and writing the instructions for the whole process in the first place.

Have fun...

Friday, 13 September 2013

Apt-Cache Server and Ubuntu

I have to admit, that I don't know how I lasted this long without an apt-cache server. Everytime I would update the systems I have on one of the locations I would download updates on each of the machines, because I was too impatient to wait for one of them to finish to go to the next one I ran them all simultaneously and of course that made it even worse ;) So now I finally set up the apt-cache server. Setting it up according to the Ubuntu help web page worked quite well, with one minor exception - Import of existing packages with the following command:
sudo /usr/share/apt-cacher/apt-cacher-import.pl -l /var/cache/apt/archives
That created the links in the apt-cacher directory, but afterwards would issue errors in the logs when trying to change the files there and the clients access was denied and they downloaded the files anew from the net.
So just skip that one (I did not try to import the whole CD/DVD image, don't know what that one does, but it might work better since it would copy files and not link them on disk).

So now, first time apt-get update or upgrade command fetches/refreshes the cache, the next machine that does the query gets files cached and downloads everything from the LAN with full speed ;)

For instructions just follow the above link, and you should be fine.

So happy apt-ing ;)

Tuesday, 7 August 2012

Kolesarjenje po Solčavskem, Solčavsko bike trip

A friend and I went for a bit of a bike ride last weekend and a bit of camping too, both worked out great. Here is the trip (as recorded by Sports Tracker app on Android phone). Hope we can have many more of these...

Sunday, 11 March 2012

Compiling custom module from external patch in Ubuntu 11.10 (asm58 sensors patch)


The result of the following commands is that you gain a copy of the default ubuntu kernel packages, with just your patch added (one module and one help file).

  • Install the required packages (linux sources and required programs/files to build the new kernel package).
  • Install the dependencies required for building the kernel
$ apt-get build-dep linux kernel-wedge fakeroot makedumpfile
  • Install the kernel source code
$ apt-get install linux-source
  • Extract the current ubuntu kernel source (into an allready prepared directories - by linux-source package)
$ cd /usr/src/
$ tar -xjf linux-source-x.y.z.tar.bz2
$ cd linux-source-x.y.z
$ wget http://n.neonatus.net/files/asm58-linux-3.0.0.patch
patch -p1 <asm58-linux-3.0.0.patch
  • My builds always failed with the error of not being able to touch a certain file so for that reason I create a directory beforehand so that the build goes through without an error
$ mkdir debian/stamps
  • Prepare to build the source
$ fakeroot debian/rules clean
  • Build the kernel packages
$  AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules binary-generic-pae
You could also use binary - to build binary packages for all flavours - or select your flavour according to your hardware - they are listed in the debian.master/config/$ARCH/ directory.
  • If you are lucky enough to have multiple cores or processors utilize them during build add "DEB_BUILD_OPTIONS=parallel=2" variable in front of the command where 2 is the number of cores/processors you have available to the OS like this:
$ DEB_BUILD_OPTIONS=parallel=2 AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules binary-generic-pae
During the build the kernel configure script will ask you to define the following:
 Asus Mozart-2 (SENSORS_ASM58) [N/m/y/?] (NEW)
Enter the letter m and press enter, which signifies to build the object as module so you can load/unload it at need. 

Now we wait... and wait... (hope you have a fast computer, or you'll) wait some more...
When the compiling finishes you will be left with a couple of new *.deb packages in your /usr/src directory, which you can install with dpkg command.
$ dpkg -i ../linux-headers-3.0.0-16-generic-pae_3.0.0-16.29_i386.deb
$ dpkg -i ../linux-image-3.0.0-16-generic-pae_3.0.0-16.29_i386.deb
Reboot and (if not allready selected) select the new kernel in the grub boot menu.
Log into the newly booted system and verify if all is fine by loading the asm58 module:

$ modprobe asm58
and verify that it is loaded ok:
$ lsmod |grep asm58
asm58                  13122  0
Now you can use the functionality of the newly compiled module by configuring lm-sensors - run sensors-detect and afterwards verify that the command sensors returns values from the sensor.


Good luck, and write a comment if you need help ;)

#Links:

Sunday, 11 December 2011

ASM58 (Asus Mozart-2) Linux 3.0 kernel patch

Hi everyone, long time since last post...

Well I have been doing some autumn cleaning and discovered my home server did not have sensors installed. Upon discovering it has a barely supported chipset, that does get detected by the sensors-detect script, but there is actually no driver included.


The sensor is found on the following Asus mainboards:
  • P4B533-VM
  • P4S333 (in conjunction with another asus chip?)
  • P4S333-VM
  • Terminator P4
I have googled a bit and (All raise hands and give praise to the GNU) discovered that somenoe - namely Michael Loßin has once upon a time written the driver code for linux kernel 2.6.x tree. And he deserves the gratitude for the work he put in. I have only modified his code, so that it compiles cleanely and works on the Linux kernel 3.0 tree.

The patch is available here.

Works like a charm with lm_sensors - here is the output:

asm58-i2c-0-77
Adapter: SiS96x SMBus adapter at 0xe600
in0: +1.79 V
in1: +3.41 V
in2: +3.02 V
in3: +3.12 V
fan1: 2393 RPM
fan2: 1125 RPM
temp1: +42.0°C
temp2: +56.0°C


Please post a comment if you find it usefull

Saturday, 12 March 2011

Depth of Field calculator for Nokia n900

Well I changed my phone a while ago and have recently needed the Depth of field calculator and it was not there. So I wrote one... I have already written a similar one in Python for S60, so the logic remains the same, I just had to redo the GUI part, which uses Python with GTK and Hildon modules.
This is the screenshot of the results window:
Python Depth of Field calculator on Nokia N900

The old post (which contains the apps for Symbian S60 Python is available here

The web site where you can download the files is here

If you find it useful or if you find any bugs, please drop me a note.

Monday, 21 February 2011

Heey greetings from MaStory on my Nokia N900

I discovered a blogger client for maemo, which enables me to add news to my blog and also takes care of adding the media.

I loooove it!
(This is what it looks like editing the entr on the phone)

Sunday, 20 February 2011

Perl script to convert n900 pwsafe export into KeePassX XML

I wanted to have an option of exporting data from pwsafe on my Nokia n900, so I wrote this script. All you have to do is export the file on N900. Transfer it as securely as possible to your computer and run the script

./pwsafe2keepassx_n900.pl < PWsafe_n900_txt_output_file > out_keepassx.xml


The script can be downloaded here.

Drop me a comment if you like it or if you have any comment of how to improve it further.

Tuesday, 28 September 2010

Trip to Singapore, Bali and Gili islands (Lombok)

Hey, long time no write ;)

Had a great thing happen in my life while I was away (from the blog). I got married ;)

And the lovely wife and I went for a nice trip to the aforementioned locations (Singapore, Bali and Gili islands).

I got my hands on a nice tough (2m shock-proof) and waterproof (10m) compact camera - an Olympus μ TOUGH-8010 . And we have taken quite some underwater photos of the Bali islands reef snorkeling. It really is a _verry_ automatic camera (verry little manual options present - apart for preset shooting profiles), but makes quite nice underwater photos.

The rest of the pictures I took with my trusty Olympus E510 with ownusers grip.

Here are the photos from the trip - if you like them do comment:

The weather was quite gloomy, it's not the cameras fault for the lack of light ;)

Tuesday, 6 April 2010

A GE-free future

The European Commission has just allowed genetically engineered crops into Europe, ignoring safety concerns of the public interest. I've just joined a new EU initiative with Greenpeace, Avaaz and Friends of the Earth - calling for a moratorium on GE crops in the EU. With 1 million citizens' signatures, we can make an official legal request to the European Commission. Sign below and let's get to 1 million:

You can read more and sign the petition here: http://www.greenpeace.org/GEpetition

Thanks!

Friday, 19 February 2010

Sleighing / Ir a trineo

This week we had a visitor on our couch and we decided to do some Slovenian winter sport activities and we got a couple of our sleighs and went to a hill near Ljubljana called Kurenšček. Well here you can see the actual photos, the adventures and misadventures ;)

Snow is FUN!

So we took some pictures, I hope you can find some enjoyment in them as we did in sleighing.

B.

Tuesday, 3 March 2009

Dublin is grand!

I was lucky enough to be able and take some time away traveling and this time we went to Dublin, Ireland. We spent four days walking around the "town", visiting tourist and some less touristy attractions. Had a taste of Guinness (actually I hat to taste and re-taste it quite a couple of times).

We also went for a "Free walking tour", which was great and so was our guide Rob.

I must say I like the "town" A LOT!
The weather we had was surprisingly nice and the people were extremely nice to us.
I definitely would recommend to visit it.

Here are some photos I took during the visit:

Monday, 22 December 2008

Sony Ericsson W910i and its "special" ways

Yes, special... (as in special needs).


After fiddling around with many (many, many, ...) options of how to make Album Art work in visualization options, I have figured out it supports ID3 v2.3 (and v2.4 but is faulty - read on) tags that can have embedded pictures in them. It supports only image/jpeg type files. After twiddling for quite some time I converted all the tags to version 2.4.0 and UTF-8 encoded them - BIG MISTAKE, the player displays all the artists, albums and song names incorrectly than. The names seem to be split in 2 or more characters - GO SE ;). So I had to convert them all back.




Here is the final coctail of Id3 tags, that does work and display all fields ok:
  • ID3 version 2.3.0
  • Picture field with image/jpeg type
  • ISO-8859-1 (latin-1) encoding
I use Kid3-qt tag editor for most jobs with tagging my audio files.

Another glitch I noticed was that the device did not correctly disconnect when umounting the phone (as a storage device) from the PC. I use Ubuntu as my desktop and what I needed to do was to use eject (or a variation of it) to get proper disconnect - so this is the concoction I brewed to make it work properly:
in ~/.gnome2/nautilus-scripts/ create a file called Eject with the following contents:

MNTPNT=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |tr -d '\n')
gnome-eject --pseudonym "$MNTPNT"

When right clicking on the device icon on your desktop (the storage device that displays either the internal or the storage card of your W910i phone), navigate to Scripts->Eject, now the device should be ejected correctly and the phone will display the message that the storage session is finished.

Well hopefully someone else will stumble upon this post instead of wasting a weekend arranging their music files and discovering the tags have all gone beserk...

PS: The same procedure should work on older/other SE W(alkman) model phones/players.

Tuesday, 18 November 2008

Ubuntu, VirtualBox and suspend

Hey, I know, long time no write, well, long time no time left...

and allways running around requires me to suspend my laptop a lot, mainly when suspending it with VirtualBox running. Well after resuming the suspend VirtualBox froze most of the times. Killing the program and restarting it did not work, removing the module was impossible, so the only fix was the reboot. Well until smarter thought came ofcourse.

Create an pm script (in Ubuntu go to /etc/pm/sleep.d/) create a newfile named 90virtualbox with the following contents:


#!/bin/sh

USR_RNNG=$(ps aux |grep VirtualBox |grep -v grep |cut -f1 -d' ')
if [ "x$USR_RNNG" != "x" ]; then
if [ $(id -u) -eq 0 ]; then
su $USR_RNNG -c $0
else
for VMS in $(VBoxManage list runningvms |egrep "^[0-9]"); do
VBoxManage controlvm $VMS savestate
done
fi
fi
exit 0

Dont forget to make the script executable (chmod +x 90virtualbox).

Well that works for me, now before doing ACPI suspend the virtualbox machines are suspended nicely and afterwards you have to start them again, but they are up in a heartbeat (well 5 seconds in my case).

You can do that either by running VirtualBox gui and starting them or running:
VBoxManage start UUID|name_of_virtual_machine

Happy virtualizing...

Wednesday, 13 August 2008

Vacation in Spain

...we enjoyed very much. The people were great, the sights were excellent, the water was perfect. The pictures... well those you can judge for yourself.

I would recommend it to anyone, but maybe not necessarily by car and maybe you could take a bit longer (we had 3 weeks to enjoy it) lingering in each of the locations.

Spain 2008

Monday, 30 June 2008

Geocoding photos

A couple of posts ago I mentioned I was awaiting an GPS bluetooth gizmo. Well (to the dissapointment of my wifie) it arived. I spent a couple of evenings coding or should I better say recoding two peaces of software (python s60) progs to work as I want them to work and now I have a nicelly working GPS data reader and uploader from Symbian S60 phone with Python and a storage card (the data taken can come up to a couple of MB in size) and an external GPS bluetooth receiver.

  • The file is saved with a datetime timestamp, and is internally of NMEA 0183 format.
  • After you transfer the file to your computer (either in NMEA or GPX format - I use my uploader script for the second), you can use a peace of software called gpicsync. You could ofcorse use any other software that does the same job, but I am verry satisfied with gpicsync. It also works on Linux, Win, and OS X.
  • The program asks you to enter the path to the coordinates file (NMEA or GPX formated) and to the directory where the pictures (JPEG format) are kept.
  • You can also do some additional tweaking like the UTC time offset, but other than that you are set to go - so click "Synchronise!" and the coordinates are read from the GPS files and the coordinates are writen to the EXIF info in the JPEG files.
  • All you have to do now is to upload your pics to a web service that can make use of the coordinates embedded in the images, Picasa Web Albums, Flickr, etc. or you can view the locations in Google Earth application or another app that can read KML files.
Here is the web album of some geocoded pics.

And the map of the photo locations.

Sunday, 29 June 2008

Depth of Field calculator for your mobile (s60)

I had some time on my hands and tried to spend it usefully (learning Python while actually doing something useful). So I wrote Depth of Field calculator that runs on Python enabled Symbian phones.
Ok so the usefulness part is so so, it is only useful if you are interested in photography and actually try to calculate the DoF instead of just going for it. While most of the time I just go for it, there are times when I can't really tell by the picture on the screen how much of it is actually sharp and where does the blur begin.

Here is what the result looks like on the phone screen:



The files are available here.

And if you want additional information on Depth of Field and formulas used in my prog look here.

If you like it - drop me a note - leave a post on the blog. If you want more/new/different features - please don't hesitate to ask - I'm sure there is more to it than just what I did.

PS: the code is my first try of actually doing some Symbian stuff in Python so please keep the comments objective ;)

Sunday, 8 June 2008

moo/flickr cards

An acquaintance of mine gave me his "business card" that looked kind of funny. It was a bit more narrow, printed on good paper, and had a photo that he took on the back side. Being an amateur photographer I thought well that's kind of cool how could I get my grubby little hands on a couple of those. So he told me you could create them from the pictures you post on flickr.com and the company called moo prints them for you.

So, here is the result of the cards I got (only displaying the picture side). On the front side you can squeeze in 6 lines of text and an optional logo. The text can be read from the picture specs too (aperture, lenses, etc).