Wednesday, April 30, 2014

DataBasin 0.7

DataBasin 0.7 is out!

If you need to query, update,  create data on SalesForce.com and are on a GNU/Linux, *BSD, Solaris system or MacOS-X... try it out! Do you need to perform a query having objects or IDs instead of a where clause? Select-identify will come handy for you.

Some of the news:
  • Save results of update and create in a results.csv file with succeess and failure
  • Progress monitor of operations shows time remaining 
  • The login panel shows a visual icon if login happened successfully or not
  • Progress monitor for Query, Delete, Insert
  • Select identify now supports ORDER BY
  • Internal core enhanced for Delete
  • Many bug fixes and clean-ups

Thursday, April 03, 2014

Graphs: Improved Grid and labels

Lots of new stuff in OresmeKit, the graphing toolkit for GNUstep and Mac! As an Example, an advanced dashboard based on DataBasin that displays the system load of Salesforce.com. It is not generally available yet, but I hope it will be!

Grid-sizing is now selectable so it gets spaced in 1K or 1M intervals (depending on the data-range available), like it is used in both screenshots in this example.

 - (void)setYAxisGridSizing:(OKGridSizing)sizing;

Can take now: OKGridConstantSize, OKGridKiloMega

Also, one can decide to draw Just the label of the minimum and maximum value or a label for every grid:

- (void)setYAxisLabelStyle:(OKLabelStyle)style;

Can take:  OKNoLabels, OKMinMaxLabels, OKAllLabels

1000-unit Grid



To complement this kind of visualization, a new kind of Label formatting can be used. In the example above, the numbers are plain, 10.000 is written as such, in the example below, it is formatted as 10K, if we were using 10.000.000, it would me 10M

1000 - grid with K formatting

Monday, February 17, 2014

Tailoring OpenBSD for an old strange computer

I have an ol' OmniBook 800CT. A small, interesting computer, for its time, extremely advanced!
Small form factor, but still a very nice keyboard, something unmatched on modern netbooks. The unique pop-out mouse. The series started out with 386 processor, b&w display and ROM expansions.
The 800CT is one of the latest models: same form factor, SCSI connector, but color screen (800x600) and a hefty Pentium 133Mhz!
But only 32 MB of ram (the kernel report 31 of real mem, 24 avail mem)

Original 5.4 kernel: 9.2M
Custom kernel: 5.0 M

This shrinkage is quite hefty! almost 50%! More than raw disk usage, this new kernel boots faster and leaves  more free memory. Enough more that X11 is now almost usable

How can this be achieved? essentially by removing unused kernel options. If you remove drivers which you know you don't need because you don't have the hardware (and won't use it, e.g. you know you won't plug-in a certain card in the future) then you configure it out, it won't be built and it won't get in your kernel.
On an old laptop with no expansion except the ports and the PCMCIA port it has, this is relatively easy.

To build your custom kernel, follow the OpenBSD FAQ.

The main theory is to take the kernel configuration file, skim over it line by line it and see if you have the hardware, which you know by checking your dmesg. Dmesg shows which devices and drivers were loaded.Remember that you do not modify GENERIC, but a copy of it.

You can automate this with a tool called dmassage: it will parse your GENERIC configuration and produce an optimal tuned version, however it will not work out of the box.
Why? there are drivers which do not compile if other drivers are not present.

I'm unsure if this is really a bug, in my opinion it is at least "unclean" code, however since mostly this kind of extreme driver-picking is not done, it is not fatal and probably won't be fixed.

 If you remove all drivers at once, you won't easily find out one which one breaks, so my suggestion is to remove them in sets. One by-one is surely too tedious, since for each you need to make a build.
  1. remove X drivers
  2. build, if it works, copy the configuration file as a backup
  3. test the kernel, optionally, by booting it
  4. continue removal

Thus, in case of breakage, you can narrow it down to a less options.

If your mahcine doesn't have a certain bus, you may remove all drievrs attached to each. But proceed from the leaves, not the trunk: gradually remove the peripheral drivers before removing the bus support.

In my case, I found that an unremovable driver is:
et*    at pci?                # Agere/LSI ET1310


