Now users can know what happens on the PointRider development and this blog helps me to put my thoughts in a unique place (except the bugtracker of course ;-) I think this is important to share my strategy and some technical issues too. So you can see the work that is done (or will be) and interact with the development sending suggestions or questions.

Sunday, November 1st, 2009 - posted by corto at 21:16

That's never easy : libwmf

A task was planned in the roadmap in order to support and display WMF pictures than can be embedded in PPS files. After a first look, the conclusion was easy : use the only library that is available and open source (LGPL) or write myself the full decoder. This last idea wasn't smelling good, it would take months to support this format from Microsoft. And after all, all I want is to read a WMF buffer from memory and display it in a SDL surface.

The library is installed in Linux distributions but I decided to build it from sources. It is old and hasn't been updated for a while. It is visible in the sources that would deserve a large cleanup. The first problem was : how can I handle the library functions ? Each function is commented in the includes but that's all. Fortunately, I found a webpage that described a example with many comments.

It was not clear how to do to write in memory though. But it finally worked. Except that in that case, there were several options to handle buffers and in any cases, Valgrind shew a big memory leak. So I was forced to use a temporary file to avoid that. I wrote this functiOn and put it into the PointRider sources.

Hum, the pain is not over with a libwmf error telling it was not a WMF file ! Reading at a Microsoft doc, I found that it was compressed with the zlib algorithm ! So I tried but the saved file had a decompression error with the tiny tool zpipe. I compressed a WMF file to see its final hexadecimal aspect and saw that the original WMF file got from the PPS file had a 33 bytes header (thought it was 32 at the first look). Once removed, it worked and decompressed successfully !

Today, I put all that running many times my test suite that raised errors. Now it works ! When PointRider has a WMF image to handle, it allocates a destination buffer to decompress it inside, then call a function to save it in PNG in a temporary file (else, remember the leak) and finally use the usual IMG_Load to get the SDL surface to blit.

All that to read a WMF file in memory and display the given buffer ! The good news is that using 94 PPS files, almost 30 of them were containing WMF files, so you can expect an improved result in the next version.

Yes, problems often happen when programming and let me think there is nothing easy. Not that hard but it's only time consuming and requires methodology and tests.

Saturday, June 27, 2009 - posted by corto at 21:38

After one year and half

Text style is now managed in a more official way than before. It was a hack in PointRider and thanks to the documentation that is available for months now (hey, with errors inside of course !), I can get the master styles and also the styles that are defined to give the differences with the master style. Some comments about these styles :

  • A master style and a text style are almost described in a same way but ... not completely !
  • There are still illogical things like master styles that are after we need it, in the parsing order of the document
  • Without giving boring details here : for a block of text, the style description starts with a word which each bit set means that the concerned property has to be read in a value that follows. But the values are not in the same order than the bits ! I had to write completely this part again !

Even with this great improvement, this is still in an alpha stage. But texts start to use the right police, size, attribute, ...

The color is not understood correctly because the color property is a king of RGBA value : if the A value is equal to 0xfe then it is a RGB value else A is the index in a color scheme (a group of 8 pre-defined colors). But there is a color scheme in each slide container and others at the beginning of the document ! Which one must be used ? I don't know. That's the color shame !

Until now, the default was always the same size, this just had been changed because on my Yellow Dog station, there are few fonts available and only the default font is used !

Sunday, January 27, 2008 - posted by corto at 18:52

Welcome to Hollywood

This is a surprise, even for me : Hollywood 3.0 went out today with new features, such as export projects as executable for Windows or MacOS X. Nice for sharing the Amiga multimedia experience. In the other way, the Windows world sends us crap PowerPoint files. You would want to take these files to enhance or modify them or maybe only for their pictures. With the help and the open mind of Andreas Falkenhahn (the author of Hollywood) I updated massively MeltingPoint, my converter from PPS files to Hollywood projects.

