Software for our distribution

Body: 

This suggestion must be reworked. Maybe it will be completely rewritten.

We must reduce the number of apps that come with the base distribution. Look at Linux: most distributions are packed full of software (and many games) and I still can't get the most basic work done.

Put the function first and then a list of apps that solve the task in an acceptable way (Haiku should replace each with one simple app per function). Only mention good apps in the example list! Please don't add Unix geek stuff like console apps. Depending on the number of applications we could consider releasing two editions. Everything in Base Distribution is automatically installed.

Usability Improvements

Body: 

Usability Improvements

Haiku R1 should be polished and not suffer from BeOS' insufficiencies. If we release a half-baked OS our userbase will turn away.

This is a summary of many improvements discussed on the GE-list and elsewhere:

TODO for R1

  • rework window zooming as it often does not work as one would expect
  • add BTextView context-menu with "cut", "copy", "paste", "select all", "undo"
  • improve BTextView keyboard-navigation: move to next/previous word, paragraph, beginning/end of file
  • show the task switcher immediately upon hitting CTRL+TAB (seems to be an R5 bug which causes a too long delay)
  • remove unneeded preferences (menu settings, scrollbar style)
  • combine similar preferences apps (Appearance: UI+screen, Input Devices: mouse+keyboard+keymap, Media: audio+video+sounds, Networking: ppp+networking)
  • modify apps in the source tree to match modifier key functions for lists: Shift-click selects a range, CTRL-click toggles one item
  • parent menu items which don't have a message associated with them should not close the menu when clicked
  • demo apps are not needed by default. why is the clock replicant in the Applications menu? it's a demo! remove more unneeded apps and make sure all apps sit in the right category (apps vs prefs)
  • Tracker: all entries in the date column should have the same width and use the same formatting. no more mixed entries with "Friday" here and "Sat" there. use fixed-width font?
  • Tracker: use different cursors for "move" and "copy"
  • automatically remove deleted apps from FileTypes DB (it quickly blows up like the Windows registry)
  • highlight controls somehow when the mouse moves over them to indicate "clickability"
  • Deskbar should be able to reserve screen space for itself (zoomed windows don't take up that space)
  • Tracker: "Identify" action in context-menu should be hidden or moved somewhere else (if identification cannot be automated reliably)
  • Deskbar: all items should get a right-click context-menu
  • Tracker: remove "Clean Up" action. use a fixed, non-overlapping grid for icons (overlapping icons are evil)
  • auto-mount read-only media (at least CDs)
  • Tracker: add mouse cursors which indicate a "copy" or "move" operation on drag-n-drop

Ideas for R2

  • (needs more thought) rework mounting process: create auto-mount-points and always show all mountable volumes. unmounting should be replaced by unloading a complete device (CD, USB drive, etc.). show device icons on desktop. their contents are the mountable volumes. ??By default volumes are auto-unmounted when they not needed, anymore. To permanently keep a volume mounted you drag-n-drop it on the desktop (or maybe a folder?), so you have a permanent mount-point.??
  • magnetic screen corners (all windows docking to screen edges ala Winamp)
  • time should always be visible (never overlap Deskbar)
  • add screen scaling support (resolution-independent)
  • design all apps such that they show more information and less buttons
  • less top-menu items and more contextual actions (pop-up menus) and information
  • Tracker: when holding down some shortcut-button while clicking an item in the folder-browser context-menu the menu should not close, but open that item in the background (allows for multiple items to be opened)
  • add global shortcut support (open folders, apps, actions) ala SpicyKeys and improve keyboard navigation because experienced users are faster with keyboard
  • reduce number of servers (audio_server, media_server, media_addons_server, why not just media_server?)
  • is separation of Tracker and Deskbar needed? it's not that I could continue my work if only Deskbar crashes
  • Tracker: show size of selected files in current folder as little bubble-window next to mouse pointer (and hide it when mouse exits window frame, so I can quickly check multiple folders). maybe also show size of all files if we have enough space
  • Tracker: automatically adjust column-widths when window is resized (see Thunderbird)
  • Deskbar: too inaccessible. I rarely use it because it's always hidden by max-zoomed windows
  • where is the long-discussed simplified and more powerful one-click installer with a package manager and automatic package updates?
  • colors should be used more actively in system controls
  • search results (BTextView, etc.) should be marked within the scroll bar, so you can quickly scroll to other results (instead of clicking "next"/"prev" buttons)
  • mark location of a selection within the scroll bar (or allow for adding marks via scroll-bar?)
  • arrange workspaces and desktop as 2D space (navigate via ALT+arrows)?
  • Deskbar as clipboard (drag-n-drop anything on it)?

Installer

Body: 

Introduction

This RFC describes an installation concept that aims to be more natural to the end-user than current package-based installers. The idea behind this concept is to get rid of the whole installation process. The complete application, including its dependencies and data files, is a single self-contained executable (one app, one file). There is absolutely no installation process. Just run and you're done. Delete and it's uninstalled. Replace and you've upgraded.

BFS2 or our next FS

Body: 

Possible Candidates

  • ZFS (very cool, snapshots, volume chaining (no more partition management...), interesting for query-only FS, compatible license)
  • XFS (fast, proven, effective)
  • roll our own (much work)

Extended File Type System

File types become more human-readable: Document, Image, Video, etc. In our local database we store the MIME translations for those types. Multiple-inheritance is supported, too (OGG would inherit from Audio and Video, for example). Instead of specifying attributes for each format individually (MP3 has its own attribute set) the attributes are inherited from the super type (Audio). Internally, the file types are stored as MIME. This allows for better OS-interoperability, backwards-compatibility, and more flexibility (we can change the inheritance structure of the whole type database and it will continue to work). But there is a problem with this model: global queries (Audio/*) would have to look for multiple MIME-types (application/ogg, audio/*, etc.). Nevertheless, it should be a step forward, usability-wise.

Windows and Views in the Haiku app_server

Body

Late last year, we decided to rewrite an important part of the Haiku app_server. Why was that? Let's start out with what the app_server is supposed to do: At the heart, it manages multiple applications simultaneously using the display device as a shared resource. Two of the important system objects through which this is organized are Windows and Views. Through views, the applications can draw information onto the screen, while a window is merely some sort of container for views. One big difference between the two is that, to a certain degree, all views within one window are expected to be self organized, while the windows themselves are organized by the server. The views form a tree-like hierarchy of parent and children views. It is expected, that all children of the same parent (sibling views) don't overlap. If they do, the space they share belongs to both of them, which will have strange results. Windows, on the other hand, are managed by the server. This is an important difference - more on that later. A window, in fact, doesn't care about other windows at all. The server simply tells a window which part of the screen it can draw into. This equals the window's visible part within the stack of windows on screen. This idea is called "clipping".

The Attack Of The Warriors, Part 2: IO-Warrior24 - 16 Bit Multipurpose I/O Ports

Body

The code discussed in this article can be found here.

The IO-Warrior24 device from Code Mercenaries is equipped with 16 general purpose I/O (input/output) pins. When enabling the so-called special mode functions, more or less pins are reassigned to serve a special purpose. You can select between:

  • I2C, IIC: a two-wire serial Inter-IC-Bus allowing connection to RAMs, EEPROMs, ADCs,DACs and a lot more.
  • LCD: parallel communication with alphanumerics Liquid-Christal-Display units
  • SPI: a four-wire serial Serial-Peripheral-Interface-Bus similar to I2C
  • LED-Matrix: a serial communication bus to control LEDs in a multiplexed matrix configuration
  • RC5IR: Infrared Remote control according to the RC5 code

We'll now examine this impressive manifold of functions step-by-step. To make life a little bit easier, Code Mercenaries is offering an "IO-Warrior24 Starter Kit" providing a LED controlled by an I/O-pin, an IR receiver, and the circuit and a 16-pin connector to directly connect a LCD module. A wrap-field can be found, too - you can add your own electronic components. Below you find the assembled starter kit and wiring diagram.

Dependency Hell

Body

I suspect most readers have heard of this in reference to various Linux distributions. This describes the situation where package A requires package B that then requires package A, directly or indirectly, and you end up requiring a whole group of packages that seem to be entirely unrelated to installing package A, that include a lot of functionality of B. Well, that's just a higher level abstraction of what I will discuss in this article.

The Attack Of The Warriors, Part 1

The code discussed in this article can be found here.

The warrior family MouseWarrior, KeyWarrior, JoyWarrior and IO-Warrior of the German company Code Mercenaries (www.codemercs.com) enables you to communicate with your PC via USB in a manifold way to various external devices. All members of the family are full USB V1.1/2.0 compliant, low speed devices using the HID 1.1 (Human Interface Device) device class. If you are missing the GeekPort - it's back again.

Let's start with a really simple device, the JoyWarrior24 A8-8 USB joystick controller.

Managing Your Replicants: XShelfInspector and XContainer

Body

The source discussed in this article can be found here.

The original BeOS distribution from Be. Inc. contains two applications to help you manage your replicants: ShelfInspector and Container. Both can be found in the .../sample-code/application_kit/ folder. It's a good idea to read Be's original readme.txt concerning ShelfInspector. Both enhanced applications -- XShelfInspector and XContainer -- are working closely together like the original ones; however, some improvements have been added so one can use them more comfortably. The most interesting question is: How can I test my new replicant using these applications?

TransRepliShow: Dragging Replicants Transparently

Body

This article follows up on Dr. Reh's previous newsletter article, RepliShow: A Replicable Image Viewer. The code discussed is available here for your convenience.

Just remember Seth Flaxman's RepliShow: While dragging the replicant you only see the border lines of an empty rectangle - not very Be-like. However, only a few lines of code are necessary to obtain a rectangle containing the dragged image and looking transparently. Because the dragging action is managed by the BDragger class we need to do some subclassing. We create a new RepliDragger class inherited from BDragger. When this is done we override the hook function virtual void MouseDown( BPoint where ):