Remember that you are running an unsupported kernel, if you want support for a problem, better try it with the original kernel, of which you should anyway for safety retain a backup copy during the iterative building process.

Addition:

In X11, which needs to be set to 800x600 8-bit mode, I had to uncomment these lines:
    #Option "progLcdModeRegs" "true"
    #Option "progLcdModeStretch" "true"

Friday, February 14, 2014

GAP moves to SVN

The GNUstep Application Project transitioned its source repository from CVS to SVN.

The sources were migrated with full-history and the same directory structure.

Connections detail, at the project's page about svn: https://savannah.nongnu.org/svn/?group=gap

Browsing can be done here: SVN Surfing

The CVS repsoitory will remain open for some time, in case something went wrong during the migration process, but it is not official or current anymore.

Thursday, December 12, 2013

GWorkspace, how to easily mount/unmount volumes

GWorkspace allows for easy mounting and unmounting of volumes (disks, usb sticks, CD-ROMs) like you would do manually on console, without the requirement of daemons or other tools.

Here is how.

First, be sure your underlying operating system is correctly configured to allow you to do that. I'll show as example how I configured my Debian system.

Your current user needs to have the permissions to mount the volume(s), this is usually done by being part of the correct group. For Debian we find cdrom and floppy as ready groups

cdrom:x:24:multix

The predefined mount-point for the cdrom is /mnt/cdrom, since I usually handle with USB sticks I added a mount point for it:

$ ls -l /media/
total 8
lrwxrwxrwx 1 root root    6 Jan  1  1970 cdrom -> cdrom0
drwxr-xr-x 2 root root 4096 Jan  1  1970 cdrom0
drwxr-xr-x 2 root root 4096 Nov 27 14:01 usb


Now, let's add the correct lines to /etc/fstab for our usb entry. The cdrom entry is usually already configured by Debian.

/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/sdb        /media/usb      auto    defaults,users  0       0


I auto shall determine the file system automagically, while users allows for user permissions for the mounted files. You can check if everything is configured fine if you can "mount" from the command line with your current user.

Then open SystemPreferences and configure the managed paths as shown here:

SystemPreferences - Mount points
Configure the mount points for removable media, here I have enabled the cdrom and the usb mount points. The mtab path is currently ignored by GWorkspace, so don't bother and the default value is anyway correct for Linux.

Now, in GWorkspace we can select Check for disks under the Tools menu.
GWorkspace - check for disks
If everything goes well, voilĂ , your volume will get mounted. It will appear on the destkop if you have the Desktop enabled and you can show its content. In any case it shall be visible in the File Viewer in its mount place.

Usb stick contents




If all options are set correctly as suggested, the volume is readable, writable as you can check with the Attributes Inspector. Also we can open the .zip file with Zipper easily.

Zipper and Attributes


To unmount a volume, just drag its icon to the Recycle Bin.

GWorkspace, fixed mount bug on Linux

Fixed a nasty bug (I was using the wrong macro) that was causing GWorkspace not to mount removable volumes (like an USB key) on Linux.

Sunday, November 24, 2013

Graphos supports Cusps!

Since many years, Graphos supports nice-looking and well known bezier-paths. However it always supported, by the design inherited by GDraw, symmetric handles. Since the handle points define the curve's tangent to the control point, there will be no discontinuity. That is, each control point's handles are equal and symmetric, allowing for smooth curves like here:



I added now support for splitting handles and making them a-symmetric, thus being able to draw cusps in a line.

While in path-editing (white arrow) a contextual menu will allow you to choose what kind of type the node is.

To support this new kind of information which is associated with each node, I changed the file format. Paths are now saved as a series of control points with their associated type, instead of the older format that was essential PS data, where each line-to and move-to was described. The latter format split information about each control-point between left-and-right and while more compact, did not allow to add the new information.

Anyway, here the result, left a smooth path, right the same path where the central point has been "split".





Note to self: this will allow to draw Graphos' own logo in Graphos much better. Something to do the next time I'm bored!

Saturday, November 23, 2013

Graphos 0.5 released

The GNUstep Application Project announced a new release of its vector drawing application, Graphos on Oct 15th.

