Queen BeeCon Widget

logo

Queen BeeCon Widget (See Talk Thread) is a highly customizable and flexible widget-based multi-instance monitoring, alerting and interactive tool for Maemo 5 (Fremantle) and the N900. In 8 words ... A Super Powerful and Customizable Widget Generation Engine

The Widget is based on the execution of external Shell/OS Commands which can be either as simple as one-liner statements or as complex as articulated shell scripts, which, for example, fetch, parse and aggregate contents retreived from the system, other applications or the Internet.

There are two basic Widget types, Beecons and Snippets:

Beecons are small hexagonal cells whose background color or associated image/icon changes according to the executed Command Exit Status.

Beecons can handle virtually unlimited Command Exit Status:

  • <0 Normally notifying system errors in esecuting the script/command
  • 0 Returned when script/command successfully completes
  • 1 Used to report a warning condition
  • 2 If script/command needs to notify some application error conditions
  • <=126 Other exit status which can be handled for displaying user defined icons/images

Snippets are normal text/graphic boxes with fixed background color and images which is not influenced by the executed Command Exit Status.

Contents

Current Status in Maemo Repositories

v1.3.3(18/1/2011) extras-devel / v1.3.3(02/09/2011) extras-testing / v1.3.3(07/10/2011) EXTRAs

