Blog
In the context of a mail window, Ctrl+F should be...
Date: 21/6/2018
Tags: scribe ui
  • "Find" - as in the same shortcut as most text editors.
  • "Forward" - as in the same shortcut as Outlook and Gmail. And if so how does the user "Find" stuff...
Currently the shortcuts in the mail window of Scribe are:
  • Ctrl+Enter - Send the message
  • Ctrl+Up - Previous message
  • Ctrl+Down - Next message
  • Ctrl+P - Print the message
  • Ctrl+R - Reply to the message
  • Ctrl+W - Forward the message (although I've just changed the dev build to 'Close Window')
  • Ctrl+S - Save the message
  • Ctrl+T - Select the text editor
  • Ctrl+H - Select the HTML editor
Obviously on the mac platform the modifier is instead of Ctrl.
(0) Comments | Add Comment

Ho ho ho
Date: 21/12/2016
Tags: scribe html-editor
The merry little elves at Memecode have been working away at all hours of the night to bring you a working Rich Text (HTML) editor in Scribe to put in your Christmas stockings.

With the release of Scribe v2.1.33 there is enough functionality to write email with styles. The reply/forwarding side of things isn't as good as the composition of new email. For a variety of reasons. And the control is still definitely in "Alpha" (i.e. incomplete functionality, still contains bugs, possibly show stopping ones).

It would be a excellent idea to reset the reply/forward formats to their default values, because I've updated the default template for HTML reply/forward. If you have a custom template for plain text, save that before you reset the templates in File -> Options -> General -> Reply / Fwd templates -> Reset.

Also go into your signature settings and configure a HTML sig for each account with an identity.

I'll set some expectations first... with the pros:
  • You can edit and delete styles to the text: font, font size, bold/italic/underline, foreground and background colours.
  • The tool bar tracks the current style.
  • You can add and remove links.
  • Most common text editor operations work: deleting / adding text. Selecting regions. Copy / paste.
  • Text reflows to the space available.
And some cons:
  • No undo / redo.
  • Cut / Copy / Paste is plain text only.
  • Replies/forwards are by default converted to plain text, losing any source styling. This is on purpose until I rewrite the reply/forward template merge code to cope.
  • The cursor can get "stuck" sometimes. Reposition with the mouse or use a different key combination.
  • Screen updates might be flaky in some situations.
  • No support for multiple levels of quoting.
  • No support for images (yet, it's on the todo list).
  • No indent/outdent support yet.
  • No lists, bulleted or numbered.
  • Swapping between the text and HTML tabs after you create the email or reply doesn't work. You are locked into whatever control you start with. This will change in later releases.

To switch between plain text and HTML quickly use Edit -> Use HTML Editor.

Do not use the HTML control for production emails. If it matters, use the plain text compose control. Otherwise I'd like to hear how it goes.
(0) Comments | Add Comment

Rich Text / HTML support in Scribe
Date: 5/12/2016
Tags: scribe
There has been a lot of people asking about the Rich Text / HTML editing support in Scribe and so while not fixing crash bugs I'm actively developing a new control to support styled text editing.

So that those that are interested can track the progress I'm publishing my internal spreadsheet of bugs and features:



Broadly speaking my hope is to have a very basic control working by the end of the year. Good enough that you can write and reply to email with, even if there isn't a lot of support for styling. Maybe some basic stuff like bold, colours and font size.
(2) Comments | Add Comment

Scribe: Installer script hooks
Date: 14/7/2016
Tags: scribe scripting
So you know those red bars that appear in Scribe when it wants to install something? I've just added the spell check dictionaries to that so you have to confirm there install. This allows you to make sure you have a working internet connection before download a dictionary. But I thought it would be cool to add some scripting hooks for the install bar and the actual install itself. So take an example script like this:
function BeforeInstall(App, Msg, Actions)
{
    Actions.Add("Scare");
    Msg = Msg + " (BeforeInstall was here)";
    return true;
}

function Install(App, Action)
{
    if (Action == "Scare")
    {
        MsgBox(App, "Boo!");
        return false;
    }
    
    return true;
}

function Main(App)
{
    if (!AddCallback("OnBeforeInstallBar", "BeforeInstall"))
        MsgBox(App, "Couldn't add BeforeInstall");
    if (!AddCallback("OnInstallComponent", "Install"))
        MsgBox(App, "Couldn't add Install");

    return 1;
}
What it does is install 2 callbacks, one for the missing capability bar, and one for the install itself. It messes with the message and buttons available to the install bar. Then adds a new "action" that is caught later in the "Install" function to put up a dialog box. Might be useful for managed installs of Scribe.
(0) Comments | Add Comment

Core Text LOL
Date: 3/2/2016
Tags: scribe mac


Sometimes you just have to laugh.

I let XCode 7 install. And now I get the choice of the 10.11 SDK or the 10.11 SDK. Apple have finally removed the ATSUI API I was using to draw text in my Mac ports, causing compilation errors. So time to pull out the partially complete CoreText implementation and get that working.

Not quite there yet ;)
(1) Comment | Add Comment

Merry Christmas
Date: 24/12/2015
Tags: scribe linux
I think for the first time ever? There is a simultaneous release of Scribe on 3 different platforms: Windows, Mac AND Linux. The new v2.1.3 build is tri-platform. The Linux (x64) build is a GTK2 app and runs ok on Ubuntu and Arch. Well that's all I've tested at this point.

It also runs on a Raspberry Pi 2 although it's a little slow. I know because I got bored and tried building it while working on some MC2 stuff.

Links to the i.Scribe builds:
(0) Comments | Add Comment

Portable OpenSSL for Linux
Date: 21/12/2015
Tags: shared-object linux openssl scribe
A year ago I worked out how to make a portable build of OpenSSL for Mac. And now with the imminent release of the Linux build of Scribe I need to do the same with the Linux build of OpenSSL.

After downloading and unpacking OpenSSL I configured it with:
./config shared -DPURIFY
The reason for adding the -DPURIFY #define is to suppress valgrind errors related to uninitialized memory usage.

Once that is built I had a look at the shared object paths with ldd:
matthew@ubuntu:~/Downloads/openssl$ ldd ./libssl.so.1.0.0 
	linux-vdso.so.1 =>  (0x00007ffc0e197000)
	libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f5c5ab6c000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5c5a7a7000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5c5a5a3000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5c5b1c1000)