Improved text object and handling, improved selection handling (e.g. for multiple objects that are group selected) and many other bugs. The format is 0.4 compatibile, although text object might be placed differently if loaded from old files, due to the old bug.

Tuesday, September 10, 2013

WindowMaker-style menus in GNUstep?

Did you know it was possible?
I got that question asked more than once!
Or horizontal menus? or Macintosh-style?

Well the obvious way is to install theme enabling this feature. However, you may want to tweak just a certain feature or customize the default look.

Now you need to set a certain default. If you do not want to fiddle with the defaults write NSInterfaceStyleDefault GSWindowMakerInterfaceStyle, then the "Defaults" preference panel will be your friend!
The Panel has been long around a long time! It is easy to enable things. But once you need to set 

I just completed two useful enhancements in System Preferences:

  • New editor type for fixed-list choices, as is the case for the interface styles!
  • All values can have now a localized description!






You can see the new editor in action with WindowMaker style menus which, by the way, are more convenient when using the "stick" pointer instead of a Mouse, as found on ThinkPads and certain other laptops.

Thursday, July 11, 2013

FTP: new features, some polish

I added some long-due functions to FTP, handled by a request dialog
  • Local and Remote Rename
  • Local and Remote New Folder



Furthermore, currently it is boring that after each operation the file lists are not updated.

I thus changed the core representation, fileTable, to be a mutable array and added basic manipultation methods. I will the progressively add provision to update dynamically the list after operations. Right now I worked on delete. The first impact is that the contents of the selection need always be copied before launching an operation, otherwise operations with selections larger than one element may fail or behave wrongly after the first element got processed.

Also, I noticed that FTP lacks a refresh function. Sometimes after years you notice the most basic things! I'll need to implement that.

Friday, June 28, 2013

Graphos: text alignment and other fixes

I finally fixed text alignment in Graphos! It was broken since a long time, perhaps since Graphos 0.1, probably due to the conversion made from GDraw. You had the controls in the editor, but then it didn't draw correctly!





Another long-standing bug was the manipulation of handles of a closed bezier path: the handles inside the path could not be touched. I think this bug existed even in GDraw!


A lot of work then went into restructuring the whole architecture that handles the zooming of the view. previously, everything was recomputed, there was no notion of original size, everything was transformed back and forth on the fly. While quick and easy, this provided serious problems when saving! Furthermore it means that there is data corruption when performing zooms!

Now, the original information is stored inside each object and everything is then calculated for representation. Some zoomed data is pre-calculated, other not. Probably there can be quite some optimization, but first everything needs to be debugged, since this is a quite consistent change. No new format is necessary since previosuly saving with a zooom different from 100% resulted in a broken file anyway.

Thursday, June 27, 2013

Graphos: new path editing

I changed the way selection and editing of paths and objects work in Graphos.

Previously, the program attempted to be smart: the "white" arrow tool would auto-select an object and start editing it. Clicking outside would deselect it.

This behaviour seems smart, but with many objects, with control poitns close together, it could drive you crazy. I thus changed the behaviour, by differentiating the black arrow and the white arrow tools  more:
  • the Black Arrow selects and unselects the whole object
  • the White Arrow selects and modifies control points, but does not change the object selection
  • the White Arrow only selects control points within the current selected object
  • missing a control point with the White Arrow does not deselect the object

This arrangement makes the two tools more orthogonal. It looks perhaps a bit more cumbersome for basic operation, but it ends to be much easier when objects overlap. Especially when using a graphics tabled this makes a huge improvement in my opinion.

And to close, just a drawing to show the current capabilities of Graphos. Making different shades is very easy with the new


Thursday, April 25, 2013

DataBasin: advanced SObject describe

I enhanced DataBasin object's describe. First, I do parse the RecordTypeInfo now, but that was the easy part.  Salesforce.com returns only the record type ID and name, but programmatically, this is not very useful. The important bit would be the Developer Name of each record type.

I enhanced the results by querying automatically the RecordType table, extracting the Developer Name, matching it through the RT Id and merging back the results, so that the resulting DBSObject has a complete Record Type information, totally transparent.