The best is that the work was not too hard because the Hollywood API is very rich ! And the text engine (that computes all the layout) is so powerful that I had nothing to do except giving the text and the max width (shape width). With the improvements about text rendering in the PointRider engine, MeltingPoint now supports paragraph alignement, font attributes, font color and size, ... !

For recent needs, I ported an internal tool called PointExplorer from MorphOS to OS4. It displays the architecture of a PowerPoint file, showing a tree with containers and nodes. It is very helpful, you just have to read hexadecimal fluently ;-) You can read directly values that yu want to compare with things obtained by the program. It is an internal tool but for the curious guys, it looks like that :

Monday, December 31, 2007 - posted by corto at 12:27

The magic of multiple unique ID

Many times I found how the PowerPoint format is far too complicated. I've just discovered a proof of nonsense. In a PPS file, there is an OLE section called "Pictures" that stores all images, with a 25-byte long header and raw data for each one. Another section contains the tree of containers and atoms with some of them referencing images in the picture bank. This is the theorical case. Sometimes, a image was displayed instead of another one because it was not found correctly in the bank : in rare cases, the header can be 41-byte long with a second "unique ID" that is to compare too !

Once it was fixed, I ran a new test session and still had some asserts with images not found in the bank. After the dual UID issue, there was still files which picture UID did not match. The reason is ... they are different ! It is not a bug in PointRider ! So I added a new workaround based on the position (fo_delay) of the image in the picture bank, if not identified by its UID. Why use an UID (or even two !) if they are sometimes unused !?

As a problem never comes alone, a file I used for these tests doesn't hang anymore but has too many slides. In fact, it has 11 master slides !! Hopefully it was easy to fix and the file is now well displayed.

Thanks to the testsuite, some failing files have just been isolated for bug fixing. Features are frozen and so we enter the final step before the next public release.

Yesterday I finished a small GUI using MUI, like the one that Ami603 made with ReAction. This will allow to use it on MorphOS too and it could be integrated in the final executable. Just have a look :

Saturday, December 8, 2007 - posted by corto at 16:46

Inheritage of objects from master slide

It may seem to be a minor information but some whole slides are based on common objects put in the master slide. If this feature is not supported, the slides are quite desert ! Inherited objects from master give a look that is much more professional.

I consider all major features are now there. So why PointRider is still not available ? I have to fix some transparency issues, to check text properties, ... and of course to fix many bugs and asserts coming from side effects implementing the new features.

From 2 years, you know : a huge test session will be made but hopefully all tools are working well, with scripts to display PPS files automatically and recursively in directories. And I don't forget I have to update the converter to Hollywood projects. And maybe a MUI launcher.

Have a nice Christmas time, the gift will come a bit later !

Tuesday, October 2, 2007 - posted by corto at 22:43

Paragraph attributes

The Alchimie show will take place in one month and I would like to show something good ! So I worked again on PointRider after a quiet summer (talking about programming). I wrote a new algorithm (bilinear) for image resizing what improve the quality a lot ! I will post comparative images here later.

Font management has changed : for each font name in the font collection, I try to get the real font in the system, else I use the default font. The problem was the font name is not the font file name ! I don't use the font family at the moment.

Text display is enhanced too because now paragraph attributes are supported, information is extracted from the awful atoms named StyleTextPropAtom. Not documented except in open source projects (even if it is not always the truth). Attributes mean font attributes (bold, underlined, italic) but also font size, font color, paragraph alignement. At the moment, they are applied to the whole paragraphes. I still have to get more informatio from the master slide.

Some bugs are fixed too, about transparency (alpha channel in SDL surfaces) and other things (rewritten the text layout engine that now uses only Unicode text internally), and I added the support of shaded area often used in backgrounds (that are now well supported : image, single color, shaded colors, image tiles, ...).

Monday, June 16, 2007 - posted by corto at 20:11

Get advantages of stats