Features List

  • Widget can be multi-instantiated, disabled and minimized on desktop (click on minimized icon on desktop will wakeup and maximize instance)
  • Possibility to define multiple commands and command labels to be displayed inside the Widget
  • Different types of Widget layouts and behaviours (currently Beecons and Snippets)
  • Possibility to sense Phone Orientation and execute scripts accordingly
  • Possibility to sense GPS/Location information/FIX from the phone and execute scripts accordingly
  • Possibility to hide the background Canvas both for Beecons and Snippets
  • Possibility to use icons or images instead of text, both for Beecons/Snippets command title' and output (with highly versatile positioning, zooming/scaling 5%-200%-FitToWidget)
  • Possibility to use custom progress animations for each instance of the widget (with up to 30 frames, configurable frame period in msec and highly versatile positioning
  • It is possible to independently show or hide both snippet's images/texts and beecon images/texts. This way you can have two images and two text placeholders on widget, for more flexibility in graphic layout
  • Independent images/icons for Command Exit Statuses can also been specified. Useful, for example, for displaying different icons according to percentages values returned by command.
  • Widget can be clicked on 9 different Hot Spots with a 3x3 grid layout or at specific position with ability to forward the click position to the script
  • Multi Click support on widget
  • Nice "button-press"-like visual feedback using Gradient fill
  • Widget relies also on private general purpose directories "~/.queen_beecon_dir/" and "..../MyDocs/.images/queen_beecon_dir/" as images/icons immediate storage. For easier population via USB of BLUETOOTH File Services.
  • Widget texts can be formatted through Pango Markup Language
  • Widget Size can be customized (Width: 10-800, Height: 10-420 with pixel precision) and position can be fine tuned (X,Y +/- 5pix); Tweaking "/usr/share/hildon-desktop/transitions.ini" may also help. (snap_grid_size = 1 & snap_to_grid_while_move = 1)
  • Background color for Beecons can be customized for each 4 Command Exit Statuses (with graphical preview)
  • Background color for Snippets can be customized (with graphical preview)
  • Font Color of both command label and results can be configured (with graphical preview)
  • Position and visibility of both command label and results can be configured (Hidden, Top L, Top C, Top R, Center L, Center, Center R, Bottom L, Bottom C, Bottom R) Also, rotation of lables can be changed (0, 90, 180, 270 degrees)
  • Font Face, Style and Size of both command label and results can be configured with preview
  • Text Justification of both command label and results can be configured (Left, Center, Right, Fill)
  • Text Wrapping of results can be enabled
  • Command execution can be triggered optionally on widget startup, by manual pressing on Widget, by desktop switching, by periodic updates (0=Manual, 30 s, 1 m, 5 m, 30 m, 1 h, 6 h, 12 h, 1 d, Custom Seconds Interval), by specific DBUS Events on System or Session Bus.which can be filtered through custom rules, by orientation changes, by GPS
  • Command execution can be subject to network connection status and widget visibility on current desktop
  • Tool includes a powerful Advanced Maintenance Dialog Box for command development and testing (TestDrive mode to display raw output of predefined or user-defined commands)
  • A wide set of Parameter Substitution Variables can be passed to executed scripts; variables include: Instance ID, Pressed Hot Spot, Visibility of Widget, Execution Triggering Event, content of Output text, verbose DBUS messages, persistent information stored in widget specific parameter, Proxy related information
  • Advanced Maintenance Dialog Box includes extended functionalities like:
    • instance export/import with checksum
    • command export/import with checksum
    • command update with current Test Drive buffer
    • clipboard operations
    • export/import to/from files for instance data and commands.
  • A set of basic Images/Icons for Snippets and Beecon Statuses is included inside the distribution package and installed inside canonical hildon hicolor 48x48 directory
  • Inter Process Communication mechanism among QBW instances and with other Applications has been implemented through DBUS methods and signals handling
  • It is integrated into the N900 system backup/restore features according to standard specifications as better described in the SDK documentation
  • Powerful Application Logging Subsystem
  • For Web and Proxy related information and issues please have a look at the parameter substitution documentation and THIS post.

Donate

Queen BeeCon Widget is free software, but if you feel like donating for supporting further developments or just to let me know that you like it, you can donate via Paypal

Icons in Package

Settings and Tools

Standard Settings and Configuration File

Global and per-instance QBW parameters are stored in this file:

/home/user/.queen_beecon

Configuration Parameters, Types & Reference

These are the parameters and settings which can be changed for each QBW instance. They are stored independently, for each Instance, inside the configuration file.

Their reference is also useful for Interaction with QBW over DBUS and in particular for parameters amendments/fetching methods:

Widget Type, Visibility, Status and Associated Command

Ref #ReleaseParameterTypePossible ValuesDescription
10.0.1widgetTypeint320=Beecon|1=SnippetSpecify the type of the instantiated widget
20.1.7widgetVisibleint320=Hidden|1=VisibleSpecify if widget components should be visible or not
30.1.4operationalStatusint320=Enabled|1=DisabledIf disabled, the widget will not be subject to update policies and will be iconified on desktop, a subsequent tap on it will revert its status to Enabled
40.0.1instanceTitlestring-Holds the title of the command/script to be executed. If this field is blank, it means that command is still present in the widget instance but not present any more in the list of possible commands. Can still be adited via "Edit Cmd" button and added again to the list.

Widget Size & Position Tuning

Ref #ReleaseParameterTypePossible ValuesDescription
10.0.1widWidthdouble-This is the Width of the widget
20.0.1widHeightdouble-This is the Height of the widget
31.3---This is the X coordinate of the widget, can be dynamically changed
41.3---This is the Y coordinate of the widget, can be dynamically changed
Status Background Colors & Images

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.0hideCanvasbooleantrue|falseIf set to true, the geometric canvas of the widget will not be shown
21.0.4hideClickCanvasbooleantrue|falseIf set to true, the geometric canvas of the widget will not be shown on click
30.1.9.1snippetExtBgRGBstring#<rrrr><gggg><bbbb>Background color of Snippets
0.1.0snippetBgRGBint32-Obsoleted as of release >=0.1.9.1
Beecon Statuses: Images, Scale, Background Color

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.0beecon_lt0_ImgFilenamestring-Applies to Beecons; it's the filename of the image to be displayed if script/command returns an Exit Status less than zero
20.1.4beecon_lt0_ImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
30.1.9.1beecon_lt0_ExtBgRGBstring#<rrrr><gggg><bbbb>Applies to Beecons; it's the Background color to be displayed if script/command returns and Exit Status less than zero
40.1.0beecon_eq0_ImgFilenamestring-Applies to Beecons; it's the filename of the image to be displayed if script/command returns an Exit Status equals to zero
50.1.4beecon_eq0_ImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
60.1.9.1beecon_eq0_ExtBgRGBstring#<rrrr><gggg><bbbb>Applies to Beecons; it's the Background color to be displayed if script/command returns and Exit Status equals to zero
70.1.0beecon_eq1_ImgFilenamestring-Applies to Beecons; it's the filename of the image to be displayed if script/command returns an Exit Status equals to 1
80.1.4beecon_eq1_ImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
90.1.9.1beecon_eq1_ExtBgRGBstring#<rrrr><gggg><bbbb>Applies to Beecons; it's the Background color to be displayed if script/command returns and Exit Status equals to 1
100.1.0beecon_ge2_ImgFilenamestring-Applies to Beecons; it's the filename of the image to be displayed if script/command returns an Exit Status equals to 2
110.1.4beecon_ge2_ImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
120.1.9.1beecon_ge2_ExtBgRGBstring#<rrrr><gggg><bbbb>Applies to Beecons; it's the Background color to be displayed if script/command returns and Exit Status equals to 2
130.1.0beecon_idxge2_ImgFilenamestring-Applies to Beecons; it's the basename of the image to be displayed if script/command returns an Exit Status greater than or equal to 3; Final image filename will be built as <basename>.png.<exit code> (Ex.dice.png.3, dice.png.4 ...)
140.1.4beecon_idxge2_ImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
150.1.9.1beecon_idxge2_ExtBgRGBstring#<rrrr><gggg><bbbb>Applies to Beecons; it's the Background color to be displayed if script/command returns and Exit Status is greater than or equal to 3
0.1.0beecon_lt0_BgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0beecon_eq0_BgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0beecon_eq1_BgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0beecon_ge2_BgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0beecon_idxge2_BgRGBint32-Obsoleted as of release >=0.1.9.1
Command Title Settings

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.0cmdImgFilenamestring-Applies both to Beecons and to Snippets; it's the filename of the image to be displayed as complementary to the Command Title label. Can be used to provide a customized image-based background to the widget.
21.0.3cmdImgAngleuint320=0 Degrees
1=90 Degrees
2=180 Degrees
3=270 Degrees
It's the rotation of the Image associated to the Command Title (0, 90, 180, 270 degrees)
30.1.4cmdImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
40.1.3cmdImgVisibilityPositionint320=Hidden
1=Top Left
2=Top Center
3=Top Right
4=Center Left
5=Center
6=Center Right
7=Bottom Left
8=Bottom Center
9=Bottom Right
Sets the Visibility and Position of the image associated to Command Title (Both for Snippets and for Beecons)
50.1.9cmdExtFontstring[<family>] [italic] [bold] [<size>]Font string specification for Command label (Ex. Nokia Sans Italic Bold 12)
60.1.9.1cmdExtFgRGBstring#<rrrr><gggg><bbbb>It's the Foreground color to be used with Command Title label
70.1.3cmdVisibilityPositionint320=Hidden
1=Top Left
2=Top Center
3=Top Right
4=Center Left
5=Center
6=Center Right
7=Bottom Left
8=Bottom Center
9=Bottom Right
Sets the Visibility and Position of the Command Title label
80.1.9.1cmdTextAngleuint320=0 Degrees
1=90 Degrees
2=180 Degrees
3=270 Degrees
It's the rotation of the Command Title Label (0, 90, 180, 270 degrees)
90.1.0cmdJustifyint320=Left
1=Right
2=Center
3=Fill
It's the justification to be used with Command Title label
0.1.0cmdFgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0cmdFontNameint32-Obsoleted as of release >=0.1.9
0.1.0cmdFontSizedouble-Obsoleted as of release >=0.1.9
Command Results Settings

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.0resImgFilenamestring-Applies both to Snippets; it's the filename of the image to be displayed as complementary to the Command Results label.
21.0.3resImgAngleuint320=0 Degrees
1=90 Degrees
2=180 Degrees
3=270 Degrees
It's the rotation of the Image associated to the Command Results (0, 90, 180, 270 degrees)
30.1.4resImgZoomint320=1:1
1=Fit to widget dimensions
2=5%
3=10%
4=15%
... till 200%
This is the zoom/scale of the previous parameter's image (1:1, Fit, 5%-200%)
40.1.3resImgVisibilityPositionint320=Hidden
1=Top Left
2=Top Center
3=Top Right
4=Center Left
5=Center
6=Center Right
7=Bottom Left
8=Bottom Center
9=Bottom Right
Sets the Visibility and Position of the image associated to Command Results (For Snippets)
50.1.9resExtFontstring[<family>] [italic] [bold] [<size>]Font string specification for Results label (Ex. Nokia Sans Italic Bold 12)
60.1.9.1resExtFgRGBstring#<rrrr><gggg><bbbb>It's the Foreground color to be used with Command Results label
70.1.3resVisibilityPositionint320=Hidden
1=Top Left
2=Top Center
3=Top Right
4=Center Left
5=Center
6=Center Right
7=Bottom Left
8=Bottom Center
9=Bottom Right
Sets the Visibility and Position of the Command Results label
80.1.9.1resTextAngleuint320=0 Degrees
1=90 Degrees
2=180 Degrees
3=270 Degrees
It's the rotation of the Command Results Label (0, 90, 180, 270 degrees)
90.1.0resJustifyint320=Left
1=Right
2=Center
3=Fill
It's the justification to be used with Command Results label
101.3resWrapLongLinesbooleanfalse=disabled
true=enabled
Enables the text wrapping on long lines with Command Results label
0.1.0resFgRGBint32-Obsoleted as of release >=0.1.9.1
0.1.0resFontNameint32-Obsoleted as of release >=0.1.9.1
0.1.0resFontSizedouble-Obsoleted as of release >=0.1.9.1
Progress Animation

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.9.8progressAnimationFramesuint32[0-30]Holds the number of frames to display for the animation; 0 if animations should be hidden MAX 30
20.1.9.8progressAnimationTimeruint32[0-20]Holds the number of milliseconds/50 to wait before drawing next frame (<=4secs)
30.1.9.8progressAnimationPosuint320=Top Left
1=Top Center
2=Top Right
3=Center Left
4=Center
5=Center Right
6=Bottom Left
7=Bottom Center
8=Bottom Right
9=Top Left & Hide Widget
10=Top Center & Hide Widget
11=Top Right & Hide Widget
12=Center Left & Hide Widget
13=Center & Hide Widget
14=Center Right & Hide Widget
15=Bottom Left & Hide Widget
16=Bottom Center & Hide Widget
17=Bottom Right & Hide Widget
Holds the default position index of the animation in the widget and/or hide the widget itself during progress animation
41.0.4progressAnimationAtClickXYbooleantrue|falseIf checked, progress animation is displayed at X,Y position where widget is clicked.
50.1.9.8progressAnimationBasenamestring-Holds the basename of the files to load as frames from the relevant directory. Final frame filename will be built as <basename><frame number>.png
Update Policy

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.0updOnStartupbooleantrue|falseUpdate policy which defines if widget must be updated on system Startup or on widget Wakeup
20.0.1updOnDesktopbooleantrue|falseUpdate policy which defines if widget must be updated when desktop, on which the widget resides, gets displayed either by being dragged or after resume from standby.
30.1.9.9updOnSightuint32true|falseIf set to true, widget content is only updated if on current desktop and visible (if screen locked no update will take place)
40.0.1updOnClickbooleantrue|falseUpdate policy which defines if widget must be updated when it is clicked
51.2.10multiClickbooleantrue|falseEnable/Disable support for multi click on widget (quicker click response if disabled)
61.3updOnOrientationbooleantrue|falseEnable/Disable support for Phone Orientation
70.0.1delayIndexuint320=Timer Disabled
1=30 Secs
2=1 Min
3=5 Mins
4=30 Mins
5=1 Hour
6=6 Hours
7=12 Hours
8=1 Day
9=Custom (")
Sets and index of values to use as intervals/periods for command/scripts executions
80.1.9.2customIntervalSecsuint32<seconds>Sets the number of seconds to use for Custom Update Intervals
90.0.1updNeworkPolicyuint320=Irrelevant
1=When Connected
2=When Disconnected
3=PassThrough (>= v1.0.6)
Update policy which defines if widget update must be Network dependent and what network condition must trigger the update
101.3GPSsettingsuint32(GPSsettings >> 8) 0=GPS Disabled, 1=GPS Enabled

(GPSsettings >> 4 & 0xF) 0=USER_SELECTED, 1=CWP, 2=ACWP, 3=GNSS, 4=AGNSS

(GPSsettings & 0xF) 0=DEFAULT, 1=1sec, 2=2sec, 3=5sec, 4=10sec, 5=20sec, 6=30sec, 7=60sec, 8=120sec
See the location API reference
DBUS Event Monitoring

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.9.4updOnDBUSuint320=Disabled|1=EnabledEnables DBUS Event Monitor and Update policy which defines if widget must be updated by any DBUS Event
20.1.9.4updOnDBUSBusuint320=SYSTEM|1=SESSIONSets which DBUS bus to monitor (System/Session)
30.1.9.4updOnDBUSMatchRulestringSee SpecificationsSpecifies the rule to be matched in order for command/script to be executed (Ex.type='signal',path='/com/nokia/mce/signal',interface='com.nokia.mce.signal',member='tklock_mode_ind')
Remember Me Value

Ref #ReleaseParameterTypePossible ValuesDescription
10.1.9.6rememberMestring-Holds status or persistency information across subsequent command executions.
- Can be fetched/changed via DBUS method call set/get_param_string string:"rememberMe" string:<remember_this_string>
- Can be transferred to command/scrips execution via $QBW_REMEMBER_ME Parameter Substitution
- As of release >=1.0.5 Can be also be affected by executed command output. Just echo the following string (which will not be displayed) as output of your command QBW_REMEMBER_ME(<content to be remembered>) no angle brackets; escape "close round bracket" like this "\)" to store it as ")"
See examples HERE
Not Present in Settings Dialog Box
Ref #ReleaseParameterTypePossible ValuesDescription
0.0.1instanceCmdstring-Holds the command/script to be executed

Advanced Settings and Tools

Dialog can be reached via QBW Settings:

image:169rlh2.png

image:29q0575.png

Section A: (Command TestDrive)

  1. This button opens up the About dialog box
  2. This selector allows to dynamically change the QBW Logging Subsystem Verbosity
  3. This is the list of Stored Commands that you can Test Drive; upon entering the dialog box, [3] & [8] are initialized with current Instance command.
  4. Use this button to Test Drive the command currently typed in [6]
  5. This button will update current instance command with the content of [8] (use it when command is working and thoroughly tested)
  6. Will copy to clipboard the command currently in [8]
  7. Will paste the clipboard into [8]
  8. Read-Write text field; this is the "command input buffer", it is used as extended Test Drive tool for troubleshooting commands with issues
  9. Read-Only text field; will display the Exit Status & Raw Output of the command in [8] executed by pressing button [4]

Section B: (Commands/Beecons Import/Export processing)

  1. Button will export the command currently in [A8]. Result of the export will be stored into [9] text buffer
  2. Button will import the command currently in [9].
  3. Will paste the clipboard into [9]
  4. Will copy to clipboard the [9] text buffer
  5. Will read from a file into [9]
  6. Will write to a file the [9] text buffer
  7. Button will import the Beecon/Snippet Instance Data currently in []; useful for restoring Beecons of for importing Beecons created by others.
  8. Button will export the Beecon/Snippet Instance Data for the current instance. Result of the export will be stored into [9] text buffer; useful for backup of Beecons of for exporting Beecons to others.
  9. Read-Write text field; used for temporarily processing export/import of commands and Beecon/Snippet Instance Data

Parameter Substitution at Command/Script Runtime

QBW can provide a set of specific parameters to the executing script/command. The script will have to identify the placeholders for this extra parameters as better specified in the following table:

ReleasePlaceholderSubstitutedDescription
0.1.9.1$QBW_ID<QBW Instance ID>Retreives the QBW Instance ID and substitutes it into the run script
0.1.9.6$QBW_HOTSPOT_PRESS<Hot Spot Press/Click Position Index>
Retreives the POSITION INDEX where the widget was pressed/clicked and substitutes it into the run script
0 = Not Pressed (Other update policy)
1 = Top Left
2 = Top Center
3 = Top Right
4 = Center Left
5 = Center
6 = Center Right
7 = Bottom Left
8 = Bottom Center
9 = Bottom Right
1.0.3$QBW_CLICKS_COUNT<Number>Holds the number of times a QBW was pressed/clicked and substitutes it into the run script; useful for handling single/double/triple... clicks and behave accordingly (Tested up to 12 ... :) )
1.0.4$QBW_IS_FINGER_TAPtrue|falseHolds the type of click issued on the Touch Screen
true=Touch Screen was tapped with a finger
false=Touch Screen was clicked with stylus
1.0.3$QBW_CLICK_X
$QBW_CLICK_Y
<X Coordinate>
<Y Coordinate>
Hold exact X and Y coordinates respectively where a QBW was pressed/clicked (Useful for handling different arbitrary/dynamic hotspots on widgets via launched shell scripts; virtually unlimited as handling is left to launched script/program)
Ex.
x=$QBW_CLICK_X;
y=$QBW_CLICK_Y;
if [ $x -ge 100 -a $x -le 200 -a $y -ge 100 -a $y -le 200 ];
then echo "HOT SPOT HIT";
else echo "HOT SPOT NOT HIT";
fi;

will echo "HOT SPOT HIT" if widget is clicked in rectangle delimited by p1(x=100,y=100) and p2(x=200,y=200) or "HOT SPOT NOT HIT" otherwise
1.0.53$QBW_WIDTH<Number>Holds the current Width of QBW widget; useful for dynamic recalculation of click hotspots
1.0.53$QBW_HEIGHT<Number>Holds the current Height of QBW widget; useful for dynamic recalculation of click hotspots
1.3$QBW_POSITION_X
$QBW_POSITION_Y
<X Coordinate>
<Y Coordinate>
Hold the current X,Y Position of QBW widget
1.3$QBW_ORIENTATION_MODE<mode>Holds the current Orientation Mode of QBW widget = landscape, portrait, unknown, landscape (inverted), portrait (inverted)
1.3$QBW_ORIENTATION_STAND<stand>Holds the current Orientation Stand of QBW widget = off_stand, on_stand
1.3$QBW_ORIENTATION_FACE<face>Holds the current Orientation Face of QBW widget = face_up, face_down
1.3$QBW_ORIENTATION_X<X axis value>Holds the current Orientation X axis of QBW widget = -1<->+1
1.3$QBW_ORIENTATION_Y<Y axis value>Holds the current Orientation Y axis of QBW widget = -1<->+1
1.3$QBW_ORIENTATION_Z<Z axis value>Holds the current Orientation Z axis of QBW widget = -1<->+1
1.3$QBW_LOCATION_FIX<string>Holds the current GPS Position FIX in colon separated string form: status : time : ept : latitude : longitude : eph : altitude : epv : track : epd : speed : eps : climb : epc : gsm_cell_info.mcc : wcdma_cell_info.mcc : satellites_in_view : satellites_in_use
If information is not available then nan is shown.
See HERE for reference.
Ex. 1 : 1288031860 : 0 : 45,999999 : 9,999999 : 4026 : 157 : 20 : 210,490 : 359,990 : 0,11 : 4,43 : 0,00 : 0,03 : 0 : 0 : 10 : 5
0.1.9.9$QBW_ON_SIGHTtrue|falsetrue=QBW Instance is "ON SIGHT", that is widget is on current desktop and display is not locked or on stand by.
false=QBW Instance is not on current desktop and visible or display is off or on stand by
1.0.2$QBW_IS_CONNECTEDtrue|falsetrue=QBW Instance is connected to the network (either WLAN or GPRS)
false=QBW Instance is not connected to the network (either WLAN or GPRS)
0.1.9.1$QBW_EXEC_REASONQBW_TIMER_UPDATEScript is run due to a Timer event
0.1.9.1$QBW_EXEC_REASONQBW_STARTUP_UPDATEQBW instance is starting up and script run
0.1.9.1$QBW_EXEC_REASONQBW_SETTINGS_SAVE_RUNSave and Run is pressed in Settings Dialog Box and script run
0.1.9.1$QBW_EXEC_REASONQBW_TEST_DRIVEScript is run via Test Drive advanced dialog box
0.1.9.1$QBW_EXEC_REASONQBW_WAKEUP_CLICKA disabled instance is waken up by a click on icon and script is run
0.1.9.1$QBW_EXEC_REASONQBW_CLICKAn instance is clicked and script is run
0.1.9.1$QBW_EXEC_REASONQBW_DESKTOP_SWITCHThe desktop, on which and instance is displayed, is switched/scrolled and script is run
0.1.9.1$QBW_EXEC_REASONQBW_CONNECTION_EVENTA connection event takes place and script is run
0.1.9.1$QBW_EXEC_REASONQBW_DBUS_SET_PARAM_UPDATEA set_param DBUS method is called and "update content" (script run) is explicitly required
0.1.9.1$QBW_EXEC_REASONQBW_DBUS_WAKEUPA wakeup DBUS method is called and script is run
0.1.9.1$QBW_EXEC_REASONQBW_DBUS_UPDATE_CONTENT"update content" DBUS method is called and script run is explicitly required
0.1.9.1$QBW_EXEC_REASONQBW_DBUS_EXEC"exec" DBUS method is called and external script run is explicitly required
0.1.9.4$QBW_EXEC_REASONQBW_DBUS_MONITORExecution of script was triggered by DBUS Match Rules in DBUS Event Monitoring
1.3$QBW_EXEC_REASONQBW_ORIENTATION_MONITORExecution of script was triggered by phone Orientation Change if enabled in QBW instance configuration
1.3$QBW_EXEC_REASONQBW_LOCATION_MONITOR_FIXExecution of script was triggered by FIX change in GPS Location subsystem if enabled in QBW instance configuration
0.1.9.4$QBW_DBUS_VERBOSE_OUTPUTsignal|method call|method return|error|unknown sender=<sender> -> dest=<destination> path=<path> interface=<interface> member=<member>\n
<type1> <param1>\n
<type2> <param2>\n
<typeX> <paramX>
Extended values returned by DBUS Monitor for Matched Rule. Example:
signal sender=:1.31 -> dest=(null destination) path=/com/example/app/Signal; interface=com.example.app.Signal; member=Test
string "192.168.47.100"
boolean true
1.0.6$QBW_PREVIOUS_EXIT_STATUS<last executed command's Exit Code>Exit status of the last previous executed command
0.1.9.5$QBW_CURRENT_RESULTS_TEXT<current content of results text>Current content of results text even if label is hidden. Useful for holding and processing previous state conditions across command executions
0.1.9.6$QBW_HTTP_PROXY<host>:<port>Returns the current HTTP Proxy as entered into parameters for current active Internet Connection
0.1.9.6$QBW_HTTPS_PROXY<host>:<port>Returns the current HTTPS Proxy as set into parameters for current active Internet Connection
0.1.9.6$QBW_FTP_PROXY<host>:<port>Returns the current FTP Proxy as set into parameters for current active Internet Connection
0.1.9.6$QBW_SOCKS_PROXY<host>:<port>Returns the current SOCKS Proxy as entered into parameters for current active Internet Connection
0.1.9.6$QBW_RTSP_PROXY<host>:<port>Returns the current RTSP Proxy as set into parameters for current active Internet Connection
0.1.9.6$QBW_IGNORE_HOSTS_PROXY<host1>;<host2>;<host...>Returns the current list of host which do not require a proxy as set into parameters for current active Internet Connection
0.1.9.6$QBW_AUTO_CONFIG_PROXY_URL<URL>Returns the current Proxy configuration URL as set into parameters for current active Internet Connection
0.1.9.6$QBW_REMEMBER_ME<string>Holds status or persistency information stored in configuration via Settings Dialog, DBUS method call or Command Output
- Can be fetched/changed via DBUS method call set/get_param_string string:"rememberMe" string:<remember_this_string>
- Can be transferred to command/scrips execution via $QBW_REMEMBER_ME Parameter Substitution
- As of release >=1.0.5 Can be also affected by executed command output. Just echo the following string (which will not be displayed) as output of your command QBW_REMEMBER_ME(<content to be remembered>) no angle brackets; escape "close round bracket" like this "\)" to store it as ")"
See examples HERE

QBW Instance Timer Logic

The Timer logic for each instance for actions to be run periodically is programmed as follows:

  • The timer of each instance is reset and re-armed every time the widget is Startup (System Boot or QBW release upgrade)
  • The timer of each instance is reset and re-armed every time it is changed in the Settings dialog box and it is different from its previous value
  • If a widget is disabled, either by changing is "Status" in the Settings dialog box or via DBUS method sleep, its timer is disabled
  • If a widget is re-enabled, either by changing is "Status" in the Settings dialog box or via DBUS method wakeup, its timer is reset and re-armed
  • If Settings Parameter delayIndex has been changed via DBUS set_param_uint32 method, the relevant timer must be explicitly reset and rearmed via DBUS methos reset_rearm_timer
  • The timer is reset and re-armed every time a new QBW instance is imported via Advanced dialog box and relevant parameter is set

System Backup/Restore Integration

As of release >=0.1.8 QBW is integrated into the N900 system backup/restore features according to standard specifications as better described in the SDK Using Backup Application

/etc/osso-backup/applications/queen-beecon.conf file is:

<backup-configuration>
 <locations>
   <location type="file"
             category="settings">$HOME/.queen-beecon</location>
   <location type="dir"
             category="documents">$HOME/MyDocs/.images/queen_beecon_dir</location>
   <location type="dir"
             category="documents">$HOME/.queen_beecon_dir</location>
 </locations>
</backup-configuration>

Application Logging Subsystem

As of release >=1.0.2, QBW employs a powerful Application Logging subsystem.

Log file is:

~/.queen_beecon_dir/queen_beecon.log

Time in logfile is ISO 8601 encoded string, relative to the Coordinated Universal Time (UTC)

Logging is disabled by default.

Enabling Logging

Logging can be enabled in different ways:

  • Dynamically via QBW DBUS method call
run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.logger_action string:<vX>
<idX> is the QBW Instance ID of and existing QBW instance (no matter which one as logging is global)
<vX> is the required verbosity (Allowed values are: v0 v1 v2 v3 v4 from minimum verbosity to maximum)
Example:
run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbwid0 oh.no.more.qbw.logger_action string:v4
WARNING! Due to performance reasons, v0 v1 v2 v3 logging verbosity is asynchronous, meaning that the log file will not be instantly updated as soon as a new information is logged.
If you specifically need an up to date log file condition, you need to specifically issue a:
run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.logger_action string:flush
v4 logging verbosity is synchronous by design and logs a lot of information thus causing system slow down side effects at time and ~/.queen_beecon_dir/ directory/file system filling quite quickly. Keep file system space monitored if you need this level of verbosity!
  • Statically via condition file presence
If you need to setup permanent verbosity to a specified level, also to monitor QBW startup, just go to directory:
~/.queen_beecon_dir/
and issue command:
touch queen_beecon.log.<vX>
where <vX> is the required verbosity (Allowed values are: v0 v1 v2 v3 v4 from minimum verbosity to maximum)
Example:
touch queen_beecon.log.v4
Static Logging is activated every time the Phone/Widget is restarted

Changing Logging Verbosity

Logging verbosity can be dynamically changed by calling the following DBUS method call:

run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.logger_action string:<vX>
<idX> is the QBW Instance ID of an existing QBW instance (no matter which one as logging is global)
<vX> is the required verbosity (Allowed values are: v0 v1 v2 v3 v4 from minimum verbosity to maximum)

Disabling Logging

Logging can be dynamically disabled by calling the following DBUS method call

run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.logger_action string:disable
<idX> is the QBW Instance ID of an existing QBW instance (no matter which one as logging is global)

Resetting Log File

Log file can be dynamically reset to empty status by calling the following DBUS method call

run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.logger_action string:reset
<idX> is the QBW Instance ID of an existing QBW instance (no matter which one as logging is global)

Interaction with QBW over DBUS

Overview

As of releases newer than 0.1.7, a new Inter Process Communication mechanism among QBW instances and with other Applications has been implemented.

Through the standard DBUS interface, both at the OS-shell and at different programming environments level, QBW instances can be controlled/accessed and mutual interaction can be guaranteed, thus allowing a set of extended functionalities like:

  • Give impulse to other Beecons for content update
  • Give impulse to other Beecons for layout update
  • Give other Beecons one-shot alternative scripts to execute
  • Remotely change QBW settings
  • Retrieve other beecon's last executed commands exit status
  • Provide to non graphical programs and daemons a suitable interface for displaying information on precustomized beecons on screen (for example Dbus Scripts for displaying events on the system/session DBUS like cell IDs changes, available WLANs and the like)

I encourage you to suggest possible enhancements or wishlists in this area and report them in the main TALK thread

QBW Instance ID

Queen Beecon Widget's Instance Id, needed for every reference in DBUS method calls, can be found at the very top of the Settings dialog box:

DBUS Specifications

QBW_DBUS_SERVICE ="oh.no.more.qbw"  [Name of D-Bus service]
QBW_DBUS_PATH    ="/oh/no/more/qbw<idX>" [Name of Object Path]
QBW_DBUS_IFACE   ="oh.no.more.qbw"  [Name of D-Bus interface]

DBUS Methods & Parameters

QBW implements the following list of methods to trigger specific actions:

WARNING!!! Methods' Parameters are case-sensitive

MethodInput ParamsReturnsDescription
logger_actionstring:'disable | v0 | v1 | v2 | v3 | v4 | reset | flush'Performs the following actions on the qbw logger subsystem:

disable Disables logging

v0-4 Sets Logger Verbosity to specified depth level

reset Resets the logfile queen_beecon.log in directory /home/user/.queen_beecon_dir to empty

flush Flushes content of logfile queen_beecon.log
dbus_method_monitorstring:'on | off'Toggle on-screen yellow notification message of incoming DBUS method requests for destination Instance (for debug purposes). Default=OFF
reset_rearm_timerReset and rearm timer for periodically auto-updating QBW, needed to be explicitly called if parameter delayIndex has been changed via DBUS set_param_uint32 method
reset_rearm_connectionReset and rearm the network connection subsystem, needed to be explicitly called if parameter updNeworkPolicy has been changed via DBUS method
reset_rearm_locationReset and rearm the GPS location subsystem, needed to be explicitly called if parameter GPSsettings has been changed via DBUS method
reset_rearm_orientationReset and rearm the Phone Orientation subsystem, needed to be explicitly called if parameter updOnOrientation has been changed via DBUS method
reset_rearm_dbus_monitorReset and rearm the DBUS Monitor subsystem, needed to be explicitly called if parameters updOnDBUS, updOnDBUSBus and updOnDBUSMatchRule have been changed via DBUS method
showGive show impulse to a QBW
hideGive hide impulse to a QBW
wakeupGive wake up impulse to a QBW and update content and layout
sleepGive sleep/disable/minimize impulse to a QBW
update_contentGive impulse to a QBW for content update
update_layoutGive impulse to a QBW for layout update
execstring:'<command|script>'Give other QBWs one-shot alternative scripts/commands to execute and update content accordingly
set_param_stringstring:'<param name>'
string:'<new value>'
string:'' | 'update_content' | 'update_layout'
Change and store QBW settings parameter of type string
set_param_int32string:'<param name>'
int32:'<new value>'
string:'' | 'update_content' | 'update_layout'
Change and store QBW settings parameter of type int
set_param_uint32string:'<param name>'
uint32:'<new value>'
string:'' | 'update_content' | 'update_layout'
Change and store QBW settings parameter of type uint
set_param_doublestring:'<param name>'
double:'<new value>'
string:'' | 'update_content' | 'update_layout'
Change and store QBW settings parameter of type double
set_param_booleanstring:'<param name>'
boolean:'<new value>'
string:'' | 'update_content' | 'update_layout'
Change and store QBW settings parameter of type boolean
get_paramstring:'<param name>'string:'value'Get QBW settings parameter
is_on_sightstring:'value'Get current widget On Sight status
true=QBW Instance is "ON SIGHT", that is widget is on current desktop and display is not locked or on stand by.
false=QBW Instance is not on current desktop and visible or display is off or on stand by
get_current_results_textstring:'value'Get current content of results text
set_positionint32:'<X-coord>'
int32:'<Y-coord>'
Set QBW position on desktop
get_positionint32:'<X-coord>'
int32:'<Y-coord>'
Get QBW position on desktop
get_exit_statusint32:'<ExitStatus>'Retrieve other QBW's last executed commands exit status

DBUS Signals & Parameters

QBW issues the following list of signals to notify the "world" about predefined conditions and events. They will be emitted on the bus according to the following specifications:

PATH       ="/oh/no/more/qbw<idX>"
INTERFACE  ="oh.no.more.qbw"
MEMBER     ="<signal name>" [Signal column in below list]
PARAMETERS ="<parameter>" [Broadcast column in below list]
SignalBroadcastsDescription
signal_content_updateint32:'<ExitStatus>'Issued when QBW Instance <idX> executes and returns an exit status

Interacting with QBW from the Shell

This is the template to use for calling the QBW instance methods:

  • For methods which DO return values:
run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.<method> <type1>:"<param1>" <type2>:"<param2>" ... <typeN>:"<paramN>"

WARNING!!! Hildon-home is quite sensitive to long running commands inside Queen Beecon Widget. If you believe that the dbus-send command is going to take much time (say >2/3 secs) it is better if you add the --reply-timeout=<milliseconds> to the dbus-send list of parameters. As of >=0.1.9.3 release, asynchronous execution of commands/scripts obsoletes previous statement.

  • For methods which DO NOT return values:
run-standalone.sh dbus-send --session --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbw<idX> oh.no.more.qbw.<method> <type1>:"<param1>" <type2>:"<param2>" ... <typeN>:"<paramN>"

Where:

  • <idX> is the QBW Instance ID
  • <method> is the Method to be called for the specific QBW Instance
  • <typeX> and <paramX> are the parameter type and value as per the specific Method Synopsis

For example:

run-standalone.sh dbus-send --session --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbwid0 oh.no.more.qbw.set_param_string string:"cmdImgFilename" string:"new_image_filename.png" string:"update_layout"

or

run-standalone.sh dbus-send --session --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbwid0 oh.no.more.qbw.dbus_method_monitor string:'on'

or

run-standalone.sh dbus-send --session --print-reply --type=method_call --dest=oh.no.more.qbw /oh/no/more/qbwid0 oh.no.more.qbw.get_position

QBW DBUS Events Monitor and Interceptor

Overview

As of releases newer than 0.1.9.3 QBW is now able to monitor and intercept DBUS events (like signals, methods, errors) issued by the system or other applications. For example:

  • Keyboard lock/unlock
  • Slide open/close
  • Bluetooth connections
  • GSM cells change
  • WIFI networks
  • Battery & Charging status
  • Changes in device orientation
  • Incoming Calls
  • Incoming SMS/IM

These events will then trigger the execution of a script which can be programmed to analyze and parse the intercepted event and perform actions accordingly.

The configuration is performed via the DBUS Event Monitoring section in Settings Dialog Box:

  1. States if DBUS Monitoring is enabled or disabled for this QBW
  2. Specify whether to monitor SYSTEM or SESSION BUS
  3. Is the Match Rule as per this DBUS specifications

I encourage you to suggest possible enhancements or wishlists in this area and report them in the main TALK thread

Example

We will monitor the SYSTEM BUS with the following Match Rule:

type='signal',interface='com.example.app.Signal'

The cmd/script which will be executed when the event is intercepted is the following:

echo "$QBW_ID $QBW_EXEC_REASON"; echo '$QBW_DBUS_VERBOSE_OUTPUT'; exit 2

This is a simulation of the following sample DBUS command:

run-standalone.sh dbus-send --system --type=signal /com/example/app/Signal com.example.app.Signal.Test string:'Oh' string:'No!!!' string:'More QBWs!!!' boolean:true uint32:10000

And here's the output:

Known Issues

TBD

Bug Tracker/Reports

Tracker/Report See HERE

Feature Requests

Apply HERE

Now-Brewing

Nothing

Change Log

Main article: Queen BeeCon Widget/Changelog


TODO list

  • Bugfixing and Improving Stability
  • Instance Import/Export optimization and simplification

HOW-TOs & FAQs

Create a new Basic Instance of QBW

After you have installed QBW package, these are the steps to create and start customizing a new Instance of the widget.

  • Tap on an empty area of the Desktop and gear icon for configuration will pop up in the upper right area of the screen
Image:Qbwinst1.png
  • Click on the "Add widget" button
Image:Qbwinst2.png
  • Scroll selector till you find "Queen Beecon Widget" and click on it
Image:Qbwinst3.png
  • A new instance of the widget will be created with very basic default configuration
Image:Qbwinst4.png
  • Now if you click on the Settings Wrench Icon you'll reach the Settings Dialog for customization

How and Where to store Icons and Images for your Beecons

If no PATH is specified in the Settings for Icons and Images, QBW will look in directories on the phone's internal memories in the following order:

  • First, the directory accessible via Bluetooth/PC Suite/OVI Suite or USB (Storage Mode).
/home/user/MyDocs/.images/queen_beecon_dir/
Image:Qbwwtsi.png
WARNING!!! When phone is connected via USB in Storage Mode this directory is not available to the Widget; so if you plan to use QBW when in Storage Mode use directory in "Second" point.
  • Second, the directory:
/home/user/.queen_beecon_dir
/usr/share/icons/hicolor/48x48/hildon/

If you want to replace a partial/complete set of QBW's Package Icons just create Icons/Images with same name in directories "First" or "Second"

If the specified image is not found, the following icon will appear:

Image:Queen-beecon-noimg.png

Create an Exit Status driven Multi Images Beecon

Naive Dice Roller is a good place to start looking for such implementation.

Scripts/Commands with long output

Some scripts/commands may create multiple lines which are too long to be displayed on a single line. The widget will not wrap these. In order to wrap them you can use the fold command:

command-that-produces-long-lines | fold -s -w 80

The 80 in that instance is the maximum length of the line, which you can change. The -s option makes fold word wrap with spaces. More information is available from the fold man page.

Backup all Widget Instances

Apply Export/Save/Backup Procedure for Beecon Instance Data for every Widget Instance you want to Backup

Save content (Beecons' Images) of directories:

/home/user/.queen_beecon_dir
/home/user/MyDocs/.images/queen_beecon_dir/

Restore all Widget Instances

Apply Import/Load/Restore Procedure for Beecon Exported Instance Data for every Widget Instance you want to Restore

Restore content (Beecons' Images) of directories:

/home/user/.queen_beecon_dir
/home/user/MyDocs/.images/queen_beecon_dir/

Import/Load/Restore Procedure for Beecon Exported Instance Data

See HERE

Export/Save/Backup Procedure for Beecon Instance Data

See HERE

First, let's get a little historical perspective on American health care. This is not intended to be an exhausted look into that history but it will give us an appreciation of how the health care system and our expectations for it developed. What drove costs higher and higher?

To begin, let's turn to the American civil war. In that war, dated tactics and the carnage inflicted by modern weapons of the era combined to cause ghastly results. Not generally known is that most of the deaths on both sides of that war were not the result of actual combat but to what happened after a battlefield wound was inflicted. To begin with, evacuation of the wounded moved at a snail's pace and this caused severe delays in treating the wounded. Secondly, many wounds were subjected to wound care, related surgeries and/or amputations of the affected limbs and this often resulted in the onset of massive infection. So you might survive a battle wound only to die at the hands of medical care providers who although well-intentioned, their interventions were often quite lethal. High death tolls can also be ascribed to everyday sicknesses and diseases in a time when no antibiotics existed. In total something like 600,000 deaths occurred from all causes, over 2% of the U.S. population at the time!

Let's skip to the first half of the 20th century for some additional perspective and to bring us up to more modern times. After the civil war there were steady improvements in American medicine in both the understanding and treatment of certain diseases, new surgical techniques and in physician education and training. But for the most part the best that doctors could offer their patients was a "wait and see" approach. Medicine could handle bone fractures and increasingly attempt risky surgeries (now largely performed in sterile surgical environments) but medicines were not yet available to handle serious illnesses. The majority of deaths remained the result of untreatable conditions such as tuberculosis, pneumonia, scarlet fever and measles and/or related complications. Doctors were increasingly aware of heart and vascular conditions, and cancer but they had almost nothing with which to treat these conditions.

This very basic review of American medical history helps us to understand that until quite recently (around the 1950's) we had virtually no technologies with which to treat serious or even minor ailments. Here is a critical point we need to understand; "nothing to treat you with means that visits to the doctor if at all were relegated to emergencies so in such a scenario costs are curtailed. The simple fact is that there was little for doctors to offer and therefore virtually nothing to drive health care spending. A second factor holding down costs was that medical treatments that were provided were paid for out-of-pocket, meaning by way of an individuals personal resources. There was no such thing as health insurance and certainly not health insurance paid by an employer. Except for the very destitute who were lucky to find their way into a charity hospital, health care costs were the responsibility of the individual.

What does health care insurance have to do with health care costs? Its impact on health care costs has been, and remains to this day, absolutely enormous. When health insurance for individuals and families emerged as a means for corporations to escape wage freezes and to attract and retain employees after World War II, almost overnight a great pool of money became available to pay for health care. Money, as a result of the availability of billions of dollars from health insurance pools, encouraged an innovative America to increase medical research efforts. More Americans became insured not only through private, employer sponsored health insurance but through increased government funding that created Medicare and Medicaid (1965). In addition funding became available for expanded veterans health care benefits. Finding a cure for almost anything has consequently become very lucrative. This is also the primary reason for the vast array of treatments we have available today.

I do not wish to convey that medical innovations are a bad thing. Think of the tens of millions of lives that have been saved, extended, enhanced and made more productive as a result. But with a funding source grown to its current magnitude (hundreds of billions of dollars annually) upward pressure on health care costs are inevitable. Doctor's offer and most of us demand and get access to the latest available health care technology in the form of pharmaceuticals, medical devices, diagnostic tools and surgical procedures. So the result is that there is more health care to spend our money on and until very recently most of us were insured and the costs were largely covered by a third-party (government, employers). Add an insatiable and unrealistic public demand for access and treatment and we have the "perfect storm" for higher and higher health care costs. And by and large the storm is only intensifying.

At this point, let's turn to the key questions that will lead us into a review and hopefully a better understanding of the health care reform proposals in the news today. Is the current trajectory of U.S. health care spending sustainable? Can America maintain its world competitiveness when 16%, heading for 20% of our gross national product is being spent on health care? What are the other industrialized countries spending on health care and is it even close to these numbers? When we add politics and an election year to the debate, information to help us answer these questions become critical. We need to spend some effort in understanding health care and sorting out how we think about it. Properly armed we can more intelligently determine whether certain health care proposals might solve or worsen some of these problems. What can be done about the challenges? How can we as individuals contribute to the solutions?

The Obama health care plan is complex for sure - I have never seen a health care plan that isn't. But through a variety of programs his plan attempts to deal with a) increasing the number of American that are covered by adequate insurance (almost 50 million are not), and b) managing costs in such a manner that quality and our access to health care is not adversely affected. Republicans seek to achieve these same basic and broad goals, but their approach is proposed as being more market driven than government driven. Let's look at what the Obama plan does to accomplish the two objectives above. Remember, by the way, that his plan was passed by congress, and begins to seriously kick-in starting in 2014. So this is the direction we are currently taking as we attempt to reform health care.


Through insurance exchanges and an expansion of Medicaid,the Obama plan dramatically expands the number of Americans that will be covered by health insurance.


To cover the cost of this expansion the plan requires everyone to have health insurance with a penalty to be paid if we don't comply. It will purportedly send money to the states to cover those individuals added to state-based Medicaid programs.


To cover the added costs there were a number of new taxes introduced, one being a 2.5% tax on new medical technologies and another increases taxes on interest and dividend income for wealthier Americans.


The Obama plan also uses concepts such as evidence-based medicine, accountable care organizations, comparative effectiveness research and reduced reimbursement to health care providers (doctors and hospitals) to control costs.


The insurance mandate covered by points 1 and 2 above is a worthy goal and most industrialized countries outside of the U.S. provide "free" (paid for by rather high individual and corporate taxes) health care to most if not all of their citizens. It is important to note, however, that there are a number of restrictions for which many Americans would be culturally unprepared. Here is the primary controversial aspect of the Obama plan, the insurance mandate. The U.S. Supreme Court recently decided to hear arguments as to the constitutionality of the health insurance mandate as a result of a petition by 26 states attorney's general that congress exceeded its authority under the commerce clause of the U.S. constitution by passing this element of the plan. The problem is that if the Supreme Court should rule against the mandate, it is generally believed that the Obama plan as we know it is doomed. This is because its major goal of providing health insurance to all would be severely limited if not terminated altogether by such a decision.

As you would guess, the taxes covered by point 3 above are rather unpopular with those entities and individuals that have to pay them. Medical device companies, pharmaceutical companies, hospitals, doctors and insurance companies all had to "give up" something that would either create new revenue or would reduce costs within their spheres of control. As an example, Stryker Corporation, a large medical device company, recently announced at least a 1,000 employee reduction in part to cover these new fees. This is being experienced by other medical device companies and pharmaceutical companies as well. The reduction in good paying jobs in these sectors and in the hospital sector may rise as former cost structures will have to be dealt with in order to accommodate the reduced rate of reimbursement to hospitals. Over the next ten years some estimates put the cost reductions to hospitals and physicians at half a trillion dollars and this will flow directly to and affect the companies that supply hospitals and doctors with the latest medical technologies. None of this is to say that efficiencies will not be realized by these changes or that other jobs will in turn be created but this will represent painful change for a while. It helps us to understand that health care reform does have an effect both positive and negative.

Finally, the Obama plan seeks to change the way medical decisions are made. While clinical and basic research underpins almost everything done in medicine today, doctors are creatures of habit like the rest of us and their training and day-to-day experiences dictate to a great extent how they go about diagnosing and treating our conditions. Enter the concept of evidence-based medicine and comparative effectiveness research. Both of these seek to develop and utilize data bases from electronic health records and other sources to give better and more timely information and feedback to physicians as to the outcomes and costs of the treatments they are providing. There is great waste in health care today, estimated at perhaps a third of an over 2 trillion dollar health care spend annually. Imagine the savings that are possible from a reduction in unnecessary test and procedures that do not compare favorably with health care interventions that are better documented as effective. Now the Republicans and others don't generally like these ideas as they tend to characterize them as "big government control" of your and my health care. But to be fair, regardless of their political persuasions, most people who understand health care at all, know that better data for the purposes described above will be crucial to getting health care efficiencies, patient safety and costs headed in the right direction.

A brief review of how Republicans and more conservative individuals think about health care reform. I believe they would agree that costs must come under control and that more, not fewer Americans should have access to health care regardless of their ability to pay. But the main difference is that these folks see market forces and competition as the way to creating the cost reductions and efficiencies we need. There are a number of ideas with regard to driving more competition among health insurance companies and health care providers (doctors and hospitals) so that the consumer would begin to drive cost down by the choices we make. This works in many sectors of our economy but this formula has shown that improvements are illusive when applied to health care. Primarily the problem is that health care choices are difficult even for those who understand it and are connected. The general population, however, is not so informed and besides we have all been brought up to "go to the doctor" when we feel it is necessary and we also have a cultural heritage that has engendered within most of us the feeling that health care is something that is just there and there really isn't any reason not to access it for whatever the reason and worse we all feel that there is nothing we can do to affect its costs to insure its availability to those with serious problems.

OK, this article was not intended to be an exhaustive study as I needed to keep it short in an attempt to hold my audience's attention and to leave some room for discussing what we can do contribute mightily to solving some of the problems. First we must understand that the dollars available for health care are not limitless. Any changes that are put in place to provide better insurance coverage and access to care will cost more. And somehow we have to find the revenues to pay for these changes. At the same time we have to pay less for medical treatments and procedures and do something to restrict the availability of unproven or poorly documented treatments as we are the highest cost health care system in the world and don't necessarily have the best results in terms of longevity or avoiding chronic diseases much earlier than necessary.

I believe that we need a revolutionary change in the way we think about health care, its availability, its costs and who pays for it. And if you think I am about to say we should arbitrarily and drastically reduce spending on health care you would be wrong. Here it is fellow citizens - health care spending needs to be preserved and protected for those who need it. And to free up these dollars those of us who don't need it or can delay it or avoid it need to act. First, we need to convince our politicians that this country needs sustained public education with regard to the value of preventive health strategies. This should be a top priority and it has worked to reduce the number of U.S. smokers for example. If prevention were to take hold, it is reasonable to assume that those needing health care for the myriad of life style engendered chronic diseases would decrease dramatically. Millions of Americans are experiencing these diseases far earlier than in decades past and much of this is due to poor life style choices. This change alone would free up plenty of money to handle the health care costs of those in dire need of treatment, whether due to an acute emergency or chronic condition.

Let's go deeper on the first issue. Most of us refuse do something about implementing basic wellness strategies into our daily lives. We don't exercise but we offer a lot of excuses. We don't eat right but we offer a lot of excuses. We smoke and/or we drink alcohol to excess and we offer a lot of excuses as to why we can't do anything about managing these known to be destructive personal health habits. We don't take advantage of preventive health check-ups that look at blood pressure, cholesterol readings and body weight but we offer a lot of excuses. In short we neglect these things and the result is that we succumb much earlier than necessary to chronic diseases like heart problems, diabetes and high blood pressure. We wind up accessing doctors for these and more routine matters because "health care is there" and somehow we think we have no responsibility for reducing our demand on it.

It is difficult for us to listen to these truths but easy to blame the sick. Maybe they should take better care of themselves! Well, that might be true or maybe they have a genetic condition and they have become among the unfortunate through absolutely no fault of their own. But the point is that you and I can implement personalized preventive disease measures as a way of dramatically improving health care access for others while reducing its costs. It is far better to be productive by doing something we can control then shifting the blame.

There are a huge number of free web sites available that can steer us to a more healthful life style. A soon as you can, "Google" "preventive health care strategies", look up your local hospital's web site and you will find more than enough help to get you started. Finally, there is a lot to think about here and I have tried to outline the challenges but also the very powerful effect we could have on preserving the best of America's health care system now and into the future. I am anxious to hear from you and until then - take charge and increase your chances for good health while making sure that health care is there when we need it.

Reset QBW to Default Configuration/Commands

Open up X Terminal (or SSH/Putty into N900) and issue the following command:

sudo gainroot (only if you are not already root)
rm /home/user/.queen_beecon
killall hildon-home

Completely remove QBW from your N900

Open up X-Terminal (or SSH/Putty into N900) and issue the following command

sudo gainroot

(only if you are not already root)

dpkg -P queen-beecon
rm /home/user/.queen_beecon
rm -r /home/user/.queen_beecon_dir
rm -r /home/user/MyDocs/.images/queen_beecon_dir/

Run every Desktop Application with different Icons/Sizes buttons

You can run every desktop application with a script like this and just change the image and size of the Beecon to one of your choice:

dbus-send --type=method_call --dest=com.nokia.HildonDesktop.AppMgr /com/nokia/HildonDesktop/AppMgr com.nokia.HildonDesktop.AppMgr.LaunchApplication string:"<application name here>"

where <application name here> is application name that you can find in /usr/share/applications/hildon directory without the trailing .desktop

Example for launching the image viewer:

/usr/bin/dbus-send --dest=com.nokia.HildonDesktop.AppMgr /com/nokia/HildonDesktop/AppMgr com.nokia.HildonDesktop.AppMgr.LaunchApplication string:image-viewer

See EXAMPLE Here

Run Application in xterm with different Icons/Sizes buttons

You can run every application in xterm and customize a button on Desktop to launch it.

See THIS post for a Tutorial

Create invisible clickable Hot Spots on your Desktop Background Image to launch Applications or perform Actions

See Here and follow-up posts.

First, let's get a little historical perspective on American health care. This is not intended to be an exhausted look into that history but it will give us an appreciation of how the health care system and our expectations for it developed. What drove costs higher and higher?

To begin, let's turn to the American civil war. In that war, dated tactics and the carnage inflicted by modern weapons of the era combined to cause ghastly results. Not generally known is that most of the deaths on both sides of that war were not the result of actual combat but to what happened after a battlefield wound was inflicted. To begin with, evacuation of the wounded moved at a snail's pace and this caused severe delays in treating the wounded. Secondly, many wounds were subjected to wound care, related surgeries and/or amputations of the affected limbs and this often resulted in the onset of massive infection. So you might survive a battle wound only to die at the hands of medical care providers who although well-intentioned, their interventions were often quite lethal. High death tolls can also be ascribed to everyday sicknesses and diseases in a time when no antibiotics existed. In total something like 600,000 deaths occurred from all causes, over 2% of the U.S. population at the time!

Let's skip to the first half of the 20th century for some additional perspective and to bring us up to more modern times. After the civil war there were steady improvements in American medicine in both the understanding and treatment of certain diseases, new surgical techniques and in physician education and training. But for the most part the best that doctors could offer their patients was a "wait and see" approach. Medicine could handle bone fractures and increasingly attempt risky surgeries (now largely performed in sterile surgical environments) but medicines were not yet available to handle serious illnesses. The majority of deaths remained the result of untreatable conditions such as tuberculosis, pneumonia, scarlet fever and measles and/or related complications. Doctors were increasingly aware of heart and vascular conditions, and cancer but they had almost nothing with which to treat these conditions.

This very basic review of American medical history helps us to understand that until quite recently (around the 1950's) we had virtually no technologies with which to treat serious or even minor ailments. Here is a critical point we need to understand; "nothing to treat you with means that visits to the doctor if at all were relegated to emergencies so in such a scenario costs are curtailed. The simple fact is that there was little for doctors to offer and therefore virtually nothing to drive health care spending. A second factor holding down costs was that medical treatments that were provided were paid for out-of-pocket, meaning by way of an individuals personal resources. There was no such thing as health insurance and certainly not health insurance paid by an employer. Except for the very destitute who were lucky to find their way into a charity hospital, health care costs were the responsibility of the individual.

What does health care insurance have to do with health care costs? Its impact on health care costs has been, and remains to this day, absolutely enormous. When health insurance for individuals and families emerged as a means for corporations to escape wage freezes and to attract and retain employees after World War II, almost overnight a great pool of money became available to pay for health care. Money, as a result of the availability of billions of dollars from health insurance pools, encouraged an innovative America to increase medical research efforts. More Americans became insured not only through private, employer sponsored health insurance but through increased government funding that created Medicare and Medicaid (1965). In addition funding became available for expanded veterans health care benefits. Finding a cure for almost anything has consequently become very lucrative. This is also the primary reason for the vast array of treatments we have available today.

I do not wish to convey that medical innovations are a bad thing. Think of the tens of millions of lives that have been saved, extended, enhanced and made more productive as a result. But with a funding source grown to its current magnitude (hundreds of billions of dollars annually) upward pressure on health care costs are inevitable. Doctor's offer and most of us demand and get access to the latest available health care technology in the form of pharmaceuticals, medical devices, diagnostic tools and surgical procedures. So the result is that there is more health care to spend our money on and until very recently most of us were insured and the costs were largely covered by a third-party (government, employers). Add an insatiable and unrealistic public demand for access and treatment and we have the "perfect storm" for higher and higher health care costs. And by and large the storm is only intensifying.

At this point, let's turn to the key questions that will lead us into a review and hopefully a better understanding of the health care reform proposals in the news today. Is the current trajectory of U.S. health care spending sustainable? Can America maintain its world competitiveness when 16%, heading for 20% of our gross national product is being spent on health care? What are the other industrialized countries spending on health care and is it even close to these numbers? When we add politics and an election year to the debate, information to help us answer these questions become critical. We need to spend some effort in understanding health care and sorting out how we think about it. Properly armed we can more intelligently determine whether certain health care proposals might solve or worsen some of these problems. What can be done about the challenges? How can we as individuals contribute to the solutions?

The Obama health care plan is complex for sure - I have never seen a health care plan that isn't. But through a variety of programs his plan attempts to deal with a) increasing the number of American that are covered by adequate insurance (almost 50 million are not), and b) managing costs in such a manner that quality and our access to health care is not adversely affected. Republicans seek to achieve these same basic and broad goals, but their approach is proposed as being more market driven than government driven. Let's look at what the Obama plan does to accomplish the two objectives above. Remember, by the way, that his plan was passed by congress, and begins to seriously kick-in starting in 2014. So this is the direction we are currently taking as we attempt to reform health care.


Through insurance exchanges and an expansion of Medicaid,the Obama plan dramatically expands the number of Americans that will be covered by health insurance.


To cover the cost of this expansion the plan requires everyone to have health insurance with a penalty to be paid if we don't comply. It will purportedly send money to the states to cover those individuals added to state-based Medicaid programs.


To cover the added costs there were a number of new taxes introduced, one being a 2.5% tax on new medical technologies and another increases taxes on interest and dividend income for wealthier Americans.


The Obama plan also uses concepts such as evidence-based medicine, accountable care organizations, comparative effectiveness research and reduced reimbursement to health care providers (doctors and hospitals) to control costs.


The insurance mandate covered by points 1 and 2 above is a worthy goal and most industrialized countries outside of the U.S. provide "free" (paid for by rather high individual and corporate taxes) health care to most if not all of their citizens. It is important to note, however, that there are a number of restrictions for which many Americans would be culturally unprepared. Here is the primary controversial aspect of the Obama plan, the insurance mandate. The U.S. Supreme Court recently decided to hear arguments as to the constitutionality of the health insurance mandate as a result of a petition by 26 states attorney's general that congress exceeded its authority under the commerce clause of the U.S. constitution by passing this element of the plan. The problem is that if the Supreme Court should rule against the mandate, it is generally believed that the Obama plan as we know it is doomed. This is because its major goal of providing health insurance to all would be severely limited if not terminated altogether by such a decision.

As you would guess, the taxes covered by point 3 above are rather unpopular with those entities and individuals that have to pay them. Medical device companies, pharmaceutical companies, hospitals, doctors and insurance companies all had to "give up" something that would either create new revenue or would reduce costs within their spheres of control. As an example, Stryker Corporation, a large medical device company, recently announced at least a 1,000 employee reduction in part to cover these new fees. This is being experienced by other medical device companies and pharmaceutical companies as well. The reduction in good paying jobs in these sectors and in the hospital sector may rise as former cost structures will have to be dealt with in order to accommodate the reduced rate of reimbursement to hospitals. Over the next ten years some estimates put the cost reductions to hospitals and physicians at half a trillion dollars and this will flow directly to and affect the companies that supply hospitals and doctors with the latest medical technologies. None of this is to say that efficiencies will not be realized by these changes or that other jobs will in turn be created but this will represent painful change for a while. It helps us to understand that health care reform does have an effect both positive and negative.

Finally, the Obama plan seeks to change the way medical decisions are made. While clinical and basic research underpins almost everything done in medicine today, doctors are creatures of habit like the rest of us and their training and day-to-day experiences dictate to a great extent how they go about diagnosing and treating our conditions. Enter the concept of evidence-based medicine and comparative effectiveness research. Both of these seek to develop and utilize data bases from electronic health records and other sources to give better and more timely information and feedback to physicians as to the outcomes and costs of the treatments they are providing. There is great waste in health care today, estimated at perhaps a third of an over 2 trillion dollar health care spend annually. Imagine the savings that are possible from a reduction in unnecessary test and procedures that do not compare favorably with health care interventions that are better documented as effective. Now the Republicans and others don't generally like these ideas as they tend to characterize them as "big government control" of your and my health care. But to be fair, regardless of their political persuasions, most people who understand health care at all, know that better data for the purposes described above will be crucial to getting health care efficiencies, patient safety and costs headed in the right direction.

A brief review of how Republicans and more conservative individuals think about health care reform. I believe they would agree that costs must come under control and that more, not fewer Americans should have access to health care regardless of their ability to pay. But the main difference is that these folks see market forces and competition as the way to creating the cost reductions and efficiencies we need. There are a number of ideas with regard to driving more competition among health insurance companies and health care providers (doctors and hospitals) so that the consumer would begin to drive cost down by the choices we make. This works in many sectors of our economy but this formula has shown that improvements are illusive when applied to health care. Primarily the problem is that health care choices are difficult even for those who understand it and are connected. The general population, however, is not so informed and besides we have all been brought up to "go to the doctor" when we feel it is necessary and we also have a cultural heritage that has engendered within most of us the feeling that health care is something that is just there and there really isn't any reason not to access it for whatever the reason and worse we all feel that there is nothing we can do to affect its costs to insure its availability to those with serious problems.

OK, this article was not intended to be an exhaustive study as I needed to keep it short in an attempt to hold my audience's attention and to leave some room for discussing what we can do contribute mightily to solving some of the problems. First we must understand that the dollars available for health care are not limitless. Any changes that are put in place to provide better insurance coverage and access to care will cost more. And somehow we have to find the revenues to pay for these changes. At the same time we have to pay less for medical treatments and procedures and do something to restrict the availability of unproven or poorly documented treatments as we are the highest cost health care system in the world and don't necessarily have the best results in terms of longevity or avoiding chronic diseases much earlier than necessary.

I believe that we need a revolutionary change in the way we think about health care, its availability, its costs and who pays for it. And if you think I am about to say we should arbitrarily and drastically reduce spending on health care you would be wrong. Here it is fellow citizens - health care spending needs to be preserved and protected for those who need it. And to free up these dollars those of us who don't need it or can delay it or avoid it need to act. First, we need to convince our politicians that this country needs sustained public education with regard to the value of preventive health strategies. This should be a top priority and it has worked to reduce the number of U.S. smokers for example. If prevention were to take hold, it is reasonable to assume that those needing health care for the myriad of life style engendered chronic diseases would decrease dramatically. Millions of Americans are experiencing these diseases far earlier than in decades past and much of this is due to poor life style choices. This change alone would free up plenty of money to handle the health care costs of those in dire need of treatment, whether due to an acute emergency or chronic condition.

Let's go deeper on the first issue. Most of us refuse do something about implementing basic wellness strategies into our daily lives. We don't exercise but we offer a lot of excuses. We don't eat right but we offer a lot of excuses. We smoke and/or we drink alcohol to excess and we offer a lot of excuses as to why we can't do anything about managing these known to be destructive personal health habits. We don't take advantage of preventive health check-ups that look at blood pressure, cholesterol readings and body weight but we offer a lot of excuses. In short we neglect these things and the result is that we succumb much earlier than necessary to chronic diseases like heart problems, diabetes and high blood pressure. We wind up accessing doctors for these and more routine matters because "health care is there" and somehow we think we have no responsibility for reducing our demand on it.

It is difficult for us to listen to these truths but easy to blame the sick. Maybe they should take better care of themselves! Well, that might be true or maybe they have a genetic condition and they have become among the unfortunate through absolutely no fault of their own. But the point is that you and I can implement personalized preventive disease measures as a way of dramatically improving health care access for others while reducing its costs. It is far better to be productive by doing something we can control then shifting the blame.

There are a huge number of free web sites available that can steer us to a more healthful life style. A soon as you can, "Google" "preventive health care strategies", look up your local hospital's web site and you will find more than enough help to get you started. Finally, there is a lot to think about here and I have tried to outline the challenges but also the very powerful effect we could have on preserving the best of America's health care system now and into the future. I am anxious to hear from you and until then - take charge and increase your chances for good health while making sure that health care is there when we need it.

FAQs

Could you make an easy way to install new beecons/scripts please?

... perhaps define a standard folder structure inside a compressed file, perhaps some install directions file inside to guide installation, and use a custom extension; kinda like how Firefox does with XPIs, and add some GUI to install/uninstall them

This is a good question and I still haven't figured out a good answer.

Here are a few issues I mused about.

  1. QBW is not a standalone application; it is a Hildon-Desktop/Home plugin (a library) with plenty of constraints and with a certain fixed integration with the whole system. Messing with it it's a pain in the a**
  2. I tried to find a simple operational way to achieve what you are asking for, here, but to my knowledge and due to the nature of HD-HH I couldn't find any better, faster, simpler, cuter or leanier way.
  3. QBWs, which get shared by the community or myself, are just mockups or proof of concepts which are meant to be "abused", "mishandled" and further customized to match each one's expectations and visual/functional taste
  4. The complexity of some QBWs requires manual intervention to adapt to each and everyone's environment (Ex. the QBW Instance ID used for inter-widget communication varies on each machine). To my knowledge, the automation of this adaptation process is very time consuming and far from being error-proof. I preferred to focus my effort in the most interesting area of functionalities
  5. QBW is a very powerful tool and can do a lot of good and nasty things... so: the more you expose its behaviour and the more "open" the code and effects will be
  6. Maemo ain't for doubleclickers

I know there is no proper answer here...

Easter Eggs

Magic Word for bypassing Export/Import Instance Data CheckSum protection

Image:Qbwlsowk.jpg

Use the Source ... Luke! ;) or ask politely!

Troubleshooting

Startup

If you are having issues at widget startup because of improper "Update on Widget/System Startup" settings:

  • Open up X Terminal (or SSH/Putty into N900) and issue the following commands:
sudo gainroot

(only if you are not already root)

vi /home/user/.queen_beecon
  • find updOnStartup=true (all instances supposed to be culprits)
  • Set it to false:
updOnStartup=false
  • Save file
  • Immediately issue:
killall hildon-home
  • hildon-home will automatically restart and widgets won't run any more at startup

More generally just open /home/user/.queen_beecon and change the Update Policies of your offending instance as per THIS section's specifications

Running

QBW Warning! Possible Pango Markup Language inconsistent/unterminated Tag!

If you are using Pango Markup Language tags as output from your scripts, make sure all Tags are correctly written/spelled and terminated. Make also sure that there is an explicit newline at the very end of your output.

If you need to display the following special characters:

These NEED to be escaped:

  • The less-than character (<) starts element markup (the first character of a start-tag or an end-tag). Escape: &lt;
  • The greater-than character (>) ends a start-tag or an end-tag. Escape: &gt;

These MIGHT NEED to be escaped:

  • The ampersand character (&) starts entity markup (the first character of a character entity reference). Escape: &amp;
  • The double-quote character (") can be symbolised with this character entity reference when you need to embed a double-quote inside a string which is already double-quoted. Escape: &quot;
  • The apostrophe or single-quote character (') can be symbolised with this character entity reference when you need to embed a single-quote or apostrophe inside a string which is already single-quoted. Escape: &apos;

Beecon seems to hang when fetching data or accessing the Internet/Network

Please have a look at the thread of Timeout and Proxy related issues.

You can also have a look at THIS section of the WIKI for proxy related information

Advanced Settings and Tools Dialog Box

QBW Warning! Expected/Shown Command Output mismatch. Possible charset different from UTF-8!

If you press TestDrive for a command and the Exit Status and Command RAW Output Buffer still displays "Exit Status & Command RAW Output will be displayed HERE" then maybe your output contains a charset different from UTF-8.

To have the Command Output properly displayed, try to append "<code.| iconv --from-code=ISO-8859-1 --to-code=UTF-8</code>". For example:

... command1 | iconv --from-code=ISO-8859-1 --to-code=UTF-8

WARNING! Bad Checksum! Possibly corrupt Import Instance/Command Data!

Every exported QBW Instance/Command Data is protected by a checksum value which is stored in the header part of the export.

There are a few reason why I chose to do that:

  • To preserve integrity of what the author of the QBW created (and supposedly assumed "working")
  • To prevent unwanted changes to the data due to clipboard copy/paste operations
  • To ease the QBW exported data import process, and avoid some extra effort in coding import/export routines, by using the g_key_file_* APIs

Exported data is not "pure" configuration text; it is "meta-text" with some extra escape characters (Newline, tab, carriage return, backslash, blank which are escaped as \n, \t, \r, \\, \s respectively)

This is why directly changing the data inside the import/export buffer or in a text editor before importing is strictly discouraged (unless, of course, you know what you are doing and side effects)

Published Beecons, Scripts & Commands

Main article: Queen BeeCon Widget/BeeCons, scripts and commands