So it's not portable yet. I initially tried using the chrpath command but it can only modify existing RPATH records. My binary doesn't have any RPATH yet. So that didn't work. The next thing I tried was the patchelf command from here:
http://nixos.org/releases/patchelf/patchelf-0.8/
After building and installing I issued this command in the OpenSSL folder:
patchelf --set-rpath '$ORIGIN' ./libssl.so.1.0.0
Now to check if libssl pulls in the local libcrypto:
matthew@ubuntu:~/Downloads/openssl$ ldd ./libssl.so.1.0.0 
	linux-vdso.so.1 =>  (0x00007ffcdce86000)
	libcrypto.so.1.0.0 => /home/matthew/Code/Scribe/trunk/./libcrypto.so.1.0.0 (0x00007f39b99d8000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f39b9613000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f39b940f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f39ba0a5000)
Yes! Now this build can be installed in the same folder as the Scribe binary and Scribe will use it without interfering with the system OpenSSL which is often out of date, or not built with -DPURIFY or missing.
(0) Comments | Add Comment

Scribe 2.1
Date: 27/10/2015
Tags: scribe
Well it's been most of a year since I said anything about Scribe v2.1, and the list of changes hasn't moved forward much in that time. There are a few reasons for the slow progress, but it mostly boils down to:
  • Working on various music projects, including a audio/video mix down of a band that shot a live set earlier in the year and a cover of New Day.
  • Working on the MC2 foot controller.
  • And the old RSI is back to haunt me.

Anyway there is some good news. The integration of Aspell is complete. Scribe v2.1 will come pre-loaded with a spell check and it will download and install dictionaries on the fly with no user intervention. Well you'll need an internet connection for that part, but once installed it'll work offline.

Secondly I'm in the middle of doing a fairly thorough rewrite of the Help files. Which includes fixing some things in the HTML rendering. Reviewing all the parts of the application that have "Help" buttons (or should have "Help" buttons) and making sure they work correctly. Updating all the pages with current information. It's actually a big slab of work. Lots of cross referencing things and checking the UI and source code so I accurately describe the functionality. I'm not much of a tech writer so it's tedious for me.

Anyway there is now a beta release online for v2.1. I look forward to getting feedback on what works and what doesn't.
(9) Comments | Add Comment

Supporting Work
Date: 1/6/2015
Tags: scribe
It seems that a few things have gradually become a problem. Firstly customers with accents in their name are getting bad key's generated off the InScribe purchase page that they land on after buying the software. This is caused by less than stella coding on my part. But something that I'm trying to fix. The issue is that the data coming from PayPal is URL encoded and is in an unknown Charset. I've implemented some PHP in the purchase page to find the charset in the headers and do all the conversion for the $name. However in trying to test it I ran into a fairly annoying PayPal sand box bug.