Sunday, April 21, 2013

Simplifying GWorkspace

I am streamlining GNUstep's Workspace. For many years it had a mode for spatial navigation, inspired essentially from Mac's finder and by GNOME. I personally never felt that it fits well in OpenStep's paradigm. MacOS X incorporated it for legacy reasons of Mac Classic, becasue Apple (sadly) wrote a new Finder instead of using OS's Workspace.
Spatial is good, but I think having a manager which incorporates both philosophies not.

Thus I removed spatial navigation from GWorkspace. Some loyal users perhaps will mourn it, but I want to remember that GWorkspace is just one possible application to implement NSWorkspace, anybody can write a replacement. In fact, I have already plans to write an alternative version, but this will be material for other blog posts.

Monday, April 08, 2013

FTP 0.4

FTP 0.4, the ftp client of the GNUstep Application project, has been released.

This is release has a couple of new features which should make usage a bit cleaner as well as many bug fixes and portability issues. I would recommend the upgrade. Among the many small changes:

  • Reopening connections without restarting FTP is fixed, there were corner cases where this didn't work
  • Better progress report, also for file listings. Indeterminate progress if size is unknown.
  • 64bit and portability fixes. Smaller fixes about corner cases with empty selections and empty files and interface locking.
  • When disconnecting, the remote connection gets cleared.
  • More minor but annoying bugs, like problems with large selections on Cocoa. 


FTP running on NetBSD, Sleek theme applied

Thursday, April 04, 2013

Graphos 0.4

Graphos 0.4 is out!

  • The Text editor now uses the standard font panel 
  • selection improved
  • mouse constraints for boxes and circles
  • undo for pasteboard operations
  • many bug fixes
  • 64bit fixes
Some shapes fun


Tuesday, March 26, 2013

GWorkspace 0.9.2

 pleased to announce the new release of the GNUstep Workspace application.
This is mainly a bug fix, stability and improvement release.
  • updated to current APIs and changes to NSUInteger, NSInteger and CGFloat
  • thanks to the above, improved 64bit support
  • improved BSD support
  • improved localizations and capability to localize better in the future
  • Fix logout timer
  • improved handling of Recycler and other daemons on logout
  • MDKit and MDFinder improvements, although problems on some setups remain
  • TabbedShelf crash fixes
  • memory leaks fixed as detected by the clang static analyzer
Thanks to the many who tested and contributed fixes, first of all Sebastian Reitenbach.


GWorkspace with the Sleek theme



Sunday, March 24, 2013

DataBasin 0.6

DataBasin 0.6 released!
  • Support "." as Semi-Join
  • Select Identify works now with multiple columns (all in AND as condition)
  • Support LIMIT clause in Select Identify
  • Improved Exception catching and display for Select Identify
  • Object Inspector supports selection of items
  • Log window with selectable log level
  • Progress and estimated completion time displayed in Log
  • Remember logins
  • internal API improvement
  • vast 64bit and portability improvements
  • Support count and aggregate queries
Select Identify is now vastly improved. Supporting multiple columns and LIMIT, coupled together with the other improvements of this release, makes it an invaluable tool during support and maintenance of a Salesforce org. How else could you check the status of a lot of objects, say Cases or Accounts?
The object inspector is always handy too.

DataBasin allows you to work with SalesForce.com much easier and also from your favourite free OS  using GNUstep like any BSD or GNU/Linux or at need on Solaris or Macintosh.

Many thanks to my colleagues, Claudio and Paolo amongst them, for finding bugs and testing the 9 internal beta releases!

BatMon 0.7

Battery Monitor 0.7 is now available from GAP.
Improved BSD support has been improved, Support for linux on powermac has been added.

Tuesday, March 12, 2013

Cynthiune 1.0.0

Cynthiune 1.0.0 has been released, the Music Player for GNUstep. This is the first of GAP after Wolfgang handed over the source code.

Improved stability, portability, support for big-endian processors. Ported to Windows and Macintosh. Memory leaks and bug fixes. This is definitely a recommended upgrade. Thanks to Wolfgang for the code and Sebastian and Philippe for the long hacking sessions!