After the last release, almost 4 weeks ago, PointRider has been downloaded 650 times ! Thank you very for using it and I still hope you enjoy ! Send me your PPS files if you want or if they are not displayed correctly. Since this release, some work has been done to prepare the future of the program, this is why I differenciate the main part (arguments, ...) and the display part (currently only using SDL). Thanks to Andreas, I received Hollywood 2.5 and I plan to create a 68k version of MeltingPoint : these both tools will make a nice PPS viewer !

Other recent work is about stats that will help to focus on priorities, talking about optimization. In few words, total time repartition about images during a file display is :

  • extraction : 16% (from 14 to 18)
  • decoding : 6 % (from 4 to 9)
  • resizing : 15% (from 8 to 17, variable)
  • blitting : 20% (from 19 to 21, constant)

The total of measured time is 57% of the total time. this means that of sources of time consumption must be found !

  • Extraction : A internal buffer is already use to extract images from the document
  • Decoding : Cannot be changed because managed by SDL
  • Resizing : Improve speed, some work needs to be done on this topic to obtain a better quality
  • Blitting : Try to use the main surface in 24 bit instead of using desktop depth (14% better on blitting doing that), try to use hardware surfaces (knowing that this feature is not implemented equally is each system), ...

Maybe a good speedup would be to resize in the main surface depth.

Monday, May 21, 2007 - posted by corto at 19:40

Release version 0.30

After a long week-end out, visiting Paris and the country, it is time to package and release the version 0.30 with its new features :

  • Background display : colours and pictures (full or tiled)
  • Better rendering : images not displayed,
  • Timer for automatic slide
  • Many memory leaks fixed
  • More internal debugging features and a Ruby script to run a whole group of files in debug mode

I feel very confident about further great improvements because the test framework is strong, the code is cleaner ... and the motivation is still there ! Note that MeltingPoint is not updated but it will in the next release for which I already made a list of features.

Sunday, May 12, 2007 - posted by corto at 12:03

Valgrind is the best !

A good reason why I develop PointRider on several OS is the benefit of tools like Valgrind. First it finds memory leaks and even with good programming rules, memory problems are there. Always. Even SDL and X have a many leaks themselves ! So I spent time to fix memory leaks since yesterday. This morning, one of them was due to SDL_CreateSurfaceFrom that takes a memory buffer but does not free it when the surface is destroyed (explained in the doc, this is the normal behaviour). The problem was I lost this pointer reference so I decided to do it with SDL_CreateSurface, creating a surface, copying the buffer and releasing it.

For a long time I planned to optimize the memory consumption avoiding to allocate and free memory each time an image was extracted from the PPS file. I did it and it was fast to change. But then I asked myself a big question : how to know if this really gives a benefit on memory consumption ? I looked at Valgrind again. It has a built-in tool called "massif" that is specialized on the heap, where the memory is allocated. And this is the result (click on the image to see it in full size) :

    What a big surprise ! This graphic shows several interesting things :
  • the maximum amount of used memory is 4 MB (a peak at the beginning)
  • there is a 3 MB peak per slide so it is not difficult to count the number of slides ... 26 here
  • two slides have two peaks on the same trunk
  • SDL_CreateSurface uses 2.5 MB (size of a 1024x768x24 image) and PointRider have a background of 0.5 MB

Wednesday, May 9, 2007 - posted by corto at 21:28

Image and text

So I updated OS4, I moved to a new appartement with a computing room :) The update of PointRider was planned in February but it will come in May because I did nothing on PointRider since Christmas time. But I started again few days ago !! I am a tester in my job and this is why I understand how it is important even for personal projects. I ran again the loading and display of more than 600 files and the previous improvements introduced bugs that lead to some crashes. But the tools are here for that and I fixed quickly these bad issues.

About features, some images were not displayed and I found why, yesterday ! The type of some image shapes was overwritten by text type because some shapes are images with text on them.

Thanks to the language Ruby I ported to OS4 months ago, it is now possible to run the test script on OS4 too ! This is why I plan other tests before a new release soon. No more features for this release.