The PayPal Sand Box Bug

If you go to create a new test user with an accent in their name you'll get a field validation error along the lines of "Only use letters". Which makes it hard to test purchase scripts with non-latin characters in the buyers name. I did however find a way around this, and that is to use the bulk upload tool to create the users. You can download a .tsv template direct from the PayPal sand box site on the "Create New User" page. From that fill out the details, and supply whatever name you want. Because the file is saved in unicode it bypasses the broken field validation stuff. Then upload that and you got a test user with accents. (Haven't tried Asian characters yet, but I will at some point). My new problem is that even after doing that and putting a sandbox button on my site the purchase script gets an empty response from PayPal when it checks the transaction. Fun times.

The Installer/Uninstaller

Everyone knows that the official way to uninstall a Windows application is to use the Control Panel uninstall page. It had completely escaped my attention until now that Scribe provides no such uninstaller entry in that list (Thank you dear user for reminding me). So I've gone and added the right registry entries to list the uninstaller, with help / support links, and the current version. The version is read straight from the .exe during installer compile time so it's always correct. Also the installer has been refactored to have a Desktop/Portable switch baked right in. Huzzah.

The Help

Also the help files shipping with Scribe have drifted from reality. So I'm in the process of reading through everything and updated all the parts that aren't correct anymore. Some areas might need fleshing out as well.

OAUTH2 Support

An initial draft implementation of OAUTH2 support for Gmail IMAP was shipped in the most recent build of Scribe. I'm quite keen to get feedback about it. So if you have tried to get it working and either succeeded or failed. Let me know.
(3) Comments | Add Comment

Scribe Gmail Support Update
Date: 4/5/2015
Tags: scribe oauth2
Google has switched off so called "insecure" authentication methods, including "PLAIN", which Scribe relied on.

Today I got that draft implementation working enough to be able to login to the Gmail IMAP server using OAuth2. It does take you via a detour into your default browser but in the end it works. It's also quite the hack job at this point so I want to clean up the code and make the error handling at least very verbose. I will be making a release in the next few days off the stable branch that includes functional OAuth2 support.

It has been argued that Google's motivation in doing this is to force people onto the web and out of installed desktop / mobile clients, for the purpose of making Gmail's web UI more palatable. I remain unconvinced about this argument in that there seems to be another reason that makes more sense to me. OAuth2 doesn't require the client to store the plain text password. Thus reducing the possible points of failure for security. Most installed clients are bad at storing persistent account credentials in a fully secure fashion. So by removing that attack vector it could be argued that Google is doing App authors a favour.

Maybe.

I still find OAuth2 quite needlessly complicated. And it's very dependent on the client having lots of pre-configured knowledge about the server it's authenticating with. I mean for every service that Scribe will support OAuth2 authentication I have to have a unique ClientID and ClientSecret, as well as the token URI and access URI... none of which are "discoverable" on the fly, but hard coded in. So you can't connect Scribe to some arbitrary new service that supports OAuth2. I have to manually create support each new service. I don't yet understand how that is a reasonable state of affairs.
(0) Comments | Add Comment

Scribe Gmail Support
Date: 24/4/2015
Tags: scribe
So Google have changed the authentication support for Gmail again, breaking the ability for Scribe to log in to any of the Gmail related services. Which means I'm going to have to put aside the v2.1 work temporarily to work on getting one of the support authentication methods working in Scribe.

The options are:
  • XOAUTH: Seems deprecated.
  • XOAUTH2: Probably the best bet at this point.
  • PLAIN: Despite it being listed as "supported" it doesn't actually work. It errors out and gives you some HTTP link in the server response. They really should remove it from the list.
  • PLAIN-CLIENTTOKEN: Well this one is weird... there is literally no documentation anywhere on what it is. Otherwise I'd be persuing this as a simpler option than XOAUTH2.
I'll try and keep this post updated with progress on that front.

The list of all official SASL mechanisms is here. PLAIN-CLIENTTOKEN is not mentioned at all. I wonder what implements that? Also of note, both XOAUTH and XOAUTH2 are marked "OBSOLETE". Nice one Google, supporting only obsolete, undocumented or non-functional authentication methods.
(0) Comments | Add Comment

