<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3282763402665844292</id><updated>2012-02-10T02:44:22.693+01:00</updated><category term='future'/><category term='FlightCrew'/><category term='Sigil'/><category term='development'/><title type='text'>Making epub happen</title><subtitle type='html'>The development blog of Sigil, the epub editor</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5161958020305259458</id><published>2012-02-10T02:43:00.002+01:00</published><updated>2012-02-10T02:44:22.701+01:00</updated><title type='text'>Sigil 0.5.2 Released</title><content type='html'>&lt;p&gt;0.5.2 is now available for &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;download&lt;/a&gt;! This is only a bug fix release but it fixes the "add existing file" feature that broke with 0.5.1.&lt;/p&gt;&lt;p&gt;There is no Linux x64 build at this time because my build machine died while building this package. I'll be looking into options to replace this machine but Linux x64 users will have to make due with the x86 Linux release for the time being. I've been having problems with my build machine (since the 0.5.0 release) but this time it looks like it's might be beyond reviving.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5161958020305259458?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5161958020305259458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2012/02/0.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5161958020305259458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5161958020305259458'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2012/02/0.html' title='Sigil 0.5.2 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7031842242311852438</id><published>2012-02-05T22:11:00.000+01:00</published><updated>2012-02-05T22:12:28.682+01:00</updated><title type='text'>Sigil 0.5.1 Released</title><content type='html'>&lt;p&gt;This is primarily a maintenance release with a large number of fixes. Find and replace (F&amp;amp;R), GUI tweaks and  spell check were the major focus. Highlights include: F&amp;amp;R now supports wrapping and the ability to search within selected files. The GUI now (hopefully) remembers cursor position when switching views. en_GB dictionary was added, all dictionaires were updated and hyphenation dictionaries are now included by default. For a full list of all changes for this release please see the &lt;a href="http://code.google.com/p/sigil/source/browse/ChangeLog.txt?name=0.5.1"&gt;Changelog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This release wouldn't have come off as smoothly, quickly or with as many fixes and new features without the help of meme from MobileRead. Thank you for the time and effort you put into making this release possible.&lt;/p&gt;&lt;p&gt;Starting with this release I want to start making smaller releases with less time between them. I plan to target approximately 4 weeks between releases give or take two weeks. I believe this will make development more fluid and allow for greater user input.&lt;/p&gt;&lt;p&gt;My short term plans for upcoming releases are (not all of these will be in the next release):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Make book view editing more robust.&lt;/li&gt;&lt;li&gt;Firebug style element inspection.&lt;/li&gt;&lt;li&gt;Make code view editing more robust.&lt;/li&gt;&lt;li&gt;Plugin interface.&lt;/li&gt;&lt;li&gt;Move auto cleaning and restructuring into plugins.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;My long term plans are EPUB 3. This is not a short term goal but I plan / want to make this a reality by the end of this year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7031842242311852438?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7031842242311852438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2012/02/sigil-051-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7031842242311852438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7031842242311852438'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2012/02/sigil-051-released.html' title='Sigil 0.5.1 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6760860241222981703</id><published>2012-01-29T22:31:00.002+01:00</published><updated>2012-01-29T22:34:32.621+01:00</updated><title type='text'>How Find Searches in Sigil 0.5.0</title><content type='html'>&lt;p&gt;There have been some confusion about how find works in, the now released, 0.5.0. The confusion stems from the the 0.4.90x betas. One method was used in the early betas and it was changed later on. This all stems from the regular expression engine being changed from QRegExp to PCRE. The issue at hand is how and when the cursor is taken info account when running a find. In this regard 0.5.0 works no different than 0.4.2.&lt;/p&gt;When doing a count the cursor is ignored. The entire document is taken into account from start to end.

&lt;div&gt;When doing a find next the find starts from the cursor location. Everything before the cursor is ignored and not taken into account. This can, in some cases when using a regular expression, lead to the number of matches being different from the total returned by count. Again, this can only happen when using a regular expression. The reason is a regular expression can have matches that match the expression within a single match. For example:

&lt;b&gt;Expression:&lt;/b&gt;
&lt;pre lang="html4strict" escaped="true"&gt;&amp;lt;div&amp;gt;.+&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;Text:&lt;/b&gt;&lt;/p&gt;&lt;pre lang="html4strict" escaped="true"&gt;&amp;lt;div&amp;gt;blah &amp;lt;div&amp;gt; blah &amp;lt;/div&amp;gt; blah &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;The expression will match the text from beginning to end. If you put the cursor to the right of the first &amp;lt; then the math will start from the second div and go to the end. This is because regular expressions can match a variable amount of text. Unlike a fixed expression like "abc" which will always match "abc".&lt;/p&gt;&lt;p&gt;Finding backwards will match from the start of the document up until the cursor position. This is done by finding all matches from the start to the cursor then using the last match. Again, in the case of regular expressions, a backward find can match different text than a forward find.&lt;/p&gt;&lt;p&gt;Find forward and backward find from the cursor so its position in the document taken into account. In the majority of instances find backward, forward and count will all match the same exact text. However, it is possible, due to their nature, to construct a regular expression that can match differently segments of text within a segment of text depending on where the cursor is located.&lt;/p&gt;&lt;p&gt;The above also applies to replace as a find is run to find the text to replace.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6760860241222981703?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6760860241222981703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2012/01/how-find-searches-in-sigil-050.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6760860241222981703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6760860241222981703'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2012/01/how-find-searches-in-sigil-050.html' title='How Find Searches in Sigil 0.5.0'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4622881103707855197</id><published>2012-01-28T01:18:00.002+01:00</published><updated>2012-01-29T22:35:17.051+01:00</updated><title type='text'>Consolidation of Sigil Help Forums</title><content type='html'>&lt;p&gt;For some time now Sigil has had two different help forums. One at &lt;a href="http://mobileread.com/"&gt;MobileRead&lt;/a&gt; and the other as a Google Group. This has caused quite a bit of confusion because people don't know the best place to go for help.&lt;/p&gt;&lt;p&gt;I've decided to close (it's already done so don't ask me to reconsider) the Google Group. This was an easy decision because 1) MobileRead's sub forum gets more traffic, 2) I use MobileRead and I don't use the Google Gorup, 3) Most posts on the Google Group were unanswered making it a poor place to go for help.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4622881103707855197?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4622881103707855197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2012/01/for-some-time-now-sigil-has-had-two.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4622881103707855197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4622881103707855197'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2012/01/for-some-time-now-sigil-has-had-two.html' title='Consolidation of Sigil Help Forums'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-9013385361194443151</id><published>2012-01-21T18:17:00.001+01:00</published><updated>2012-01-21T18:17:42.039+01:00</updated><title type='text'>Sigil 0.5.0 Released</title><content type='html'>&lt;p&gt;I'm happy to announce the release of Sigil version &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;0.5.0&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;0.5.0 comes with a number of bug fixes and some major new features:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Inline spell check in code view&lt;/li&gt;
&lt;li&gt;Support for PCRE in search and replace&lt;/li&gt;
&lt;li&gt;Translations into 15 languages&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please see the &lt;a href="http://code.google.com/p/sigil/source/browse/ChangeLog.txt?name=0.5.0"&gt;changelog&lt;/a&gt; for a full list of changes in this release.&lt;/p&gt;&lt;p&gt;One smaller change is I've decided to drop OpenCandy. Surprisingly I've only encountered one complaint about OpenCandy and it was directed at bundling offers for other software inside of an installer not at OpenCandy in particular. I want to make it clear that this change is not due to user request or opposition to OpenCandy but my own decision.&lt;/p&gt;&lt;p&gt;While I respect what OpenCandy the company is doing and I don't see anything wrong with the offerings they provide I don't think their system is right for Sigil. The big thing I don't like is OpenCandy's installer components are distributed as closed source binary modules. While my understanding is this can be used without running afoul of the GPL I fully believe it goes against the spirit of the GPL and open source in general.&lt;/p&gt;&lt;p&gt;Thank you to everyone who provided feedback and helped during the beta process.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-9013385361194443151?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/9013385361194443151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2012/01/sigil-050-released.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/9013385361194443151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/9013385361194443151'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2012/01/sigil-050-released.html' title='Sigil 0.5.0 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6165965211230577047</id><published>2011-12-13T03:55:00.002+01:00</published><updated>2011-12-13T04:02:35.224+01:00</updated><title type='text'>0.4.902 (0.5 beta) Avaliable</title><content type='html'>&lt;p&gt;The first beta for 0.5 (0.4.902) is now &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt; available&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;There are a few new features I'm most interested in getting feedback on. Inline spell check, translations, and the new PCRE engine. Of course crashes and major issues will be looked into and hopefully fixed before the final release.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6165965211230577047?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6165965211230577047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/12/04902-05-beta-avaliable.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6165965211230577047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6165965211230577047'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/12/04902-05-beta-avaliable.html' title='0.4.902 (0.5 beta) Avaliable'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8256046232719745986</id><published>2011-11-09T01:21:00.001+01:00</published><updated>2011-11-09T01:26:53.183+01:00</updated><title type='text'>Sigil and Data Loss Bugs</title><content type='html'>&lt;p&gt;The majority of the data loss issues have been mitigated at this point. With a work flow of open, save as after major changes and saving after minor ones, catastrophic data loss can be worked around to the point that Sigil can and is being used on a day to day basis.&lt;/p&gt;

&lt;p&gt;That said, there are issues with data loss in Sigil and they are a priority. I'm currently finishing up the 0.5 release (I do not have a set release date at this point) which is mainly a feature release and only addresses some of the the data loss issue. For example you can still have everything in an entire XHTML document removed by putting a malformed XML header in the document.&lt;/p&gt;

&lt;p&gt;The issue has three components that require major work to fix. I hope to have it all completed for the 0.6 release but it's going to be some time it's ready.&lt;/p&gt;

&lt;p&gt;The issues are:&lt;/p&gt;

&lt;p&gt;1) Sigil currently uses Tidy to clean all XHTML to ensure it conforms (as much as it can) to the XHTML spec. I have seen Tidy remove tags it thinks are empty when they influence how the document is rendered. I want to keep Tidy as part of Sigil but I believe it should only be run when the user asks for it and any changes it makes the user should be able to revert.&lt;/p&gt;

&lt;p&gt;2) An intermediate data store is used that requires valid XML is used. This store shuffles data between the book and code view. Due to this store requiring valid XML (valid XHTML conforms) there is the potential for data loss if it has to auto correct the XHTML. If you are in code view and have malformed structural issues with the XHTML and move out of it there is a warning dialog. This only appears when you are working on one file at a time. If you are replacing across multiple files auto correction is used and this can lead to data loss. This data store needs to be replaced with one that does not require valid XML.&lt;/p&gt;