Wednesday, January 3, 2007 - posted by corto at 22:59

Watch the background

Christmas time gave me holidays at home. So I started up again the PointRider development (last changes were at the Alchimie show at the end of October).

I mainly worked on backgrounds and I found that they can be inherited from the master slide (and how it was organized). First colored background were supported (without shading) but the colour was not applied on all backgrounds and I finally found the bit that tells to use the master slide's background.

The same was applied with images but some parsing and rendering functions were not written correctly to manage backgrounds cleanly. So I wrote again this part and it was the opportunity to support tiled background !

I was disapointed with the text management because some texts were not displayed or in the wrong slide. I omit all the internal details with PersistTextAtom records but I obtain the expected behaviour now ! (maybe future tests will reveal that I have to work on them again !!)

I also wasted time with a property stored in an array that must be NULL if unused but here was initialized with an invalid descriptor to ignore !

Some PPS files have a master slide that is used to store common things. Some particular files seem to have 2 master slides and a field in the document structure tells which is the first slide to display. Of course, this value is always set to 1 ... but I found a work-around to bypass this problem.

The next update will come after fresh update of OS4 and I would like to used shared libraries for SDL.

Sunday, September 24, 2006 - posted by corto at 19:23 PM

beta2 is out !

That's always difficult to know is a new version is really easy after some months of work. But I am sure this one is much more stable and better organized. The roadmap helps to do things in a good order and my knowledge about software testing is far better now, due to my real job. I applied some methods and created some special tools and scripts to test all these files.

A good suprise is certainly a new tool incorporated into the PointRider package : MeltingPoint will convert your PPS files into Hollywood projects. This is possible thanks to Andreas Falkenhan (the author of Hollywood) who kindly offers me a copy of this great program. In the future, MeltingPoint could support other formats.

Enjoy this new beta ! The next version will have improvements (background, fonts, ...) but I will also try to make PointRider more Amiga oriented.

Sunday, September 3, 2006 - posted by corto at 3:04 PM

beta2 internally validated

A major step had been made since the last message ! First, to give numbers : now there are only 4 files that crash for 650 about tested. This account is easy to obtain because the strategy about tests has been improved (test management is now my job in real life).

I've just reorganized my directories to isolate files that have a special features : image in background, file with transitions, embedded Excel objects, no slides found, files with unsupported image formats inside, files containing WordArt text,... So, it is possible now to know which files I have to use when I want to implement a new feature.

I recently had a revelation with Ruby, a clean oriented-object language. It is perfect for scripting and in my case, I started to use it for test purpose. Now I can choose a directory than is recursively parsed and launched each file. With new debug functions in PointRider, an HTML log is created to get information neccesary to quickly see if there is a problem and to compare files. More : after a PPS file is displayed, PointRider asks me to enter a comment that is added in the log. For each file, I can easily write some visual feedbacks or ideas to implement later.

This debug mode with logs has been very useful but we can't always write out own tools. This is why it is good to use good existing tools like Valgrind that helps to understand memory management (consumption, leaks, bad operations, ...). Now I just have to test all that on our Amiga systems and the second beta will be ready soon. A simple converter of PPS files into Hollywood projects will be added too.

Sometimes images are not displayed correctly : always the same image used, black slides (could be due to WordArt text), images that are not on the right slide, ... But honnestly, PointRider works great with most of the files ! It is now better (big file support, more stable, fixed text display, ...) and I am sure beta 1 users will only find benefits.

Sunday, August 18, 2006 - posted by corto at 1:15 PM

New tool for better quality

The delay was long again (4 months) before reading news here. I started a new job at the beginning of may and it takes time but I learn a lot. I work as a developer but I write tests to improve quality and performance of our product. All that haven given ideas to me for my personal projects like PointRider.