Scribe v2.1 Update
Date: 21/4/2015
Tags: scribe
It may look like nothing is happening but really, there is. I have been toiling away on features and bug fixes in the v2.1 "trunk".
  • Scripting
    The functionality I want is all there in beta form. I haven't however ported any plugins to use it. So this is at least ready for some more testing.
  • Html Editing
    This is probably the least progressed of all the new features. Basic functions work but it's all so very fragile. I've been meaning to valgrind it heavily but the other features have been getting my time so far.
  • Built-in Aspell
    I got this finished to the point where it can self install a dictionary (from an FTP link no less!) today. So it's out of alpha and into system testing. I'll also need to make some changes to the installer to make it part of the base install.
  • Automated Crash Reporting
    No progress so far.
  • Mac Native Look
    Most of the controls now use native paint methods. Which have all been updated to non-deprecated API calls. Also very importantly the string display code now supports sub-pixel positioning, which fixes the selection of text in Scribe causing glyphs to move around in the x direction slightly. Painting isn't perfect yet, but it's a lot better. Ready for beta I'd say.
  • Calendar UI Refresh
    Still partially complete. No recent work.
  • Logging
    All changes completed.
  • Linux Betas
    I've done a lot of work to support arbitrary colour spaces which is heavily used by the Linux port. Also I've fixed a number of increasingly weird GTK interaction bugs. It seems if the bugs are getting weirder and less frequent, then you are reaching a decent level of stability.
Also of note, I've removed all the ANSI api support in the Windows implementation of LGI which means that any hope of running it on Windows 9x is gone for good. XP has been the official minimum for a while now, and now it's cemented in the code as well.
(0) Comments | Add Comment

The Current State of Scribe
Date: 23/2/2015
Tags: scribe
Maybe it's time to just bundle OpenSSL in Scribe? I'm thinking of statically linking it so that it's always available and there will never be any trouble with missing or mis-matched libraries. The downside is the download size will blow out a bit. Over 2 MiB for the Windows build, maybe even 3. Recently I've had a very bad time with people have all sorts of weird crashes, odd behaviour and connection issues. And it seems that these things are next to impossible to reproduce. Maybe it's the target market changing on me as the profile of the client gets higher.

One of those odd behaviours is Scribe not saving it's settings between sessions. I suspect this has to do with the install folder being write only, but the software thinking it's in portable mode (i.e. store settings in the install folder). I'd love for someone to be able to reproduce that and tell me how.

So I'm going to look into ways of avoiding pitfalls. I'm starting to think that making automatic crash reporting default to "on" is for the best. I'm simply not getting enough data to respond to problems.

The HTML editing functionality is coming along nicely. I managed to send quite a few HTML messages over the last few weeks. But it's still pretty flakey. And also there are some thorny issues to sort out. However it's a lot better than even a month ago so there is hope.

Also I finally fixed an old crash in the GWindow destructor on the Linux/GTK2 build. The other main sticking point there is the popup handling under the GTK2 platform isn't great. But I didn't see the point in tackling that when the software was still crashing all the time.

Edit: So I think I've worked out the procedure for the not being able to save your settings bug:
  • Install on Windows 8.1, user grants admin rights to installer.
  • Installer writes files to the install folder and then offers the user to start Scribe
  • If user starts Scribe, the installer runs Scribe.exe WITH ADMIN RIGHTS!
  • User selects "Portable" mode during Scribe's first run.
  • User configures some options and then exits Scribe. Scribe saves the options to the program files install folder and that works because it still has the ADMIN permissions from the installer.
  • User runs Scribe again... this time with USER permissions... and now Scribe can't write to the program files folder anymore... DUN DUN DAAAA!
Yeah I'm going to have to make sure that Scribe is aware that during startup that it may have ADMIN permissions, and not to assume it will be able to write to anything in the Program Files folder tree. However it should totally take advantage of having ADMIN rights to setup the registry for being the default client / registered client.
(0) Comments | Add Comment