&lt;p&gt;3) Putting malformed content into the book view will cause the book view to try to correct it. Again auto correction can lead to data loss. This is mitigated by the malformed error dialog but many users just disable it and find that sections of their document are missing after looking at it in book view. Also, the book view is a WYSIWYG tool so it does make structural changes to the document and these may or may not be what the user expects. As with Tidy changes made by the book view need to be able to be reverted. I am thinking about ways to make the fact that the book view more obvious that it makes changes to the document. This way the user is aware that they need to use undo (doesn't currently work for book view changes) to revert the changes if they don't like them. I'm thinking about using a preview mode by default that doesn't make any changes and an edit mode to make this distinction obvious.&lt;/p&gt;

&lt;p&gt;The above issues can be fixed but they are not quick or easy changes. I plan on making them for the 0.6 release as part of the changes necessary to support EPUB 3. However, there is the possibility that they will slip to 0.7 due to how large they are. Unfortunately, all I can say right now is I'm aware of the issue, I know what the cause is, and I have an idea of how to correct it but it's not going to happen tomorrow.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8256046232719745986?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8256046232719745986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/11/sigil-and-data-loss-bugs.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8256046232719745986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8256046232719745986'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/11/sigil-and-data-loss-bugs.html' title='Sigil and Data Loss Bugs'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8338526087199533540</id><published>2011-10-09T00:37:00.001+02:00</published><updated>2011-10-09T00:37:36.450+02:00</updated><title type='text'>Sigil Now Supports Translations</title><content type='html'>&lt;div&gt;One of the the new features that has been implemented for 0.5 (release date yet to be determined) is support for Translations. For Sigil's first supported language Grzegorz Wolszczak has provided a Polish translation. Currently translations are loaded based upon the current system locale. There no support for choosing the language via preferences. This may come at a later time but for now I believe that using the system locale will handle the majority of user needs.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;I've put together a wiki page with &lt;a href="http://code.google.com/p/sigil/wiki/Translating"&gt;instructions&lt;/a&gt; for creating translations. This first revision is a bit basic but as people have questions I plan to update it to make it more robust.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8338526087199533540?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8338526087199533540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/10/sigil-now-supports-translations.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8338526087199533540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8338526087199533540'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/10/sigil-now-supports-translations.html' title='Sigil Now Supports Translations'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7521427549178573785</id><published>2011-10-01T20:04:00.004+02:00</published><updated>2011-10-01T21:33:36.126+02:00</updated><title type='text'>Sigil Keyboard Shotcuts</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;Thanks to &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "&gt;Grzegorz Wolszczak&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt; Sigil now (will be part of the 0.5 release) allows users to change keyboard shortcuts for many actions. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "&gt;Grzegorz&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt; has been helping out a lot and helped to introduce a preferences dialog and provided user configurable keyboard shortcuts.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;
&lt;/span&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-kYw_MNTKRBY/TodWSiZjibI/AAAAAAAAAA4/AA-GdA_9wks/s1600/Screen%2BShot%2B2011-10-01%2Bat%2B1.57.45%2BPM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 249px;" src="http://3.bp.blogspot.com/-kYw_MNTKRBY/TodWSiZjibI/AAAAAAAAAA4/AA-GdA_9wks/s320/Screen%2BShot%2B2011-10-01%2Bat%2B1.57.45%2BPM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5658586333285943730" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;p style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7521427549178573785?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7521427549178573785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/10/sigil-keyboard-shotcuts.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7521427549178573785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7521427549178573785'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/10/sigil-keyboard-shotcuts.html' title='Sigil Keyboard Shotcuts'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-kYw_MNTKRBY/TodWSiZjibI/AAAAAAAAAA4/AA-GdA_9wks/s72-c/Screen%2BShot%2B2011-10-01%2Bat%2B1.57.45%2BPM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4805163169229637904</id><published>2011-09-04T15:15:00.001+02:00</published><updated>2011-09-04T15:15:34.541+02:00</updated><title type='text'>Sigil's Future Direction (Post 0.4.x)</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;&lt;h2 style="font-size: 1.5em; "&gt;Introduction&lt;/h2&gt;&lt;p&gt;With 0.4 my focus has been on getting the existing features in a stable state. I foresee 0.4 being around for quite some time as development shifts to accommodate new features. I wanted to be sure a relatively bug free version is available for people to use. If data loss is a constant then there wouldn't be any point in using Sigil. Now that 0.4 is done it's time to start working on what's next.&lt;/p&gt;&lt;p&gt;Just what is next? For the time being I've marked a number of issues on the &lt;a href="http://code.google.com/p/sigil/issues/list" href="http://code.google.com/p/sigil/issues/list"&gt;issue tracker&lt;/a&gt; as Milestone-0.5. My plan is to have 0.5 just implement the most commonly requested and most interesting features. 0.5 has no vision and is just a stop gap while I familiarize myself with Sigi's code base. 0.5 is my short term plan. It's not grand but it's functional and sufficient.&lt;/p&gt;&lt;p&gt;Recently I &lt;a href="http://john.nachtimwald.com/2011/08/31/sigil-user-study/" href="http://john.nachtimwald.com/2011/08/31/sigil-user-study/"&gt;posted&lt;/a&gt; the conclusion of my Sigil user study. The findings are Sigil is most used and most useful to power users and small professional ebook creating houses. Also, the overlap between the two is significant. Thus I want to target these two group and make Sigil even more useful for them. Keep this in mind because these two groups are who is going to shape my views of where I want to take Sigil.&lt;/p&gt;&lt;p&gt;Please realize that not everything I'm going to talk about is set in stone. A lot of it probably will never happend. Also, this is part plans, part what I want to do, and part rant about what Sigil does that I don't like. This is what my ideal Sigil would look like and it is what I'm going to work toward. However, nothing is set in stone.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Plugins&lt;/h2&gt;&lt;p&gt;If you've ever used calibre or Firefox you will know that plugins are amazing. They allow for easy and quick changes and additions to be made without having to change the main application. Both calibre and Firefox have large third party plugin communities. I would like to bring this to Sigil and I want a framework where all book manipulation is available over a plugin interface.&lt;/p&gt;&lt;p&gt;My feelings with Sigil are plugins should make small self contained changes. Similar to calibre's heuristic processing. For instance, italicize common cases, up / down shift headings, and normalize CSS. To make plugins really useful I want to have a system where multiple plugins can be chained together and run in sequence. This would be super basic internal script functionality.&lt;/p&gt;&lt;p&gt;For plugins themselves I'm undecided about how they should be implemented. I don't mean API wise because that isn't even a thought at this point. I'm talking about what languages they should be able to be written in. C++ as a shared library will of course be supported because Sigil is written in C++. However, I want to Sigil to be able to load plugins written in scripting languages.&lt;/p&gt;&lt;p&gt;My first thought is Python because I'm very familiar with it and love to work with it. I'm also thinking about Lua and QtScript (Javascript without DOM). I don't support frameworks for every one of these languages due to the amount of maintenance required. So I want to support only one scripting language. Python is big and slow. Lua is small but doesn't have the advanced text manipulation libraries Python offers. QtScript is Javascript with is an abomination of a language. Added size of Sigil's install, execution speed, ease of supporting, knowledge by contributors and text manipulation support are all major considerations.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Editor&lt;/h2&gt;&lt;p&gt;Currently Sigil does not respect the structure of existing files. When you open an EPUB in Sigil it restructures the file layout. It even goes as far as to rewrite each XHTML file by running it through Tidy. With 0.4.0 cleaning with Tidy can be disabled but pretty printing is still used and alters the XHTML. I absolutely hate this! If I want my XHTML or file structure changed I'll do it myself.&lt;/p&gt;&lt;p&gt;I want to change Sigil to not be as automatic. Restructuring and cleaning of the XHTML should be moved to plugins and run when the user requests it. This way a user can open Sigil, change the metadata, save, and the only thing that changes is the OPF with the metadata changes. Not every single piece of the EPUB.&lt;/p&gt;&lt;p&gt;I also hate &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG" href="http://en.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt; editing because it inherently must make drastic changes to the underlying code. I don't think it's a good idea to remove it though. I would prefer to have the book view default to a preview mode that is read only. There wouldn't be any changes made to the code by using book view. Read only is the default but the user should be able to have an edit toggle that will set the book view to edit mode which will work like it already does. This way a user can make changes that may not be valid or work, check them, see there is an error (say a missing  tag) without losing any work. They can see the issue fix it and still be able to use WYSIWYG editing when they want.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Data Store&lt;/h2&gt;&lt;p&gt;Right now XML (XHTML included) data is stored as a Xerces DOMDocument. This is then loaded into the book or code view depending on which one is focused. The use of a DOMDocument often leads to data loss. Putting malformed XML into a DOMDocument can have unintended consequences. Especially when then loading that into a QWebView and getting back a string.&lt;/p&gt;&lt;p&gt;I want to replace the DOMDocument with a plain string as the data store. This will prevent a lot of data loss, especially combined with the book view defaulting to read only. Further, this combined with not making automatic changes to the code will make the well-formed error warning unnecessary.&lt;/p&gt;&lt;p&gt;Not auto processing with Tidy and checking for errors automatically will allow Sigil to produce invalid EPUBs. I really don't care that this can happen. The tools (FlightCrew) will still be there to check that the file conforms to the spec. It's up to the author to ensure they're publishing valid EPUBs. An EPUB that is being actively edited doesn't have to be valid at all times. I'd rather put the onus on the person using Sigil to ensure their EPUB is correct before publishing versus having Sigil force validity at every moment.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Undo&lt;/h2&gt;&lt;p&gt;Undo is terrible right now. Some actions cannot be undone, some can. The book view's undo is completely separate from the code view. You can't undo a replacement when doing it across all HTML files on files that aren't open in a tab. I want to see a unified single undo that allows for setting back out of any change.&lt;/p&gt;&lt;p&gt;Further along this line I would like some graphical display where you can look at the changes that have been made to make it easy to find exactly how far back to undo. Something like Apple's Time Machine but for the state of the book.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Here is where I want to take Sigil: less hand holding, less automatic changes and more advanced text manipulation though a plugin interface. The big question is, should I skip putting out a 0.5.0 release with just the Milestone-0.5.0 marked changes and get started on the above now?&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4805163169229637904?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4805163169229637904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigils-future-direction-post-04x.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4805163169229637904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4805163169229637904'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigils-future-direction-post-04x.html' title='Sigil&apos;s Future Direction (Post 0.4.x)'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6515816128009985109</id><published>2011-09-04T01:18:00.000+02:00</published><updated>2011-09-04T01:25:33.961+02:00</updated><title type='text'>Sigil and Linux Distribution Packages</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;&lt;p&gt;The official Linux packages for Sigil are generic packages. They're bundled in an InstallJammer installer and contain a number of libraries that Sigil depends on. This is not ideal but it's not possible to provide Linux packages for every distro.&lt;/p&gt;&lt;p&gt;I've created a &lt;a href="http://code.google.com/p/sigil/wiki/LinuxDistroPackages" href="http://code.google.com/p/sigil/wiki/LinuxDistroPackages"&gt;wiki page&lt;/a&gt; which I'm putting together a list of Linux distributions that have their own Sigil packages. These are the best packages for users to install because they're smaller and tailored.&lt;/p&gt;&lt;p&gt;If your distro isn't listed and it has Sigil packages &lt;a href="http://john.nachtimwald.com/about/" href="http://john.nachtimwald.com/about/"&gt;let me know&lt;/a&gt; and I'll add it to the list. If your distro doesn't package Sigil let them know you would like to see them package it. I'm always willing to lend a hand to get Sigil in more Linux distros.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6515816128009985109?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6515816128009985109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigil-and-linux-distribution-packages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6515816128009985109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6515816128009985109'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigil-and-linux-distribution-packages.html' title='Sigil and Linux Distribution Packages'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-137719405564389728</id><published>2011-09-02T14:48:00.001+02:00</published><updated>2011-09-02T14:48:34.993+02:00</updated><title type='text'>Sigil 0.4.2 Released</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;Sigil 0.4.1 is complete and &lt;a href="http://code.google.com/p/sigil/downloads/list" href="http://code.google.com/p/sigil/downloads/list"&gt;available&lt;/a&gt;. This is mainly a maintenance release and fixes a number of bugs. Specifically a few bugs related to data loss. There was one major user visible change. The well-formed error dialog can be toggled not to show. This will cause errors to be auto fixed. Use this with care because the auto fix Sigil makes might not be what you want. As always see the &lt;a href="http://sigil.googlecode.com/git/ChangeLog.txt" href="http://sigil.googlecode.com/git/ChangeLog.txt"&gt;changelog&lt;/a&gt; for a complete list of changes.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-137719405564389728?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/137719405564389728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigil-042-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/137719405564389728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/137719405564389728'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/09/sigil-042-released.html' title='Sigil 0.4.2 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2603680371246924009</id><published>2011-09-01T01:45:00.002+02:00</published><updated>2011-09-01T02:59:34.670+02:00</updated><title type='text'>Sigil User Study</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "&gt;&lt;h2 style="font-size: 1.5em; "&gt;Introduction&lt;/h2&gt;&lt;p&gt;Since taking over as the maintainer of Sigil I have spent some time reaching out to specific people in the ebook community to ask them about Sigil. Specifically if they use Sigil? Why or why not? What do they see as Sigil's shortcomings? How do they use Sigil in their work flow? Why doesn't Sigil work in their work flow. Basically, their thoughts and opinions on Sigil.&lt;/p&gt;&lt;p&gt;I asked specific people privately because I didn't want to be inundated with responses. The people can be broken down into three different groups: self publishers, power users, and professionals. After talking to professionals I've come to realize that they can be broken down into small and large. The size relating to the size of the company and production volume. I spoke with about 8 people total and I tried to keep it even between the various groups.&lt;/p&gt;&lt;p&gt;I wanted to find out who is using Sigil, who isn't using Sigil and why so I can determine where I want to take Sigil in the future. The only ebook editing I do is cleaning up a few books here and there. Learning how people use Sigil will help me to determine the best direction to take the project.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Self Publishers&lt;/h2&gt;&lt;p&gt;Self publishers are authors. These are people who write their book and then want to sell it as an ebook themselves. Typically these people are using Word for writing. they export their work as HTML, then import into an ebook editor for final adjustments and savings as an ebook file. The two biggest things self publishers are looking for are easy and high quality .doc or .docx import and one click send to store functionality.&lt;/p&gt;&lt;p&gt;Self publishers are also interested in &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt; editing and don't want to know about the internals of ebooks. They are primarily writers who see ebooks one of many distribution methods. They don't care about the intricacies of EPUB for instance, they just want their work to look good and be readable by their audience.&lt;/p&gt;&lt;p&gt;The typical tools I hear being used by self publishers are &lt;a href="http://calibre-ebook.com/"&gt;calibre&lt;/a&gt; for format shifting. &lt;a href="http://www.atlantiswordprocessor.com/en/"&gt;Atlantis Word Processor&lt;/a&gt; and &lt;a href="http://www.jutoh.com/"&gt;Jutoh&lt;/a&gt; for formatting and base ebook creation. Atlantis and Jutoh both provide very easy to use WYSIWYG interaction and you can use these without ever seeing a line of code.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Power Users&lt;/h2&gt;&lt;p&gt;These are people who prepare works in their spare time as a hobby. They are not motivated by money and do not sell the works they publish. Typically the works power users deal with are public domain such as Shakespeare. This group also encompasses people who do not distribute works covered by copyright but spend their time cleaning and reformatting their favorite books strictly for their own enjoyment and personal use.&lt;/p&gt;&lt;p&gt;Power users are comfortable using either WYSIWYG and code editors. The biggest feature requested and talked about by power users is robust regular expression support for search and replace. Many of the books power users work with have terrible and often non-existant formatting. These works typically started life as either a scanned copy of a print book or a PDF file. Both of which typically leave broken paragraphs and misspellings thought the document. Which leads to spell check being the next most common request from this group. They are trying to take a jumble of half sentences and put them back together into a visually appealing layout.&lt;/p&gt;&lt;p&gt;The tools used by power users are Sigil, calibre, Word or Open Office macros, and many custom scripts. Also an advanced text editor like &lt;a href="http://www.barebones.com/products/bbedit/"&gt;BBEdit&lt;/a&gt; and &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; are must have tools.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;Professionals&lt;/h2&gt;&lt;p&gt;Professionals format ebooks for one purpose, money. This is what they do for a living. An author comes to them and pays to have the company turn their work into an ebook. For a modest fee an author can have a beautiful ebook produced without any headaches or hassle. Many authors prefer paying someone to do this portion of publishing for them just like they will pay an editor to edit, a print house to print, cover artist to design a cover and so forth. Authors write and typically want to concentrate solely on writing. Many self publishers format their own ebooks out of necessity because of the cost of hiring a professional.&lt;/p&gt;&lt;p&gt;With both small and large professionals I'm specifically talking about ebook publishing and digitization services. I'm not talking about huge publishers like Macmillan that do everything. However, the larger publishers I talked to makes me believe their process is the same as the huge publishers. The big difference between small and large professionals are the tools they use.&lt;/p&gt;&lt;h3 style="font-size: 1.17em; "&gt; Small&lt;/h3&gt;&lt;p&gt;Small professionals tend to use either Sigil or Adobe's &lt;a href="http://www.adobe.com/products/indesign.html"&gt;InDesign&lt;/a&gt; for a good portion of their work. Both fill a very similar role in ebook creation. The big draw of InDesign over Sigil is InDesign supports print book layout creation. It's an all in one tool. This type of professional tends to use off the shelf tools that are readily available. Sigil and InDesign are not the only exclusive tools they use but one or the other tends to be a heavily used tool in their tool box.&lt;/p&gt;&lt;h3 style="font-size: 1.17em; "&gt;Large&lt;/h3&gt;&lt;p&gt;Large professionals tend to use custom tools. They staff people who's sole job is to develop and maintain ebook creation and formatting tools. They can afford to have custom tools that integration directly into their process. They don't use off the shelf or vanilla tools. This group is all about custom everything. This allows them to quickly adapt to changes.&lt;/p&gt;&lt;h3 style="font-size: 1.17em; "&gt;Professional Tools&lt;/h3&gt;&lt;p&gt;Sigil or InDesign and custom tools are all I know. Many professionals are vague about their process and tools. Some even declined to talk to me at all. They use tools in some way that works for them but their methods and implementation are proprietary.&lt;/p&gt;&lt;h2 style="font-size: 1.5em; "&gt;What Does This Mean For Sigil?&lt;/h2&gt;&lt;p&gt;Out of all of these groups I have little desire to target self publishers. There are existing tools that do a great job of meeting this groups needs. Sigil has a WYSIWYG editor and it can certainly be improved but I don't want to tie Sigil to a particular store or stores like Amazon or B&amp;amp;N. Also, I want to keep Sigil as an EPUB editor and not a generic ebook editor. I believe that Sigil's strength lies in being able to manipulate the internals of the EPUB format itself. I want to target this aspect more.&lt;/p&gt;&lt;p&gt;Power users are the major group I want to target. Out of all of the people I spoke with power users use Sigil the most and get the most out of it. Advanced editing of an EPUB's structure and code is where I want to take Sigil. That along with advanced text manipulation. Think expansion of calibre's heuristic processing.&lt;/p&gt;&lt;p&gt;Small professionals are major users of Sigil and I do not want to discount them. I believe that their use of Sigil overlaps with power users enough that targeting power users will also target small publishers. I do not want to alienate small professionals and will continue to take their needs seriously. From what I've learned about small professionals tools that make code manipulation easier will be a benefit and hopefully reduce their need for other formatting tools.&lt;/p&gt;&lt;p&gt;The last group, large professionals, do not use Sigil. I don't believe that changing Sigil to accommodate this group will get them to use Sigil. They use their own custom tools and Sigil doesn't fit into their work flow and I don't see it ever doing so. Thus I don't see it being worth while to work toward making Sigil "the tool" for this group.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2603680371246924009?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2603680371246924009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/09/introduction-since-taking-over-as.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2603680371246924009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2603680371246924009'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/09/introduction-since-taking-over-as.html' title='Sigil User Study'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5509404904524268132</id><published>2011-08-26T13:05:00.001+02:00</published><updated>2011-08-26T13:50:17.780+02:00</updated><title type='text'>Sigil 0.4.1 Released</title><content type='html'>&lt;p&gt;Sigil 0.4.1 is complete and &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;available&lt;/a&gt;. This is mainly a maintenance release and fixes a number of bugs. There are a few new features mostly around the code view. As always see the &lt;a href="http://sigil.googlecode.com/git/ChangeLog.txt"&gt;changelog&lt;/a&gt; for a complete list of changes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5509404904524268132?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5509404904524268132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/sigil-041-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5509404904524268132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5509404904524268132'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/sigil-041-released.html' title='Sigil 0.4.1 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6549620285251861765</id><published>2011-08-20T15:08:00.001+02:00</published><updated>2011-08-20T15:08:30.841+02:00</updated><title type='text'>SCM Move to Git Completed Sucessfully</title><content type='html'>&lt;p&gt;Last night I moved Sigil's SCM from &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; (hg) to &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; (git). The change was completed successfully and without any issues. 0.4.0 had locations for things like the user manual pointing to the git locations. These are now live and working again. These links are now broken in any release before 0.4.0. This is unfortunate but unavoidable.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6549620285251861765?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6549620285251861765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/scm-move-to-git-completed-sucessfully.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6549620285251861765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6549620285251861765'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/scm-move-to-git-completed-sucessfully.html' title='SCM Move to Git Completed Sucessfully'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7766857062741539271</id><published>2011-08-15T13:03:00.002+02:00</published><updated>2011-08-15T13:05:42.570+02:00</updated><title type='text'>Sigil 0.4.0 and FlightCrew 0.7.2 Released</title><content type='html'>&lt;p&gt;The long awaited &lt;a href="http://code.google.com/p/sigil"&gt;Sigil&lt;/a&gt; 0.4.0 release is now out. Along with Sigil is a new release of &lt;a href="http://code.google.com/p/flightcrew/"&gt;FlightCrew&lt;/a&gt;. FlightCrew version 0.7.2 is the latest version bundled with Sigil.&lt;/p&gt;&lt;p&gt;If you're an OS X user then one thing need to be aware of is these two releases bump the minimum OS X version to 10.6 (Snow Leopard). The Linux builds (x86 and x64) are built on Ubuntu 11.04.&lt;/p&gt;&lt;p&gt;A lot of work went into 0.4.0. New features and bug fixes galore. See the &lt;a href="http://code.google.com/p/sigil/source/browse/ChangeLog.txt"&gt;ChangeLog&lt;/a&gt; for full details. I have to thank Strahinja Marković (the original creator) for leaving the 0.4.0 in a nearly finished state. Also, Charles King for being a bug fixing monster and helping make this release great.&lt;/p&gt;&lt;p&gt;One major change that is going to take place next week is, I am switching the source code management (SCM) system from Mercurial (hg) to Git. This will break the update checker in previous versions. Hence waiting a week before making the change. I have already converted FlightCrew (needed to test) so FlightCrew's updater in previous version won't inform you of an update. This is unfortunate but unavoidable.&lt;/p&gt;&lt;p&gt;Due to the change to Git the links for the manual in Sigil are not going to work for a week. This is because I've updated the locations in Sigil to point to the new locations that won't be available until the switch to Git.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7766857062741539271?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7766857062741539271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/long-awaited-sigil-0.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7766857062741539271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7766857062741539271'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/long-awaited-sigil-0.html' title='Sigil 0.4.0 and FlightCrew 0.7.2 Released'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2617035692926069660</id><published>2011-08-07T04:54:00.002+02:00</published><updated>2011-08-07T05:00:49.168+02:00</updated><title type='text'>Donation change</title><content type='html'>I've updated the donation links they now point to my PayPal account. Going forward donations will be directed toward me instead of Strahinja. This is something we had talked about and planned. I just want to warn people who have donated before because you will see a different email address than least time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2617035692926069660?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2617035692926069660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/donation-change.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2617035692926069660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2617035692926069660'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/donation-change.html' title='Donation change'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5512887395220893426</id><published>2011-08-03T02:54:00.006+02:00</published><updated>2011-08-03T03:06:26.181+02:00</updated><title type='text'>Thinking of Changing Sigil's SCM</title><content type='html'>&lt;p&gt;Right now Sigil is using the &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; SCM (source control management). I'm thinking of switching to &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;. Since taking over Sigil I have had one person contributing and he is okay with the change.&lt;/p&gt;
&lt;p&gt;I'm not looking to change simply for the sake of changing. Before Sigil I have never used Mercurial. I am not well versed with it and I have spend 50% of my time fighting with Mercurial. Charles (the person contributing bug fixes) has had the same experience.&lt;/p&gt;
&lt;p&gt;My personal preference and favorit SCM is &lt;a href="http://bazaar.canonical.com/en/"&gt;Bazaar&lt;/a&gt;. If I could I would switch to it in an instant. However, Google Code does not support Bazaar. Google Code is a good platform and I like it a lot. I think that Google Code does everything except for SCM right. If it supported Bazaar it would be perfect. That said I have no plans to move away from Google Code to Launchpad.&lt;/p&gt;
&lt;p&gt;Since I can't use Bazaar I'm left with Git. Git works well enough and I'm more familiar with it than Mercurial. One reason I'm thinking of switching is, Git is very popular. Using an SCM someone isn't familiar with will prevent them from submitting patches. I'm hoping that by moving to Git it will make Charles and my lives easier. I'm also hoping it will encourage more people to hack on Sigil.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5512887395220893426?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5512887395220893426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/thinking-of-changing-sigils-version.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5512887395220893426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5512887395220893426'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/thinking-of-changing-sigils-version.html' title='Thinking of Changing Sigil&apos;s SCM'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3741977765308755950</id><published>2011-08-03T01:15:00.001+02:00</published><updated>2011-08-03T01:15:50.502+02:00</updated><title type='text'>Windows Acquired</title><content type='html'>Thanks to a Sigil user (Bryan) I now have in hand a copy of Windows 7 Ultimate. Thanks Bryan for sending me a copy of Windows! The plan is to get RC 2 builds out this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3741977765308755950?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3741977765308755950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/08/windows-acquired.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3741977765308755950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3741977765308755950'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/08/windows-acquired.html' title='Windows Acquired'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3034270813875109722</id><published>2011-07-28T03:20:00.002+02:00</published><updated>2011-07-28T03:31:11.994+02:00</updated><title type='text'>All 0.4 blocker bugs squashed!</title><content type='html'>&lt;p&gt;Tonight I was able to fix bug 813 (see &lt;a href="http://code.google.com/p/sigil/issues/detail?id=837"&gt;837&lt;/a&gt; for details). This is the last blocker bug for the 0.4 release. I merged a few patches there were sitting around. I've also fixed and issue with changes to metadata not being relayed to the GUI as the file having been changed. With these bugs fixed 0.4 is in a state that I feel is ready for release.&lt;/p&gt;&lt;p&gt;I have little experience with building releasable, binary packages for OS X and Windows. So It will be a few days (maybe weeks) before they're out. There is a strong possibility I need to buy a copy of Windows and that will take a few days to get. Also, I need to actually setup a Windows build environment. I'm going to try building using an old netbook I have (it's the only computer I can use that has a copy Windows for building packages.&lt;/p&gt;&lt;p&gt;I don't want to do this release piece by piece so I'm going to wait to release all packages (OS X and source) together. Also, I plan to put out an RC 2 before 0.4 final. The RC 2 will be exactly the same as 0.4 final as far as the code is concerned. RC 2 is to make sure I package Sigil properly. It won't do any good to put out 0.4 that can only be run if you have all of the development libraries Sigil uses installed independently of Sigil.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3034270813875109722?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3034270813875109722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/07/all-04-blocker-bugs-squashed.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3034270813875109722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3034270813875109722'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/07/all-04-blocker-bugs-squashed.html' title='All 0.4 blocker bugs squashed!'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5407910938646292649</id><published>2011-07-25T03:34:00.000+02:00</published><updated>2011-07-25T03:35:13.616+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='future'/><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Taking Over Sigil</title><content type='html'>&lt;p&gt;The other day it was &lt;a href="http://sigildev.blogspot.com/2011/07/all-good-things.html"&gt;announced&lt;/a&gt; I am now the maintainer of the &lt;a href="http://code.google.com/p/sigil"&gt;Sigil&lt;/a&gt;. Back in June Strahinja &lt;a href="http://sigildev.blogspot.com/2011/06/new-maintainer-needed.html"&gt;announced&lt;/a&gt; that he was looking for someone to take over the project. I highly respect the work Strahinja has done with Sigil and this is a project I don't want to see die. I myself use Sigil one occasion and when dealing with e-books I often find myself recommending its use.&lt;/p&gt;&lt;p&gt;After seeing the announcement by Strahinja that it was time to move on I contacted him about taking over in his stead. He agreed and has now given me control over the project. From this point on I will be handling releases, bug wrangling and everything else that goes into managing an open source project. I don't plan to remove Strahinja's access to the code repository. If he asks I will but Sigil started as his baby and if he wants to start working on it again I fully trust him and I would have no problem with this.&lt;/p&gt;&lt;p&gt;The good news is Sigil is not going to die tor stagnate. I am fully committed to continuing the project and bettering the application. That said things are different now than when Strahinja was here. Strahinja was pretty much a one man show when it came to fixing bugs and implementing new features in Sigil. He had a lot of time he was able to spend working on it. I unfortunately do not have nearly that amount of free time to work on Sigil. I have a day job unrelated to programming, publishing, or books in general. I can only work on Sigil in my spare time (mainly after work and weekends). I also work on other &lt;a href="http://john.nachtimwald.com/projects/"&gt;projects&lt;/a&gt; too which will be sharing my free time with Sigil development. I cannot match the pace of development Sigil users have come to expect so unless others step up to help me with coding development will slow considerably.&lt;/p&gt;&lt;p&gt;My plans for Sigil are as follows. Short term I want to get 0.4 released. Currently it's sitting at RC 1 and there are only a few small bugs I would like to fix for it. I have been spending the past few days becoming familiar with Sigil's build system. Once 0.4 is out I will need to spend some time getting to know the ins and outs of the code itself. From there I will move onto working toward the 0.5 release. Right now I'm going to commit to a hyperlink editor and spell check support for 0.5. I will need to look over the existing bugs and see what else would be a good fit for 0.5. At some point when the EPUB 3 specification is finished I will work on bringing Sigil up to speed with it. That will take place in what ever release number Sigil is at at that time.&lt;/p&gt;&lt;p&gt;I'm not going to give any release target dates for either 0.4 or 0.5. Each Sigil release will take the form of when it's ready it will ship. One big difference between me and Strahinja is undoubtedly how we handle version numbers. I only use this system, major.minor.revision. With major numbers 0 is for feature incomplete and an unstable API. Going from 0 to 1 simply means that I feel the application is mature, stable and has a set API. Going from 1 to any other number means it's a massive change in some way (features, functionality, UI, API...). Minor numbers are for new features. Revisions changes mean there are no new features only bug fixes. Up until 1.0 is released the majority of releases you will see will be minor release numbers. Such as 0.4 followed by 0.5 instead of 0.3.0 followed by 0.3.1 and so forth.&lt;/p&gt;&lt;p&gt;Aside from Sigil development there is also the &lt;a href="http://sigildev.blogspot.com/"&gt;Sigil development blog&lt;/a&gt;. I plan to use it to communicate Sigil announcements. I do want to point out that I do keep a &lt;a href="http://john.nachtimwald.com/"&gt;personal blog&lt;/a&gt; which I also use. I will be posting all Sigil announcements on my blog as well as on the Sigil blog. However, I plan to keep posts on the Sigil blog to only Sigil content. If you want to keep up with everything I'm working on including Sigil then read my blog. If you want to keep up with only Sigil then read the Sigil blog.&lt;/p&gt;&lt;p&gt;As always feel free to contact me with any questions or concerns. I am always available to help if I can. &lt;a href="http://www.mobileread.com/"&gt;MobileRead&lt;/a&gt;, &lt;a href="http://john.nachtimwald.com/about/"&gt;email&lt;/a&gt; or blog comments are all ways to get in touch with me. However, I do ask that support type questions be directed to the appropriate section of MobileRead as I'm not an expert on all aspects of e-books. There are a lot of smart people there who can help too and often you'll get an answer faster than asking me directly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5407910938646292649?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5407910938646292649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/07/taking-over-sigil.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5407910938646292649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5407910938646292649'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/07/taking-over-sigil.html' title='Taking Over Sigil'/><author><name>John Schember</name><uri>http://www.blogger.com/profile/09087335252193715040</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-dY5iQmyqtKM/TiYCdkjo3zI/AAAAAAAAAAQ/Qj_yq7siaEY/s220/me_face.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1978665118887608496</id><published>2011-07-23T17:51:00.001+02:00</published><updated>2011-07-23T17:51:38.357+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlightCrew'/><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>All good things…</title><content type='html'>&lt;p&gt;As of today, the official maintainer for both Sigil and FlightCrew is John Schember (“user_none” on MobileRead). He’s a very bright and competent guy. He’s got what it takes, trust me. As a community, please give him the same consideration and respect you gave me. It will take him many weeks (if not a few months) to get fully up to speed with the codebase, so patience and a warm welcome from the community will make sure things go smoothly.&lt;/p&gt;  &lt;p&gt;To those that are still on the fence on whether to contribute to Sigil’s development or not, get off that fence and help out John. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1978665118887608496?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1978665118887608496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/07/all-good-things.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1978665118887608496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1978665118887608496'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/07/all-good-things.html' title='All good things…'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-578132217491268064</id><published>2011-06-16T18:57:00.001+02:00</published><updated>2011-06-16T19:05:31.504+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlightCrew'/><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>New maintainer needed</title><content type='html'>&lt;p&gt;Ok, so this is a tough post to write. A lot of you are going to take it the wrong way, I know that. It’s human nature. But try to resist that urge. &lt;/p&gt;  &lt;p&gt;Here goes: &lt;strong&gt;I plan to transfer project ownership and development to a new maintainer by mid-September at the latest.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Don’t panic!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Let’s take this step by step. First, the reasons.&lt;/p&gt;  &lt;h3&gt;The mighty “Reasons”&lt;/h3&gt;  &lt;p&gt;As some of you may know already, I started Sigil while I was a CS undergrad. I made it both my Bachelor’s and my Master’s thesis so that I could justify the time investment and continue working on it. &lt;/p&gt;  &lt;p&gt;All of that is now over. &lt;a href="http://sigildev.blogspot.com/2011/02/and-final-exams-are-over-for-good.html"&gt;I graduated&lt;/a&gt;. &lt;a href="http://sigildev.blogspot.com/2011/06/thesis-done-job-secured-next.html"&gt;I got a job&lt;/a&gt;. Life got complicated in numerous other ways. That’s three reasons right there. But there are others. For instance, I’ve been looking at this codebase for over two years now, and frankly I’ve grown weary of it. I want to work on other things in my spare time, contribute to other open-source projects. Running such a popular project comes with it’s own set of obligations and responsibilities, and I’d like to not have them anymore. I’m worn out and tired. Some of this has been covered in the “&lt;a href="http://sigildev.blogspot.com/2011/01/more-serious-conversation_02.html"&gt;serious conversation&lt;/a&gt;” post.&lt;/p&gt;  &lt;p&gt;Bottom line, come mid-September, I don’t believe I’ll be able to continue contributing to Sigil at the level both you and I are used to. It will be time for someone else to take over and lead this project to future pastures.&lt;/p&gt;  &lt;h3&gt;How’s all this going to work exactly?&lt;/h3&gt;  &lt;p&gt;I’m not just going to hand this over to the first person who raises his hand. Fuck that. If you want to be the new maintainer, you’re going to have to &lt;em&gt;earn it&lt;/em&gt;. What do I mean by that? Well you’re going to have to convince me that you can manage this beast. There’s a distinct reason why I brought this all up three months in advance. Currently, I have all the time in the world&lt;sup&gt;[1]&lt;/sup&gt;. This means I can and will dedicate a lot of time to Sigil. I plan to get a lot of stuff done in this time frame. I’ll also be more than willing and able to answer any questions a new Sigil developer might have.&lt;/p&gt;  &lt;p&gt;If you want to become a new maintainer, here’s the process:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Send me an email to &lt;a href="mailto:sigil@gmx.com"&gt;sigil@gmx.com&lt;/a&gt; (or my personal email address, or a PM on MobileRead). Introduce yourself, your background etc. Basically say “hi”. &lt;/li&gt;    &lt;li&gt;Come up with some feature you’d like to introduce to Sigil or a bug you’d like to fix. &lt;em&gt;Start small&lt;/em&gt;. Explain to me how you’re going to implement the change, code-wise. If you don’t have a clue what you want to work on, just say so and I’ll get you something small and easy to whet your appetite. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://code.google.com/p/sigil/source/clones"&gt;Create a new clone of the codebase&lt;/a&gt;. Sigil uses Mercurial. Don’t know Mercurial? &lt;a href="http://hginit.com/"&gt;Here’s a great tutorial by Joel Spolsky.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Implement the change and push it to your clone. Please do your best to follow the code style. I know it’s not written down (I’ll fix that eventually), but it shouldn’t be too hard to figure it out by just looking at the current code. Don’t worry too much about it, I’ll point out any issues if they arise. A few pointers:      &lt;ul&gt;       &lt;li&gt;&lt;em&gt;Always&lt;/em&gt; keep readability in mind, it’s the single most important factor of any codebase. &lt;/li&gt;        &lt;li&gt;Use long, descriptive names for functions and variables. Again, look at the current code. &lt;/li&gt;        &lt;li&gt;Keep functions short and simple. Split long functions into multiple smaller ones. &lt;/li&gt;        &lt;li&gt;Comment the &lt;em&gt;why, &lt;/em&gt;not the &lt;em&gt;how&lt;/em&gt;. If the &lt;em&gt;how &lt;/em&gt;is really complicated, then do comment it, but try to make the code simpler first. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Tell me when you’re done so I can take a look at it. &lt;/li&gt;    &lt;li&gt;I’ll merge your changes after any points of contention are resolved. &lt;/li&gt;    &lt;li&gt;Don’t forget you can ask as many questions as you want. I’ll be glad to help. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Continue making good changes to the codebase and we’ll get along swimmingly. Do great and supervision will gradually be reduced. Do awesome and become the new maintainer, eventually.&lt;/p&gt;  &lt;p&gt;I’d love it if several people came forward wishing to contribute, even if they didn’t want the maintainer’s role at the end. The more the merrier. In fact, I’d &lt;em&gt;love it&lt;/em&gt; if one of the major commercial users of Sigil hires a group of people to work on the project. I’d gladly transfer control to them as a group, as long as promises are made that Sigil will remain FOSS.&lt;/p&gt;  &lt;h3&gt;I’m a user of Sigil. Should I panic?&lt;/h3&gt;  &lt;p&gt;Don’t panic. Popular open-source projects don’t just die out when the original creators move on. That just doesn’t happen. In fact, new maintainers taking over is a natural progression of the FOSS model. &lt;/p&gt;  &lt;p&gt;I’m not going to disappear either. I’ll be around and active for the next three months at least, and I’ll probably contribute small fixes/features on an irregular basis after that too.&lt;/p&gt;  &lt;p&gt;[Related discussion can also be found in &lt;a href="http://www.mobileread.com/forums/showthread.php?t=139374"&gt;this MobileRead thread&lt;/a&gt;.]&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] Actually nowhere near it, but let’s pretend.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-578132217491268064?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/578132217491268064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/06/new-maintainer-needed.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/578132217491268064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/578132217491268064'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/06/new-maintainer-needed.html' title='New maintainer needed'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7010441376915879781</id><published>2011-06-09T14:52:00.001+02:00</published><updated>2011-06-09T14:52:26.253+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Thesis done, job secured… next?</title><content type='html'>&lt;p&gt;Two important things happened. The first is that I have finished my Master’s Thesis. My mentor signed off on it and it’s currently being printed and bound. That’s a huge weight off my shoulders. Everything is on track so I should be graduating in July.&lt;/p&gt;  &lt;p&gt;The second important event is that after months of job offers, interview prep, flying around the planet so the interviews could be conducted etc., I have finally accepted an offer. From Google, no less. I’ll be moving to Mountain View in the San Francisco Bay Area some time in September or October of this year.&lt;/p&gt;  &lt;p&gt;I’d like to thank all the companies I’ve interviewed with/received offers from for their time and consideration.&lt;/p&gt;  &lt;p&gt;What does this all mean for Sigil? Well it doesn’t impact my timeline much. I have pretty much the entire summer to screw around, and a lot of that time will go to Sigil dev work. After that… well that’s material for a different blog post you should see in a few days.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7010441376915879781?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7010441376915879781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/06/thesis-done-job-secured-next.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7010441376915879781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7010441376915879781'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/06/thesis-done-job-secured-next.html' title='Thesis done, job secured… next?'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6310756956028903725</id><published>2011-05-05T18:53:00.001+02:00</published><updated>2011-05-05T18:53:42.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Why is Sigil 0.4.0 taking so long?</title><content type='html'>&lt;p&gt;You, the users of Sigil, deserve an answer to this question. &lt;/p&gt;  &lt;p&gt;First of all, it has nothing to do with Sigil itself. The amount of work needed to fix the remaining release-blocking bugs is not that large. It’s just that I don’t have enough time to dedicate to Sigil right now.&lt;/p&gt;  &lt;p&gt;Let’s back up a bit. Remember that in February &lt;a href="http://sigildev.blogspot.com/2011/02/and-final-exams-are-over-for-good.html"&gt;I talked about&lt;/a&gt; how my university studies are pretty much over? A part of that meant that I needed to start looking for a job. There were (and there still are) a lot of options and offers on the table, but I wanted to explore opportunities of working for one of the big international tech corps.&lt;/p&gt;  &lt;p&gt;So I wrote a resume and sent it to several companies I thought looked interesting. All of them contacted me with a desire to start the interview process.&lt;/p&gt;  &lt;p&gt;This has required two things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Time to prepare for all the technical interviews.&lt;/li&gt;    &lt;li&gt;Time to fly from one part of the planet to another so the interview could be conducted, and then back again. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This doesn’t leave a lot of room Sigil work. Sorry. All schedules for 0.4.0 are in the water since as soon as I return to Zagreb from one set of interviews, I have to prepare to leave for a different set with only a few days between them to rest up and handle local affairs. Don’t forget, this all goes on top of my usual non-Sigil related workload. &lt;/p&gt;  &lt;p&gt;I have at least another week of this. Ugh. After it’s all done and all the offers (or rejections) are in, I’ll examine all of my options and then pick a company.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6310756956028903725?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6310756956028903725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/05/why-is-sigil-040-taking-so-long.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6310756956028903725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6310756956028903725'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/05/why-is-sigil-040-taking-so-long.html' title='Why is Sigil 0.4.0 taking so long?'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4168268525274323753</id><published>2011-04-22T15:06:00.001+02:00</published><updated>2011-04-22T15:06:46.278+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.4.0RC1</title><content type='html'>&lt;p&gt;We’re in Release Candidate territory now. You can get the new release from the &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;downloads area&lt;/a&gt;. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed an issue with splitting on SGF chapter markers creating the new HTML files in the wrong order (issue #828) &lt;/li&gt;    &lt;li&gt;fixed a rare crash/memory corruption issue with automatic OPF updates &lt;/li&gt;    &lt;li&gt;made the CSS resource path updates faster and more robust &lt;/li&gt;    &lt;li&gt;updated FlightCrew so that CSS resource use is now far more robustly detected (issue #822) &lt;/li&gt;    &lt;li&gt;fixed a rare hang when opening the Meta Editor on Win XP machines &lt;/li&gt;    &lt;li&gt;a more accurate error message is now displayed for problems with file loading/saving (issue #772) &lt;/li&gt;    &lt;li&gt;fixed an issue with incorrect font filepath updates in the CSS (issue #736) &lt;/li&gt;    &lt;li&gt;fixed an issue with paths in the OPF not being URL-encoded (issue #823) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Looking at the outstanding bug reports, 0.4.0 is pretty stable now. There’s only one bug that I really want to fix before making the FINAL, and that’s issue 813. You can’t see the issue on the tracker since it’s private, but &lt;a href="http://code.google.com/p/sigil/issues/detail?id=837"&gt;issue 837&lt;/a&gt; is a duplicate of that issue and it’s public. Basically, there’s something wonky going on with FC validation on Macs when the FC engine is called from Sigil. I still haven’t been able to fix this, mostly because my access to Mac hardware is limited (and I can’t really debug a Mac issue on a Windows box, can I?). I expect to kill this before FINAL.&lt;/p&gt;  &lt;p&gt;Anyway, use the new RC and report any bugs you find.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4168268525274323753?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4168268525274323753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/04/sigil-040rc1.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4168268525274323753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4168268525274323753'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/04/sigil-040rc1.html' title='Sigil 0.4.0RC1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6686478875951672273</id><published>2011-03-24T10:00:00.001+01:00</published><updated>2011-03-24T10:00:55.272+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.4.0β3</title><content type='html'>&lt;p&gt;The third beta of 0.4.0 is now in &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;the downloads area&lt;/a&gt;. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;added a workaround for loading broken epub files that use the incorrect mimetype for the NCX (issue #815) &lt;/li&gt;    &lt;li&gt;fixed a rare issue with loading epub files with OPF's that had the XML version set to 1.1, but also had other attributes in the XML declaration (issue #812) &lt;/li&gt;    &lt;li&gt;fixed an issue with entries appearing at random in the TOC after a split on SGF markers is followed up with &amp;quot;Generate TOC from headings&amp;quot; request (issue #804) &lt;/li&gt;    &lt;li&gt;fixed an issue with files not appearing in the Book Browser after a split on SGF markers (issue #816) &lt;/li&gt;    &lt;li&gt;fixed a regression that caused the auto-cover-setting heuristics to unset covers when they are already set (issue #806) &lt;/li&gt;    &lt;li&gt;opening an HTML file now automatically builds a TOC from the headings &lt;/li&gt;    &lt;li&gt;fixed a regression that caused the Add Semantics menu to stop working (issue #807) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Again, keep the bug reports coming. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6686478875951672273?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6686478875951672273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0403.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6686478875951672273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6686478875951672273'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0403.html' title='Sigil 0.4.0β3'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6990270976723159986</id><published>2011-03-21T14:29:00.001+01:00</published><updated>2011-03-21T14:29:19.762+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.4.0ß2</title><content type='html'>&lt;p&gt;New beta is now &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;in the downloads area.&lt;/a&gt; Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed an issue with the ID of the manifest item of a resource not being updated when the resource was renamed &lt;/li&gt;    &lt;li&gt;fixed an issue with chapter splits being created in the wrong reading order (issue #797) &lt;/li&gt;    &lt;li&gt;fixed an issue with some HTML files disappearing after a save/load cycle if chapter splitting was performed before the save &lt;/li&gt;    &lt;li&gt;fixed an issue with renaming a file and then splitting it causing duplicate ID's in the OPF manifest (issue #800) &lt;/li&gt;    &lt;li&gt;fixed a validation issue with the Meta Editor not adding the correct namespace prefix to some Dublin Core metadata element attributes &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Keep the bug reports coming. The more you report, the more I can fix and the happier we'll all be.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6990270976723159986?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6990270976723159986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0402.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6990270976723159986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6990270976723159986'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0402.html' title='Sigil 0.4.0ß2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-79005024888950740</id><published>2011-03-20T20:46:00.001+01:00</published><updated>2011-03-20T20:46:11.098+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.4.0β1</title><content type='html'>&lt;p&gt;So the first beta of 0.4.0 is now out. You can get it from &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;the downloads area&lt;/a&gt;. The changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed an issue with CSS @import rules in the '@import &amp;quot;something.css&amp;quot;' format not being recognized and thus not updated on import &lt;/li&gt;    &lt;li&gt;removed the &amp;quot;CustomID&amp;quot; basic metadata entry from the Meta Editor; those wishing to use custom ID's can now add them directly to the OPF &lt;/li&gt;    &lt;li&gt;Sigil now preserves custom unique identifiers in the OPF (issue #552) &lt;/li&gt;    &lt;li&gt;removed support for the Sigil-proprietary SGF format &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the user can now edit the OPF file by hand (issue #281) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the user can now edit the NCX file by hand (issue #282) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the OPF file is now preserved on import (issue #586) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the NCX file is now preserved on import (issue #283) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the Table Of Contents editor has been replaced with a new Table of Contents sidebar; clicking on an item in this sidebar takes the user to the target location, enabling TOC navigation (issue #100) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;a dialog now informs the user if his XHTML, NCX or OPF documents are not well-formed XML (with error location and description), thus allowing him to fix the potential problems by hand instead of leaving them to Tidy to fix (issue #519) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;fixed a rare issue with no tab opened by default when loading epubs &lt;/li&gt;    &lt;li&gt;made the sigil.sh startup script more robust (courtesy of Craig Sanders) (issue #737) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The big features everyone has been waiting for are now in. The OPF and NCX are now preserved on import, and you can edit them by hand. You can still let the GUI do everything, but you now have the power to make changes directly.&lt;/p&gt;  &lt;p&gt;The TOC editor is gone and has been replaced by the TOC sidebar. A button at the bottom of the TOC sidebar allows the generation of the NCX form the headings in your epub. You can ignore that button if you want and just build the NCX by hand. Typing in the NCX file updates the TOC sidebar live, using a background thread to keep things fast and responsive. Clicking on an item in the TOC sidebar takes you directly to the target location. Yes, you can now navigate the epub with the TOC.&lt;/p&gt;  &lt;p&gt;A new dialog is now presented to the user when you screw up the markup in your XHTML (and NCX and OPF) files so badly that they become ill-formed XML. Previously Tidy was used to correct such errors, but now this dialog informs you of the problem and lets you fix it by hand if you wish, with the “Fix Manually” option. By selecting the “Fix Automatically” option in the dialog, everything goes through Tidy and it will then fix it for you, just like it did so previously. Basically the dialog is there to let power users skip Tidy’s error correction and fix the problem by hand. Naturally, the dialog tells you the line/column location of the error and a brief description.&lt;/p&gt;  &lt;p&gt;With this dialog and the previous Tidy cleaning on/off button (which controlled the dreaded “clean” option), the negative aspects of Tidy are now something you can completely avoid.&lt;/p&gt;  &lt;p&gt;This whole NCX/OPF preservation and editing by hand deal required a very thorough rewriting of a lot of Sigil’s internals. This has certainly brought many bugs so bear that in mind.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The whole point of the beta process is to discover and report bugs in unstable versions of the software. &lt;/strong&gt;So report any bugs you find! And don’t be surprised when you find them, because you will &lt;strong&gt;certainly&lt;/strong&gt; encounter some of them in this beta. If you’re uncomfortable with that, then don’t use the beta. Wait for 0.4.0 FINAL. This is pre-release software, that’s why it’s called a beta.&lt;/p&gt;  &lt;p&gt;There were some features that I initially planned for the first beta but that eventually didn’t make the cut. I spent days on one of them to finally realize that it simply isn’t going to work (through no fault of mine, but it’s a long story for a new blog post). The other major feature that didn’t make it in was simply pushed back to a future beta. I’d like feedback and bug reports on the massive rewrite needed to implement OPF/NCX preservation/editing sooner rather than later, so I thought it wise to push the first beta out today.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-79005024888950740?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/79005024888950740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0401.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/79005024888950740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/79005024888950740'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-0401.html' title='Sigil 0.4.0β1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3503576928879673843</id><published>2011-03-08T13:12:00.001+01:00</published><updated>2011-03-08T13:12:24.748+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.4b for Windows</title><content type='html'>&lt;p&gt;There was an interesting problem with &lt;a href="http://sigildev.blogspot.com/2011/01/more-serious-conversation_02.html"&gt;the recent OpenCandy integration&lt;/a&gt;: Microsoft Security Essentials started flagging the Sigil Windows installers as containing adware. From discussions with the OC people, this appeared to be because the MS people didn’t like that OC was storing a certain key in the registry and then transmitting it to the OC servers. The key acted exactly like a browser cookie, and pretty much every website you’ve ever visited stores one on your computer. Other AV vendors and security researchers agreed with the OC folks that this is just fine and doesn’t constitute “adware” behavior, but the MS folks disagreed. &lt;/p&gt;  &lt;p&gt;So after two weeks of back-and-forth, the OC folks have decided to remove this specific behavior from their SDK. For their part, MS has agreed that the new OC plugin isn’t adware even by their definition, so installers using it will not throw warnings.&lt;/p&gt;  &lt;p&gt;I have just uploaded Sigil 0.3.4b for Windows to the downloads area, and it contains this new version of the plugin. MSE has no complaints about the new installers.&lt;/p&gt;  &lt;p&gt;Sigil itself remains unchanged in this version, so if you have 0.3.4 installed, there is no reason to update. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3503576928879673843?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3503576928879673843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-034b-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3503576928879673843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3503576928879673843'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/03/sigil-034b-for-windows.html' title='Sigil 0.3.4b for Windows'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1845520165621384840</id><published>2011-02-27T16:45:00.001+01:00</published><updated>2011-02-27T16:45:35.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>The last nail in the coffin of SGF</title><content type='html'>&lt;p&gt;The next version of Sigil (0.4.0) is dropping support for opening documents in the old SGF format that was proprietary to Sigil versions 0.1.0 through 0.1.9. Sigil 0.2.0 &lt;a href="http://sigildev.blogspot.com/2010/03/1.html"&gt;dropped support&lt;/a&gt; for writing files in that format (that was a year ago), and now the second part of that transition is happening. That previous link describes what SGF is if you’re unfamiliar with it. Bottom line, if you’ve never heard of it, you never will and shouldn’t care about this change at all.&lt;/p&gt;  &lt;p&gt;For those that still have some SGF files left, just open them with any version of Sigil &amp;lt;=0.3.4 and save them as epub. That’s all there is to it. All those versions of Sigil will be available for download &lt;a href="http://code.google.com/p/sigil/downloads/list?can=1&amp;amp;q=&amp;amp;colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount"&gt;pretty much forever&lt;/a&gt;, so there’s no rush.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1845520165621384840?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1845520165621384840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/02/last-nail-in-coffin-of-sgf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1845520165621384840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1845520165621384840'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/02/last-nail-in-coffin-of-sgf.html' title='The last nail in the coffin of SGF'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7275598472653015239</id><published>2011-02-20T16:42:00.001+01:00</published><updated>2011-02-20T19:39:17.100+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlightCrew'/><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>An analysis of EPUB3 (and, uh, a bit more)</title><content type='html'>&lt;p&gt;&lt;em&gt;[I swear when I’m frustrated. That makes this post obscene even by Chris Rock’s standards. Proceed with caution. Also, this was (and is) supposed to be about EPUB3, but as I kept writing it, it kept growing. Fuck it, I’ll just post it as it is.]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The IDPF &lt;a href="http://idpf.org/epub/30"&gt;published the current draft&lt;/a&gt; of the new EPUB3 spec a few days ago. Time to see if was worth the wait. Note that this will be a long post.&lt;/p&gt;  &lt;p&gt;I’ve read all the sub-specs of EPUB3, and my general feeling about them is one of… “meh”. That’s the best way I can describe it. “meh” leaning towards “not good”. I jotted down notes in my notebook while I was reading them&lt;sup&gt;[1]&lt;/sup&gt;, and what follows is a digested summary of my views and sentiments.&lt;/p&gt;  &lt;p&gt;Assume I agree with everything in the specs I don’t explicitly disagree with here&lt;sup&gt;[2]&lt;/sup&gt;. Also, while I’ll take this opportunity to mostly rant about the bad parts of EPUB3, keep in mind that there are quite a few good parts as well.&lt;/p&gt;  &lt;h3&gt;All hail the mighty iPad&lt;/h3&gt;  &lt;p&gt;I’ll start this section by saying how I have absolutely nothing against JavaScript on the web. That would be stupid. I mean, without JS all of this web app business would not exist, and while arguments against “cloudification” of applications have weight, no matter where you stand on the debate, you can’t say that Gmail isn’t useful.&lt;/p&gt;  &lt;p&gt;But we’re talking about books here. In EPUB2, JavaScript execution was under RFC2119 “SHOULD NOT”; for all intents and purposes, this means forbidden. It’s not a “MUST NOT”, but still.&lt;/p&gt;  &lt;p&gt;In EPUB3, JS support is now optional. This means you can start using JS in your epub books, yippee! You can now go all Web 2.0 on you e-books. I’ll talk about why this is bad in a moment, but first I’ll like to give credit where credit is due and note that the spec text explicitly mentions&amp;#160; that content creators should avoid using JS if at all possible. Here’s a quote:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Scripting consequently should be used only when essential to the User experience, as it greatly increases the likelihood that content will not be portable across all Reading Systems and creates barriers to accessibility and content reusability.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Sadly, no one will listen to this. But at least the IDPF has this warning, even though it won't do shit. Now that JS support has moved from &amp;quot;should not&amp;quot; to &amp;quot;optional&amp;quot;, people will go out of their way to redefine &amp;quot;essential to the user experience&amp;quot; so that it includes JS. This will break horribly. We'll get epub books created solely for iBooks and all other Reading Systems can go to hell. Progressive enhancement? We will never see it. The people who create epub books are not web developers, they work in publishing. They have no idea what writing code for the web looks like (or writing code at all for that matter), so we'll see hacks upon hacks that work on iBooks pretty much by accident and on nothing else. I've always said that the day that the epub specs start mandating JS support is the day those same specs jump the shark. We're not quite there yet, but the gates of Hell are now slightly ajar. &lt;/p&gt;  &lt;p&gt;This is what will happen:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;EPUB3 brings &amp;quot;optional&amp;quot; JS support. &lt;/li&gt;    &lt;li&gt;Publishers start adding crappy JS to their books hoping it will make them &amp;quot;stand out&amp;quot;, &amp;quot;embrace the future&amp;quot;, &amp;quot;fuck goats&amp;quot; or whatever. &lt;/li&gt;    &lt;li&gt;We now have thousands of books with JS scripts in them that are absolutely useless but whose execution is nevertheless required, otherwise reading the book is impossible. You know, things like special navigation menus, buttons to expand example source code, footnotes in &amp;quot;tooltip&amp;quot; style windows or similar &amp;quot;brilliant design ideas&amp;quot; that stop working when you don't run the book's JS. &lt;/li&gt;    &lt;li&gt;EPUB4 now demands JS support. I mean really, you can't expect publishers to go over all those crappy epubs and rework them with progressive enhancement in mind, do you? No, no, no. They'll just lobby the IDPF to make JS support mandatory, and they'll succeed. &lt;/li&gt;    &lt;li&gt;Welcome to the web circa 2000! Ah, what a fun place that was. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;But I don't blame the IDPF for moving JS support from &amp;quot;should not&amp;quot; to &amp;quot;optional&amp;quot;. Actually, that's a lie. Of course I blame them. But I understand they had little choice when a lot of the people who make up the EPUB Working Group are the same people who have abused the term &amp;quot;HTML5&amp;quot; to the point where it doesn't mean anything anymore. Quite literally, nothing. It’s become a whizz-bang-pow marketing term hyped into oblivion by a fruit company. This “HTML5 is love, sex and the future of human civilization” nonsense has even pushed the WHATWG &lt;a href="http://blog.whatwg.org/html-is-the-new-html5"&gt;into renaming the spec to just “HTML”&lt;/a&gt; (even though they won’t admit the reason publicly). That’s right, the term “HTML5” now officially stands for nothing. &lt;a href="http://www.youtube.com/watch?v=K_vF3BuWwdw"&gt;Here’s a funny link&lt;/a&gt; about this “HTML5 means everything”. Bruce Lawson is specifically calling out the CSS3 == HTML5 == JavaScript idiocy, but you get the point.&lt;/p&gt;  &lt;p&gt;Interactivity in books? My God, how ever did books survive the last five thousand years without JavaScript, &amp;lt;video&amp;gt;, &amp;lt;audio&amp;gt; and &amp;lt;canvas&amp;gt;? It boggles the mind.&lt;/p&gt;  &lt;p&gt;Publishers: &amp;quot;HTML5 BOOKS? MOAR! LOOK MA IM IN TEH FUTUAR! We're &lt;em&gt;totally&lt;/em&gt; not going to go extinct &lt;em&gt;now&lt;/em&gt;!&amp;quot;&lt;/p&gt;  &lt;p&gt;JavaScript, &amp;lt;video&amp;gt;, &amp;lt;audio&amp;gt;, &amp;lt;canvas&amp;gt; in books == &amp;quot;This book needs more cowbell.&amp;quot; &lt;/p&gt;  &lt;p&gt;I know I’m being a cynic, but I can’t help myself. The iPad came along, was declared “the savior of the publishing industry” and now everyone seems to be losing their mind.&lt;/p&gt;  &lt;p&gt;Again, “HTML5”? Great for the web. Actually, &lt;em&gt;fucking awesome&lt;/em&gt; for the web. For e-books? I don’t remember the last time I thought “this book really needs some video”. In fact, 99.99% of all epubs would be &lt;em&gt;far&lt;/em&gt; better off with only the most basic HTML and &lt;em&gt;maybe&lt;/em&gt; a few lines of CSS.&lt;/p&gt;  &lt;p&gt;I know it’s not the IDPF’s fault this is all going to be so shamefully abused, but I still think it should have all stayed at the “SHOULD NOT” level. You want interactivity in e-books? That’s not an e-book,&lt;em&gt; that’s an app&lt;/em&gt;. Go make one. You are not going to be able to write an interactive book and expect it to run on all the Reading Systems the same (or at all). That &lt;em&gt;will not happen&lt;/em&gt;. Save yourself a lot of trouble and just make an app.&lt;/p&gt;  &lt;p&gt;For those with the brilliant ideas of tooltip windows, custom navigation menus and the like which books would be far better without, just don’t do it. No, it does not look “sharp”. Or “hip”. Not even “trendy”. What it is, is stupid. You’re making a book, not a website. Please bear that in mind.&lt;/p&gt;  &lt;p&gt;I’m sure that there are valid use cases for all of these technologies in books. A smart person using them appropriately can truly make something wondrous. Sadly, most people think they’re the smart ones. They’re usually not.&lt;/p&gt;  &lt;p&gt;I remember how all this got started. Back in the old days, when EPUB was just an idea, this was the train of thought: “How are we going to represent electronic books? Raw, custom XML like in DocBook? Huh… maybe it would be better to use web tech like HTML. It is widely understood and there are ready-made components that will make it easier to build Reading Systems.”&lt;/p&gt;  &lt;p&gt;So web tech was used because it lowered the barrier to entry. Instead of using DocBook’s &amp;lt;para&amp;gt;, why not use HTML’s &amp;lt;p&amp;gt;? We get free styling with CSS too.&lt;/p&gt;  &lt;p&gt;But this changed. Now it’s not “we’re using web tech to make e-books”, it’s “we’re using e-books to package web tech”. It’s not about making books anymore, it’s about using web tech offline. You think I’m exaggerating? Do you know what term was used to “succinctly describe EPUB” during development of EPUB3? Here it comes: “website in a box”. I’m not kidding. It was used in the IDPF meetings and was even &lt;a href="http://code.google.com/p/epub-revision/downloads/detail?name=epub30-20101113.zip"&gt;in the November 12, 2010 draft&lt;/a&gt; of the EPUB Overview document. Here’s a direct quote:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;An EPUB publication can be thought of as a &amp;quot;website in a box&amp;quot;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;No. No it shouldn’t be. Never ever.&lt;/p&gt;  &lt;h3&gt;No required glyph coverage&lt;/h3&gt;  &lt;p&gt;Honestly, the worst problem with EPUB2 was that there was no required Unicode glyph coverage. Let me explain what that means. On the surface, EPUB is all Unicode. Everything has to be either in UTF-8 or in UTF-16. “That’s great! This means I can use any letter I want!” Not quite. While you &lt;em&gt;can&lt;/em&gt; specify any letter you want, Reading Systems aren’t required to display that letter. It would certainly be unreasonable to mandate that all RS’s have glyphs for the entire Unicode range, but there is no minimum coverage specified either, and that would be a good thing. I was hoping this would be fixed in EPUB3, but no such luck.&lt;/p&gt;  &lt;p&gt;With the way things are, RS’s can just support ASCII and be done with it. Some support more than that, some support &lt;em&gt;only&lt;/em&gt; that. Yes, you can get around this problem by embedding fonts with the required glyphs in your epubs, but most people don’t know they have to. See &lt;a href="http://code.google.com/p/sigil/wiki/FAQ#Why_do_some_of_my_non-ASCII_characters_appear_correctly_in_Sigil"&gt;this FAQ entry&lt;/a&gt; for the most popular question about Sigil. I couldn’t even begin to describe the number of people who say infinitely moronic things like “Sigil doesn’t support Unicode” because the book they saved displays as a bunch of question marks in ADE and in all the hardware readers that use Adobe’s RMSDK. &lt;/p&gt;  &lt;p&gt;It’s not just Sigil’s problem, it’s everyone’s. People have made epubs that were tested only on the iPad, and since iBooks has fonts with wider glyph coverage than ADE, some characters in those books end up as question marks over there. &lt;/p&gt;  &lt;p&gt;There should be some minimum coverage specified. One might ask &amp;quot;but where do we draw the line at mandated coverage? Should CJK support be mandatory? Where is the line?&amp;quot; You're right, those are tough questions. That's why we have a Working Group, to answer them. Too hard to draw a line somewhere? Ok, how about adding one of those shiny RFC2119 &amp;quot;SHOULD&amp;quot; statements asking for greater coverage? It wouldn't do shit, but hey, it just might. &lt;/p&gt;  &lt;p&gt;The problem is that nobody at the IDPF seems to give a crap about this problem. That's what we get when the vast majority of Working Group members live in ASCII land, I know, but these guys are making an international standard. Show some breadth of understanding. This lack of mandated coverage is a &lt;em&gt;far&lt;/em&gt; bigger problem of EPUB2 than &amp;quot;well damn I can't put video in my books&amp;quot;. Trust me. &lt;/p&gt;  &lt;h3&gt;Living in fairyland&lt;/h3&gt;  &lt;p&gt;There are plenty of things in these new specs that are wonderful or interesting on the surface, but will never see the light of day. Things like &amp;quot;container-constrained&amp;quot; for JavaScript (great idea!) or the “epub:trigger” element (silly idea, people will just use JS). But they will never be supported on the various Reading Systems, and if they will be, then no one will use them. People who make RS's are by-and-large hacks (exceptions do exist though) who slap some custom controls onto WebKit and call it a day. They won't modify WebKit to support epub-specific elements. That's &amp;quot;too hard&amp;quot;. Am I the only one who remembers EPUB2's custom &amp;quot;switch&amp;quot; and &amp;quot;case&amp;quot; elements? Or inline XML islands? Or the whole of DTBook? The only RS that supported those was ADE (hats off to Adobe for trying, I really mean that). Everyone else just pretended it didn't exist. And not even Adobe implemented support for “oeb-page-foot” and “oeb-page-head”, and those were damn useful (on paper at least).&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;History has shown that wherever the EPUB specs went beyond what popular browser engines implemented, the specs were &lt;em&gt;actively&lt;/em&gt; ignored. It's just &amp;quot;too hard&amp;quot;. It's not, of course. It &amp;quot;merely&amp;quot; requires two things: competent developers and people who give a shit. Both of these are very, very rare. Combined? Good luck. Oh yes, it requires one more thing: actual fucking work. Not just taking an existing browser engine, making it display XHTML in pages and calling that an RS. No, actual software development is required, and the most difficult kind of all: working with a huge, foreign code base. That's too much for most.&lt;/p&gt;  &lt;p&gt;As an example, I have to work with HTML Tidy since it's an internal component of Sigil. I can't tell you how happy it makes me to know I'll have to implement an HTML5 parser for it because of EPUB3. I'm truly ecstatic about this prospect. I fucking love the very idea of it. But I'll do it because it has to be done. And for the love of God bear in mind the difference in the quality of code between something like WebKit and Tidy.&lt;/p&gt;  &lt;p&gt;Tidy could easily be the world's most horrible code base. It's 40k lines of straight-up C, written in the most god-awful way. 800 line functions; cryptic, single-letter variable names; hacks upon hacks that step on other hacks; source comments that are either out of date, worthless&lt;sup&gt;[3]&lt;/sup&gt; or usually just plain wrong. Just... absolute, worthless junk abandoned by the original devs (and those that followed them) many years ago. Nobody works on Tidy anymore, at least not with the official project.&lt;/p&gt;  &lt;p&gt;And yet I work with it because I know I have to. WebKit source is worked on and maintained by hundreds of people and it's extremely well written. RS developers, get off your damn asses!&lt;/p&gt;  &lt;p&gt;To tell you the truth, I've been thinking about implementing an open-source RS for both the desktop and memory- and power-constrained devices &amp;quot;just to show 'em how it's done&amp;quot;. I have some sweet, sweet ideas for it. But I can bloody barely find the time to work on Sigil and FlightCrew. A &lt;em&gt;third&lt;/em&gt; project? I can't put the gun in my mouth fast enough.&lt;/p&gt;  &lt;p&gt;And don’t even get me started on the “quality” of the Reading Systems out there. I remember the day when we used to complain about ADE. Today, ADE is pretty much the best RS available. Do note that I said “the best available”, not “great”. Today, I’d give it a C. Everyone else gets an F on a good day, and a kick in the balls otherwise.&lt;/p&gt;  &lt;p&gt;The worst is certainly iBooks, as any epub creator will tell you. Ask one about their opinion of iBooks, and you can rest assured that the response will be filled to the brim with “fuck”s, “shit”s, “cunt”s, “motherfucker”s and “asshole”s. Apple loves to boast about support for open standards and how they’re important. As long as we’re talking about killing Flash. The EPUB specs can go fuck themselves. It’s not that they’re lazy, incompetent or don’t feel like investing the resources to improve their support for EPUB. It’s not about “missing”&amp;#160; functionality. They &lt;em&gt;intentionally&lt;/em&gt; went out and &lt;em&gt;broke things&lt;/em&gt; in Mobile WebKit to further their agenda. If they ever tried something similar in Safari, there would be a pitchfork-mob in Cupertino.&lt;/p&gt;  &lt;p&gt;But the number of people who make EPUB books (or work in publishing in general) compared to the number of people who develop for the web is… somewhat small. Not to mention that we as an industry are too busy sucking Apple’s dick to notice what’s going on. They can safely brick in our mouth. Oh no, Apple demands 30% off all subscriptions, in-app purchases and a lowest price? That really is the last straw. We’re now going to start sucking that dick very, &lt;em&gt;very&lt;/em&gt; slowly in protest. That will teach ‘em!&lt;/p&gt;  &lt;p&gt;You’d think I have something against what Apple is doing. Not at all. If someone lets you exploit them, by all means, go right ahead. Apple is screwing us only so much as we as an industry let them screw us. And now that people are starting to come around, we’re all like “OMG we have fifteen inches of Apple’s cock up our ass! What the hell happened?!”. We let it happen, that’s what. Inch by inch they kept shoving it, and we let it slide (yes, pun intended). Now we’d like them to back up a bit. Well guess what, when you have fifteen inches of cock up your ass, it’s hard to negotiate. The cock is the one setting the terms.&lt;/p&gt;  &lt;h3&gt;Weren’t we talking about EPUB3?&lt;/h3&gt;  &lt;p&gt;You’re right, I forgot. Here are some bullet points since I’m tired:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Greater emphasis on accessibility in the specs. Good that someone realized that the e-book movement is a godsend to people with poor vision. There was some support for this before, true, but now it's more front-and-center. &lt;/li&gt;    &lt;li&gt;&amp;quot;xml-stylesheet&amp;quot; support is required? Interesting and unexpected. I doubt any RS's will actually support it though. &lt;/li&gt;    &lt;li&gt;&amp;quot;This schema is normative. In case of conflicts between the specification prose and this schema, the schema shall be considered definitive.&amp;quot; Hell yeah! At least now we know which is considered definitive. Trust me, you'd encounter this problem if you ever tried to implement a validator. But NVDL, RELAX NG and Schematron? May as well say &amp;quot;you have to use Jing&amp;quot;. Some of us don't want to. How about providing an XML Schema schema? It's standard practice. Great, now I'll have to write my own... &lt;em&gt;again&lt;/em&gt;... &lt;/li&gt;    &lt;li&gt;Supplementary resources with &amp;lt;link&amp;gt; in &amp;lt;metadata&amp;gt;? Fancy. &lt;/li&gt;    &lt;li&gt;DCMES metadata elements &lt;a href="http://idpf.org/epub/30/spec/epub30-publications.html#sec-package-metadata-dcmi-transition"&gt;are being replaced&lt;/a&gt; by DCTERMS properties. This really is a good idea, the new system should be much more flexible. The transition period will be ugly, yes, but it's necessary. Good call on both the replacement and the transition. &lt;/li&gt;    &lt;li&gt;&amp;quot;Although the EPUB Navigation Document is required in EPUB Publications, it is optional to include it in the spine.&amp;quot; Yes! This will eliminate the need for those ugly &amp;quot;inline TOCs&amp;quot; people like to build where they would basically end up with &lt;em&gt;two&lt;/em&gt; different files describing the TOC. Now the NCX is basically an XHTML document that can be styled, and if you really want it in the reading order, go right ahead and include it in the &amp;lt;spine&amp;gt;. &lt;em&gt;Very&lt;/em&gt; nice. &lt;/li&gt;    &lt;li&gt;“page-spread-left&amp;quot; and &amp;quot;page-spread-right&amp;quot; on &amp;lt;spine&amp;gt; &amp;lt;itemref&amp;gt;s. Nice, but how many books use two-page spreads? &lt;/li&gt;    &lt;li&gt;Embedded MathML support is great. Nobody will care about the restrictions the IDPF has placed on its use. When RS's support MathML, it will be because the browser engine they use internally supports it, and that engine couldn't care less about the IDPF's MathML &amp;quot;restricted subset&amp;quot;. &lt;/li&gt;    &lt;li&gt;page-list nav gives support for cross-referencing an epub with the page numbers of a printed edition. This is important and as such will be used by publishers and (should be) supported by RS's… eventually. &lt;/li&gt;    &lt;li&gt;landmarks nav replaces the OPF &amp;lt;guide&amp;gt;. This is also very good. &lt;/li&gt;    &lt;li&gt;Media Overlays: feel free to ignore the existence of the &lt;em&gt;entirety&lt;/em&gt; of the Media Overlays sub-spec. I really mean that, you don't even have to read it. Just pretend it's not there since nobody will ever implement it. To add insult to injury, support for it is officially optional, so nobody even &lt;em&gt;needs&lt;/em&gt; to implement it. It's dead on arrival, much like DTBook was as a valid EPUB2 OPS syntax.       &lt;p&gt;Don't get me wrong, it would be great if RS's supported this. But they won't. Nobody ever made crazy money by catering to the visually impaired.&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Canonical Fragment Identifiers&lt;/h3&gt;  &lt;p&gt;This deserves a separate section. &lt;/p&gt;  &lt;p&gt;Canonical Fragment Identifiers are ridiculous, at least the scheme presented. They're complex to the point of absurdity. Even-numbered indices so as &amp;quot;not to be sensitive to XML parser handling of whitespace, entity references, and CDATA sections.&amp;quot;? This is ridiculously over-engineered. It has support for not only pointing at elements and their textual content (worthy goal), but at pixels in raster images, logical units in vector images, temporal locations in audio an video and if I understand the exclamation mark rules, even support for crossing documents.&lt;/p&gt;  &lt;p&gt;Look, you can't cram all that into a single scheme. You just can't. The WG should have just stopped at trying to point at textual content. The CFI scheme as written is silly and reminds me of the crap in SVG 1.2. Most people don't know that SVG requires support for things like &lt;a href="http://www.w3.org/TR/2004/WD-SVG12-20040510/#rawsocket"&gt;raw sockets&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/2004/WD-SVG12-20040510/#fileupload"&gt;file uploading&lt;/a&gt;. There's this desire in specification working groups to support every single use case imaginable and then some. Common sense goes out the door, and nobody is either willing or able to just say &amp;quot;NO!&amp;quot; to some of the requests. This is &lt;em&gt;exactly&lt;/em&gt; the kind of thing people think of when they say “&lt;a href="http://en.wikipedia.org/wiki/Design_by_committee"&gt;design by committee&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;This CFI scheme is absurd. The way it's designed, no one will support it. I know I certainly won't.&lt;/p&gt;  &lt;h3&gt;Suma summarum&lt;/h3&gt;  &lt;p&gt;That’s it. I’m all out. EPUB3 is nice, but most of it will be either a) misused or b) ignored. Neither is really the IDPF’s fault, but some of it is. The parts that people will support are nice and shiny, like page-list nav instead of the NCX or DCTERMS instead of DCMES.&lt;/p&gt;  &lt;p&gt;What do I know. Ignore me.&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] I ended up writing more than five pages, but most of the notes relate to low-level understanding of the changes from EPUB2, possible contradictions and implementation problems and the like. You know, the things I’ll need to pay attention to whilst working on Sigil and FlightCrew, but usually not things content creators need to care about.&lt;/p&gt;  &lt;p&gt;[2] That’s probably not accurate, but let’s pretend it is. There are some things that are just not worth complaining about.&lt;/p&gt;  &lt;p&gt;[3] &amp;quot;Thanks to X.Y. for reporting a problem with this function!&amp;quot; What kind of developer would actually write that above a function?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7275598472653015239?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7275598472653015239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/02/analysis-of-epub3-and-uh-bit-more.html#comment-form' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7275598472653015239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7275598472653015239'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/02/analysis-of-epub3-and-uh-bit-more.html' title='An analysis of EPUB3 (and, uh, a bit more)'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8081389113382616609</id><published>2011-02-17T15:21:00.001+01:00</published><updated>2011-02-17T15:21:19.979+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Official Twitter account for Sigil</title><content type='html'>&lt;p&gt;For those who missed &lt;a href="http://www.mobileread.com/forums/showthread.php?t=121698"&gt;the MobileRead thread&lt;/a&gt;, here’s a copy of what I said there:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I've decide to create &lt;/em&gt;&lt;a href="http://twitter.com/#!/sigileditor"&gt;&lt;em&gt;an official Twitter account for Sigil&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Why? Because on many occasions I've felt the desire to provide more up-to-date info on Sigil's development, but didn't think it was worth writing a whole blog post about. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Now it will be possible to occasionally say something like &amp;quot;I'm working on X, and it looks like this: [PICTURE]&amp;quot;, or &amp;quot;Life got complicated, dev work stopping for a couple of weeks&amp;quot;, or &amp;quot;A new release should be coming in the next few days&amp;quot; etc. That last example is a good one; such pre-announcements would enable people (and especially larger organizations) that are using Sigil to prepare for a new release. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The updates should be fairly low-volume (also, erratic; I'll post when I feel I have something worthwhile to share with others). &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;FlightCrew-related info will also end up there. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The dev blog will still be around as it's not being replaced.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;There’s already a screenshot of a few new 0.4.0 features in action. Check it out.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8081389113382616609?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8081389113382616609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/02/official-twitter-account-for-sigil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8081389113382616609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8081389113382616609'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/02/official-twitter-account-for-sigil.html' title='Official Twitter account for Sigil'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4777278051176437511</id><published>2011-02-01T16:56:00.001+01:00</published><updated>2011-02-01T17:46:50.206+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>And final exams are over… for good</title><content type='html'>&lt;p&gt;About a week ago I had my &lt;em&gt;final&lt;/em&gt; final exam (that sounds weird). This is it now. For the entire spring semester I have only my Master’s thesis to write, and it’s all finally over. While my friends will spend the next several months writing code for their thesis project, I’m basically free of this chore. Why? Well I’ve been working on Sigil for the last two years, and while it will never technically be finished, it is as far as the university is concerned. My internal thesis goals for it have been reached many moons ago (back in the 0.2.0 rewrite). That’s not to say I plan to stop working on it, but that I have no deadline pressures. Yippee. &lt;/p&gt;  &lt;p&gt;I’ll be working on it (hopefully) pretty much the same way I’ve been working on it until now, and that’s “when I find the time and the inclination”. Seeing how I don’t have any immediate obligations (I can write the ~50 pages for my thesis in a week or so, and the deadline is in June), the “time” part has gone up immensely and the “inclination” part is still holding strong. So hopefully I’ll be getting some serious work done.&lt;/p&gt;  &lt;p&gt;Actually there’s a mix of things I want to do in this fairly large block of free time. Here’s a list in approximate order in which I plan on doing them:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;REST! I spent the last week basically just sleeping and &lt;em&gt;breathing.&lt;/em&gt; The obligations, pressures and sleep-deprivation of the last several months have taken their toll. This R&amp;amp;R goal is fairly short-term. On a related note, it’s been a while since I spent a whole 24 hour period with my girlfriend. It’s strange how I almost forgot that those make life worth living. &lt;/li&gt;    &lt;li&gt;Read some fucking novels. I make a goddamn e-book editor, it’s about time I get the chance to read a few of the e-books I’ve made for myself. I used to devour novel after novel, and while I still read voraciously, the books I read don’t exactly qualify as literature. If I see just one more textbook on machine learning, cryptography, project management, numerical analysis or discreet math in general, I’ll claw my eyes out. &lt;/li&gt;    &lt;li&gt;Read some technical books. I enjoy learning new things and deepening my understanding of the things I &lt;em&gt;think&lt;/em&gt; I already know; besides, in this industry one needs to be constantly sharpening their skills. For instance, I’m currently going through Jon Skeet’s &lt;a href="http://www.manning.com/skeet2/"&gt;C# in Depth, Second Edition&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;sup&gt;[1]&lt;/sup&gt;. After that, it’s Chris Smith’s &lt;a href="http://oreilly.com/catalog/9780596153656"&gt;Programming F#&lt;/a&gt;. I know a bit of F# (and I really mean &lt;em&gt;a bit&lt;/em&gt;), but it’s time to get serious. It’s a truly wonderful language, and I’ve been enamored with the functional paradigm since my brush with Haskell two years ago, but F# strikes me as more practical than Haskell. Also, a book on advanced Python wouldn’t kill me, but I’ve yet to find an appropriate one&lt;sup&gt;[2]&lt;/sup&gt;. &lt;/li&gt;    &lt;li&gt;Start looking for a job, I guess. I hate this last part… &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Anyway, this change of pace will do me good. A lot of it, I expect.&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] I’ve literally been waiting for the second edition to come out &lt;em&gt;for years&lt;/em&gt;. It came out in November, and I’ve been waiting for some free time to read it ever since. Now, I’ve written tens of thousands of lines of C# code and I’d like to think I’m more than just proficient with the language, but Skeet can teach anyone something new. That includes me. &lt;/p&gt;  &lt;p&gt;[2] I really mean “advanced” Python. I know Python fairly well; I’ve read &lt;em&gt;Dive Into Python 2&lt;/em&gt; many years ago and I’ve used the language on &lt;em&gt;many&lt;/em&gt; projects since then, but I’m looking for a book from a true expert in the field that goes into the nitty-gritty. Something like Skeet’s &lt;em&gt;C# in Depth&lt;/em&gt;, but for Python. The official Python docs only go so far. They’re also a bit… let’s say conceptually scattered.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4777278051176437511?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4777278051176437511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/02/and-final-exams-are-over-for-good.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4777278051176437511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4777278051176437511'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/02/and-final-exams-are-over-for-good.html' title='And final exams are over… for good'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3991505357776440574</id><published>2011-01-12T14:34:00.001+01:00</published><updated>2011-01-12T14:34:51.125+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.4</title><content type='html'>&lt;p&gt;There was a regression in Sigil 0.3.3. This release is meant to address that. Changelog follow:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed a regression (&amp;quot;Not a folder&amp;quot; error) with opening certain epub files on Mac and Linux systems (issue #731)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This was caused by a bug in the ZipArchive library which I updated from 4.0.1 to 4.1.0 for Sigil 0.3.3. The bug has now been fixed.&lt;/p&gt;  &lt;p&gt;The bug only affected Mac and Linux users, so Windows users don’t really have a reason to update. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3991505357776440574?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3991505357776440574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/01/sigil-034.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3991505357776440574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3991505357776440574'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/01/sigil-034.html' title='Sigil 0.3.4'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7315540747662509141</id><published>2011-01-08T12:10:00.001+01:00</published><updated>2011-01-08T12:10:49.225+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.3</title><content type='html'>&lt;p&gt;The new release is in the downloads area. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;added a small &amp;quot;Donate&amp;quot; button to the toolbar and a related entry in the Help menu &lt;/li&gt;    &lt;li&gt;added a .desktop file for the make install target (courtesy of Richard Gibert) &lt;/li&gt;    &lt;li&gt;this time *really* worked around a Tidy bug that added blank lines to the start of &amp;lt;pre&amp;gt; and &amp;lt;style&amp;gt; elements (issue #655) &lt;/li&gt;    &lt;li&gt;updated ZipArchive from 4.0.1 to 4.1.0 &lt;/li&gt;    &lt;li&gt;fixed a regression crash bug with loading extremely rare HTML content documents that have an internal DTD subset &lt;/li&gt;    &lt;li&gt;added a workaround for a crash bug caused by invalid epubs that use obfuscated fonts but with incorrect UUID URN key syntax (issue #709) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;integrated the FlightCrew epub validation library; a new toolbar icon triggers epub validation and displays the results (issue #28) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;fixed a rare input truncation problem when the input file contains a unicode nbsp and also specifies standalone=&amp;quot;yes&amp;quot; in the XML declaration (issue #677) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So there it is, FlightCrew is finally a part of Sigil. There’s a green checkmark in the toolbar now; use it to trigger validation. You can also double-click in the list of validation results and Sigil will take you to the location of the error, if available and possible. Why “if possible”? Well Sigil doesn’t display the OPF and NCX files to the user (yet), so if you get a validation error in one of those, it can’t take you there. There are other limitations to the “take me to the error” feature, but it should work fairly well for XHTML files.&lt;/p&gt;  &lt;p&gt;Also, this release brings OpenCandy to the Windows installers. Read about the reasoning for that &lt;a href="http://sigildev.blogspot.com/2011/01/test-draft.html"&gt;in this blog post&lt;/a&gt;. A new installer builder is used for Windows installers (Inno instead of InstallJammer) which should fix some of the outstanding bugs with the IJ ones. &lt;em&gt;Please uninstall the old version of Sigil first!&lt;/em&gt; Nothing really bad should happen if you don’t, but just to be on the safe side, please do. &lt;/p&gt;  &lt;p&gt;Several people have also suggested and asked for a donate button in the UI, so one has been added. It’s a small red heart. You’ll be able to turn it off as soon as I make an options screen. :D&lt;/p&gt;  &lt;p&gt;I’ve also made some changes to the Mac build system, so if I screwed something up, please yell as loudly as possible… or just create an issue on the tracker about it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7315540747662509141?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7315540747662509141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/01/sigil-033.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7315540747662509141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7315540747662509141'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/01/sigil-033.html' title='Sigil 0.3.3'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7280284397403610910</id><published>2011-01-02T13:53:00.001+01:00</published><updated>2011-01-02T14:34:01.668+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>A more serious conversation</title><content type='html'>&lt;p&gt;&lt;em&gt;[This (very long) post contains a certain amount of frustrated swearing. You have been warned.]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Open source applications usually face one of three fates:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;If they’re not popular, they will be abandoned and forgotten. &lt;/li&gt;    &lt;li&gt;If they’re merely useful on occasion, they stagnate. &lt;/li&gt;    &lt;li&gt;If they’re popular and used often, they will get bloated beyond both recognition and usefulness. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I’m going to talk about the third one.&lt;/p&gt;  &lt;p&gt;A developer has an idea for an application. There’s a certain task he needs help with, and nothing out there really meets his needs. So he decides to sit down and design an application that will perform the required functions and help him achieve his goals.&lt;/p&gt;  &lt;p&gt;He decides that he will open source the code, for whatever reason. Maybe he’s an idealist. Maybe he’s a moron. It doesn’t matter, he just does it.&lt;/p&gt;  &lt;p&gt;The application proves popular, and people start coming to him with requests for new features and bug reports for existing ones. Proud of what he has created and more than happy to help others, he starts spending more and more time working on his app. &lt;/p&gt;  &lt;p&gt;He has a vision of what the application is supposed to look like; he sees &lt;em&gt;the big picture&lt;/em&gt; and where all the features—both current and future ones—fit in. Some people disagree with this picture, but that’s their problem; he likes it. He thinks it’s the bee’s knees, the cat’s whiskers and a bottle of Johnny Blue all making sweet, sweet love together. Basically, he thinks his view of what it’s supposed to look like is &lt;em&gt;fuckin’ A&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;He also realizes that any piece of software can’t just keep piling up obscure features; there’s a certain threshold of diminishing returns where the new “features” start getting in the way of using the old ones even for the old-timers, and the new users have no fucking clue what they’re looking at. It all just becomes an ungodly mess of buttons, windows and menus that no one sane can use to get any sensible work done even after reading through a 500 page manual.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;For a software application to stay away from bloat, the features added need to be useful for most of the users; not for just a vocal minority, and certainly not for just a few. Every new feature you add makes it slightly harder to use the old ones; it adds to the noise and eventually makes it difficult for the user to find what he wants and &lt;strong&gt;impossible&lt;/strong&gt; to discover it through exploration.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;All of this entails saying “no” to the requests that could otherwise be considered sensible, but that just don’t “jive” with the idea of what he’s trying to build. For instance, a request to “play FLAC encoded audio files” would make sense if he were building a music player, but makes somewhat less sense for an accounting application. Again, a request for a “counter that would track the number of noobs owned”; great for Unreal Tournament, less great for an FTP client. &lt;/p&gt;  &lt;p&gt;But these requests aren’t the problem. The requests that &lt;em&gt;are&lt;/em&gt; the problem are the ones that are useful to the person requesting them and &lt;em&gt;maybe&lt;/em&gt; five other people. &lt;/p&gt;  &lt;p&gt;I’ll elaborate shortly. Let’s imagine that our imaginary developer’s application has something to do with editing text. Now let’s imagine that this application is called… &lt;em&gt;Ligis.&lt;/em&gt; Yeah, that’s what we’re going to call it. Sounds kinda catchy.&lt;/p&gt;  &lt;p&gt;So someone comes along and says: “I work with romance novels every day. My publisher demands that all the text backgrounds be bright pink. Now, I could select the text in every chapter and apply the color to each of these, but my life would be &lt;em&gt;much&lt;/em&gt; easier if the main toolbar had a ‘Make all backgrounds pink’ button. Could you add one?”.&lt;/p&gt;  &lt;p&gt;Now, what our developer &lt;em&gt;wants &lt;/em&gt;to say is: “What are you, fucking retarded? Of course I’m not going to add that. Stop wasting my time. GTFO”. But being impolite to strangers is not something he’s willing to do (&lt;em&gt;especially&lt;/em&gt; not over the Internet; there's too much unkindness here as it is), so he merely responds with: “No, that would not be a useful feature”. He understands that the person who’s asking for this would really find it useful, it’s just that no one else would.&lt;/p&gt;  &lt;p&gt;The biggest problem are the people who come in with obscure feature requests like these but that are also willing to implement them themselves. This being open source and all, they’re willing to write code to get them in the mainline releases. It’s hard to say no to these folks, but a crappy feature is a crappy feature no matter who writes it. So he still says no, but hey if you’re willing to write code, the issue tracker is full of accepted feature requests you could implement. But the other dev doesn’t feel like it; he just wants his one issue in and doesn’t have the time for something else. And our original developer can respect that, honestly. Working on something for free purely for the benefit of others instead of spending the time to, say, watch a movie or read a book requires an unfortunately rare amount of altruism. &lt;/p&gt;  &lt;p&gt;And probably stupidity and/or naiveté.&lt;/p&gt;  &lt;p&gt;Ligis becomes even more popular. The more popular it gets, the more feature requests and bug reports that are actually valuable start coming in. &lt;/p&gt;  &lt;p&gt;For our intrepid developer, this reaches a point where there &lt;em&gt;just isn’t enough time&lt;/em&gt; in the day to both work on Ligis and to fulfill his other responsibilities in life. Or he just becomes too stressed out to work on it. Or he starts hating it all. Or he just flakes out. Or whatever. Again, it doesn’t matter; for some reason, he decides to stop working on it and hands off the reins to a new maintainer.&lt;/p&gt;  &lt;p&gt;The new maintainer does what most maintainers do: he fixes the major bugs as they’re reported and &lt;em&gt;maybe&lt;/em&gt; adds a minor feature or two. He pushes a new release once every six months, tops. He doesn’t add major features since he doesn’t have the time it would take to implement them. Hell, that’s the reason why the original developer left.&lt;/p&gt;  &lt;p&gt;But now random people start showing up willing to work on Ligis. The maintainer gladly accepts their help. The new devs start adding the features &lt;em&gt;they&lt;/em&gt; want, not necessarily the features that most of the users would find useful. I mean c’mon, this is open source, if the lusers want something done they should do it themselves. The new devs certainly don’t feel any kind of obligation towards them. And why should they? The new devs make drive-by changes they need and usually disappear afterwards. Even newer devs that also need some obscure feature replace them.&lt;/p&gt;  &lt;p&gt;This goes on and on, until Ligis becomes freakin’ &lt;em&gt;huge. &lt;/em&gt;Now it doesn’t merely have the kitchen sink; it has the sink, the toilet, the washing machine, the hair dryer, the bathtub and that little &lt;em&gt;bidet&lt;/em&gt; shit the French use to wash their ass in. In twenty colors each. Yes, gold and papaya too. &lt;/p&gt;  &lt;p&gt;The new devs were just throwing shit up against the wall until there was no more wall left, just a mountain of shit. Nobody had any vision of what the whole app was supposed to look like, no sense of scope. Scope? Fuck you and the scope you rode in on. I need my backgrounds pink and I need them pink &lt;em&gt;yesterday&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;A user of an old version of Ligis tries out one of the newer ones and feels the need to talk to the devs.&lt;/p&gt;  &lt;p&gt;User: “Hi guys! I like the bidets in the new version. They really bring out the splash screen. I also enjoy the new mango-cyan color scheme. I have just one question though: I’ve noticed that there’s a mountain of shit where this wall used to be. There was a door in this wall, and I used to go through it every day on my way to work. Really useful door, that. Do you know what happened to it?”&lt;/p&gt;  &lt;p&gt;Devs: “Oh the door is still there. We just didn’t have anywhere to put all this shit so we just piled it on top of the door. We have a couple of shovels in the back if you still want to get to it. This is our usual advice to the ever-popular how-do-I-get-to-the-door question. Have you read the Manual?”&lt;/p&gt;  &lt;p&gt;User: “Uh… can’t you just remove the shit so that people wouldn’t have to shovel their way through?”&lt;/p&gt;  &lt;p&gt;Devs: “Like we said, the door is still there. Take this shovel and the Manual, volumes three through sixteen; they will explain how to dig out a path. Watch for the landmines, the shark and the koala. The shark is friendly but the koala bites.”&lt;/p&gt;  &lt;p&gt;User: “But why do I have to dig this long and winding path? Why can’t I for instance remove this pile of shit right here for good?”&lt;/p&gt;  &lt;p&gt;Devs: “That pile makes all the backgrounds pink. You can’t remove that, it’s our killer feature.”&lt;/p&gt;  &lt;p&gt;User: “And this pile right here?”&lt;/p&gt;  &lt;p&gt;Devs: “That’s a Lisp interpreter. Don’t touch that.”&lt;/p&gt;  &lt;p&gt;User: “*sigh*, forget the door. Could you just fix this one obvious bug? Every time I hit the spacebar the whole computer reboots. It makes it difficult to type.”&lt;/p&gt;  &lt;p&gt;Devs: “Yeah, we’ve been meaning to get to that one. Steve has been working on it since ‘95.”&lt;/p&gt;  &lt;p&gt;Steve: “Still haven’t been able to crack it though. I can follow the call from the GUI layer to the new COBOL backend and through the kernel modules, but I get lost in the Space Shuttle diagrams.”&lt;/p&gt;  &lt;p&gt;User: “Screw you guys, I’m going back to the old version.”&lt;/p&gt;  &lt;p&gt;This is what happens when the original developers go away. True, sometimes it happens while the original developers are still very much active, but that’s a different issue entirely.&lt;/p&gt;  &lt;h3&gt;The point, please?&lt;/h3&gt;  &lt;p&gt;Why am I talking about all this?&lt;/p&gt;  &lt;p&gt;I’m talking about it because this scenario&lt;sup&gt;1&lt;/sup&gt; &lt;em&gt;literally&lt;/em&gt; keeps me up at night. I’m able to justify the time I put into Sigil while I’m still in grad school, but that’s slowly coming to an end. I graduate soon. College takes a lot of your energy, but it’s in ups and downs. There are weeks where you spend twelve hours a day doing school-related work, and then there are “quiet” weeks. It’s during those that I worked on Sigil. Even then, I could only justify the time investment by making Sigil both my Bachelor’s and my Master’s thesis.&lt;/p&gt;  &lt;p&gt;Since that’s all ending, it would be great to find some funding for future development. To that end, I’d like to add an &lt;a href="http://www.opencandy.com/"&gt;OpenCandy&lt;/a&gt; powered advertisement to the Sigil installers for Windows&lt;sup&gt;2&lt;/sup&gt;. It’s one of those “would you like to also install software X?” recommendations you sometimes see in installers.&lt;strong&gt; It would be turned OFF by default,&lt;/strong&gt; meaning that if you just click Next, Next, Next, Finish, you will only ever install Sigil and nothing else. You can read an interesting CNET article about OpenCandy &lt;a href="http://news.cnet.com/8301-17939_109-10094314-2.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Some key points:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;As mentioned, any such “do you want to also install X” question would be set to &lt;strong&gt;NO&lt;/strong&gt; by default (or deselected entirely). &lt;/li&gt;    &lt;li&gt;The installers wouldn’t grow in size since the recommended software wouldn’t be included in the installer, only a piece of logic that would query the OpenCandy servers for a recommendation and download a different installer if the user chose to install that extra software. &lt;/li&gt;    &lt;li&gt;No ads are displayed after the installer finishes. No ads would be in Sigil. &lt;/li&gt;    &lt;li&gt;No malware, no adware and no spyware would be allowed to advertise. Developers get full control over the applications that can advertise in their installers, and can block anything they disagree with. An example of the type of companies/apps that currently advertise in the OpenCandy network are Kaspersky, Bing, Winamp, StumbleUpon etc. Respectable companies. &lt;/li&gt;    &lt;li&gt;This OpenCandy service seems popular in the OSS world as a funding source. WinSCP uses it, Miro uses it, Audacity uses it. &lt;/li&gt;    &lt;li&gt;OpenCandy would also advertise other OSS software inside the installer. That seems nice. Sigil is becoming more and more prominent, and I’d like to use that to promote other OSS apps as well. &lt;/li&gt;    &lt;li&gt;Sigil is still free and open source. No proprietary code will enter the repository or Sigil. &lt;/li&gt;    &lt;li&gt;Sigil functionality is not changed in any way, regardless of whether you install the extra software or not. &lt;/li&gt;    &lt;li&gt;Mac and Linux users are not affected in any way. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Basically it’s just a single ad in the Windows installer. Nothing else.&lt;/p&gt;  &lt;p&gt;But since the Sigil user community is something absolutely awesome, I’m asking for opinions. If enough of you come forward with valid concerns and arguments against this deal, I’m saying no. To tell you the truth, I don’t expect much from this deal in terms of revenue; peanuts per month, if that. But it would give me something to point at and say: “See? I can justify the time investment”. And hey, maybe it amounts to something one day.&lt;/p&gt;  &lt;p&gt;You can post your opinions here in the comments or in &lt;a href="http://www.mobileread.com/forums/showthread.php?t=114268"&gt;this MobileRead thread&lt;/a&gt;. I’m not looking for a vote, I’m looking for a discussion. Bring your eloquence.&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] OK, something less insane but you get the point.&lt;/p&gt;  &lt;p&gt;[2] They actually approached me about it. Good timing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7280284397403610910?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7280284397403610910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2011/01/more-serious-conversation_02.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7280284397403610910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7280284397403610910'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2011/01/more-serious-conversation_02.html' title='A more serious conversation'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-9199059046056407172</id><published>2010-11-24T13:25:00.001+01:00</published><updated>2010-11-24T13:25:14.487+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.2</title><content type='html'>&lt;p&gt;You can get the release in &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;the downloads area&lt;/a&gt;. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;added a new toolbar button for turning Tidy cleaning on/off; this option is also available from the Tools menu (issue #553) &lt;/li&gt;    &lt;li&gt;added support for TrueType Collection fonts with extension TTC &lt;/li&gt;    &lt;li&gt;InDesign (as of CS5) refuses to list the fonts it embeds in the OPF manifest of the epub files it exports, even though the epub standard demands it. This causes Sigil to not pick up these fonts when opening such epub files. A workaround has been added that will detect such problematic epubs and then load the font files. &lt;/li&gt;    &lt;li&gt;worked around a Tidy bug that added blank lines to the start of &amp;lt;pre&amp;gt; and &amp;lt;style&amp;gt; elements (issue #655) &lt;/li&gt;    &lt;li&gt;fixed a rare crash issue when loading epub files &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All of these fixes have been in the repo for a while now; I wanted to get a few more things in before pushing a new release, but I’m so pressed for time right now that I know I won’t be able to do it any time soon.&lt;/p&gt;  &lt;p&gt;The most notable changes are a new toolbar button for turning off Tidy cleaning. A bare-bones version of Tidy will still run to make sure your source is valid XHTML, but there is no element rewriting or CSS extraction etc. When you turn it off, it’s off for loading, view switches… everywhere. &lt;/p&gt;  &lt;p&gt;The second notable change is a workaround for InDesign’s crappy epubs with embedded fonts. Since ID doesn’t list them in the manifest, previous versions of Sigil wouldn’t pick them up during import (that’s what the standards say should happen). 0.3.2 will notice when such ID epubs are loaded and pick up the fonts.&lt;/p&gt;  &lt;p&gt;Same thing goes for TrueType Collection fonts; ID puts them in the epub even though the standard only allows TTF’s and OTF’s… Sigil will pick up TTC’s too now if your epub has them. You shouldn’t use them, but Sigil shouldn’t silently drop them if you do. The choice should be up to the user.&lt;/p&gt;  &lt;p&gt;With these and previous font de-obfuscation changes in place, support for InDesign epubs with embedded fonts should be fairly complete.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-9199059046056407172?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/9199059046056407172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/11/sigil-032.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/9199059046056407172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/9199059046056407172'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/11/sigil-032.html' title='Sigil 0.3.2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8089528621447790</id><published>2010-11-11T21:42:00.001+01:00</published><updated>2010-11-11T21:44:35.718+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlightCrew'/><title type='text'>FlightCrew 0.7.1</title><content type='html'>&lt;p&gt;The release is &lt;a href="http://code.google.com/p/flightcrew/downloads/list"&gt;here&lt;/a&gt;. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;added an automatic update checker to the GUI app &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;the GUI now displays a &amp;quot;No problems found&amp;quot; message when the epub passes all checks (issue #9) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;fixed an issue with missing XHTML files causing the GUI to show a dialog about an std::exception and the CLI to report that the epub itself was not present (issue #8) &lt;/li&gt;    &lt;li&gt;fixed an issue that was causing empty error messages for incorrect uses of XML encodings (issue #5) &lt;/li&gt;    &lt;li&gt;fixed an issue with anchor links to the current file (links with fragments only) incorrectly throwing errors in the reachability analysis (issue #3) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Besides some nice bug fixes, you also get two nice features: a message is now displayed when no problems have been found (lots of people asked for that one… and I agree, it should have been there from day one) and an update checker for the GUI app. The update checker is the same module used in Sigil, so it works the same way. It will notify you when you start the app that a new version exists if it detects one on the server. The check is only performed if the last one was more than six hours ago.&lt;/p&gt;  &lt;p&gt;This of course means that FlightCrew-gui will now access the Internet when you start it.&lt;/p&gt;  &lt;p&gt;Also note that the installers now install everything in a “FlightCrew” folder by default, and not in “FlightCrew-gui”. This means that FC 0.7.1 will &lt;em&gt;not&lt;/em&gt; overwrite an installation of FC 0.7.0. You should uninstall the old one before installing the new one, otherwise you’ll end up with two different versions of FC on your computer. It won’t prevent either from working correctly, it’s just annoying. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh5.ggpht.com/_gI6mrRJtYT4/TNxVITDDe0I/AAAAAAAAAKQ/HuPlU0iWHaw/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;Mac users will see that there is now a “FlightCrew-cli” application along with “FlightCrew-gui.app” in the DMG. It should have been there in the first release, but I forgot to add it. Such is life.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8089528621447790?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8089528621447790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/11/flightcrew-071.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8089528621447790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8089528621447790'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/11/flightcrew-071.html' title='FlightCrew 0.7.1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_gI6mrRJtYT4/TNxVITDDe0I/AAAAAAAAAKQ/HuPlU0iWHaw/s72-c/wlEmoticon-smile%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3867712373995705203</id><published>2010-11-07T23:14:00.001+01:00</published><updated>2010-11-07T23:30:33.010+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>0.3.1</title><content type='html'>&lt;p&gt;You know the drill. You can get the new release &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;here&lt;/a&gt;, and the changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;added a new &amp;quot;Font Obfuscation&amp;quot; context menu for font files in the Book Browser; the user can now select (or de-select) the use of Adobe's or the IDPF's font obfuscation methods; this also resolves the problem where Sigil refused to open epub files that use such obfuscated fonts with the message that the epub has DRM &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;fixed a validation issue caused by Sigil using &amp;quot;application/x-font-opentype&amp;quot; as the OPF mimetype instead of &amp;quot;application/vnd.ms-opentype&amp;quot; &lt;/li&gt;    &lt;li&gt;fixed a crash when opening the TOC editor for some epub files (issue #654) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are two reasons why you are seeing a new release so soon: the first one is an unfortunate bug that causes a crash when opening the TOC editor for certain epub files. While rare, it can still happen and frankly, it’s not rare enough. This needed to be fixed pronto.&lt;/p&gt;  &lt;p&gt;The second reason is the recent introduction of the “this epub has DRM and cannot be opened” message for epubs that have an “encryption.xml” file in the META-INF folder. The message is valid since Sigil can’t open encrypted epub files (nothing can without the key, that’s the sad point of DRM), but unfortunately Adobe InDesign obfuscates embedded font files. This, naturally, creates an entry in the “encryption.xml” and now Sigil refuses to open your epub. And the only thing you did was tell InDesign to embed a font.&lt;/p&gt;  &lt;p&gt;As far as I know, it’s not possible to tell InDesign &lt;em&gt;not&lt;/em&gt; to obfuscate embedded fonts. It does this by default. The sad thing is that most people don’t know this is happening; they just embed the fonts and since they appear to work fine when the epub is opened with ADE, they call it a day. Personally, I have a problem with this: if Adobe wants to placate the font foundries with some &lt;a href="http://www.adobe.com/content/dam/Adobe/en/devnet/digitalpublishing/pdfs/content_protection.pdf"&gt;patently absurd font mangling scheme&lt;/a&gt;, fine. But give the user a choice of turning this crap off. Or at the very least tell them it’s happening. If I were Adobe, I’d spend less time thinking up such nonsense and more time improving their epub export option since it’s currently… somewhat unusable&lt;sup&gt;[1]&lt;/sup&gt;.&lt;/p&gt;  &lt;p&gt;Don’t get me wrong, I know perfectly well &lt;em&gt;why&lt;/em&gt; they want fonts obfuscated: licensing issues. Most font licenses don’t allow embedding a font in a way that the font itself can be easily extracted from the distributed file. Font obfuscation is &lt;em&gt;thought&lt;/em&gt; to solve this. &lt;/p&gt;  &lt;p&gt;It doesn’t.&lt;/p&gt;  &lt;p&gt;De-obfuscating a font mangled in such a way is &lt;em&gt;laughably&lt;/em&gt; trivial; a twelve-year-old could write a program in 10 minutes that de-obfuscates the font files. The same thing goes for &lt;a href="http://www.idpf.org/doc_library/informationaldocs/FontManglingSpec.html"&gt;the IDPF’s method.&lt;/a&gt; It doesn’t prevent anyone from doing anything. While I find the whole thing ridiculous, I understand some want to give themselves at least an illusion of legal justification. All I’m saying is that Adobe shouldn’t be forcing people who know better into using something so silly.&lt;/p&gt;  &lt;p&gt;Little do the users of InDesign know that this scheme makes their epub files &lt;em&gt;invalid&lt;/em&gt; and that such fonts will &lt;em&gt;only&lt;/em&gt; work in Reading Systems that support this. It works in ADE since Adobe naturally made sure that their RS supports their font obfuscation method. While I personally think that font obfuscation is utterly pointless, lots of Sigil’s users have epubs coming from InDesign… So Sigil has to cave.&lt;/p&gt;  &lt;p&gt;You will notice that there is now a new right-click context menu entry for font files in the Book Browser. Under the “Font Obfuscation” sub-menu, you will see two actions: “Use Adobe’s Method” and “Use IDPF’s Method”. These select which font obfuscation method to use on the font files.&lt;/p&gt;  &lt;p&gt;By default, the state in which the font file was found when the epub was opened is preserved when saving; so if you open an epub file with InDesign-embedded fonts, you will see a check-mark next to&amp;#160; “Use Adobe’s Method” in the&amp;#160; “Font Obfuscation” sub-menu. This means that the obfuscation is in place and will be preserved after a save. You can also click on “Use Adobe’s Method” to remove the check-mark, thus un-obfuscating the font file (I &lt;em&gt;highly&lt;/em&gt; recommend this). Same thing goes for&amp;#160; “Use IDPF’s Method”; clicking on a checked method unchecks it and removes the obfuscation.&lt;/p&gt;  &lt;p&gt;Since Sigil now supports font obfuscation (and de-obfuscation), you will not see that “cannot open because of DRM” message for epubs that use such fonts.&lt;/p&gt;  &lt;p&gt;Don’t forget that InDesign &lt;em&gt;still&lt;/em&gt;&lt;sup&gt;[2]&lt;/sup&gt; flat-out refuses to to list the embedded fonts in the OPF file, even though the specs say it has to. That means the fonts won’t be picked up when the epub is opened in Sigil. I’ll probably add &lt;em&gt;yet another&lt;/em&gt; InDesign workaround down the line to handle this. &lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] That’s the most restraint I’ve shown in a year.&lt;/p&gt;  &lt;p&gt;[2] As of CS5. I just checked.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3867712373995705203?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3867712373995705203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/11/031.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3867712373995705203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3867712373995705203'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/11/031.html' title='0.3.1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1743663103152303656</id><published>2010-11-04T15:33:00.002+01:00</published><updated>2010-11-28T14:59:38.409+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>0.3.0 FINAL</title><content type='html'>&lt;p&gt;&lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;So here it is&lt;/a&gt;, the final version of 0.3.0. The changelog from 0.3.0 FINAL follows. Don’t forget that if you’re coming from 0.2.4, changes from &lt;a href="http://sigildev.blogspot.com/2010/10/sigil-030rc1.html"&gt;RC1&lt;/a&gt; and &lt;a href="http://sigildev.blogspot.com/2010/10/sigil-030rc2.html"&gt;RC2&lt;/a&gt; also apply.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;root rights no longer needed to install on Linux &lt;/li&gt;
&lt;li&gt;fixed an issue with some child headings being attached to incorrect parent headings in the TOC if the parent was marked as &amp;quot;not in TOC&amp;quot; (issue #476) &lt;/li&gt;
&lt;li&gt;fixed an issue with some UTF-8 characters outside the BMP (usually CJK characters) not being saved properly (issue #180) &lt;/li&gt;
&lt;li&gt;fixed an issue with certain path types not being correctly updated as a result of the fix for issue #501 (issue #561) &lt;/li&gt;
&lt;li&gt;the Book Browser now prevents adding files that already exist in the epub &lt;/li&gt;
&lt;li&gt;previously, when adding external XHTML files through the Book Browser, any files (like CSS stylesheets or images) that were linked from that file were included in the epub under a different name if their original name was &amp;quot;taken&amp;quot;; this caused duplicates so this behavior has changed: files whose names are &amp;quot;taken&amp;quot; are now skipped over (issue #482) &lt;/li&gt;
&lt;li&gt;fixed a rare issue that caused incorrect path updates for anchor links pointing to file names that were suffixes of other chapter file names, and the anchor had a fragment ID (issue #598) &lt;/li&gt;
&lt;li&gt;fixed an issue with the image paths in background-image CSS rules not being updated when the path changes (issue #594) &lt;/li&gt;
&lt;li&gt;Sigil now informs the user that DRMed files cannot be opened, instead of just crashing (issue #624) &lt;/li&gt;
&lt;li&gt;this time *really* fixed the &amp;quot;acknowledgments&amp;quot; error that was reported as fixed in RC1 &lt;/li&gt;
&lt;li&gt;fixed a crash on load (with an error dialog) issue on Linux systems occurring when multiple users on the same machine tried to use Sigil (issue #642) &lt;/li&gt;
&lt;li&gt;fixed a randomly occurring crash, usually triggered on Macs during loading (issue #643) &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And now I’m off to give &lt;a href="http://sigildev.blogspot.com/2010/10/introducing-flightcrew-epub-validator.html"&gt;FlightCrew&lt;/a&gt; some much-needed love.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1743663103152303656?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1743663103152303656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/11/030-final.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1743663103152303656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1743663103152303656'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/11/030-final.html' title='0.3.0 FINAL'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4807275517282510367</id><published>2010-10-08T20:27:00.001+02:00</published><updated>2010-10-08T20:27:53.662+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.0RC2</title><content type='html'>&lt;p&gt;Well that was fast.&lt;/p&gt;  &lt;p&gt;A file-corruption-on-save issue was detected in RC1 after it was published. It was taken down until the problem was resolved, and now it has been.&lt;/p&gt;  &lt;p&gt;RC2 is &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;now available for download&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4807275517282510367?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4807275517282510367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/10/sigil-030rc2.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4807275517282510367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4807275517282510367'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/10/sigil-030rc2.html' title='Sigil 0.3.0RC2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7434485686279550645</id><published>2010-10-08T17:19:00.001+02:00</published><updated>2010-10-08T17:19:08.411+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigil'/><title type='text'>Sigil 0.3.0RC1</title><content type='html'>&lt;p&gt;I’ve &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;just released Sigil 0.3.0RC1&lt;/a&gt;. Please note that this release include some &lt;strong&gt;major&lt;/strong&gt; changes under the hood, and as such &lt;strong&gt;may not be very stable&lt;/strong&gt;. From the test I’ve made, it works great. Any problems I’ve found I’ve quickly fixed. But since this release brings a new version of Qt and completely replaces the internal XML DOM provider from QDom to Xerces, there are bound to be some regressions I’ve missed. &lt;strong&gt;Bear that in mind&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Here’s the changelog:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed a validation issue caused by using the American spelling for &amp;quot;acknowledgments&amp;quot; where the OPF spec uses the British &amp;quot;acknowledgements&amp;quot; (issue #611) &lt;/li&gt;    &lt;li&gt;Sigil now uses &amp;quot;application/x-font-ttf&amp;quot; as the media type in the OPF for TrueType fonts (issue #609) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;on Mac OS X, the universal build now includes an x64 version of Sigil, and builds now use Cocoa instead of Carbon; support for Mac OS X 10.4 is dropped along with support for PowerPC Macs &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;fixed a problem with opening files from the Ubuntu &amp;quot;Open With&amp;quot; menu (issue #524) &lt;/li&gt;    &lt;li&gt;made Tidy handle common user errors like &amp;quot;&amp;amp;co.&amp;quot; in the HTML source instead of &amp;quot;&amp;amp;amp;co.&amp;quot; &lt;/li&gt;    &lt;li&gt;fixed a rare Tidy bug with disappearing spaces when the only whitespace in an element was the newline following a start tag (issue #387) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;changed the internal DOM engine from Qt's QDom to Xerces; this should also bring numerous bug fixes and performance improvements plus a small (~10%) decrease in memory consumption (issue #367) &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;updated Qt to 4.7: this should bring a 400%+ performance increase in Book View rendering along with countless smaller performance improvements and bug fixes across the board &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;switched to the MSVC 10 compiler for Windows releases; should bring ~5% general performance improvement &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;fixed several crash/error problems relating to opening, saving and modifying epub files which have onerous file permissions set for internal content files (issue #574)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;added a workaround for broken epubs created by other epub-producing software which caused a crash on certain searches with the Find dialog (issue #548) &lt;/li&gt;    &lt;li&gt;fixed a problem with Book Browser's &amp;quot;Merge with previous&amp;quot; action if a file was previously deleted from the Book Browser (issue #565) &lt;/li&gt;    &lt;li&gt;fixed a problem with chapter splits being placed in the wrong reading order if a file was previously deleted from the Book Browser (issue #497) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Performance improvements all around, plus some major fixes. Mac and Linux users would sometimes get a “permission denied” error when opening an epub with Sigil; this was caused by badly constructed epub files. A workaround has been implemented so you should not see this anymore.&lt;/p&gt;  &lt;p&gt;Mac users also get an x64 build in the universal binary, and this should bring another 10% performance improvement to people who have a Mac that can support this architecture. Support for Tiger is &lt;a href="http://sigildev.blogspot.com/2010/10/mac-os-x-104-support-is-going-way-of.html"&gt;dropped&lt;/a&gt; along with support for PowerPC Macs.&lt;/p&gt;  &lt;p&gt;Linux users get some custom love too: you should now be able to use Ubuntu’s “Open With” menu with Sigil.&lt;/p&gt;  &lt;p&gt;If you see any regressions, please report them ASAP. Sigil 0.2.4 stays the “official” versions until any major problems with 0.3.0 are resolved.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7434485686279550645?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7434485686279550645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/10/sigil-030rc1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7434485686279550645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7434485686279550645'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/10/sigil-030rc1.html' title='Sigil 0.3.0RC1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7493554933364953521</id><published>2010-10-02T22:26:00.001+02:00</published><updated>2010-10-02T22:52:34.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlightCrew'/><title type='text'>Introducing FlightCrew, the epub validator</title><content type='html'>&lt;p&gt;I’ve been &lt;a href="http://sigildev.blogspot.com/2010/07/vacation-and-validation.html"&gt;talking about this&lt;/a&gt; for a while under the name of “that epub validating library”, and now it has a name. That name is &lt;a href="http://code.google.com/p/flightcrew/"&gt;FlightCrew&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It’s a C++, cross-platform, native code epub validator (it’s also open source). The project is composed of three parts:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;FlightCrew, the validation library; &lt;/li&gt;    &lt;li&gt;FlightCrew-cli, the command-line front-end to the FlightCrew library; &lt;/li&gt;    &lt;li&gt;FlightCrew-gui, the GUI front-end to the FlightCrew library. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are installers and DMG’s for download that package FlightCrew-gui, which provides a nice GUI interface to the underlying library. Errors have a reddish background (ok, it’s pink), while warnings have a yellow one. Here’s a screenshot:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://imgur.com/cpKU2.png"&gt;&lt;img src="http://imgur.com/cpKU2.png" width="520" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve kept the interface to a minimum on purpose. There’s something to be said about simplicity. As &lt;a href="http://en.wikipedia.org/wiki/Antoine_de_Saint-Exupery"&gt;Antoine de Saint-Exupéry&lt;/a&gt; said: &lt;em&gt;“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;You can also drag files from your desktop or file browser and drop them on the FlightCrew-gui window. This will instantly run validation checks on it. This drag-and-drop interface works on all platforms.&lt;/p&gt;  &lt;p&gt;FlightCrew-cli is included in all packages of FlightCrew-gui, and does the same thing as that application only from a command-line interface. It works the way epubcheck works—feed it a file, it spews out warnings and errors if necessary.&lt;/p&gt;  &lt;p&gt;The current version number for all this is 0.7.0, which I’m using as a sort-of indication of it’s completness. I started working on this back in July, but since there was a rather lovely summer between now and then, it has only had about a month and a half’s work put into it. It’s still roughly 20 KLOC with a complete test suite, so it’s no slouch.&lt;/p&gt;  &lt;h4&gt;Why FlightCrew is better than epubcheck&lt;/h4&gt;  &lt;p&gt;First off, “better” is a dirty word. Each tool has its pros and cons. Epubcheck’s (EC) advantage is that it checks for a few things FlightCrew (FC) doesn’t (yet). But the reverse is also true: FC checks for a &lt;em&gt;lot&lt;/em&gt; of things EC doesn’t. Off the top of my head, FC performs an extensive reachability analysis and will warn you if you have some resources listed in the manifest that are not used anywhere. It will also report an error if you have an OPS&lt;sup&gt;1&lt;/sup&gt; document that the user can reach—through the &amp;lt;guide&amp;gt; or &amp;lt;tours&amp;gt; element, the NCX or just normal links in the text—but that is not listed in the &amp;lt;spine&amp;gt;. This is one crucial mistake that can now be caught. Reachability analysis also catches files that are used but not present in the manifest.&lt;/p&gt;  &lt;p&gt;There are many other things that FC will check for that EC will not, and most of those you care about deeply and just don’t know it. The things EC checks for that FC doesn’t? Two “big ones”: OPF-listed fallbacks and DTBook syntax verification. If you haven’t heard of either, then you’ve never used them, never will and probably shouldn’t. These are very rarely used features of epub that I have personally never seen used in practice. But they’re big parts of the epub specifications so FC should check for them (and will, fairly soon) for the sake of completeness. There are a few other odds and ends that EC looks for but FC doesn’t.&lt;/p&gt;  &lt;p&gt;But here’s where FC blows EC out of the water…&lt;/p&gt;  &lt;h4&gt;Error reporting done right&lt;/h4&gt;  &lt;p&gt;Let’s pretend I don’t know most of the epub specs by heart and that I’m a newcomer to epub. I made my first epub book, and I’ve heard that I should validate it. I’ve downloaded both FC and EC and now I’m going to use both. I’m going to use EC first because I’ve heard it’s “what the pros use”. Note that the a pair of EC/FC examples refers to the exact same problem with the file, and the messages usually come with line numbers (unless otherwise specified) which have been omitted. Commentary has been added for the sake of ridicule.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;EC: length of first filename in archive must be 8, but was 19 [no line number, ed.]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Um… what? WTF is that supposed to mean? What filename? And why must it be exactly 8? What the hell are you talking about?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FC: Bytes 30-60 of your epub file are invalid. This means that one or more of the following rules are not satisfied:      &lt;br /&gt;&amp;#160; 1. There needs to be a &amp;quot;mimetype&amp;quot; file in the root folder.       &lt;br /&gt;&amp;#160; 2. Its content needs to be *exactly* &amp;quot;application/epub+zip&amp;quot;.       &lt;br /&gt;&amp;#160; 3. It needs to be the first file in the epub zip archive.       &lt;br /&gt;&amp;#160; 4. It needs to be uncompressed. [no line number, ed.]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ah… not only does this point out the problem (correctly!), it also tells me how to fix it. Nice.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;EC: required attributes missing&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Huh? I understand that you’re trying to tell me that some required attributes are missing (one or more? you haven’t said), but how about telling me &lt;em&gt;which ones&lt;/em&gt; you frigging bastard. Am I supposed to read through the entire XHTML specification, hunting down which attributes this element should declare or even know that I’m supposed to do exactly that?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FC: missing required attribute 'alt'&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Thanks! That was awesome. Saved me a ton o’ hassle.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;EC: unfinished element&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Exceedingly useful, that. Mind telling me &lt;em&gt;how &lt;/em&gt;it’s unfinished?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FC: The &amp;lt;title&amp;gt; element is missing.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now that’s more like it. I’d kiss you if I could.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;EC: unfinished element&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Didn’t you just say this? And on the exact same element? Why am I getting this again, I thought I fixed this…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FC: The &amp;lt;identifier&amp;gt; element is missing.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You just keep getting better and better! &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;EC: unfinished element&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Fuck you, epubcheck. Fuck you.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FC: The &amp;lt;language&amp;gt; element is missing.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Want to pet my cat? ‘Cause you’re awesome, and I only let awesome things pet my cat.&lt;/p&gt;  &lt;p&gt;Back to reality. I hope you got the point, cause if you haven’t, I can pull out tons of other examples.&lt;/p&gt;  &lt;p&gt;Now I know that most of the error messages from EC are actually coming from an internal component of it called Jing and &lt;em&gt;that&lt;/em&gt; has crappy error messages, but as a user &lt;em&gt;I don’t care.&lt;/em&gt; Adobe should use something better instead, or fix Jing. And lots of the crappy messages come from EC core; that little “length of filename” gem was all theirs.&lt;/p&gt;  &lt;p&gt;Have I also mentioned that EC development is pretty much dead? From it’s &lt;a href="http://code.google.com/p/epubcheck/source/list"&gt;public source repository&lt;/a&gt;, it has had a whopping &lt;em&gt;one&lt;/em&gt; source code commit in the last ten months, and that commit was four days ago.&lt;/p&gt;  &lt;p&gt;In short, use FC first, then EC to get some of the checks FC doesn’t (yet) perform. After FC becomes a strict superset of all EC functionality (roughly a couple of months), drag epubcheck down to the cellar and &lt;em&gt;shoot it in the back of the head.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Or just stop using it, if you prefer.&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] A funny way of saying HTML document. It’s more than that of course, but for now mentally replace “OPS” with “HTML” .&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7493554933364953521?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7493554933364953521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/10/introducing-flightcrew-epub-validator.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7493554933364953521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7493554933364953521'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/10/introducing-flightcrew-epub-validator.html' title='Introducing FlightCrew, the epub validator'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3864162986445604649</id><published>2010-10-01T19:42:00.001+02:00</published><updated>2010-10-01T19:42:50.300+02:00</updated><title type='text'>Mac OS X 10.4 support is going the way of the dodo</title><content type='html'>&lt;p&gt;Just a quick note to people who may still be using Sigil on Tiger: 0.2.4 was the last version to feature support&amp;#160; for that operating system. Why? Many reasons. Let’s start with a&amp;#160; few:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sigil 0.3.0 will use Qt 4.7, and Nokia is slowly discontinuing support for Carbon with this release. It’s still there, but it’s second-tier.&lt;/li&gt;    &lt;li&gt;So far, Sigil was offered in 32bit versions for PPC and Intel architectures on Mac (as a universal binary). I want to provide 64bit versions, and for that I need to use the Cocoa version of Qt, which doesn’t exist for Tiger.&lt;/li&gt;    &lt;li&gt;From site statistics, about 4.5% of all Mac users of Sigil use Tiger. 73% use Snow Leopard. These people would like explicit 64 bit support, and could certainly put it to good use. As &lt;a href="http://sigildev.blogspot.com/2010/02/63-bits-plus-one.html"&gt;previously reported&lt;/a&gt;, Sigil runs about 10% faster on such architectures.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are a few other reasons.&lt;/p&gt;  &lt;p&gt;In short, this is the right way to go. I know some people will be seriously pissed off at this, but I have to think about the majority of the users. Sigil 0.2.4 will be indefinitely available for download on the project site (&lt;a href="http://code.google.com/p/sigil/downloads/list?can=1"&gt;as with all versions of Sigil&lt;/a&gt;), so you can always just continue using that.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3864162986445604649?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3864162986445604649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/10/mac-os-x-104-support-is-going-way-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3864162986445604649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3864162986445604649'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/10/mac-os-x-104-support-is-going-way-of.html' title='Mac OS X 10.4 support is going the way of the dodo'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2141706651511544048</id><published>2010-09-21T16:09:00.002+02:00</published><updated>2010-09-21T17:15:47.211+02:00</updated><title type='text'>So Qt 4.7 is out… where’s Sigil?</title><content type='html'>&lt;p&gt;As the title says, &lt;a href="http://labs.qt.nokia.com/2010/09/21/qt-4-7-0-now-available/"&gt;Qt 4.7 is out&lt;/a&gt;. The trunk version of Sigil has been running on Qt 4.7 RC1 for weeks now, and any problems that I’ve noticed I’ve already fixed. But it’s not all roses…&lt;/p&gt;&lt;p&gt;I’ve also transitioned to Visual Studio 2010 and the MSVC 10.0 C++ compiler… and it apparently miscompiles Qt 4.7 when compiling as x64. &lt;a href="http://bugreports.qt.nokia.com/browse/QTBUG-11445"&gt;Here’s&lt;/a&gt; the bug report on Nokia’s tracker. To be clear, this is not a Nokia bug, but a Microsoft bug. MS apparently has a hotfix already, and it’s about to be released any day now. They’re testing it to make sure it doesn't break most of the world’s software. :)&lt;/p&gt;&lt;p&gt;What does that mean for Sigil? Well I was hoping that the hotfix would be released before Qt, but that didn’t happen. So the release of Sigil 0.3.0RC1 is delayed for the time being. There were a few more bugs I wanted to fix anyway.&lt;/p&gt;&lt;p&gt;I’m going to give MS about a week more to release the hotfix; if it’s not out by then, Sigil goes back to MSVC 9.0 (the same version used for all Sigil releases so far) until it is.&amp;#160; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2141706651511544048?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2141706651511544048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/09/so-qt-47-is-out-wheres-sigil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2141706651511544048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2141706651511544048'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/09/so-qt-47-is-out-wheres-sigil.html' title='So Qt 4.7 is out… where’s Sigil?'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4478143503819814254</id><published>2010-09-05T18:22:00.002+02:00</published><updated>2010-09-06T01:56:42.526+02:00</updated><title type='text'>Typing like crazy at 25wpm</title><content type='html'>&lt;p&gt;So what have I been doing for the last few weeks? Two things: working furiously on the &lt;a href="http://sigildev.blogspot.com/2010/07/vacation-and-validation.html"&gt;epub checking library&lt;/a&gt; and trying to transition from the &lt;a href="http://en.wikipedia.org/wiki/QWERTY"&gt;QWERTY&lt;/a&gt; keyboard layout to &lt;a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard"&gt;Dvorak&lt;/a&gt; (touch typing, of course).&lt;/p&gt;&lt;p&gt;You have no idea how hard the latter is.&lt;/p&gt;&lt;p&gt;I tried to switch a couple of times this year, but failed both times. The problem is that it takes you about two to three weeks of regular, daily practice (we’re talking a couple of hours a day just typing) to get to something like 50wpm. During that time, you’re crawling like a snail. It’s absolutely &lt;em&gt;insufferable&lt;/em&gt; when you’re used to your thoughts just flowing out of your fingers at 60wpm. And if you have something with a deadline, something you just have to get done, forget it. You’re either not going to do it, or you’re going to switch back to QWERTY. And that will kill you.&lt;/p&gt;&lt;p&gt;You absolutely &lt;em&gt;have to&lt;/em&gt; go cold turkey on your old layout to be able to switch to a new one. Trying to “ease yourself into it” doesn’t work; believe me, I’ve tried twice :). You basically have to rewire your brain to the new layout, and reminding it of the old one repeatedly undoes everything you learn.&lt;/p&gt;&lt;p&gt;So this is a whole new world of frustration for me. But it’s worth it in the end, it’s much more comfortable to type this way. My hands used to hurt after a long day; they don’t anymore. Others have told me that after you really get used to it (a couple of months), you type about 30% faster than you did, and without pain.&lt;/p&gt;&lt;p&gt;But enough about that. Epub!&lt;/p&gt;&lt;p&gt;The epub checking library&lt;sup&gt;[1]&lt;/sup&gt; is progressing quite nicely:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;OPS checking is done (including SVG Full and OPS &amp;lt;switch&amp;gt;), except for the DTBook syntax&lt;sup&gt;[2]&lt;/sup&gt;. &lt;/li&gt;
&lt;li&gt;OPF checking is about 90% done with fallbacks remaining plus a few other checks. &lt;/li&gt;
&lt;li&gt;OCF checking is done for all six META-INF XML files as it pertains to schemas. &lt;/li&gt;
&lt;li&gt;NCX checking is done at the schema level; link checking remains. &lt;/li&gt;
&lt;li&gt;The CLI and GUI clients have been designed, but no code has yet been written. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Note: “done” means done to the point I’m aiming for in the first release, and which includes most of the things you care about.&lt;/p&gt;&lt;p&gt;All in all, it’s going well. My last “class-based” semester is starting tomorrow, so naturally things are going to slow down now. Otherwise I’d be done in a week. With classes, it’s more likely to be three weeks, barring unexpected complications.&lt;/p&gt;&lt;p&gt;Also, Qt 4.7 is at the RC stage, and I’m aiming to integrate Xerces as a QDom substitute for the next release of Sigil to go along with the new Qt version. So that will eat at least a week too.&lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] It has a name now, but for a few fairly ridiculous reasons I’m not willing to reveal it until the first release.&lt;/p&gt;&lt;p&gt;[2] Because &lt;em&gt;nobody uses it!&lt;/em&gt; AFAIK it’s also scheduled for deprecation in epub 2.1. Validation for this syntax will eventually make it in for the sake of completeness, but not for the first release.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4478143503819814254?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4478143503819814254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/09/typing-like-crazy-at-25wpm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4478143503819814254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4478143503819814254'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/09/typing-like-crazy-at-25wpm.html' title='Typing like crazy at 25wpm'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7603755545405401421</id><published>2010-08-12T20:44:00.001+02:00</published><updated>2010-08-12T20:44:14.677+02:00</updated><title type='text'>0.2.4</title><content type='html'>&lt;p&gt;I just pushed &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;a new release&lt;/a&gt;. Here’s the changelog (highlights bolded):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed a problem with updating image paths for images with the same filename but coming from different parent directories (issue #501) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;added a new &amp;quot;Merge With Previous&amp;quot; context menu action for XHTML files in the Book Browser (issue #265)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;changed Tidy to handle the common typing mistake of ending entities with a ':' instead of a ';' (issue #535) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;fixed a bug where double-clicking a file in the Book Browser for a file that was already opened in a tab switched that tab back to Book View; the tab now retains whatever View it was in previously&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;newly opened tabs now default to the View of the current tab (issue #468)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;re-engineered the locations where Sigil stores its work files; the system-provided temp folder is now used; this should alleviate some permissions issues on certain machines, especially Macs (issue #404)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Sigil now prevents the renaming of files in the Book Browser to file-system invalid names (issue #493) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;changed the keyboard shortcut that opens the Replace dialog from Cmd+H to Cmd+Shift+F on Macs only; Cmd+H is used by Mac OS X for window hiding (issue #477)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;fixed an issue with Sigil using XHTML 1.0 for OPS doctypes, instead of XHTML 1.1 (issue #503) &lt;/li&gt;    &lt;li&gt;several files can now be marked as having the Text semantic type (issue #522) &lt;/li&gt;    &lt;li&gt;fixed an issue with Direction: All in book wide searching skipping last XHTML file (issue #520) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;fixed an issue with the declared XML encoding not being picked up if it was wrapped in single quotes instead of the more standard double quotes&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;fixed an issue where the user could avoid the warning dialog for book-wide searching in Book View if he switched to this mode in Code View, and then switched back &lt;/li&gt; &lt;/ul&gt; This is mostly a bugfix release, with the notable exception of the “Merge With Previous” feature. Lots of people asked for that, so there it is.   &lt;p&gt;I’ve also changed the location where Sigil stores its work files since it was causing an error when starting on certain Mac machines. I’ve also changed the “open Replace dialog” shortcut from Cmd+H to Cmd+Shift+F. You can now use Cmd+H to hide Sigil windows. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7603755545405401421?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7603755545405401421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/08/024.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7603755545405401421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7603755545405401421'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/08/024.html' title='0.2.4'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8094348819243523378</id><published>2010-07-25T16:24:00.002+02:00</published><updated>2010-07-25T16:27:29.283+02:00</updated><title type='text'>Vacation time over, get back to work!</title><content type='html'>&lt;p&gt;So I just returned from vacation. &lt;/p&gt;&lt;p&gt;I didn’t write a single line of code for the never-ending doxygen comment conversion, but I did end up working quite a bit on the epub validating library. It’s progressing quite nicely, it’s already a couple of KLOC. I’m also doing it TDD-style which I’m finding to be a rather pleasant workflow, once you get used to it. Seeing a test fail and catch a regression I wouldn’t notice until after it was too late brings a smile to my face. On a related note, &lt;a href="http://code.google.com/p/googletest/"&gt;gtest&lt;/a&gt; and &lt;a href="http://code.google.com/p/googlemock/"&gt;gmock&lt;/a&gt; are &lt;em&gt;awesome&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Oh, remember &lt;a href="http://sigildev.blogspot.com/2010/07/vacation-and-validation.html"&gt;when I said&lt;/a&gt; that writing XML validation checkers by hand instead of using schemas would be painful? Guess what, it is. It really, &lt;em&gt;really&lt;/em&gt; is. :)&lt;/p&gt;&lt;p&gt;One of the other benefits of working on this library is that I’m solving all sorts of problems with Xerces integration. The library uses Xerces for everything XML, and working with it has given lots of insights that will be applicable to Sigil when I start replacing QDom with it.&lt;/p&gt;&lt;p&gt;I’ll be mostly working on this library over the coming weeks, so Sigil will see only bug fixes going forward. Hey, the library &lt;em&gt;is&lt;/em&gt; the major future feature for Sigil since it will be integrated into it, so transitively I’ll still be working on Sigil all this time.&lt;/p&gt;&lt;p&gt;Qt 4.7 is just around the corner too&lt;sup&gt;[1]&lt;/sup&gt;. When it does arrive, you can expect a version of Sigil integrating it very quickly, provided there are no problems migrating to the newer Qt&lt;sup&gt;[2]&lt;/sup&gt;. The QtWebKit improvements alone make me giddy like a little schoolgirl. 4x faster rendering? Hell yeah! &lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Actually I expected it to be released while I was on vacation. Or at least QtWebKit 2.0. Nokia devs said that was coming in May, and it’s the very end of July now… &lt;em&gt;grumble&lt;/em&gt;…&lt;/p&gt;&lt;p&gt;[2] I seriously expect no problems. Nokia has always been adamant about backwards compatibility, and from past experience I can say they usually do a good job on this. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8094348819243523378?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8094348819243523378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/07/vacation-time-over-get-back-to-work.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8094348819243523378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8094348819243523378'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/07/vacation-time-over-get-back-to-work.html' title='Vacation time over, get back to work!'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3918464988805075319</id><published>2010-07-08T14:33:00.001+02:00</published><updated>2010-07-08T14:33:48.722+02:00</updated><title type='text'>Vacation and validation</title><content type='html'>&lt;p&gt;The semester is finally over so I’ll be heading on vacation tomorrow. I’ll be gone for about two weeks, and in that time no issues will be examined, no code will be written etc. Well, not &lt;em&gt;really&lt;/em&gt;. In general, I won’t have internet access but I &lt;em&gt;may&lt;/em&gt; pop in from time to time to check the Sigil forum on MobileRead. No promises though.&lt;/p&gt;  &lt;p&gt;While I’ll be spending most of my time lying on the beach, soaking up the sun with a comfortable book&lt;sup&gt;[1]&lt;/sup&gt; by my side, I’ll also be doing some &lt;em&gt;light&lt;/em&gt; development work. By “light” I mean finishing the doxygen comments conversion for Sigil (which has been taking forever) and some code for the new epub validation library I’m writing. Not a lot of code, just a bit.&lt;/p&gt;  &lt;p&gt;What’s that last part about? Well what’s the &lt;a href="http://code.google.com/p/sigil/issues/detail?id=28"&gt;most requested feature&lt;/a&gt; for Sigil on the tracker? It’s integrated epub validation. I’ve planned for months to start working on this as a separate project in August, and I’ve just started doing some architectural design for the library&lt;sup&gt;[2]&lt;/sup&gt;. The dependencies are in place, the build system works across platforms and I have a pretty good idea of how things are going to mesh together.&lt;/p&gt;  &lt;p&gt;The project will in fact be composed of the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;the main epub validating library, written in portable C++; &lt;/li&gt;    &lt;li&gt;a CLI application that uses that library (think epubcheck); &lt;/li&gt;    &lt;li&gt;a GUI application with pretty buttons and drag-and-drop support. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I know a ridiculous number of people who don’t validate their epub books just because they are too scared of the command line to use epubcheck. While I think that’s absurd and childish, I can’t deny that having a simple GUI would be easier for the average user. And if the GUI supported dragging an epub file from the desktop and dropping it on the app window to initiate the validation, well that would be very useful. It could certainly speed things up.&lt;/p&gt;  &lt;p&gt;The goals of the project are as follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;check for everything epubcheck checks for, and &lt;em&gt;much&lt;/em&gt; more; &lt;/li&gt;    &lt;li&gt;be easily embeddable into native code applications (no frigging Java); &lt;/li&gt;    &lt;li&gt;be easy to use and easy to understand: “unfinished element” means diddly-squat to people who don’t already know what the element is supposed to contain&lt;sup&gt;[3]&lt;/sup&gt;; &lt;/li&gt;    &lt;li&gt;have developers that are active and responsive (and an active development process in general); &lt;/li&gt;    &lt;li&gt;optionally warn about valid epub constructs that cause problems for certain high-profile Reading Systems. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That last part is interesting. We all know ADE has many quirks, and so does the iPad and other RS’s. Wouldn’t be lovely if you could instruct your epub validator to check for at least some of &lt;em&gt;those&lt;/em&gt; problems as well?&lt;/p&gt;  &lt;p&gt;I think that would be fairly useful. &lt;/p&gt;  &lt;p&gt;This library will then be embedded into Sigil, and a simple toolbar button press will validate your epub and report any problems.&lt;/p&gt;  &lt;p&gt;Before anyone gets ahead of themselves, bear in mind I won’t hit all those goals for the first release. It will be incremental and it will get better in time. But the scope of this project is thankfully &lt;em&gt;much&lt;/em&gt; smaller than Sigil’s, so that’s a big relief.&lt;/p&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;  &lt;p&gt;[1] Currently it’s &lt;em&gt;The Stand&lt;/em&gt; by Stephen King. That book has like a billion pages. It’s probably not helping matters that I’m reading the extended version.&lt;/p&gt;  &lt;p&gt;[2] A &lt;em&gt;software&lt;/em&gt; library, &lt;em&gt;not&lt;/em&gt; a building. There was a misunderstanding about this a couple of days ago, and needless to say I laughed my ass off.&lt;/p&gt;  &lt;p&gt;[3] This will entail writing some of the internal validators by hand and not resorting to schemas. Painful, yes, but necessary. Not just because of usability, but correctness too. For instance, a schema can’t check that the files listed in the manifest are actually in the epub. It won’t tell you if you’ve included the same file multiple times with different ID’s. There are many examples, most of which are checks that are way more important than an ID starting with a number.&lt;/p&gt;  &lt;p&gt;I won’t do this for everything (I still intend to use an XML Schema for XHTML validation), but I will do it for the OPF. Most validation problems are there anyway. The OPF is the heart of an epub.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3918464988805075319?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3918464988805075319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/07/vacation-and-validation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3918464988805075319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3918464988805075319'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/07/vacation-and-validation.html' title='Vacation and validation'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5920164846846302383</id><published>2010-06-23T00:38:00.002+02:00</published><updated>2010-06-23T03:22:49.110+02:00</updated><title type='text'>0.2.3</title><content type='html'>&lt;p&gt;Bumpy ride lately. Changelog follows:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;fixed an issue with the new data from one view sometimes not being saved in the final epub when switching to the other view &lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worked around a Qt focus issue causing current tab data to sometimes not be saved; this was uncovered by fixing the hang-on-save issue, which was caused by the same underlying problem (issue #466)&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The work in 0.2.1 has caused some unfortunate synchronization issues. &lt;/p&gt;&lt;p&gt;Problem #1: You work in Code View, make some changes and switch to Book View. You &lt;em&gt;see&lt;/em&gt; the changes transfer to BV, then save the epub. Opening the epub, the changes are not there. &lt;/p&gt;&lt;p&gt;This was my fault and should now be fixed.&lt;/p&gt;&lt;p&gt;Problem #2: You work in Book View (or Code View), make changes and save. &lt;em&gt;Sometimes&lt;/em&gt; the changes do save, sometimes they don’t. Same thing goes for the TOC editor sometimes not seeing your changes, or the Find/Replace dialog messing things up and losing data. &lt;/p&gt;&lt;p&gt;This is caused by a “lost” focus event. I’ve observed this only once on Windows 7, but it’s reportedly much more frequent on Win XP machines. Linux and Mac machines seem to be immune (although similar issues caused by problem #1 can masquerade as this problem). This seems to be a Qt issue, and I’ve now worked around it. The same underlying “missing focus event” issue was causing the previous hang problems.&lt;/p&gt;&lt;p&gt;There was a third problem reported: you make changes in CV, then switch &lt;em&gt;directly &lt;/em&gt;to BV. Any changes are now gone. I’ve only had one user report this, all other reports appear to be caused by problems #1 and #2. I’m still unable to reproduce this, no matter what I do or what machine I use. If you have this issue with the new 0.2.3, please report it ASAP. Use the &lt;a href="http://code.google.com/p/sigil/issues/list"&gt;issue tracker&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I’ve been stealing away hours from my other obligations to work on Sigil since these are major problems, but man, doing this has already started to haunt me… &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5920164846846302383?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5920164846846302383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/06/023.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5920164846846302383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5920164846846302383'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/06/023.html' title='0.2.3'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3868798923533841162</id><published>2010-06-20T23:02:00.001+02:00</published><updated>2010-06-20T23:02:13.658+02:00</updated><title type='text'>0.2.2</title><content type='html'>&lt;p&gt;This is a very minor bugfix release. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;simplified the resource locking mechanism; should eliminate the hang-on-save issue&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;fixed a problem with Book View chapter splitting sometimes not being registered on save, causing duplicate content (issue #450)&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m trying to leave a rather stable version of Sigil before going on my coding break, so this release is important. Users have reported a higher chance of encountering the hang-on-save problem, and now I've completely changed a fundamental aspect of the resource locking architecture and also minimized all the critical sections so this should &lt;em&gt;really&lt;/em&gt; be fixed now. If it’s not… then it’s caused by something completely unrelated. Which is possible, seeing as how I can’t reproduce the issue and thus get an exact fix on the culprit. The bug is not deterministic, which clearly points to the threading-enabled code. &lt;/p&gt;  &lt;p&gt;The second major bug was caused by a line a code I forgot to add after some recent refactorings.&lt;/p&gt;  &lt;p&gt;If you see the hang-on-save issue with this new release (or any other kind of hang bug, or any other kind of bug at all :) ), please report it ASAP with as much detail as possible.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3868798923533841162?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3868798923533841162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/06/022.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3868798923533841162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3868798923533841162'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/06/022.html' title='0.2.2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3021693699930318656</id><published>2010-06-19T01:24:00.002+02:00</published><updated>2010-06-19T01:58:26.256+02:00</updated><title type='text'>0.2.1</title><content type='html'>&lt;p&gt;I’ve just &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;pushed 0.2.1&lt;/a&gt;, which is mostly a bugfix-only release. Changelog follows:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;XHTML files that specify two different encodings are now fixed by removing the incorrect one&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sigil now checks the XML encoding attribute for an encoding before the HTML metatag and charset; should now be more compatible with Calibre created epub books&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;created/used 16px versions of all icons; icons in menus are not blurry anymore (issue #121) &lt;/li&gt;
&lt;li&gt;the Find&amp;amp;Replace dialog now uses the currently selected text (if any) as the default search term (issue #370) &lt;/li&gt;
&lt;li&gt;fixed issues with unnecessary reloads of the code view (issue #412, issue #398) &lt;/li&gt;
&lt;li&gt;fixed an issue with the HTML file filter in the open file dialog not correctly filtering files (issue #416) &lt;/li&gt;
&lt;li&gt;fixed an issue with files without extensions not being saved in the final epub (issue #400) &lt;/li&gt;
&lt;li&gt;fixed an issue with XPGT resources sometimes being saved blank (issue #433) &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fixed a regression that made it impossible to add removed headings back into the TOC (issue #439)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fixed a problem with some file-wide replacements reverting&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;fixed a problem with the opened tabs not being updated until the user gave them keyboard focus when a file-wide replace was performed (issue 408) &lt;/li&gt;
&lt;li&gt;fixed a problem with Book View not reflecting changes done in Code View when the Code View was used for editing, and then the tab closed &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;use of custom synchronization primitives should resolve most infrequent hang bugs&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;fixed a problem with the search not progressing in Book View find&amp;amp;replace when using recursive replacements &lt;/li&gt;
&lt;li&gt;fixed an issue with inserting images that have apostrophes in the filename (issue #391) &lt;/li&gt;
&lt;li&gt;TOC text now has leading and trailing whitespace trimmed, and inner whitespace condensed (issue #422) &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;an empty ALT attribute is now added to &amp;quot;img&amp;quot; elements that don't have them (issue #406) &lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;added the build time to the About dialog, showing date and time in UTC &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Remember when I said that 0.2.0 was surprisingly free of major bugs? I spoke too soon. :)&lt;/p&gt;&lt;p&gt;The major issue was that replacements performed with the Find&amp;amp;Replace dialog could sometimes revert back. Horrible, I know. This should now be fixed.&lt;/p&gt;&lt;p&gt;The next major issue actually goes way back to the start of 0.2.0 betas, I just couldn’t track it down: Sigil could sometimes completely hang. This usually happened during saves, and should also be fixed now. I’ve written some custom synchronization primitives&lt;sup&gt;[1]&lt;/sup&gt; that should alleviate these problems. This also involved rewriting the way tabs release their locks etc. Lot’s of nice things. Should work now.&lt;/p&gt;&lt;p&gt;And the last major problem was a regression that made it impossible to add removed TOC items back in.&lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Nothing too fancy, I needed a ReadWriteLock that was shallow and non-recursive. Qt provides one that is non-recursive by default, but not shallow. By “shallow”, I mean a lock that allows only one level of locking by the same thread, thus silently letting multiple lock calls succeed, even though only the first one did. Same thing goes for unlock: the first call unlocks, the others just skip. The lock and unlock calls are appropriately called LockIfNeeded() and UnlockIfNeeded().&lt;/p&gt;&lt;p&gt;Admittedly, a shallow lock is rarely needed, and if you’re using one, you damn well better know what you’re doing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3021693699930318656?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3021693699930318656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/06/021.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3021693699930318656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3021693699930318656'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/06/021.html' title='0.2.1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2870965880774735799</id><published>2010-06-14T17:21:00.001+02:00</published><updated>2010-06-14T17:26:04.728+02:00</updated><title type='text'>A brighter future</title><content type='html'>&lt;p&gt;Well it’s been quite a while since the last post. I’ve been busy with university work, and while I have one more paper to submit in a few days and finals in about ten, I have a bit of free time now.&lt;/p&gt;  &lt;p&gt;I’ll be working through the bug reports I received since 0.2.0 final went live. I must say I’m pleasantly surprised that nothing major was reported. I’d like to thank all the people who have written thorough bug reports. I haven’t had time to go through them all and respond appropriately, but I’m getting there.&lt;/p&gt;  &lt;p&gt;Sigil 0.2.1 will probably come sometime in late July/early August. While I have a few days free this week, I’ll be studying the following three weeks and immediately after that I’m going on a two-week vacation.&lt;/p&gt;  &lt;p&gt;There’s an ever-so-slight chance that I’ll push a very minor bugfix release in about a week and postpone all the work I wanted to do for 0.2.1 into 0.2.2.&lt;/p&gt;  &lt;p&gt;I’ve also started work on replacing all the uses of QDom with Xerces-C++ in a separate repo, but that’s going to take quite a bit of time.&lt;/p&gt;  &lt;p&gt;What I’ve really spent a lot of time with over the last several days is QtWebKit. There was &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=31719"&gt;a bug&lt;/a&gt; on the WebKit Bugzilla for the general QtWebKit performance problems… When the bug was reported, my testcase on one machine took 55 seconds to load and render. For Qt 4.7beta1, Nokia got that down to 21 seconds. With the trunk version of Qt 4.7 from a couple of days ago, it’s down to 13.3 seconds. Bottom line, they’ve done some good work speeding it up, and some more work still remains. It’s not native-WebKit or Firefox fast, where the testcase renders instantaneously, but it’s improving.&lt;/p&gt;  &lt;p&gt;I downloaded the Qt trunk source a few days ago and extensively profiled QtWebKit rendering. 95% of the time is spent shaping glyphs in the call tree of QFontMetrics::width(), and &lt;em&gt;man&lt;/em&gt; does a lot of code get run just to get the width of a text string. The calls drop into &lt;a href="http://en.wikipedia.org/wiki/HarfBuzz#HarfBuzz"&gt;Harfbuzz&lt;/a&gt;, and all sorts of functions end up eating a bit of wall time here and there, and this all adds up. There’s no single point that does something very stupid that could then be optimized away, at least not in this module. There’s even an internal “simplified” codepath for getting the width of a text string, but I’m not sure why the Nokia guys are not using it in QtWebKit. I’m probably missing a piece of the puzzle. Either way, there was no low-hanging fruit to remove.&lt;/p&gt;  &lt;p&gt;The most fruitful optimization work will probably come from higher up the call chain. For instance, there are &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=38179"&gt;superfluous layout calls&lt;/a&gt; for page rendering, which (if I’m reading the bug comments right) make the whole thing calculate the render tree &lt;em&gt;three times&lt;/em&gt;. Ouch. But they’re working on it.&lt;/p&gt;  &lt;p&gt;The point to take home is that when Qt 4.7 lands, Sigil should see a &lt;em&gt;very&lt;/em&gt; nice performance boost for loading books and switching to the Book View. Probably for general WYSIWYG actions in the Book View too. Hurrah for that. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2870965880774735799?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2870965880774735799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/06/brighter-future.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2870965880774735799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2870965880774735799'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/06/brighter-future.html' title='A brighter future'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5088718746922801043</id><published>2010-05-11T23:00:00.002+02:00</published><updated>2010-05-11T23:02:50.562+02:00</updated><title type='text'>0.2.0 FINAL</title><content type='html'>&lt;p&gt;And &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;here&lt;/a&gt; it finally is. After months and months &lt;em&gt;and months&lt;/em&gt; of finger-breaking&lt;sup&gt;[1]&lt;/sup&gt; work, it’s finally done. Changelog is minimal going from RC4:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;added new entries to the help menu for the online manual and the FAQ &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now cue tens of thousands of 0.1.9 users screaming “WHY DO I ONLY SEE JUST THE FIRST PAGE??!!”. See &lt;a href="http://code.google.com/p/sigil/wiki/FAQ#I_open_my_book_in_Sigil_0.2.x_and_all_I_see_is_the_first_page"&gt;the FAQ&lt;/a&gt;. &lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Like back-breaking, only for programmers.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5088718746922801043?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5088718746922801043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/020-final.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5088718746922801043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5088718746922801043'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/020-final.html' title='0.2.0 FINAL'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4534673859402453219</id><published>2010-05-09T16:32:00.002+02:00</published><updated>2010-05-12T01:08:32.760+02:00</updated><title type='text'>Manually, but for the web</title><content type='html'>&lt;p&gt;When I decided I wanted to write the manual for Sigil, the first thing that came to mind was putting it online as some sort of website. A web version can be always up to date, you can put a link to it in the Help menu of your application and you don’t have to blow up the download size by including it in the installers.&lt;/p&gt;&lt;p&gt;But that was wishful thinking; Sigil is hosted at Google Code, and it doesn’t offer a way to host custom HTML pages, and I’m not buying a domain and webhosting just for a damn manual. So sadly, that couldn’t work.&lt;/p&gt;&lt;p&gt;The second idea was writing the manual in pure LaTeX, since if I’m going to write an “offline” version of the manual, I’m going to typographically do the best job I can. Epub can be used for technical manuals, but some of the nice typesetting tricks I hand in mind couldn’t be done in it.&lt;/p&gt;&lt;p&gt;Then it occurred to me that having a PDF-only version of the manual for an epub editor was… not the best political decision. I wanted to find a way to eat my cake and have it too: to offer both a nice PDF and a nice epub. I was willing to sacrifice &lt;em&gt;some&lt;/em&gt; of the things I could do with custom LaTeX if the resulting PDF was “good enough”.&lt;/p&gt;&lt;p&gt;reStructuredText and Sphinx came into the picture. As I mentioned in a previous post, the PDF version of the manual sucks. Links don’t go where they’re supposed to, the layout is shoddy and in general, it just looks bad (to me at least). Sphinx was primarily designed for creating HTML documentation, and the LaTeX generator suffers because of it. I decided to upload what I had now, gather some feedback on the content and then rewrite the thing in custom LaTeX.&lt;/p&gt;&lt;p&gt;Then came &lt;a href="http://www.mobileread.com/forums/showthread.php?t=82927"&gt;the expected politics&lt;/a&gt;…&lt;/p&gt;&lt;p&gt;While I’m convinced that I’m right&lt;sup&gt;[1]&lt;/sup&gt;, I wanted to talk to a few friends who lead or are members of other open source projects (some hosted on GC too) what their thoughts were on the subject. I got universal agreement that a LaTeX PDF was the way to go, but one of them pointed out that GC indeed &lt;em&gt;does&lt;/em&gt; provide a way of hosting sites, just… &lt;em&gt;unofficially.&lt;/em&gt; The Google guys apparently have no problems with people hosting their site &lt;em&gt;inside&lt;/em&gt; their source code repositories. This could of course only work if your site serves only static content, which a manual would certainly be. They’ve even &lt;a href="http://googlecode.blogspot.com/2010/03/faster-subversion-hosting.html"&gt;improved the SVN backend&lt;/a&gt; for direct web content serving, so they certainly approve of the practice.&lt;/p&gt;&lt;p&gt;Sigil uses &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, and Google provides every mercurial-based project with many repositories. So I used Sphinx to generate the HTML, committed it all to a new “web” repo and &lt;em&gt;voilà!&lt;/em&gt; An &lt;a href="http://web.sigil.googlecode.com/hg/intro.html"&gt;online manual&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Sphinx produces wonderful HTML, and I’m willing to sacrifice some typesetting beauty for online accessibility. It’s also &lt;em&gt;much&lt;/em&gt; easier to customize the HTML output by injecting new CSS. Tweaking the LaTeX output was a nightmare.&lt;/p&gt;&lt;p&gt;There won’t be an offline epub version since there’s no point anymore and I want people to see the code samples and images on a large screen. But if someone wants one, they can easily download the manual sources and build one with Sphinx.&lt;/p&gt;&lt;p&gt;I think everyone should be satisfied now. &lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Big surprise there.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4534673859402453219?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4534673859402453219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/manually-but-for-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4534673859402453219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4534673859402453219'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/manually-but-for-web.html' title='Manually, but for the web'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1377540965902215879</id><published>2010-05-08T15:57:00.001+02:00</published><updated>2010-05-08T15:57:40.435+02:00</updated><title type='text'>0.2.0RC4</title><content type='html'>&lt;p&gt;Another &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;minor update&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed a regression that broke FindNext opening new tabs when searching across HTML files (issue #384) &lt;/li&gt;    &lt;li&gt;fixed an issue with autocompletion in Find dialog ignoring the case of search terms (issue #385) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’ll be doing these until the explosions stop.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1377540965902215879?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1377540965902215879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1377540965902215879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1377540965902215879'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc4.html' title='0.2.0RC4'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1716156993118144890</id><published>2010-05-08T14:42:00.001+02:00</published><updated>2010-05-08T14:42:13.786+02:00</updated><title type='text'>Manually</title><content type='html'>&lt;p&gt;I’ve just uploaded the manual for Sigil. You can get it from the &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;downloads section&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The manual was written in &lt;a href="http://en.wikipedia.org/wiki/ReStructuredText"&gt;reStructuredText&lt;/a&gt; (RST) and then processed with &lt;a href="http://sphinx.pocoo.org/"&gt;Sphinx&lt;/a&gt;. Honestly, I’m not too happy with the layout of final file compiled from the Sphinx-generated LaTeX. Some of the hyperlinks don’t lead to where they’re supposed to (bug in Sphinx I guess), and typographically in general… well I don’t like it.&lt;/p&gt;  &lt;p&gt;Initially, I wanted to write the manual in straight hand-coded LaTeX. I decided against that because that would mean the manual would only be available in PDF form.&lt;/p&gt;  &lt;p&gt;Now, I’m the kind of person who always tries to use the right tool for the job. I love epub and absolutely &lt;em&gt;abhor&lt;/em&gt; the PDF “ebook” novels. PDF for novels just doesn’t work, and if you’re producing them… don’t. Make epubs. But for technical manuals with complex layouts, code listing, figures, diagrams, sidebars and the like, PDF is the right choice IMO. Epub is just not the right call for these kinds of books.&lt;/p&gt;  &lt;p&gt;Sure, you could make epub versions of technical manuals, but you’d have to sacrifice some of your layout.&lt;/p&gt;  &lt;p&gt;Then there’s politics. An epub editor with a manual in PDF form only? That just looks bad. That’s kind of like Microsoft employees using Linux.&lt;/p&gt;  &lt;p&gt;I was pondering this until someone told me that the next version of Sphinx will have an epub generator. You would give it RST and it would spit out a nice epub file from the same source it would generate LaTeX markup. That sounded like an amazing deal, so I went with that.&lt;/p&gt;  &lt;p&gt;I loved RST until I started using it. I don’t love it anymore. It has a weird syntax and to get anything above the barebones, you have to do all these strange contortions etc. Add to this that the resulting LaTeX markup produces a PDF that I dislike. I tried to tweak it here and there, and I’ve improved the output considerably over the last few days, but still… Having an epub file to silence the naysayers is good, but not at the expense of quality.&lt;/p&gt;  &lt;p&gt;I’m pretty sure I’ll be rewriting the manual in pure LaTeX when I get the time (a few weeks from now, probably). Until then, enjoy the current version.&lt;/p&gt;  &lt;p&gt;And if someone feels that the new PDF-only manual shows Sigil in a bad light, I say screw ‘em. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1716156993118144890?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1716156993118144890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/manually.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1716156993118144890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1716156993118144890'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/manually.html' title='Manually'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3491905290244650621</id><published>2010-05-07T00:51:00.001+02:00</published><updated>2010-05-07T00:51:25.144+02:00</updated><title type='text'>0.2.0 RC3</title><content type='html'>&lt;p&gt;Ok, RC3 is now up on the site. Download it &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Changelog:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed a regression that messed up the tab order of the controls in the Find dialog (issue #380) &lt;/li&gt;    &lt;li&gt;fixed an issue with cross-file FindNext causing a hang when the search term is not in the book and &amp;quot;Direction: All&amp;quot; is used (issue #378) &lt;/li&gt;    &lt;li&gt;the Text folder in the Book Browser is now expanded by default after loading &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is also the first release that was completely built and uploaded by an automatic process composed of several Python scripts. Since it’s brand new, it could have introduced some problems. The whole point of this automated build system is to eliminate those nasty situations where I would upload the wrong file, forget to include some critical libraries into the installers or something else.&lt;/p&gt;  &lt;p&gt;Once the system has been set up to produce correct builds, it should stay that way. &lt;/p&gt;  &lt;p&gt;If anyone’s wondering when 0.2.0 final will be released, my rule of thumb is three days without any showstopper bugs reported. In RC2, the showstopper was the FindNext hang that has now been fixed.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3491905290244650621?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3491905290244650621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/020-rc3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3491905290244650621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3491905290244650621'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/020-rc3.html' title='0.2.0 RC3'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6065876060932689424</id><published>2010-05-05T01:46:00.001+02:00</published><updated>2010-05-05T01:46:12.924+02:00</updated><title type='text'>0.2.0RC2</title><content type='html'>&lt;p&gt;The second release candidate is now available. Changelog follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed an issue with ReplaceAll across files not using correct replacement lengths &lt;/li&gt;    &lt;li&gt;fixed an issue with code in Code View not being pretty-printed &lt;/li&gt;    &lt;li&gt;fixed an issue with the ReplaceAll across files not informing the opened tabs of the change &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Small but important. I consider all of these to be showstoppers. Hopefully these are all there is.&lt;/p&gt;  &lt;p&gt;If anyone finds any other bugs, please report them on the tracker. If this release stays showstopper-free, it will be promoted to a full release later this week.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6065876060932689424?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6065876060932689424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6065876060932689424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6065876060932689424'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc2.html' title='0.2.0RC2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6588287547379992220</id><published>2010-05-04T00:22:00.010+02:00</published><updated>2010-05-04T00:49:18.329+02:00</updated><title type='text'>0.2.0RC1</title><content type='html'>&lt;p&gt;The first Release Candidate is here and you can get it from the &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;downloads section&lt;/a&gt;. Between now and final 0.2.0, I’m fixing only showstopper bugs and &lt;i&gt;maybe&lt;/i&gt; a few of the trivial ones. If all goes according to plan&lt;sup&gt;[1]&lt;/sup&gt;, there won’t be any need for further changes before the final release and thus you’ll see it a few days from now. This is not called a Release Candidate for nothing.&lt;/p&gt;&lt;p&gt;So hammer this version &lt;i&gt;hard, &lt;/i&gt;especially the Find &amp;amp; Replace functionality.&lt;/p&gt;&lt;p&gt;Here’s the changelog. It’s by &lt;i&gt;far&lt;/i&gt; the largest batch of changes to Sigil for one release (disregarding the first 0.2.0 beta, of course). Also, some very important bugs were finally fixed plus lots of new features, so this really is a big release. Some highlights have been… highlighted:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;changes in the Book Browser now update the modified state of the main window (issue #331) &lt;/li&gt;
&lt;li&gt;the Book Browser can now be opened/closed from the View menu (issue #335) &lt;/li&gt;
&lt;li&gt;all the toolbars now have UI-facing names &lt;/li&gt;
&lt;li&gt;by injecting a custom XML reader into QDom, the following issues were fixed:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Book View search sometimes skipping over instances (issue #253) &lt;/li&gt;
&lt;li&gt;Book View ReplaceAll causing Sigil to hang on rare occasions (issue #293) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;spaces disappearing from some HTML constructs&lt;/b&gt; (issue #352) &lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;implemented component-wide search&amp;amp;replace for Code View searches&lt;/b&gt; (issue #372) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;the Find&amp;amp;Replace dialog now remembers up to 20 previously used search and replace strings&lt;/b&gt; (issue #369) &lt;/li&gt;
&lt;li&gt;fixed an issue with positive regex lookaheads in normal Replace (not ReplaceAll) (issue #261) &lt;/li&gt;
&lt;li&gt;fixed a rare off-by-one error in Book View searching when the caret was at the start of the matched string; this made the search skip that instance of the match (issue #280) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;fixed an issue with the Find Dialog not correctly scrolling to the found text in Book View&lt;/b&gt; (issue #195) &lt;/li&gt;
&lt;li&gt;fixed an issue with Tidy not fixing free ampersands into "&amp;amp;amp;", even when configured to do so (issue #365) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;fixed an issue with the current tab unnecessarily reloading after book saves&lt;/b&gt; (issue #354) &lt;/li&gt;
&lt;li&gt;fixed issues with filename basenames being read only until the first dot; was causing problems with OPF manifest ID generation (issue #351) &lt;/li&gt;
&lt;li&gt;hitting the keyboard shortcut for the Find&amp;amp;Replace window while the window is open now switches focus to that window (issue #362) &lt;/li&gt;
&lt;li&gt;fixed an issue with the applied headings not "sticking" and not showing up in the TOC editor (issue #300) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;the special iPad- and Calibre-friendly cover meta tag information is now preserved after loading &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;added a new "Cover Image" entry for image resource in the "Add Semantics" Book Browser menu &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;if an image is not set as a cover image manually, Sigil now uses heuristics on save to determine if the epub has a cover image &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;if an epub has an image set as a cover image, Sigil will now write a special meta tag that identifies this image in the OPF; this tag is then used by the iPad (and Calibre) for the book cover, for instance &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;all OPF &lt;/b&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;b&gt;guide&lt;/b&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;b&gt; &lt;guide&gt;element information when loading epubs is now preserved &lt;/guide&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;added a new "Add Semantics" menu for XHTML documents; it can be used to mark XHTMLs as "Dedication", "Colophon", "Glossary" etc. for the &lt;/b&gt;&lt;b&gt;&amp;lt;guide&lt;/b&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;&lt;guide&gt;element of the OPF &lt;/guide&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;the status bar now shows a message after chapter split operations &lt;/li&gt;
&lt;li&gt;fixed an issue with filenames with characters that should not appear in valid XML IDs having those characters added anyway (issue #344) &lt;/li&gt;
&lt;li&gt;fixed an issue with files with uppercase extensions not having a mimetype set in the OPF (issue #349) &lt;/li&gt;
&lt;li&gt;fixed an issue with Sigil rewriting headings when the TOC was opened and no heading was edited (issue #327) &lt;/li&gt;
&lt;li&gt;fixed an issue where adding an existing HTML file through the Book Browser would clear the current metadata in the book (issue #329) &lt;/li&gt;
&lt;li&gt;added a check that prevents Sigil from loading the same resource multiple times in invalid epubs (issue #339) &lt;/li&gt;
&lt;li&gt;fixed a bug that made the direct XHTML references in the NCX file less likely (issue #333) &lt;/li&gt;
&lt;li&gt;fixed an issue with Sigil crashing when trying to save a loaded epub that had some badly formed metadata elements (issue #325) &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It’s pretty damn huge. &lt;/p&gt;&lt;h3&gt;Book-wide search&lt;/h3&gt;&lt;p&gt;For now, you have to perform your book-wide searches in Code View. I know, I know. It’s not everything you wanted. But technical restrictions are causing problems&lt;sup&gt;[2]&lt;/sup&gt;. I’ll try to write a post about it tomorrow explaining the issue, I’m too tired to go into it now. Just learn to live with only Code View searching until I work around this&lt;sup&gt;[3]&lt;/sup&gt;. It should cover 95% of all your needs.&lt;/p&gt;&lt;p&gt;I’m making it up with the new remember-20-last-used-search-strings feature. The input fields also provide automatic text completion for previous searches. All of this was scheduled for 0.2.1, but hey.&lt;/p&gt;&lt;h5&gt;Footnotes&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/h5&gt;&lt;p&gt;[1] Do I even need to chuckle at that?&lt;/p&gt;&lt;p&gt;[2] Cookies to the first person that points out the framework giving me grief.&lt;/p&gt;&lt;p&gt;[3] Something like 0.2.2, maybe sooner.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6588287547379992220?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6588287547379992220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc1.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6588287547379992220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6588287547379992220'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/05/020rc1.html' title='0.2.0RC1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-6675560243833633946</id><published>2010-04-26T21:18:00.006+02:00</published><updated>2010-05-01T16:18:09.464+02:00</updated><title type='text'>The new “Add Semantics” menu</title><content type='html'>&lt;p&gt;After the iPad came out, everyone (myself included) wanted to know how well it would handle epub. As it turns out, not great. No embedded font support? Bad Apple, bad!&lt;/p&gt;&lt;p&gt;Anyway, the iBooks application for reading epub books on the iPad comes with this large shelf view where all the books display their covers. Shiiiiny. But as a content producer, you have to explicitly tell the iPad which image in the epub archive is the cover.&lt;/p&gt;&lt;p&gt;There was an &lt;a href="http://www.mobileread.com/forums/showthread.php?t=79037"&gt;interesting discussion&lt;/a&gt; about this on MobileRead. The idea to take away is that you need a special meta tag in the metadata section of your OPF file. Something like this:&lt;/p&gt;&lt;pre class="brush: xml"&gt;&amp;lt;meta name=&amp;quot;cover&amp;quot; content=&amp;quot;coverID&amp;quot; /&amp;gt;&lt;/pre&gt;&lt;p&gt;The “coverID” needs to be the ID of the cover image in the manifest section.&lt;/p&gt;&lt;p&gt;Until now, you had to save your epub with Sigil, extract the epub, edit the OPF, add this meta tag and then zip everything up properly (mimetype file first with no compression etc.). Oh and you could never open that epub again with Sigil since it would remove that special meta tag.&lt;/p&gt;&lt;p&gt;A horrible PITA, wasn’t it?&lt;/p&gt;&lt;p&gt;Well that’s fixed now. The next version of Sigil will have a right-click context menu for images with which you’ll be able to mark an image as a cover. Done. Sigil does everything else required for you. &lt;/p&gt;&lt;p&gt;Along with this “Add Semantics” menu come new entries for the HTML resources. For those, you can now add the &amp;lt;guide&amp;gt; element semantic information. So if you mark one HTML file as, say, a “Title Page”, Sigil will add this information to the &amp;lt;guide&amp;gt; element in the OPF.&lt;/p&gt;&lt;p&gt;Naturally, this feature would be useless if Sigil wouldn’t preserve all of this information after opening an epub that already has it. So it does that now too: &lt;em&gt;all&lt;/em&gt; information from the &amp;lt;guide&amp;gt; element is now preserved, including custom values for the “title” attribute (even though you can’t see that value in Sigil, it’s stored). The special meta tag identifying the cover image is read and that information is preserved, too.&lt;/p&gt;&lt;h3&gt;Being smart about it&lt;/h3&gt;&lt;p&gt;Sigil always does its best to help you out. Well, it at least tries :).&lt;/p&gt;&lt;p&gt;I’ve added heuristics to Sigil that will mark the appropriate image as the cover if you don’t do it yourself. If the first HTML file in the reading order is “very small” and has only one image in it&lt;sup&gt;[1]&lt;/sup&gt;, that image will be selected as the cover.&lt;/p&gt;&lt;p&gt;So if you follow best practices, Sigil helps you out. Still, mark it by hand if you can. You will always know better than the machine. &lt;/p&gt;&lt;h3&gt;Things to note…&lt;/h3&gt;&lt;p&gt;While the OPF spec technically does allow you to, for instance, specify several HTML files as the title page in the &amp;lt;guide&amp;gt; element (for God knows what reason…), Sigil stops you from doing this. It allows you to set only one instance of one &amp;lt;reference&amp;gt; type per book. So if one file is set as the title page, setting another file as the title will unmark the last one.&lt;/p&gt;&lt;p&gt;The exception are loaded epub files. If your loaded file specifies several HTML files as, for instance, the preface, then all of those are still marked as such in Sigil after they’re loaded. While I personally think you should &lt;em&gt;never&lt;/em&gt; use more than one reference type instance per book&lt;sup&gt;[2]&lt;/sup&gt;, if you did this to one of your books before opening it in Sigil, that information will remain. Sigil won’t step on your toes here.&lt;/p&gt;&lt;p&gt;Finally, here are two images showing off the new menu. The file loaded is &lt;em&gt;&lt;a href="http://www.mobileread.com/forums/showthread.php?t=48377"&gt;Three Men in a Boat&lt;/a&gt;.&lt;/em&gt; If you don’t want to wait for the next release&lt;sup&gt;[3]&lt;/sup&gt;, you can build from &lt;a href="http://code.google.com/p/sigil/source/checkout"&gt;repo source&lt;/a&gt; and start using this right now.&lt;/p&gt;&lt;a href="http://imgur.com/GKcSN.png"&gt;&lt;br /&gt;
&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://imgur.com/GKcSN.png" width="522" height="446" /&gt; &lt;/a&gt;&lt;br /&gt;
&lt;a href="http://imgur.com/EaylL.png"&gt;&lt;br /&gt;
&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://imgur.com/EaylL.png" width="522" height="446" /&gt; &lt;/a&gt;  &lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Sigil looks for a normal &amp;lt;img&amp;gt; tag or an SVG &amp;lt;image&amp;gt; one.&lt;/p&gt;&lt;p&gt;[2] It’s a terrible idea, and it would probably wreak havoc on unsuspecting Reading Systems. The spec actually doesn’t explicitly allow it, it just doesn’t talk about this possibility at all. I’m still not convinced that the spec writers didn’t just forget to forbid this behavior.&lt;/p&gt;&lt;p&gt;So Sigil won’t let you do this. &lt;/p&gt;&lt;p&gt;[3] Which will be RC1. No more betas! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-6675560243833633946?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/6675560243833633946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/04/new-add-semantics-menu.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6675560243833633946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/6675560243833633946'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/04/new-add-semantics-menu.html' title='The new “Add Semantics” menu'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-547770491860226018</id><published>2010-04-20T16:36:00.002+02:00</published><updated>2010-04-21T00:18:16.760+02:00</updated><title type='text'>QtWebKit 2.0 AKA pigs flying</title><content type='html'>&lt;p&gt;So by now, you should know that QtWebKit is slow. Damn slow. If you don’t, &lt;a href="http://sigildev.blogspot.com/2010/02/loading-performance-and-020.html"&gt;refresh your memory&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you're performing an editing operation in Sigil, and the UI blocks for 10+ seconds, it’s QtWebKit. If you’re loading a large HTML file into the Book View and everything grinds to a halt for 30+ seconds, yeah, that’s still QtWebKit. I’m not saying all the code I write is perfect (far from it), but QtWebKit has a special place in my heart of hatred.&lt;/p&gt;&lt;p&gt;Back in that loading performance post I linked, I talked about how it takes 75 seconds to load &lt;a href="http://www.mobileread.com/forums/showthread.php?t=48377"&gt;Three Men in a Boat&lt;/a&gt; in Sigil 0.1.9. Some of the Linux users may have been confused by that, since on comparable hardware, it would load &lt;em&gt;much&lt;/em&gt; faster on a Linux machine.&lt;/p&gt;&lt;p&gt;And it’s true. Sigil performs about an order of magnitude faster on Linux than on Windows. Why is that?&lt;/p&gt;&lt;p&gt;Well it’s because while Qt is thoroughly tested on Windows, it’s certainly much less tested than on Linux. Qt developers are Linux users, and a lot of them are KDE developers as well. So the machines they use don’t run Windows. It’s a lot like the Sigil UI being fine-tuned for Windows, since I use it and develop on it almost exclusively.&lt;/p&gt;&lt;p&gt;So when there’s a performance regression in Qt on Windows, there’s a fair chance someone at Nokia will miss it. &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=31719"&gt;And they did&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The test case I attached to the bug report loads in 55 seconds on Windows and 6 seconds on Linux. Bear in mind the same test case renders &lt;strong&gt;instantaneously&lt;/strong&gt; in Firefox, and probably also in Safari (although I haven’t tested it) which uses vanilla WebKit. Horrible, I know. They’re finally coming around to fixing that, since the bug is now included as one of the &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=35784"&gt;“release critical” bugs&lt;/a&gt; for QtWebKit 2.0 (which is now officially a separately released project from Qt). That means they’ll kill it before the next release, which should be sometime in May (Qt 4.7 a couple of months after that).&lt;/p&gt;&lt;p&gt;Here’s to pigs flying.&lt;/p&gt;&lt;h3&gt;…and another thing&lt;/h3&gt;&lt;p&gt;Remember the font variants issue preventing official &lt;a href="http://code.google.com/p/sigil/issues/detail?id=20"&gt;font embedding&lt;/a&gt; support in Sigil? The &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=29433"&gt;QtWebKit bug&lt;/a&gt; causing the underlying problem has been tracked for the last &lt;span style="text-decoration: line-through;"&gt;eight&lt;/span&gt; &lt;i&gt;fifteen&lt;/i&gt; months on their various trackers, and I’ve been told just a few days ago that it’s “not considered critical to the release” of QtWebKit 2.0… which probably means it won’t be fixed for at least another six months.&lt;/p&gt;&lt;p&gt;I ♥ Nokia.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-547770491860226018?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/547770491860226018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/04/qtwebkit-20-aka-pigs-flying.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/547770491860226018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/547770491860226018'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/04/qtwebkit-20-aka-pigs-flying.html' title='QtWebKit 2.0 AKA pigs flying'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4632787334840195179</id><published>2010-03-24T01:42:00.002+01:00</published><updated>2010-03-24T02:07:08.354+01:00</updated><title type='text'>β3</title><content type='html'>&lt;p&gt;The third beta of Sigil 0.2.0 has just been released. Here are the release notes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;added two new WYSIWYG actions that work for both Views: &amp;quot;Insert SGF Chapter Marker&amp;quot; which inserts the old SGF horizontal rule chapter breaking marker and &amp;quot;Split On SGF Chapter Markers&amp;quot; which splits the current chapter according to the placement of these markers (issue #262) &lt;/li&gt;
&lt;li&gt;chapter splitting now works in Code View &lt;/li&gt;
&lt;li&gt;fixed an issue with Sigil adding &amp;quot;xmlns='http://www.w3.org/1999/xhtml'&amp;quot; to every element when performing a chapter break operation (issue #313) &lt;/li&gt;
&lt;li&gt;fixed a rare issue with false spaces being inserted into words during import (issue #139) &lt;/li&gt;
&lt;li&gt;added a confirmation dialog for removing items in the Book Browser (issue #306) &lt;/li&gt;
&lt;li&gt;fixed an issue with the line number area overlapping the text in the Code View &lt;/li&gt;
&lt;li&gt;made Sigil remove the CSS cruft WebKit was adding to the &amp;quot;body&amp;quot; element &lt;/li&gt;
&lt;li&gt;fixed an issue with spaces in filenames causing bad anchor element path updates &lt;/li&gt;
&lt;li&gt;fixed an issue with spaces in filenames not being URL encoded in &amp;quot;href&amp;quot; and &amp;quot;src&amp;quot; attributes in the OPF and NCX files &lt;/li&gt;
&lt;li&gt;fixed an issue with spaces in filenames causing invalid IDs (issue #301) &lt;/li&gt;
&lt;li&gt;fixed a regression causing Sigil to crash when importing HTML files that reference resources that don't exist on disk &lt;/li&gt;
&lt;li&gt;Tidy now converts all uppercase attributes to lowercase; mixed-case attributes are left as is &lt;/li&gt;
&lt;li&gt;fixed an issue with Tidy choking on uppercase attribute names &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The beta process is taking substantially longer than I expected. This is mostly because I have less time to work on Sigil than I expected to have, but it’s also because of a huge number of suggestions and bug reports contributed by users since the process began. I can’t thank you all enough, Sigil is better for it. &lt;/p&gt;&lt;p&gt;Some of the feature requests have surprised me, but in a good way. The long awaited SGF chapter markers and splitting are now finally in, so I hope you all put it to good use (and report bugs if you find any).&lt;/p&gt;&lt;p&gt;Epub-wide search&amp;amp;replace is still MIA since I’ve yet to figure out a way to do it that doesn’t suck. I’m not satisfied with the approaches I’ve tried. But I’ll figure it out, don’t worry.&lt;/p&gt;&lt;p&gt;The next three weeks will see little development activity for Sigil since I’m heading into another round of university exams. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4632787334840195179?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4632787334840195179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/03/3.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4632787334840195179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4632787334840195179'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/03/3.html' title='β3'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-3301096564175666841</id><published>2010-03-11T00:17:00.001+01:00</published><updated>2010-03-11T00:17:12.299+01:00</updated><title type='text'>β2</title><content type='html'>&lt;p&gt;The second beta of Sigil 0.2.0 has just been released. Here are the release notes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;fixed an issue with exported HTML/CSS/etc. files inside EPUBs having superfluous newlines &lt;/li&gt;    &lt;li&gt;fixed an issue with the TOC editor adding empty &amp;quot;class&amp;quot; attributes to headings (issue #297)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;added a new &amp;quot;Window&amp;quot; menu item with new &amp;quot;Next Tab&amp;quot;, &amp;quot;Previous Tab&amp;quot; and &amp;quot;Close Tab&amp;quot; actions (issue #273) &lt;/li&gt;    &lt;li&gt;fixed an issue with the font used in the line number area in the Code View being incorrect when the Code View is first opened; the problem affected mostly Mac machines (issue #290)&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;Sigil now handles corrupt epub files with an OPF referencing non-existent files (issue #289)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;the Book Browser now doesn't scroll back to the top when an item is deleted or added (issue #263)&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;the Book Browser now allows a file's extension to change between HTM, HTML, XHTML and XML (issue #264)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;OPF and NCX files don't rely anymore on UTF-8 XML default parsing, but specify their UTF-8&amp;#160; encoding directly in the declaration&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with changes in the TOC editor not being reflected in the book (issue #277)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with the TOC editor not recognizing the &amp;quot;title&amp;quot; attribute on headings (issue #271)&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with the user seeing the old, unclean source in the Code View (issue #286)&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with the user being prompted to save when quitting even when no changes&amp;#160; have been performed on the new/loaded file (issue #276)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with Book/Code View keyboard shortcuts firing in the wrong view (issue #266)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;tentatively fixed an issue with Sigil locking up when chapter breaking (issue #267)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixed an issue with Tidy adding a superfluous “lang” attribute that is also not allowed&amp;#160; in XHTML 1.1&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;making sure that ID attributes used in the manifest section of the OPF are always valid&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;fixing export of epubs with XML files for OPS documents &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Quite a few things made it to the second beta. As you can see, a truly &lt;em&gt;great&lt;/em&gt; deal of bugs were fixed. Some of the things I wanted to include in this release didn’t make it in (like breaking chapters on SGF chapter breaks, &lt;a href="http://code.google.com/p/sigil/issues/detail?id=262"&gt;issue #262&lt;/a&gt;). Sorry guys, but there were some really critical bugs in the previous beta (like the TOC editor not working… &lt;em&gt;at all&lt;/em&gt;), and I wanted to push fixes for those ASAP.&lt;/p&gt;  &lt;p&gt;My university duties and responsibilities are picking up again, so Sigil development will slow down a bit. Not &lt;em&gt;too&lt;/em&gt; much I hope…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-3301096564175666841?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/3301096564175666841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/03/2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3301096564175666841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/3301096564175666841'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/03/2.html' title='β2'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-599156708485635780</id><published>2010-03-02T18:50:00.004+01:00</published><updated>2010-03-02T21:58:06.709+01:00</updated><title type='text'>β1</title><content type='html'>&lt;p&gt;Let’s get this out of the way: the first beta of Sigil 0.2.0 is now &lt;a href="http://code.google.com/p/sigil/downloads/list"&gt;out&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; It’s what all of you want to know, right? There you go. There is also a release thread in the &lt;a href="http://www.mobileread.com/forums/forumdisplay.php?f=203"&gt;Sigil subforum&lt;/a&gt; on MobileRead, and all discussion on the beta should happen there.&lt;/p&gt;&lt;p&gt;You can only get it from the “Downloads” section, not from the main page. The 0.1.9 version is still the “official” one, and the new version notification will not be triggered. Bear in mind that this is the very first public release of the code I’ve been working on for the past 3+ months, so &lt;strong&gt;it’s going to be buggy&lt;/strong&gt;. I’m hoping most of the major bugs will be reported quickly and the second beta will have them remedied. &lt;/p&gt;&lt;p&gt;So really try to bash it. Do whatever you normally do in Sigil and report any (unintentional) differences on &lt;a href="http://code.google.com/p/sigil/issues/list"&gt;the tracker&lt;/a&gt;. Or anything else you feel should be reported. Just don’t forget to state that you’re using the β1&lt;strong&gt; &lt;/strong&gt;release in your issue. This would also be a good opportunity to read the &lt;a href="http://code.google.com/p/sigil/wiki/ReportingIssues"&gt;Reporting Issues wiki page&lt;/a&gt; if you haven’t already.&lt;/p&gt;&lt;p&gt;Why a beta and not a Release Candidate as I’ve previously announced? Well because not all the features that I want in the 0.2.0 release are done. The biggest omission is the cross-file search: in the current beta, you can only search (and replace) in the currently open tab, but not across all the files in the book. The whole search mechanism is about to be overhauled, since Qt 4.6 finally brought a native API for interacting with elements in a QWebPage.&lt;/p&gt;&lt;p&gt;There are numerous other minor annoyances that need to be dealt with before I proclaim a “real” 0.2.0. Things like being able to select multiple items in the Book Browser and delete them; currently you have to delete them one by one, which I find annoying. &lt;/p&gt;&lt;p&gt;Bottom line, it needs a bit of polish. I tried to stay away from that since you always try to make things &lt;em&gt;work&lt;/em&gt; first, and then gradually improve them later.&lt;/p&gt;&lt;p&gt;So, betas first, and then after a few of those you’ll see at least one Release Candidate. When I’m satisfied with the way it looks and behaves, I’ll mark the next release after that as “official”.&lt;/p&gt;&lt;p&gt;With that settled, let’s move on.&lt;/p&gt;&lt;h3&gt;SGF is now dead&lt;/h3&gt;&lt;p&gt;The SGF format was created to provide Sigil with a native file format that could be changed and modified as needed. Initially, I wanted to make epub Sigil’s native format, but that didn’t seem like a good idea at the time. Back then, I wanted Sigil to eventually be able to save many different e-book formats, so I needed to make sure Sigil could store anything the epub format couldn’t but that was potentially in use by the other formats. So SGF was born. Whenever someone asked about it, the short answer was “SGF is to Sigil what PSD is to Photoshop”.&lt;/p&gt;&lt;p&gt;It was a product of thinking for the future… but &lt;a href="http://sigildev.blogspot.com/2010/01/back-in-town.html"&gt;the future has changed&lt;/a&gt;. Sigil is now mainly focused on producing epub books. With that, the major reason for SGF’s existence was gone.&lt;/p&gt;&lt;p&gt;SGF had a few advantages over epub in Sigil 0.1.x. For one thing, it stored the text you saw in the Code View &lt;em&gt;raw&lt;/em&gt;, with no preprocessing on save. Saving as epub would split the One Huge Flow™ into different XHTML files according to your chapter breaks, and a great deal of other “book normalization” transformations were applied as well. So SGF was definitely the more “native” format.&lt;/p&gt;&lt;p&gt;In Sigil 0.2.0, the separate files are now kept separate, and any advantage the SGF format had is gone. With no advantage and no real future need for it, SGF format export has been removed: epub is now Sigil’s native file format. &lt;/p&gt;&lt;p&gt;Before you start screaming “but I have &lt;em&gt;hundreds&lt;/em&gt; of SGF files!”, 0.2.0 can still &lt;em&gt;open&lt;/em&gt; SGF. From there, you’re just a click away from saving it as epub. I’m not leaving you people out in the rain. :)&lt;/p&gt;&lt;h3&gt;Show &amp;amp; Tell&lt;/h3&gt;&lt;p&gt;I prepared this little screen cast of 0.2.0 in action. Things to watch out for:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The loading speed; &lt;/li&gt;
&lt;li&gt;The&amp;#160; “paragraph merging” speed; &lt;/li&gt;
&lt;li&gt;The Table of Contents open/close speed; &lt;/li&gt;
&lt;li&gt;The CSS tab; &lt;/li&gt;
&lt;li&gt;The XPGT tab; &lt;/li&gt;
&lt;li&gt;The image tab, &lt;em&gt;which supports SVG&lt;/em&gt;. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And here is the video…&lt;/p&gt;&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:74e9930c-1922-47d6-8324-ffa6cb874f9c" class="wlWriterEditableSmartContent"&gt;&lt;div id="ed6dd31f-9a3d-4c7b-b578-819da1e2b376" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=DxX5DHg9WOY&amp;amp;feature=youtube_gdata" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_gI6mrRJtYT4/S41P-ZW6m9I/AAAAAAAAAIU/qTCUdIMIzNo/videob03fb353135a%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('ed6dd31f-9a3d-4c7b-b578-819da1e2b376'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/DxX5DHg9WOY&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/DxX5DHg9WOY&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-599156708485635780?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/599156708485635780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/03/1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/599156708485635780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/599156708485635780'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/03/1.html' title='β1'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_gI6mrRJtYT4/S41P-ZW6m9I/AAAAAAAAAIU/qTCUdIMIzNo/s72-c/videob03fb353135a%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-5977651929239169632</id><published>2010-02-13T00:20:00.003+01:00</published><updated>2010-02-13T01:34:34.071+01:00</updated><title type='text'>Loading performance and 0.2.0</title><content type='html'>&lt;p&gt;I’m the first person to acknowledge that loading epub and HTML files in Sigil 0.1.x is slow. Very slow. &lt;em&gt;Abysmally&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Why is that? Well there are two components in the 0.1.x loading process:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Extracting the epub file, reading the OPF, running Tidy on the source, updating resource references etc. Let’s call this the “file load”. &lt;/li&gt;
&lt;li&gt;After the file load creates one large HTML flow, this is then sent to the Book View (integrated QtWebkit) for rendering. Let’s call this the “QtWebkit load”. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;You can tell when the file load has finished and the QtWebkit load is starting: the moment you see “File Loaded” in the status bar is the moment that &lt;em&gt;all&lt;/em&gt; Sigil code stops executing and now it’s up to QtWebkit to render the page.&lt;sup&gt;[1]&lt;/sup&gt;&lt;/p&gt;&lt;h3&gt;QtWebkit load&lt;/h3&gt;&lt;p&gt;QtWebkit load takes longer, by far. Using the &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Three_Men_in_a_Boat"&gt;Three Men in a Boat&lt;/a&gt;&lt;/em&gt; &lt;a href="http://www.mobileread.com/forums/showthread.php?t=48377"&gt;epub file&lt;/a&gt;&lt;sup&gt;[2]&lt;/sup&gt; from the MobileRead ebook uploads forum as a reference, the whole loading procedure takes 75 seconds in Sigil 0.1.9.&lt;sup&gt;[3]&lt;/sup&gt; Way, &lt;em&gt;way&lt;/em&gt; too long.&lt;/p&gt;&lt;p&gt;Of these 75 seconds, only 14.5 are spent in the file load. The rest is all QtWebkit, so not something I can directly influence. The QtWebkit load used to be more than twice as fast in Sigil 0.1.5, but the subsequent versions of Sigil include Qt 4.6 (instead of 4.5), and in that version QtWebkit is much slower. Nokia developers admit they introduced some major performance regressions and are currently working on fixing that. &lt;/p&gt;&lt;p&gt;I have no intention on waiting for that to happen. It was bad before, but now it’s horrible. I considered it far too slow in Qt 4.5, and now?… So how about I come up with a way to work around this problem?&lt;/p&gt;&lt;p&gt;Currently, Sigil takes in all of the XHTML files in an epub, puts them all together and displays them as one. So you get one large “flow” where you can do all the editing. I chose this model because it’s the one used in the popular&lt;sup&gt;[4]&lt;/sup&gt; Book Designer (which doesn’t support epubs). &lt;/p&gt;&lt;p&gt;This is where Sigil 0.2.0 comes in.&lt;/p&gt;&lt;p&gt;Sigil no longer does that. All the original XHTML files are preserved and are edited one by one. Since there is no one huge flow, QtWebkit rendering performance goes up &lt;em&gt;tremendously &lt;/em&gt;(since there is less to render).&lt;/p&gt;&lt;p&gt;Now, when Sigil loads your epub file, the first XHTML file by reading order is loaded in the initial tab. Since this first XHTML file is usually a cover page, it takes less than half a second to render. So now instead of 60 seconds for the QtWebkit load, you get 0.2 seconds (for the TMB file).&lt;/p&gt;&lt;p&gt;Great, ha? :)&lt;/p&gt;&lt;h3&gt;File load&lt;/h3&gt;&lt;p&gt;But then again, there are those 14.5 seconds for the file load. It would be great if I could get that down. &lt;/p&gt;&lt;p&gt;Most of that time is spent doing two things: running Tidy on the large concatenated HTML document, and updating the resource reference paths. The updating process takes much longer.&lt;/p&gt;&lt;p&gt;The resource updating process is necessary since Sigil 0.1.x renames your resource files. Since images, CSS files, HTML files, fonts etc. now have different names, all the HTML tags and style rules referencing them have to be updated. This takes a long time.&lt;/p&gt;&lt;p&gt;In Sigil 0.2.0, there are now multiple XHTML files, and they all have to be updated the same way. The original resource filenames are now preserved, but the file structure changes so we still need to update the paths. All the XHTML’s have different content, but the file path updates are universal. This means we can now parallelize this:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;We create a thread pool equal to the number of logical CPU’s&lt;sup&gt;[5]&lt;/sup&gt; on the system; &lt;/li&gt;
&lt;li&gt;We split the updating process into “tasks”, where each task represents the required update operations to be performed on each XHTML file; &lt;/li&gt;
&lt;li&gt;We let the threads munch the tasks as they become ready to process them. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;So if you have a dual core system like I do, two different threads execute two tasks at the same time. As they finish the task they have been working on, they arbitrarily pick a new one and work on that. So the more logical CPU’s you have, the more threads you can run, the more tasks your computer can work on at the same time, the faster the file loading will be.&lt;/p&gt;&lt;p&gt;I then plugged in the old updating subsystem into this multi-threaded architecture and ran it on my dual core. The file load on TMB dropped to 11 seconds. Not quite the ideal linear behavior, but that’s to be expected since there’s overhead in talking to the threads, managing the task pool etc. And the OS eats your cores too, so your threads can’t stay active all the time. Also, not everything in the file load can be parallelized; lots of things have to stay sequential.&lt;/p&gt;&lt;p&gt;The other major problem is that TMB has a &lt;em&gt;huge&lt;/em&gt; number of images, meaning that many HTML “&amp;lt;img&amp;gt;” elements have to be updated. With a more conservative epub file, the numbers would be even better.&lt;/p&gt;&lt;p&gt;But a 25% improvement on a measly dual core isn’t half bad. It would certainly be faster on a quad. But I can take that even more down, I know I can.&lt;/p&gt;&lt;p&gt;So I spent about six hours in front of a code profiler and Visual Studio, tracing the bottlenecks and optimizing the “hot” paths. The major bottleneck was—as expected—the large and cumbersome resource updating subsystem. After rewriting it in what must have been ten different ways (each version slightly faster than the previous), I came up with the final design.&lt;/p&gt;&lt;p&gt;For the sake of reference, my profiler says that the old version takes on average &lt;strong&gt;470&lt;/strong&gt; milliseconds to run through one XHTML file in TMB. After six hours messing with it, the final version takes &lt;strong&gt;15&lt;/strong&gt; milliseconds. That’s 31 times faster.&lt;/p&gt;&lt;p&gt;File load for TMB? It’s now 3.3 seconds. Including the 0.3 for the rendering of the cover page, it’s 3.6.&lt;/p&gt;&lt;p&gt;So from 75 seconds in Sigil 0.1.9 down to 3.6 seconds in the development version of 0.2.0, I think I’ve done a pretty good job improving the loading speed.&lt;/p&gt;&lt;p&gt;For epubs with a “normal” number of images and computers with more logical CPU’s, it’s even faster.&lt;/p&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="461"&gt;&lt;tbody&gt;
&lt;tr&gt;       &lt;td valign="top" width="173"&gt;&lt;strong&gt;epub name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="129"&gt;&lt;strong&gt;Time – 0.1.9 (s)&lt;sup&gt;[3]&lt;/sup&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="157"&gt;&lt;strong&gt;Time – dev0.2.0 (s)&lt;sup&gt;[3]&lt;/sup&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td valign="top" width="173"&gt;&lt;a href="http://www.mobileread.com/forums/showthread.php?t=48377"&gt;Three Men in a Boat&lt;/a&gt;&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="129"&gt;75&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="157"&gt;3.6&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td valign="top" width="173"&gt;&lt;a href="http://www.mobileread.com/forums/showthread.php?t=52321"&gt;Sylvie and Bruno&lt;/a&gt;&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="129"&gt;82.5&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="157"&gt;6&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td valign="top" width="173"&gt;&lt;a href="http://www.mobileread.com/forums/showthread.php?t=49717"&gt;Savage Stories of Conan&lt;/a&gt;&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="129"&gt;90.2&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="157"&gt;4.5&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td valign="top" width="173"&gt;&lt;a href="http://www.mobileread.com/forums/showthread.php?t=54219"&gt;David Copperfield&lt;/a&gt;&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="129"&gt;98&lt;/td&gt;        &lt;td style="text-align: center" valign="top" width="157"&gt;3.2&lt;/td&gt;     &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;These are all x86 times. For x64, &lt;a href="http://sigildev.blogspot.com/2010/02/63-bits-plus-one.html"&gt;knock off 10%&lt;/a&gt;. &lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1]&amp;#160; “Render” means that the colors for the pixels on the screen have to be calculated, i.e. the screen has to be “painted”.&lt;/p&gt;&lt;p&gt;[2] Written by Jerome K. Jerome and painstakingly hand-crafted by MobileRead user zelda_pinwheel. It’s a great book, you should read it. It’s also an &lt;em&gt;amazing&lt;/em&gt; epub file, I use it as my main reference during Sigil development.&lt;/p&gt;&lt;p&gt;[3] x86 Windows version of Sigil, on Windows 7 x64. Computer is a Core 2 Duo 6400 with 4GB RAM.&lt;/p&gt;&lt;p&gt;[4] But horrible.&lt;/p&gt;&lt;p&gt;[5] Logical CPU’s are the number of actual cores on your system and any “virtual” cores from &lt;a href="http://en.wikipedia.org/wiki/Hyperthreading"&gt;HyperThreading&lt;/a&gt;. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-5977651929239169632?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/5977651929239169632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/02/loading-performance-and-020.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5977651929239169632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/5977651929239169632'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/02/loading-performance-and-020.html' title='Loading performance and 0.2.0'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-4663164983413985849</id><published>2010-02-08T01:01:00.003+01:00</published><updated>2010-02-09T18:40:49.311+01:00</updated><title type='text'>63 bits plus one</title><content type='html'>&lt;p&gt;Some of you may have noticed that while you can get precompiled binaries of Sigil for Linux in x86 and x64&lt;sup&gt;[1]&lt;/sup&gt; flavors, you only have an x86 version for Windows. Why? Well Microsoft made very a good job ensuring that 32 bit applications still run on 64 bit Windows. So there was no need for x64 Sigil. On Linux, it’s slightly different and nowhere near that easy.&lt;sup&gt;[2]&lt;/sup&gt; &lt;/p&gt;&lt;p&gt;So what are the main benefits (from an application’s point of view) to the newer instruction set/architecture?&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The application has access to a larger address space (both physical and virtual), &lt;/li&gt;
&lt;li&gt;Registers are 64 bits, not 32; this allows better/faster 64 bit math, &lt;/li&gt;
&lt;li&gt;Double the number of general-purpose registers, &lt;/li&gt;
&lt;li&gt;Double the number of XMM registers, &lt;/li&gt;
&lt;li&gt;SSE instructions can be safely used knowing that all x64 CPU’s have to support them.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;And several other things. The drawback is that your compiled code is now larger: pointers are all 64 bits, but the caches on the CPU’s are the same size. This is a big issue.&lt;/p&gt;&lt;p&gt;In the end, whether you’ll see direct performance improvements from moving to x64 depends entirely on the application. Some will, but some won’t. The Visual Studio devs &lt;a href="http://blogs.msdn.com/ricom/archive/2009/06/10/visual-studio-why-is-there-no-64-bit-version.aspx"&gt;have chosen not to&lt;/a&gt; make the transition just yet. I know other developers who have stated that their apps also behave &lt;em&gt;worse &lt;/em&gt;on x64.&lt;/p&gt;&lt;p&gt;So you have to profile it to know for sure.&lt;/p&gt;&lt;p&gt;I used to think Sigil wouldn’t benefit from x64, performance wise. But then there was that nagging feeling telling me I should test it and see. The main reason why I didn’t want to do this is because I’d have to setup an entire new build system, with an entirely new Qt etc., etc. I already have four: Win x86, Lin x86, Lin x64 and Mac Universal. And building Qt (AGAIN) takes about five hours. You basically have to sit in front of the console, watching green text fly by because it likes to flake out in the middle and then you have to start it again. Not my ideal way to spend an afternoon.&lt;/p&gt;&lt;p&gt;But today I came down with a fever so I was too weak to do anything useful anyway. I may as well sit dozing in front of a screen. So I did.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Many&lt;/em&gt; hours later, after I got everything compiled and working, I set out to test Sigil 0.1.8 in x86 versus the same in x64. The test would measure the time it takes to load an epub book, from start to finish (this is easily the longest running operation in Sigil 0.1.8). I chose three epub files, did five runs for each on both versions, recorded the times and voila!&lt;/p&gt;&lt;p&gt;The x64 version was consistently 10% faster.&lt;/p&gt;&lt;p&gt;So my assumption was wrong. In light of these results, the next public release of Sigil (which should be 0.2.0) will in all likelihood include an x64 version for Windows.&lt;/p&gt;&lt;p&gt;In other news, I’ll be getting the 2010 version of Visual Studio when it ships in two months, for several reasons. But it will also provide tangible performance improvements for Sigil, since MSVC10 C++ compiler optimizations have &lt;a href="http://blogs.msdn.com/vcblog/archive/2009/12/01/gl-and-pgo.aspx"&gt;improved&lt;/a&gt;. That’s another 10%.&lt;/p&gt;&lt;p&gt;And then there’s Sigil 0.2.0 and multithreaded, multi-flow loading. Now if only Nokia could get QtWebKit in a respectable shape…&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] Some say “64 bit”, some “x64” or “x86-64” or “AMD64” or “Intel 64” and they all argue which is the correct one… I don’t care. I’m calling it “x64”, since that’s what people around me seem to be using. You know what I mean: the 64 bit extension to the x86 instruction set that AMD came up with and then Intel licensed.&lt;/p&gt;&lt;p&gt;[2] Also, Linux users tend to yell &lt;em&gt;a lot&lt;/em&gt; more when their needs and/or desires are not met. Believe me, you don’t want to know.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-4663164983413985849?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/4663164983413985849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/02/63-bits-plus-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4663164983413985849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/4663164983413985849'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/02/63-bits-plus-one.html' title='63 bits plus one'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-7869810653626815413</id><published>2010-01-31T02:45:00.003+01:00</published><updated>2010-01-31T13:00:18.634+01:00</updated><title type='text'>Back in town</title><content type='html'>&lt;p&gt;Finals… finally… over!&lt;/p&gt;&lt;p&gt;I have a couple of papers due in a few days, so I’m still working, but after that I’ll have about three weeks of vacation time. The first few days I’ll spend soaking my brain in warm water and sleeping, but after that, I plan to spend most of my time working on Sigil.&lt;/p&gt;&lt;p&gt;In other news, I’ve decided to shift Sigil’s long-term development focus.&lt;/p&gt;&lt;p&gt;Way back when I started thinking about creating an eBook editor (more than a year ago), I primarily wanted to make an epub editor. The format badly needed one, since no such editor existed at the time. But I also wanted to replace Book Designer for most of the formats it exports. If you’re not familiar with BD, believe me, you don’t want to be. Let’s just leave it at “it’s horrible”. BD development is also completely dead (and has been for many years), and the application isn’t open source so no one can pick up where the original developers left off. The beauty of closed-source apps…&lt;/p&gt;&lt;p&gt;So the plan was this: make an eBook editor with an emphasis on epub, and then slowly add export support for all the other formats. A general-purpose eBook editor.&lt;/p&gt;&lt;p&gt;Back then I recognized several major formats I wanted to support, those that had more than a niche market: LRF (AKA BBeB), MOBI and LIT&lt;sup&gt;[1]&lt;/sup&gt;. But the scene has changed a lot since then…&lt;/p&gt;&lt;h3&gt;LRF&lt;/h3&gt;&lt;p&gt;First off, LRF is dead. It was proprietary to Sony’s reading devices, and Sony just switched their store over to epub. All of their Readers that support LRF support epub, too&lt;sup&gt;[2]&lt;/sup&gt;. LRF’s are not being sold anymore. Some people are still clinging to the format for personal use though; mostly because all epub books are displayed left-justified on PRS-505’s. Newer Sony Readers don’t have this limitation, but there it is. It still doesn’t change the fact that the format is dead. I’m sorry, that’s just the way it is.&lt;/p&gt;&lt;p&gt;I can’t say I’m sad it’s gone. There’s basically zero information on the format itself: what the OSS community knows about it, it knows mostly through reverse engineering. That’s not a happy place to be.&lt;/p&gt;&lt;p&gt;Anyway, it’s not on Sigil’s roadmap anymore. Even Kovid has stopped fixing bugs in Calibre’s LRF output plug-in.&lt;/p&gt;&lt;h3&gt;LIT&lt;/h3&gt;&lt;p&gt;This is the format for &lt;a href="http://www.microsoft.com/reader/"&gt;Microsoft Reader&lt;/a&gt;. It’s pretty much dead too. Even the website I linked got this shiny new look just a couple of months ago, until then it looked like something out of the ‘90s. I guess Microsoft thinks that eBooks are cool now and wants back in. They are, but the gravy train has left. LIT is only popular on PocketPC and Windows Mobile, and now epub is chewing that away. LIT is basically OEBPS 1.0, a somewhat direct precursor to epub.&lt;/p&gt;&lt;p&gt;MS abandoned LIT a long time ago, and now it’s too late to play catch up. &lt;/p&gt;&lt;h3&gt;MOBI&lt;/h3&gt;&lt;p&gt;I’ve never actually used MOBI. I hear it’s very popular with cell phones and similar devices. But ever since Amazon bought Mobipocket SA, the format seems to be on the way out. Amazon uses a custom version (AZW) for the Kindle’s, and you can’t read Kindle books on anything but a Kindle or an Amazon-sanctioned reading application. That’s not much of an open format. They also seem to be going with something called “Topaz”&lt;sup&gt;[3]&lt;/sup&gt;.&lt;/p&gt;&lt;p&gt;The main problem for MOBI is that Mobipocket SA doesn’t allow device makers to support both MOBI DRM and some other eBook DRM on their electronic readers. And the manufacturers are seeing the writing on the wall and switching to Adobe’s Reader Mobile SDK which supports epub and PDF DRM. More money in that.&lt;/p&gt;&lt;p&gt;So MOBI is not in great shape, long-term. But it’s still popular enough that I’m keeping it in mind.&lt;/p&gt;&lt;h3&gt;Conclusion &lt;/h3&gt;&lt;p&gt;Seeing as how the other three major formats are either dead or dying—mostly thanks to epub—and the new player in town is solidifying his position quite nicely, it may be prudent to focus just on that. Sigil will from now on focus on bringing the best epub editing experience. It also means I won’t be spreading myself too thin. &lt;/p&gt;&lt;p&gt;Do understand that I’m only talking about MOBI, LIT and LRF &lt;em&gt;exporting&lt;/em&gt;. Sigil will certainly one day be able to &lt;em&gt;import&lt;/em&gt; files of those types (and others). That hasn’t changed one bit. Also, HTML and RTF export are not in jeopardy: those are very general-purpose and quite useful, so exporters for those will be written.&lt;/p&gt;&lt;p&gt;The current importers and exporters will be rewritten to use a plug-in architecture, so anyone who still wishes to develop export plug-ins for the above three formats will be able to do so with ease&lt;sup&gt;[4]&lt;/sup&gt;. All I’m saying is that I’m personally not going to develop them. Not any time soon, at least. They’re off the roadmap. &lt;/p&gt;&lt;h3&gt;Sidenote &lt;/h3&gt;&lt;p&gt;Google Analytics reports a 500% traffic spike on Sigil’s project page starting last Wednesday and peaking on Thursday. Seems a lot of people suddenly felt the urge to search for “epub editor”… I wonder &lt;a href="http://www.apple.com/ipad/"&gt;what&lt;/a&gt; could have caused that…&lt;/p&gt;&lt;p&gt;I personally like the device and seeing as how the iBookstore will be selling epub books, it can only mean good things for the format. I plan on getting one of these when they become available. Hopefully this will also push Adobe to improve Adobe Digital Editions, which has more than a few rendering quirks. But honestly the biggest complaint I have against it is its utterly &lt;em&gt;abysmal&lt;/em&gt; Unicode coverage with the default fonts. I’m pretty sure the iPad won’t have these problems: the videos clearly show user-selectable fonts, and the ones we can see preloaded&lt;sup&gt;[5]&lt;/sup&gt; are known to have good coverage.&lt;/p&gt;&lt;p&gt;Hurrah for competition. &lt;/p&gt;&lt;h5&gt;Footnotes&lt;/h5&gt;&lt;p&gt;[1] I’m not counting PDF since &lt;a href="http://www.mobileread.com/forums/showthread.php?t=22858"&gt;that’s not an eBook format&lt;/a&gt;, or RTF and HTML which are more general-purpose and have to be supported. &lt;/p&gt;&lt;p&gt;[2] The PRS-500 users can send their Readers for a free firmware upgrade for epub support, the PRS-505’s already has this upgrade and the others read it natively.&lt;/p&gt;&lt;p&gt;[3] Which I hear is actually Amazon’s proprietary implementation of epub. Go figure.&lt;/p&gt;&lt;p&gt;[4] And drop them in Sigil without violating the GPL if they choose not to provide the source code. I’m trying to lend a hand to the publishers that currently use Sigil.&lt;/p&gt;&lt;p&gt;[5] Like &lt;a href="http://en.wikipedia.org/wiki/Unicode_fonts#List_of_Unicode_fonts"&gt;Times New Roman&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-7869810653626815413?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/7869810653626815413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/01/back-in-town.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7869810653626815413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/7869810653626815413'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/01/back-in-town.html' title='Back in town'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2310327870902625153</id><published>2010-01-08T19:06:00.001+01:00</published><updated>2010-01-08T19:06:44.483+01:00</updated><title type='text'>C'est la vie</title><content type='html'>&lt;p&gt;I haven’t been able to work on Sigil the last week, and I won’t be able to work on it for the next three weeks, either. University-related obligations are currently squeezing the life out of me and I can barely find time to sleep, let alone work on Sigil.&lt;/p&gt;  &lt;p&gt;But the good news is that after this three week stint I’ll have loads of free time. More than enough to whip 0.2.0 into shape. I’ll just have to persevere until then.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2310327870902625153?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2310327870902625153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2010/01/c-la-vie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2310327870902625153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2310327870902625153'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2010/01/c-la-vie.html' title='C&amp;#39;est la vie'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-832279846802872971</id><published>2009-12-30T21:04:00.001+01:00</published><updated>2009-12-30T21:10:28.296+01:00</updated><title type='text'>Dublin Core in HTML and new releases</title><content type='html'>&lt;p&gt;OK, so Sigil 0.1.7 was released a couple of days ago. It’s a bugfix release for the 0.1.x branch while work on 0.2.0 is underway… and then 0.1.8 was released about an hour ago.&lt;/p&gt;  &lt;p&gt;It seems that lately I can’t make a release without breaking something. This time it was (ironically) a fix for &lt;a href="http://code.google.com/p/sigil/issues/detail?id=139"&gt;issue #139&lt;/a&gt; that was the problem: CSS was being jumbled up into one line. Everything still worked, but if you are importing an epub book with hand-coded CSS, you want it to stay human-readable. This fix has been removed and will be looked at after the redesign.&lt;/p&gt;  &lt;p&gt;Normally I’d release a “&lt;strong&gt;b&lt;/strong&gt;” version, but this was major enough to warrant a whole new release treatment with a notification update pushed to everyone using 0.1.7.&lt;/p&gt;  &lt;p&gt;But onto lighter topics… what did 0.1.7 bring? Mostly fixes, as I’ve said. View switching used to be less than reliable and could occasionally cause Sigil to crash. This was caused by differences in what WebKit thinks is a node, and what Qt’s QDom implementation thinks is one. Apparently they can’t agree whether continuous whitespace is just one text node or several, even after you tell both of them to normalize the tree. Or what is a child node, and whose child is it anyway. Plus a few other disagreements.&lt;/p&gt;  &lt;p&gt;The net effect was that Sigil would crash if the tree-descending instructions it created from WebKit’s DOM couldn’t be executed upon the QDom DOM. This should be remedied now. If Sigil can’t quite figure out where it needs to scroll the View, it will scroll to the place before the ambiguity begins. In other words, as close as it can get. Still, this is only needed in rare cases.&lt;/p&gt;  &lt;p&gt;The other important fixes are the &lt;a href="http://sigildev.blogspot.com/2009/12/line-endings-and-why-you-shouldnt-trust.html"&gt;line ending issue&lt;/a&gt; and the &lt;a href="http://sigildev.blogspot.com/2009/12/encodings-and-why-you-shouldnt-trust.html"&gt;encoding detection improvements&lt;/a&gt; I talked about in previous posts. For a complete list of what was fixed, refer to the &lt;a href="http://sigil.googlecode.com/hg/ChangeLog.txt"&gt;changelog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;But there was also one new feature: Sigil now imports HTML metadata if that metadata conforms to the &lt;a href="http://dublincore.org/documents/usageguide/"&gt;Dublin Core&lt;/a&gt; standard. It’s &lt;a href="http://code.google.com/p/sigil/issues/detail?id=160"&gt;been requested&lt;/a&gt;, and Kevin Hendricks kindly provided the code that implements this.&lt;/p&gt;  &lt;p&gt;An &lt;a href="http://www.mobileread.com/forums/showthread.php?t=66915"&gt;interesting discussion&lt;/a&gt; on what is currently supported and what can still be added has started on MobileRead. Anyone interested in this feature should check out that thread to see examples of how you can use this new functionality, and if you happen to have any ideas for its improvement, we’d all love to hear them.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-832279846802872971?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/832279846802872971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2009/12/dublin-core-in-html-and-new-releases.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/832279846802872971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/832279846802872971'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2009/12/dublin-core-in-html-and-new-releases.html' title='Dublin Core in HTML and new releases'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-1249438379980913557</id><published>2009-12-23T18:31:00.007+01:00</published><updated>2009-12-23T18:43:58.343+01:00</updated><title type='text'>The Redesign: New GUI</title><content type='html'>&lt;p&gt;So how is oft-touted redesign progressing? Well it’s coming along nicely. Here’s what the new GUI looks like as of 5 minutes ago: &lt;/p&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_gI6mrRJtYT4/SzJUeSxuoRI/AAAAAAAAAII/aJPK8vVudFY/s1600-h/Sylvie+and+Bruno.epub+-+Sigil+%282%29.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sylvie and Bruno.epub - Sigil (2)" border="0" alt="Sylvie and Bruno.epub - Sigil (2)" src="http://lh3.ggpht.com/_gI6mrRJtYT4/SzJUCpJiZLI/AAAAAAAAAH8/0pmmZgn4aEM/Sylvie%20and%20Bruno.epub%20-%20Sigil%20%282%29_thumb%5B8%5D.png?imgmax=800" width="522" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It should mostly stay that way.&lt;/p&gt;&lt;p&gt;So you have a fancy new “Book Browser” docked to the left by default; you can drag it to the right, or pull it out into its own window if you want. It lists all the files that make up your book (notice how the files are not renamed anymore), in neat little folders:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Text &lt;/li&gt;
&lt;li&gt;Styles &lt;/li&gt;
&lt;li&gt;Images &lt;/li&gt;
&lt;li&gt;Fonts &lt;/li&gt;
&lt;li&gt;Misc &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You will be able to right-click in the Book Browser to add/remove files, rename them (F2 also works), open file information and the like. The file icons are queried from the OS, so whatever is the default for your system is what you’ll see in Sigil too.&lt;/p&gt;&lt;p&gt;The files are sorted alphabetically in all folders except the Text folder, where they are sorted according to the (imported) reading order. It’s also the only folder where you can rearrange the files, as the order determines the aforementioned reading order on export.&lt;/p&gt;&lt;p&gt;CSS files are now also preserved, and not loaded as style tags. Double-clicking one opens it in a special CSS editor with CSS syntax highlighting. Sigil 0.2.0 should also ship with an image viewing (but not editing) tab capability. Somewhere down the line when font embedding makes an appearance, there will be a font viewing tab as well. The “quick brown fox jumps over the lazy dog” kind. Double-click a font file in Windows and you’ll know what I mean. &lt;/p&gt;&lt;p&gt;The tabbed interface is also finally here. Very firefoxy. Yes, you can reorder the tabs. I hate it when applications don’t let me do that (like Foxit Reader), so Sigil is trying to be a bit smarter.&lt;/p&gt;&lt;p&gt;Before anyone goes all “ZOMG I CAN HAS NOW? MOAR!”, I’m merely 10% of the way through. This is just the UI, and its functionality. That’s the easy part. The very, &lt;em&gt;very&lt;/em&gt; hard part was designing a new architecture for the back-end. But now comes the long and arduous task of integrating the old components into this new system. By “integrating” I mean rewriting. Not the Meta Editor, but the TOC editor definitely. All the importers too, plus the exporters. And a million other things. For instance, CSS and images are not currently loaded correctly in Book View.&lt;/p&gt;&lt;p&gt;After all of that is implemented, then of course I have to test everything.&lt;/p&gt;&lt;p&gt;When I feel I’ve gotten it to a point where others can try it, there will be a series of Release Candidates with the goal of shaking out any major bugs (and hopefully most of the minor). If I wasn’t so terribly bogged down with university work, I could do all this in a few weeks. But since I am, it will probably be February before you see something you can install.&lt;/p&gt;&lt;p&gt;Yeah, it sucks. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-1249438379980913557?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/1249438379980913557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2009/12/redesign-new-gui.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1249438379980913557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/1249438379980913557'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2009/12/redesign-new-gui.html' title='The Redesign: New GUI'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_gI6mrRJtYT4/SzJUCpJiZLI/AAAAAAAAAH8/0pmmZgn4aEM/s72-c/Sylvie%20and%20Bruno.epub%20-%20Sigil%20%282%29_thumb%5B8%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-8300509274343222267</id><published>2009-12-14T15:33:00.006+01:00</published><updated>2009-12-14T22:51:15.904+01:00</updated><title type='text'>Line endings and why you shouldn’t trust Nokia (Part 2)</title><content type='html'>&lt;p&gt;So you’re using the Qt framework. You want to read an HTML file that probably has its encoding specified, but then again, maybe it doesn’t.&lt;/p&gt;&lt;p&gt;You’ll start off with something like this:&lt;/p&gt;&lt;pre class="brush: cpp"&gt;QString fullpath = QFileInfo( &amp;quot;test.xhtml&amp;quot; ).absoluteFilePath();
QFile file( fullpath );
file.open( QFile::ReadOnly | QFile::Text );

QByteArray data = file.readAll();
QString html_source = QTextCodec::codecForHtml( data )-&amp;gt;toUnicode( data );

// This is here only for debug output
qDebug() &amp;lt;&amp;lt; html_source;&lt;/pre&gt;&lt;p&gt;Sounds reasonable, doesn’t it? And it looks reasonable too. But &lt;a href="http://sigildev.blogspot.com/2009/12/encodings-and-why-you-shouldnt-trust.html"&gt;as I’ve said before&lt;/a&gt;, the QTextCodec::codecForHtml() function is horribly lacking. You’ll have to either write your own or at least augment this in some way. &lt;/p&gt;&lt;p&gt;But let’s say you have. Let’s say you called Magic, Inc.® and bought a replacement function that always returns the correct codec for a file. It doesn’t matter for this example, since for what I’m about to show you codecForHtml() is perfectly alright.&lt;/p&gt;&lt;p&gt;You now have this HTML file, encoded as UTF-16BE with Windows-style line endings (CRLF):&lt;/p&gt;&lt;pre class="brush: xhtml"&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;
    &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Test Page&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;p&amp;gt;This is some text.&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;This is some more text.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;You try to load this file with the above code. What does qDebug() print out?&lt;/p&gt;&lt;pre class="brush: xhtml"&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;/pre&gt;&lt;p&gt;Yeah. That’s it.&lt;/p&gt;&lt;p&gt;Actually there’s quite a bit more data in html_source, but it’s all junky, garbled text after that line so it doesn’t even print out. So your file doesn’t load. You check the return of codeForHtml(), and by George, it actually got it right (it saw the &lt;a href="http://en.wikipedia.org/wiki/Byte-order_mark"&gt;BOM&lt;/a&gt;). It says the codec is UTF-16BE, which is correct. So what happened then?&lt;/p&gt;&lt;p&gt;Every experienced developer’s initial response is “OK so I screwed something up”. No one would ever initially doubt a mature, stable and popular framework like Qt. Blaming your framework is like blaming your compiler: you grow out of it when you realize it’s always you. But this time…&lt;/p&gt;&lt;p&gt;QFile has this great “feature” when you use QFile::Text as an OpenMode flag: if your file contains “CRLF” substrings (that is, Windows-style &lt;a href="http://en.wikipedia.org/wiki/Newline"&gt;line breaks&lt;/a&gt;), it “automagically” converts them to “LF”, AKA Unix-style line breaks. Sadly, this doesn’t work so hot with when the file is UTF-16 encoded, since it screws up the byte stream. And now your file is unreadable. Dare I mention it all works perfectly with Unix newlines? Tends to show Qt’s Unix roots and focus…&lt;/p&gt;&lt;p&gt;Sure, if you use QTextStreamer, things somehow manage to work themselves out. But the point is QFile shouldn’t be doing this. The other problem caused by this line ending mangling nonsense is that files with Mac-style terminators (CR) get read as one large line of text. All of those “CR” characters go puff, and they’re gone! They’re not converted, they just &lt;em&gt;disappear.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;So Sigil yesterday switched to binary file reading and manual conversion of line endings. Importing old Mac files is now supported, as well as HTML files with UTF-16 encoding (which I assumed worked before… so much for assumptions). &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-8300509274343222267?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/8300509274343222267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2009/12/line-endings-and-why-you-shouldnt-trust.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8300509274343222267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/8300509274343222267'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2009/12/line-endings-and-why-you-shouldnt-trust.html' title='Line endings and why you shouldn’t trust Nokia (Part 2)'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3282763402665844292.post-2322708282349470877</id><published>2009-12-14T02:31:00.008+01:00</published><updated>2009-12-14T19:24:56.479+01:00</updated><title type='text'>Encodings and why you shouldn't trust Nokia (Part 1)</title><content type='html'>&lt;p&gt;So you have an HTML file, and you want to import it into Sigil. That's great. I hope your file has an &lt;a href="http://en.wikipedia.org/wiki/Character_encoding"&gt;encoding&lt;/a&gt; specified. You &lt;i&gt;need&lt;/i&gt; to have an encoding specified. An encoding tells Sigil (and anything else that wants to read your document) how your characters are represented in the file.&lt;/p&gt;&lt;p&gt;Why? Well, computers work with numbers, not characters. You can only ever store numbers on a computer. So to store a character, we assign it a number, and those numbers are then stored in the files. But how do we know which number represents which character? We don't. We have to agree on a &lt;i&gt;mapping&lt;/i&gt; of numbers to characters and vice versa. This mapping is called a &lt;i&gt;character encoding&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;So when your file doesn't have an encoding specified, Sigil doesn't know how to interpret the numbers in the file and translate them into the correct characters. And then your text is garbled.&lt;/p&gt;&lt;p&gt;So how do you specify an encoding in an HTML file? It's &lt;a href="http://www.w3.org/International/tutorials/tutorial-char-enc/"&gt;really simple&lt;/a&gt;:&lt;/p&gt;&lt;pre class="brush: xhtml"&gt;&amp;lt;meta http-equiv="Content-type" content="text/html;charset=UTF-8" /&amp;gt;
&lt;/pre&gt;&lt;p&gt;Just put that line of code into the &amp;lt;head&amp;gt; element. That's the XHTML way. Be sure that you're using the correct encoding! Using the wrong one is worse than using none at all; if you don't specify an encoding, a smart application may be able to guess correctly (we'll get to that in a moment).&lt;/p&gt;&lt;p&gt;You can also use the XML way, if your file is XHTML:&lt;/p&gt;&lt;pre class="brush: xhtml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&lt;/pre&gt;&lt;p&gt;Sometimes though, even specifying the correct encoding &lt;a href="http://code.google.com/p/sigil/issues/detail?id=74"&gt;doesn't seem to be enough&lt;/a&gt;. As the linked issue illustrates, Sigil inherited a bug from Nokia's "QTextCodec::codecForHtml()" function, which in all its brilliant wisdom chooses to only look for the meta tag in the first 512 characters (if I recall correctly). If the encoding is further down than that… well it pretends it's not. So I worked around that.&lt;/p&gt;&lt;p&gt;And then we have the HTML files with no encoding whatsoever. There's a lot of them. So what should an application do then?&lt;/p&gt;&lt;p&gt;Guess, basically.&lt;/p&gt;&lt;p&gt;We can try to make it an educated guess, but let's not kid ourselves, it's still a guess.&lt;/p&gt;&lt;p&gt;Since v0.1.0, Sigil used to fallback on &lt;a href="http://en.wikipedia.org/wiki/UTF-8"&gt;UTF-8&lt;/a&gt; when it couldn't detect the encoding of your HTML file. No guessing, it just said: "what the hell, let's read this like it's UTF-8". It was a fairly good assumption. UTF-8 is the most widely used &lt;a href="http://en.wikipedia.org/wiki/Unicode"&gt;Unicode&lt;/a&gt; character encoding, and it's backward compatible with &lt;a href="http://en.wikipedia.org/wiki/ASCII"&gt;ASCII&lt;/a&gt; (which in layman's terms means "plain text"). A lot of people use it today as their default. It's as good a fallback as any.&lt;/p&gt;&lt;p&gt;But then three months ago, &lt;a href="http://code.google.com/p/sigil/issues/detail?id=113"&gt;issue #133&lt;/a&gt; made its way to the tracker. Suddenly, the UTF-8 fallback didn't seem so hot. Made me rethink my original decision. So I changed the code to use the default encoding of the computer running Sigil, AKA the "locale-aware" fallback. This seemed to work better, and landed in v0.1.4.&lt;/p&gt;&lt;p&gt;But still… every time anyone tried to load an UTF-8 encoded document (with no encoding), it would get garbled like crazy since no locale-specific encoding matches it.&lt;/p&gt;&lt;p&gt;After this bit me today (for the last time!), I decided it's time to revisit. After some searching around on the web, I found &lt;a href="http://www.w3.org/International/questions/qa-forms-utf-8"&gt;this little nugget&lt;/a&gt; of Perl code for checking whether a string was UTF-8 encoded. I also found a C translation of that code somewhere (can't find the link now), which I modified for use in Sigil. Here it is:&lt;/p&gt;&lt;pre class="brush: cpp"&gt;// This function goes through the entire byte array 
// and tries to see whether this is a valid UTF-8 sequence.
// If it's valid, this is probably a UTF-8 string.
bool Utility::IsValidUtf8( const QByteArray &amp;amp;string )
{
    // This is an implementation of the Perl code written here:
    //   http://www.w3.org/International/questions/qa-forms-utf-8
    //
    // Basically, UTF-8 has a very specific byte-pattern. This function
    // checks if the sent byte-sequence conforms to this pattern.
    // If it does, chances are *very* high that this is UTF-8.
    //
    // This function is written to be fast, not pretty.    

    if ( string.isNull() )

        return false;

    int index = 0;
    const unsigned char *bytes = NULL;

    while ( index &amp;lt; string.size() )
    {
        QByteArray dword = string.mid( index, 4 );

        if ( dword.size() &amp;lt; 4 )

            dword = dword.leftJustified( 4, '\0' );

        bytes = (const unsigned char *) dword.constData();

        // ASCII
        if (   bytes[0] == 0x09 ||
               bytes[0] == 0x0A ||
               bytes[0] == 0x0D ||
               ( 0x20 &amp;lt;= bytes[0] &amp;amp;&amp;amp; bytes[0] &amp;lt;= 0x7E )                    
           ) 
        {
            index += 1;
        }

        // non-overlong 2-byte
        else if (  ( 0xC2 &amp;lt;= bytes[0] &amp;amp;&amp;amp; bytes[0] &amp;lt;= 0xDF ) &amp;amp;&amp;amp;
                   ( 0x80 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0xBF )            
                ) 
        {
            index += 2;
        }
           
        else if (  (     bytes[0] == 0xE0                         &amp;amp;&amp;amp;         // excluding overlongs 
                         ( 0xA0 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF )        ) || 
                  
                   (     (   ( 0xE1 &amp;lt;= bytes[0] &amp;amp;&amp;amp; bytes[0] &amp;lt;= 0xEC ) ||     // straight 3-byte
                             bytes[0] == 0xEE                         ||
                             bytes[0] == 0xEF                     ) &amp;amp;&amp;amp;
                    
                         ( 0x80 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0xBF )   &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF )        ) ||

                   (     bytes[0] == 0xED                         &amp;amp;&amp;amp;         // excluding surrogates
                         ( 0x80 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0x9F ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF )        )
                 ) 
        {
            index += 3;
        }
 
          
        else if (    (   bytes[0] == 0xF0                         &amp;amp;&amp;amp;         // planes 1-3
                         ( 0x90 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[3] &amp;amp;&amp;amp; bytes[3] &amp;lt;= 0xBF )      ) ||

                     (   ( 0xF1 &amp;lt;= bytes[0] &amp;amp;&amp;amp; bytes[0] &amp;lt;= 0xF3 ) &amp;amp;&amp;amp;         // planes 4-15
                         ( 0x80 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[3] &amp;amp;&amp;amp; bytes[3] &amp;lt;= 0xBF )      ) ||
                
                     (   bytes[0] == 0xF4                         &amp;amp;&amp;amp;         // plane 16
                         ( 0x80 &amp;lt;= bytes[1] &amp;amp;&amp;amp; bytes[1] &amp;lt;= 0x8F ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[2] &amp;amp;&amp;amp; bytes[2] &amp;lt;= 0xBF ) &amp;amp;&amp;amp;
                         ( 0x80 &amp;lt;= bytes[3] &amp;amp;&amp;amp; bytes[3] &amp;lt;= 0xBF )      )
                ) 
        {
            index += 4;
        }

        else
        {
            return false;
        }
    }

    return true;
}
&lt;/pre&gt;&lt;p&gt;This code is currently used as a last resort when the encoding isn't found. If this function says there's a high probability of the text being UTF-8, then it's read as such. Instant success with the test files I had on hand.&lt;/p&gt;&lt;p&gt;I also added an explicit check for the "encoding" XML attribute which the "QTextCodec::codecForHtml()" function apparently doesn't check for at all. Don't ask me why, ask Nokia.&lt;/p&gt;&lt;p&gt;This along with the UTF-16 auto-detection and line-ending fix (more on this tomorrow) makes Sigil now very robust to files with unspecified encodings. For the user, things should "just work" more often.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3282763402665844292-2322708282349470877?l=sigildev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sigildev.blogspot.com/feeds/2322708282349470877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sigildev.blogspot.com/2009/12/encodings-and-why-you-shouldnt-trust.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2322708282349470877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3282763402665844292/posts/default/2322708282349470877'/><link rel='alternate' type='text/html' href='http://sigildev.blogspot.com/2009/12/encodings-and-why-you-shouldnt-trust.html' title='Encodings and why you shouldn&apos;t trust Nokia (Part 1)'/><author><name>Strahinja Marković</name><uri>http://www.blogger.com/profile/13623940684631474619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_gI6mrRJtYT4/S_VYlLUMTfI/AAAAAAAAAJo/B66DXvX11k0/S220/self.jpg'/></author><thr:total>0</thr:total></entry></feed>