Last year, I already wrote a graphical tool to display the tree of chunks stored in a PPS file. This morning, I wrote the core of a new tool (called internally PointInfo) that is able to parse a directory recursively and to display information about the files.

First, I can find the files that are not supported by the PointRider engine and make it crashing. So, quickly, I've tested all the files I had on my hard disk : 47 files crashed for a amount of 656. This means that there is still a risk with 7% of the PPS files. This is too much and now that the files are isolated, I can take a direction for the effort I have to spend before the next (and last) beta release.

Second, options are planned to generate a formatted file (in HTML or XML) to obtain a classified list of values of interest for each file. This will give a clear view helping to find differences between files (versions, image formats, font list, ...).

Sunday, April 16, 2006 - posted by corto at 7:04 PM

Supported OS in the future

I put an eye into the OLE module and it is greatly improving by supporting the big files : you won't have the "asserion failed : add_bbd < 0" anymore. But I will come again on the subject later.

At the moment, a question remains in my mind. Which OS will I support for PointRider ? And the answer is not neutral.

My main goal is to focus on our new PPC systems (OS4 and MorphOS) : I would like to see a massive migration from 68k to PPC. Users don't have to be afraid, there are only advantages using MorphOS or OS4 instead of AmigaOS 3.x : same feeling and reactivity with higher speed, new software (mplayer, Blender, ...) and other that is more usable (APDF, PageStream, games, etc.), ... and as a developer, I can say that the SDK are really easy to install !

In another hand, I want all Amiga users to stay in the community, so it's important to give programs like PointRider. The problems are the CPU consumption, graphical requirements, missing libs (SDL_ttf in fact), ... And the various configurations (with hardware and patchs) are sometimes difficult to support. So I think I will build a specific 68k version but it maybe won't be fast and the near priority is to improve the quality of the supported features, even if PointRider is not so efficient.

After the PointRider release, I received several emails from AROS users asking for an AROS version. This system is nice and could be useful but I wouldn't like to see the community shared. So I am not completely convinced but thanks to an easy installation thanks to qemu, I think I will try to compile PointRider in its beta2 version.

Last, I want to say : please, if you like the Amiga, think about buying a PPC machine to continue the dream with a stronger community.

Sunday, April 02, 2006 - posted by corto at 7:10 PM

What a day !

After two weeks out of my home, it was nice to work again on PointRider with the Pegasos and the AmigaOne. The public release was planned and there was no special problem to do it (just some wasted time with the buggy ReallocVec function of OS4). That will be good enough for a beta version and it seems that people were waiting for it since last Christmas. My gift is late but it is here now ! Even with the doubt given by this fist day of april :)

PointRider is just out and there are already some comments that will lead to improvements. The first things I'm going to add to the bugtracker are :

  • some file don't work :
    3.RAM Disk:> pointrider alan_16.pps
    3.RAM Disk:> pointrider Articia_I_atum.pps
    [pointrider] MOle.c:529: failed assertion "add_bbdlist < 0".
    Abnormal program termination
    ***Command 'pointrider' returned with unfreed signals 0C000000!
  • the PPS files are keeped locked (fixed is the available archive)
  • the end-of-line char is not properly displayed (on Amiga/MorphOS)
  • the chosen size for the font is too big
  • some libpng warnings ...

I think there will be several beta versions before the stable and improved version. I have still some important internals to understand, so that's not the moment to focus on the options or the timers ... The OLE module have to be better and should be used without any problem with other file formats with OLE encapsulation (Word, Excel, ...).

Monday, March 27, 2006

One more week

I announced that PointRider will be released at the beginning of april and even if I don't think it will be next saturday (first day of april), it could be ... sunday ! The reason is I am only at home during week-ends and it was not even the case this week-end. But hopefully I can improve PointRider thanks to my laptop.

And the last week, with tests, I discovered that all my PPS file have the same version : PowerPoint 97. So I think this is the only one that is used for 10 years. Again in this kind of format, the version is repeated at several places with different values to be intepreed. And do you know that PPS and PPT have the same format : only the extension differs to know if the file has to be shown or edited ! So, PointRider may be able to show all your files.