Scribe v2.1
Date: 27/1/2015
Tags: scribe
So the v2.0 builds are basically stable as far as I can tell. Although there is some issues with some people connecting to SSL servers and one report of a crash at startup on MacOSX 10.10 (which I'm investigating). In the light of that I'm shifting my attention to the features in the v2.1 branch. I want to go through the things I'm aiming to get into that release:
  • Scripting
    Firstly as you may have seen in previous blog posts there is a visual debugger now. There is also support for calling external functions (i.e. in a system or 3rd party DLL/so/dylib). This is all with a view towards making the plugin functionality script based rather than C++ binaries. The problem with C++ binaries is they are VERY dependant on a stable ABI (application binary interface). I hate having to rebuild the plugins every time I release. If the plugins are scripts they will generally just work between releases and not need updating.
  • Html Editing
    This is a big missing feature and I'm committing to getting some basic functionality stable. To start with I want to match the text based functionality with a few extras like bolding, colours etc and then start adding more stuff like images and block quotes etc. It'll be a long road but I better get started.
  • Built-in Aspell
    Instead of requiring the user to install an old Aspell independently, from v2.1 onwards there will be a modern version of Aspell pre-installed. Dictionaries will still need to be downloaded on demand. The port to windows has been done, and stability testing and integration is underway.
  • Automated Crash Reporting
    It's most likely that in the first few releases of v2.1 there will be some automated reporting of crash dumps. Yesterday I wrote up a guide for reporting crashes and that will be the basis for the automated reporter.
  • Mac Native Look
    The mac port is already looking a lot more native with scroll bars, check boxes and radio buttons all taking on native rendering. I'll be looking into integrating native edit controls as well. I don't like the current rendering of text in the edit controls... the kerning keeps jumping around.
  • Calendar UI Refresh
    The calendar event window is in the process of being rewritten to be more modern and match existing systems. This will enable better workflow and integration with vCal files.
  • Logging
    All the logging now goes through the log window instead of ending up just in 'Scribe.txt'. This means that users can access pertinent log information directly through the user interface. There will be an icon that you can put in the main toolbar to show that log, and it will change appearance when there are new messages.
  • Linux Betas
    The GTK port on Linux has been running OK for a while now with a few issues. The main one is that the popup windows are all pretty flakey. And try as I might the GTK API doesn't leave a lot of room for fixing that. In any case I'll be getting some builds up and see how they go.
If you think I'm missing something really obvious that chime in either on email or in the comments on this post.

I'm looking to get the first build out sometime in Feburary.
(0) Comments | Add Comment

Scripting Debugger
Date: 16/12/2014
Tags: scribe scripting


And extern library function support!
(2) Comments | Add Comment

Scribe v2.00 Final
Date: 2/12/2013
Tags: scribe releases
Unless someone finds some major problem with the Windows v2.00 Beta46 release I'm going to be calling that the final official release of v2.00 in 2 weeks. It's not perfect but most of the issues are minor or only happen very rarely. I'll be trying to get the Mac port up to scratch in the mean time. There are a few known issues and that I need to sort out. (The filter bar is a mess, the edit and checkbox controls should REALLY be native). Then I'll post that hopefully before Christmas.

What that'll mean for customers of InScribe is that your v1.xx key that has been working for all the v2.00 beta's is not going to work for the v2.00 final. For existing customers the upgrade pricing will be $5 USD (50% off the normal price).

Once the v2.00 final is out and the upgrade process is nice and smooth I'll be turning my attention towards the security side of email. I've been watching the news lately and to be honest the revelations coming from Snowden have been eye opening. I think it's time to make privacy the main point, and as the author of an email client I feel it's my responsibility to make that happen. So the stable v2.00 branch will increasingly be focused on seamless encryption of email, and the surrounding RFC standards.

As a side note I'm not super happy about the performance of the Sqlite database layer that makes up the mail3 folder format. So I'm actively playing with options in that space. The client can easily support plug and play storage systems via a simple API (currently implementations are mail2, mail3 and IMAP). So adding more is feasible. Maybe some experimental implementations will appear in the v2.xx releases.
(0) Comments | Add Comment

64bit Adventures
Date: 11/6/2011
Tags: coding scribe
I've been playing around with 64bit builds of Scribe on windows. And it's been er... interesting to say the least.
  • By default the Visual Studio 2005 installed doesn't install the x64 compiler and libraries. Nice...
  • When you do get that installed, and then create an x64 profile in your solution you get the option to copy the settings from the 32bit profile. Which for the most part works, but when you try and compile said x64 profile, you discover this delightful error:
    fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
    Which in a nutshell means you are linking 64bit objects into a 32bit binary. However the standard response that people get on the forums is that you have to set your Linker- >Advanced->TargetMachine correctly. And you know what? Well it WAS set correctly to MachineX64. So what gives? Well if you click on Linker->CommandLine and look in "Additional Options" you'll see /MACHINE:I386. Sigh.
  • When running Windows7 64bit and you put additional 32bit DLL's in C:\Windows\System32 you'd think... that since there is a "32" in that folder name that is where they go. Well no... the 64bit DLL's go in System32 and the 32bit DLL's go in "System". Gaaaaahhhhh.
But at the end of the day, there it is... 64bit Scribe:
(2) Comments | Add Comment