The most important thing I've done is to write some tools to extract information of the files, about the PowerPoint content or the OLE properties (I improved the OLE part too and this will be useful for a future Word support). It is nice to compare files and understand the differences about how they are managed. For example, some images are not displayed and with that tools, I know that they are found and even extracted. So this is problem matching the image reference in the slide and the way it is organized in the stock of pictures. A new clue to work on.

Saturday, March 18, 2006 - posted by corto at 12:34 PM

Back from my first week in Lyon

I've tested almost 100 PPS files and I can say that the result is correct for 90% of them. For some files the display is really bad and even worst it can crash in rare cases but it may depends on the version, what I have to check.

Some things about the text display are fixed now but I have to do more about font management even if that's not too annoying. I have to find where is the colour of the background and why some images are not displayed ...

The difficult part now is to decide what I want to include in the first public release. I don't want you to be disappointed with a vaporware. This is why for this public release you will have to wait for ... 2 more weeks ! (promised)

Sunday, March 12, 2006 - posted by corto at 5:39 PM

A new job !

In the last weeks I was very busy and it was not with bugs or new features. I had several offers for a new job and it was difficult to synchronize all the events around that. Thatís done now and it was cool to spend 4 days skiing after this decision. I start tomorrow and I wonít be at home for 2 months, except week-ends. But I will take my laptop with me and I think programming will be my main occupation. So you can expect good news about PointRider soon.

Sunday, February 19, 2006 - posted by corto at 8:06 PM

More code, less bugs

This is a productive week-end for PointRider with 2 big improvements needed by the beta version.

As I often use the same files to test PointRider, I decided yesterday to use more files to have an overview of the general stability and compatibility. The results gave 20% of crashing files. Does it come from a different version ? Not at all ! The crashy bug is fixed : it was a negative offset of some shapes instead of a null value ! What a crap format !

The text is no more written out of the text shapes. This afternoon was spent finding a good text layout. It cuts the sentences between words and supports the curious char named "vertical tab" (in fact a simple line feed).

About text, in a same file, you have to know that PowerPoint can use ASCII and Unicode for the contained strings. Unicode strings are now displayed correctly thanks to SDL_ttf !

Wednesday, February 15, 2006 - Posted by corto at 11:14 PM

Olympic time : PointRider in the (half) pipe

Watching the Olympic Winter Games is time consuming so I turned off the TV this afternoon. But instead of looking for a new job, I started again to play with PointRider with a new eye, thanks to the bugs and features I registered in the bugtracker some weeks ago.

I fixed a tiny bug that trashed with MorphOS and OS4. This bug was disabled at the last moment before showing PointRider at the Alchimie show ! He he ... ;-)

I started to clean the font management but the most difficult about fonts will be to know which font match to which text shape. Not very clear at the moment. Unknown in fact !

The display will come with its set of questions too but I've just added the swap between the window mode and the fullscren mode. It uses the 'f' key.

Tuesday, February 14, 2006 - Posted by Corto at 00:00 AM

Welcome on my new blog

This is my first blog and I want to use it to talk about my developments on Amiga computers. I recently uploaded some things on Aminet : a MUI tutorial (with lessions and 7 progressive examples), AmiReplace and a document on how to write portable code (for AmigaOS 3 & 4, MorphOS, AROS).

Now with a new and free mind, I can restart to spend time on my 2 main projects :

SongPlayer is a well known multi-format audio player. I've just registered almost 60 wishes and bugs in a bugtracking database (using Mantis). This is important to manage a project correctly and to draw a roadmap.

PointRider was shown in october to the Alchimie show. This is a PowerPoint viewer that I would like to offer to the Amiga operating systems and other almost unknown ones. Linux is able to show PowerPoint slides but it requires to run OpenOffice, the biggest open office project.