XUQV28Fˋ  !9 Eg s ˋ author Dave Winer authorEmaildave.winer@gmail.com descriptionAn outliner for Twitter posts. homePageUrlKhttp://www.scripting.com/stories/2008/04/21/aNewStrategyForTwitterOuta.htmlnameTwitter Outliner releaseDateversion0.22U 28E?Z: VGeneva28E28E|LANDmac on any (pta) //boilerplate for your responder pta^.responseHeaders.["Content-Type"] = "text/html" pta^.code = 200 //everything was OK pta^.responseBody = "" //build response return (true) V2.28E28E any2.28E28E BJ R condition4(string.lower (path) beginsWith "/twitteroutliner/")enabledmethods`G 28E28E 28E28E Geneva28E28E|LANDmac This script runs every hour.  `Geneva28E?^ OLANDmac Changes 5/1/08; 8:17:42 PM by DW Maintain adrq^.ctChecks. Catch errors, retry one hour later. Record error message and count them. 5/1/08; 3:47:02 PM by DW Send scheduled twits whose time has come. 4/25/08; 10:51:56 AM by DW Created. twitterOutlinerSuite.init () bundle //flags if not defined (user.twitterOutliner.flags.flMoveDataOut) user.twitterOutliner = twitterOutlinerData twitterOutlinerSuite.init () //make sure flags table exists user.twitterOutliner.flags.flMoveDataOut = true filemenu.save () bundle //check queue for any twits that are ready to post local (i, adrq, now = clock.now ()) for i = sizeof (user.twitterOutliner.queue.pending) downto 1 adrq = @user.twitterOutliner.queue.pending [i] if now > adrq^.whenToSend try twitter.newpost (adrq^.whatToSend) else adrq^.lastError = tryerror if not defined (adrq^.ctErrors) adrq^.ctErrors = 0 adrq^.ctErrors++ adrq^.whenToSend = adrq^.whenToSend + (60 * 60) //try again in an hour adrq^.whenSent = clock.now () user.twitterOutliner.queue.sent.[nameof (adrq^)] = adrq^ delete (adrq) filemenu.save () else if not defined (adrq^.ctChecks) adrq^.ctChecks = 0 adrq^.ctChecks++ WdatatablG?? createdFri, 02 May 2008 03:17:42 GMTWdatatablG?? createdFri, 02 May 2008 03:17:42 GMTWdatatablG?t?t createdThu, 01 May 2008 22:47:00 GMTWdatatablG?v?v createdThu, 01 May 2008 22:47:02 GMTWdatatablG7hK7hK createdFri, 25 Apr 2008 17:51:55 GMTWdatatablG7hL7hL createdFri, 25 Apr 2008 17:51:56 GMTWdatatablG7i47i4 createdFri, 25 Apr 2008 17:55:48 GMTWdatatablG7hR7hR createdFri, 25 Apr 2008 17:52:02 GMTWdatatablG7he7he createdFri, 25 Apr 2008 17:52:21 GMTWdatatablG7i7i createdFri, 25 Apr 2008 17:55:00 GMTWdatatablG7i47i4 createdFri, 25 Apr 2008 17:55:48 GMTWdatatablG7h~7h~ createdFri, 25 Apr 2008 17:52:46 GMTWdatatablG7j7j createdFri, 25 Apr 2008 18:02:00 GMTWdatatablG?? createdThu, 01 May 2008 22:34:26 GMTWdatatablG?? createdThu, 01 May 2008 22:34:35 GMTWdatatablG?? createdThu, 01 May 2008 22:40:03 GMTWdatatablG?? createdThu, 01 May 2008 22:40:14 GMTWdatatablG?? createdThu, 01 May 2008 22:34:43 GMTWdatatablG?? createdFri, 02 May 2008 03:17:57 GMTWdatatablG2W@2W@ createdMon, 21 Apr 2008 21:37:52 GMTWdatatablG?? createdFri, 02 May 2008 03:18:02 GMTWdatatablG?!?! createdFri, 02 May 2008 03:18:41 GMTWdatatablG?շ?շ createdFri, 02 May 2008 03:16:55 GMTWdatatablG?? createdFri, 02 May 2008 03:17:10 GMTWdatatablG?? createdFri, 02 May 2008 03:17:26 GMTWdatatablG?:?: createdFri, 02 May 2008 03:19:06 GMTWdatatablG?? createdThu, 01 May 2008 22:36:09 GMTWdatatablG?? createdThu, 01 May 2008 22:36:23 GMTWdatatablG? ? createdThu, 01 May 2008 22:36:44 GMTWdatatablG?? createdThu, 01 May 2008 22:36:47 GMTWdatatablG?մ?մ createdFri, 02 May 2008 03:16:52 GMTWdatatablG?շ?շ createdFri, 02 May 2008 03:16:55 GMTWdatatablG?? createdFri, 02 May 2008 03:17:10 GMTWdatatablG?? createdFri, 02 May 2008 03:17:26 GMTGeneva28E28E|LANDmac This script runs every night. {w.28EA&  ". 9 everyHour} everyMinute$ everyNight{c ,Geneva»X7l#v_%LANDmac on buildRSS () Changes 4/25/08; 11:10:18 AM by DW Convert to user.twitterOutliner. 4/24/08; 2:52:39 PM by DW If atts.created is not defined, don't output a pubDate element. 4/21/08; 12:53:00 PM by DW Created. local (xmltext = "", indentlevel = 0) on add (s) xmltext = xmltext + (string.filledstring ("\t", indentlevel) + s + "\r\n"); on encode (s) if system.environment.isMac return (xml.entityEncode (latinToMac.macToLatin (s), true)) else return (xml.entityEncode (s, true)) local (now = clock.now (), maxitems = 100, ctitems = 0) add ("") add ("") add (""); indentlevel++ add (""); indentlevel++ bundle //add header elements add ("" + encode (user.twitterOutliner.prefs.rss.title) + "") add ("" + encode (user.twitterOutliner.prefs.rss.link) + "") add ("" + encode (string (user.twitterOutliner.prefs.rss.description)) + "") add ("en-us") add ("" + encode (user.twitterOutliner.prefs.rss.copyright) + "") add ("" + date.netstandardstring (now) + "") add ("" + date.netstandardstring (now) + "") add ("" + encode (user.twitterOutliner.prefs.rss.docs) + "") add ("" + frontier.getprogramname () + "") bundle //add items local (s = op.outlinetoxml (@user.twitterOutliner.outline), xstruct) xml.compile (s, @xstruct) scratchpad.xstruct = xstruct local (adropml = xml.getaddress (@xstruct, "opml")) local (adrbody = xml.getaddress (adropml, "body"), adroutline) for adroutline in adrbody if nameof (adroutline^) endswith "outline" local (atts = adroutline^.["/atts"]) add (""); indentlevel++ add ("" + atts.text + "") if defined (atts.created) add ("" + atts.created + " ") if defined (atts.url) add ("" + atts.url + "") add ("" + atts.url + "") add (""); indentlevel-- add (""); indentlevel-- add (""); indentlevel-- user.twitterOutliner.prefs.rssUrl = s3.newobject (user.twitterOutliner.prefs.s3pathRss, xmltext) user.twitterOutliner.prefs.whenLastRssBuild = clock.now () if not defined (user.twitterOutliner.prefs.ctRssBuilds) user.twitterOutliner.prefs.ctRssBuilds = 1 else user.twitterOutliner.prefs.ctRssBuilds++ filemenu.savemyroot (this) wp.newtextobject (xmltext, @scratchpad.rsstext) bundle //test code buildRss () buildRss ("davewiner") WdatatablG§§ createdWed, 27 Jun 2007 17:51:10 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:18 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:19 GMTWdatatablG6O66O6 createdThu, 24 Apr 2008 21:52:38 GMTWdatatablG6O76O7 createdThu, 24 Apr 2008 21:52:39 GMTWdatatablG·· createdMon, 09 Jul 2007 17:12:29 GMTWdatatablG·· createdMon, 09 Jul 2007 17:12:30 GMTWdatatablG++ createdFri, 16 Feb 2007 17:37:42 GMTWdatatablG§=§= createdWed, 27 Jun 2007 18:49:17 GMTWdatatablG2?2? createdMon, 21 Apr 2008 19:57:40 GMTWdatatablG2?2? createdMon, 21 Apr 2008 19:58:09 GMTWdatatablG2?2? createdMon, 21 Apr 2008 19:58:18 GMTWdatatablG2?2? createdMon, 21 Apr 2008 19:57:40 GMTWdatatablG2@92@9 createdMon, 21 Apr 2008 19:59:37 GMTWdatatablG2@D2@D createdMon, 21 Apr 2008 19:59:48 GMTWdatatablG2@I2@I createdMon, 21 Apr 2008 19:59:53 GMTWdatatablG2s"2s" createdMon, 21 Apr 2008 23:36:50 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG6O%6O% createdThu, 24 Apr 2008 21:52:21 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG2y2y createdTue, 22 Apr 2008 00:05:55 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG¨¨ createdWed, 27 Jun 2007 19:16:20 GMTWdatatablG2:2: createdMon, 21 Apr 2008 19:33:05 GMTWdatatablG2=H2=H createdMon, 21 Apr 2008 19:47:04 GMTWdatatablG2=U2=U createdMon, 21 Apr 2008 19:47:17 GMTWdatatablG2=b2=b createdMon, 21 Apr 2008 19:47:30 GMTWdatatablG2=d2=d createdMon, 21 Apr 2008 19:47:32 GMTWdatatablG2=k2=k createdMon, 21 Apr 2008 19:47:39 GMTWdatatablG2=2= createdMon, 21 Apr 2008 19:48:03 GMTWdatatablG§§ createdWed, 27 Jun 2007 17:52:48 GMTWdatatablG§ § createdWed, 27 Jun 2007 17:53:00 GMTWdatatablG§§ createdWed, 27 Jun 2007 17:53:03 GMTWdatatablG§§ createdWed, 27 Jun 2007 17:53:03 GMTc 28E28E 28E28E 28E28E nj.28E28E  ' ,fileMenu0bradio0user0n Geneva7q{7PQy LLANDmac TwitterOutliner Welcome to TwitterOutliner There might be two or three people who can use this tool. I'm one of them, that's why I developed it. :-) Prerequisites
  1. The OPML Editor. It should work fine with either the Mac or Windows version.
  2. An Amazon Web Services account. It may look like something only a geek can do, but it's actually easy to sign up and use. If you use Firefox you may want to get the S3Fox plugin, very useful. It works more or less like an FTP server.
How to install
  1. Download twitterOutliner.root. Save it into the Guest Databases/apps/Tools sub-folder of the OPML folder.
  2. Quit the OPML Editor if it's running. Relaunch.
  3. Choose Open prefs table from the TwitterOutliner sub-menu of the Tools table.
  4. Jump to user.s3 and enter AWSAccessKeyId and SecretAccessKey as provided by the Amazon site. Screen shot.
  5. This is the tricky part (but it's not really that tricky). There are just 3 things you have to set up in this table, the rest are optional, or taken care of for you by the app. They are: s3pathArchive, s3pathOpml and s3pathRss and they are very much related. They are the paths in S3 for your archive, the OPML file and the RSS file. They are completely up to you. Suppose you have a top-level bucket on S3 called myTwits. Then you could make the path to your archive be: /myTwits/archive/ and the path to your OPML could be /myTwits/mancuso.opml and to your RSS /myTwits/mancuso.xml. Or whatever you like. The URL to your files will be automatically stored in opmlUrl and rssUrl in the prefs sub-table.
How to use When you want to twit something using the outliner:
  1. Choose Open Outline from the TwitterOutliner sub-menu of the Tools menu. Screen shot. A picture named to.gif
  2. Type something pithy into the first headline. (If there's already something in the outline, press Return to create a new empty headline.)
  3. If you want to check the character count, click the Count button. If you want to link to something from the twit, right click on the wedge to the left of the headline and choose Add Link, enter the URL and click OK.
  4. When you're ready to post the tweet, click the Twit-It button.
  5. Then save the outline by clicking the Save button. This uploads the OPML file and stores it in the archive folder on S3.
  6. To generate the RSS click the Build RSS button. This uploads the RSS file and stores it in the archive folder on S3.
Jdatatabl:$7r7r 7r changenumcreatedJdatatabl:$7q7q 7q changenumcreatedWdatatablG7s7s createdFri, 25 Apr 2008 18:37:57 GMTWdatatablG7s7s createdFri, 25 Apr 2008 18:38:04 GMTWdatatablG7s,7s, createdFri, 25 Apr 2008 18:38:20 GMTWdatatablG7u?7u? createdFri, 25 Apr 2008 18:47:11 GMTWdatatablG7r7r createdFri, 25 Apr 2008 18:36:48 GMTWdatatablG7r7r createdFri, 25 Apr 2008 18:37:03 GMTWdatatablG7s7s createdFri, 25 Apr 2008 18:39:53 GMTWdatatablG7s7s createdFri, 25 Apr 2008 18:40:03 GMTWdatatablG7w 7w createdFri, 25 Apr 2008 18:54:50 GMTWdatatablG7t7t createdFri, 25 Apr 2008 18:45:00 GMTWdatatablG7u7u createdFri, 25 Apr 2008 18:50:07 GMTWdatatablG7vb7vb createdFri, 25 Apr 2008 18:52:02 GMTWdatatablG7v7v createdFri, 25 Apr 2008 18:53:03 GMTWdatatablG7v7v createdFri, 25 Apr 2008 18:53:08 GMTWdatatablG7v7v createdFri, 25 Apr 2008 18:54:17 GMTWdatatablG77 createdFri, 25 Apr 2008 19:40:28 GMTWdatatablG7wg7wg createdFri, 25 Apr 2008 18:56:23 GMTWdatatablG7w7w createdFri, 25 Apr 2008 18:57:02 GMTWdatatablG7w7w createdFri, 25 Apr 2008 18:57:56 GMTWdatatablG7w7w createdFri, 25 Apr 2008 18:58:19 GMTWdatatablG7w7w createdFri, 25 Apr 2008 18:58:47 GMTWdatatablG7x7x createdFri, 25 Apr 2008 18:59:15 GMTHGenevaIޅIKe?LLANDmac on getSerialNum () Changes 5/9/08; 10:57:19 AM by DW Created. I use different computers to twit, and they need to use the same serialnumber otherwise they overwrite files. local (numstring) try numstring = number (tcp.httpreadurl ("http:/" + user.twitterOutliner.prefs.s3pathSerialnum, flMessages:false)) else numstring = "1000" serialnum = number (numstring) + 1 s3.newobject (user.twitterOutliner.prefs.s3pathSerialnum, string (serialnum)) return (serialnum) bundle //test code dialog.alert (getSerialNum ()) WdatatablGII createdFri, 09 May 2008 18:02:47 GMTWdatatablGIގIގ createdFri, 09 May 2008 17:57:18 GMTWdatatablGIސIސ createdFri, 09 May 2008 17:57:20 GMTWdatatablGI߉I߉ createdFri, 09 May 2008 18:01:29 GMTWdatatablGIߏIߏ createdFri, 09 May 2008 18:01:35 GMTWdatatablGIްIް createdFri, 09 May 2008 17:57:52 GMTWdatatablGIߛIߛ createdFri, 09 May 2008 18:01:47 GMTWdatatablGIߝIߝ createdFri, 09 May 2008 18:01:49 GMTWdatatablGIߤIߤ createdFri, 09 May 2008 18:01:56 GMTWdatatablGI߱I߱ createdFri, 09 May 2008 18:02:09 GMTWdatatablGII createdFri, 09 May 2008 18:02:38 GMTWdatatablGII createdFri, 09 May 2008 18:02:57 GMTWdatatablGII createdFri, 09 May 2008 18:03:01 GMTH$UGeneva2u&VcNRLANDmac Changes 5/9/08; 11:00:19 AM by DW Init user.twitterOutliner.prefs.s3pathSerialnum. 5/1/08; 3:34:00 PM by DW Init user.twitterOutliner.queue. 4/25/08; 10:51:32 AM by DW Init user.twitterOutliner.flags. 4/22/08; 12:29:57 PM by DW Init user.twitterOutliner.prefs.s3pathArchive. if not defined (user.twitterOutliner) new (tabletype, @user.twitterOutliner) bundle //prefs if not defined (user.twitterOutliner.prefs) new (tabletype, @user.twitterOutliner.prefs) if not defined (user.twitterOutliner.prefs.ctRssBuilds) user.twitterOutliner.prefs.ctRssBuilds = 0 if not defined (user.twitterOutliner.prefs.ctSaves) user.twitterOutliner.prefs.ctSaves = 0 if not defined (user.twitterOutliner.prefs.opmlUrl) user.twitterOutliner.prefs.opmlUrl = "" if not defined (user.twitterOutliner.prefs.rss) new (tabletype, @user.twitterOutliner.prefs.rss) if not defined (user.twitterOutliner.prefs.rss.copyright) user.twitterOutliner.prefs.rss.copyright = "Copyright " + date.year () + " " + user.prefs.name if not defined (user.twitterOutliner.prefs.rss.description) user.twitterOutliner.prefs.rss.description = "Subscribe to this feed in a service like FriendFeed so, when Twitter goes down, which it is certain to do, you can continue to get " + string.nthfield (user.prefs.name, " ", 1) + " links." if not defined (user.twitterOutliner.prefs.rss.docs) user.twitterOutliner.prefs.rss.docs = "http://www.scripting.com/stories/2008/04/21/aNewStrategyForTwitterOuta.html" if not defined (user.twitterOutliner.prefs.rss.link) user.twitterOutliner.prefs.rss.link = "http://www.scripting.com/stories/2008/04/21/aNewStrategyForTwitterOuta.html" if not defined (user.twitterOutliner.prefs.rss.title) user.twitterOutliner.prefs.rss.title = user.prefs.name + "'s \"Rainy Day\" Twitter links" if not defined (user.twitterOutliner.prefs.rssUrl) user.twitterOutliner.prefs.rssUrl = "" if not defined (user.twitterOutliner.prefs.s3pathOpml) user.twitterOutliner.prefs.s3pathOpml = "/twitter.scripting.com/dave.opml" if not defined (user.twitterOutliner.prefs.s3pathRss) user.twitterOutliner.prefs.s3pathRss = "/twitter.scripting.com/daveRss.xml" if not defined (user.twitterOutliner.prefs.s3pathSerialnum) user.twitterOutliner.prefs.s3pathSerialnum = "/twitter.scripting.com/serialnum.txt" if not defined (user.twitterOutliner.prefs.s3pathArchive) user.twitterOutliner.prefs.s3pathArchive = "" if not defined (user.twitterOutliner.prefs.whenLastRssBuild) user.twitterOutliner.prefs.whenLastRssBuild = date (0) if not defined (user.twitterOutliner.prefs.whenLastSave) user.twitterOutliner.prefs.whenLastSave = date (0) if not defined (user.twitterOutliner.prefs.windowTitle) user.twitterOutliner.prefs.windowTitle = "Twitter Outliner" bundle //login if not defined (user.twitterOutliner.prefs.login) new (tabletype, @user.twitterOutliner.prefs.login) if not defined (user.twitterOutliner.prefs.login.username) user.twitterOutliner.prefs.login.username = nil if not defined (user.twitterOutliner.prefs.login.password) user.twitterOutliner.prefs.login.password = nil bundle //flags if not defined (user.twitterOutliner.flags) new (tabletype, @user.twitterOutliner.flags) bundle //queue if not defined (user.twitterOutliner.queue) new (tabletype, @user.twitterOutliner.queue) if not defined (user.twitterOutliner.queue.pending) new (tabletype, @user.twitterOutliner.queue.pending) if not defined (user.twitterOutliner.queue.sent) new (tabletype, @user.twitterOutliner.queue.sent) if not defined (user.twitterOutliner.queue.serialnum) user.twitterOutliner.queue.serialnum = 1 return (@user.twitterOutliner) WdatatablG33 createdTue, 22 Apr 2008 19:29:54 GMTWdatatablGIBIB createdFri, 09 May 2008 18:00:18 GMTWdatatablGIDID createdFri, 09 May 2008 18:00:20 GMTWdatatablG?h?h createdThu, 01 May 2008 22:34:00 GMTWdatatablG?i?i createdThu, 01 May 2008 22:34:01 GMTWdatatablG7h47h4 createdFri, 25 Apr 2008 17:51:32 GMTWdatatablG7h57h5 createdFri, 25 Apr 2008 17:51:33 GMTWdatatablG33 createdTue, 22 Apr 2008 19:29:56 GMTWdatatablG33 createdTue, 22 Apr 2008 19:29:58 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG7h7h createdFri, 25 Apr 2008 17:50:57 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG2v 2v createdMon, 21 Apr 2008 23:49:13 GMTWdatatablG2v&2v& createdMon, 21 Apr 2008 23:49:42 GMTWdatatablG2v;2v; createdMon, 21 Apr 2008 23:50:03 GMTWdatatablG2v@2v@ createdMon, 21 Apr 2008 23:50:08 GMTWdatatablG2vL2vL createdMon, 21 Apr 2008 23:50:20 GMTWdatatablG2vQ2vQ createdMon, 21 Apr 2008 23:50:25 GMTWdatatablG2vd2vd createdMon, 21 Apr 2008 23:50:44 GMTWdatatablG2vh2vh createdMon, 21 Apr 2008 23:50:48 GMTWdatatablG2v|2v| createdMon, 21 Apr 2008 23:51:08 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:51:13 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:52:05 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:52:11 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:53:04 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:53:08 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:53:04 GMTWdatatablG2v2v createdMon, 21 Apr 2008 23:53:08 GMTWdatatablG2w!2w! createdMon, 21 Apr 2008 23:53:53 GMTWdatatablG2w%2w% createdMon, 21 Apr 2008 23:53:57 GMTWdatatablG2vL2vL createdMon, 21 Apr 2008 23:50:20 GMTWdatatablG2vQ2vQ createdMon, 21 Apr 2008 23:50:25 GMTWdatatablG2wp2wp createdMon, 21 Apr 2008 23:55:12 GMTWdatatablG2wu2wu createdMon, 21 Apr 2008 23:55:17 GMTWdatatablG2wp2wp createdMon, 21 Apr 2008 23:55:12 GMTWdatatablG2wu2wu createdMon, 21 Apr 2008 23:55:17 GMTWdatatablG2wp2wp createdMon, 21 Apr 2008 23:55:12 GMTWdatatablG2wu2wu createdMon, 21 Apr 2008 23:55:17 GMTWdatatablG2wp2wp createdMon, 21 Apr 2008 23:55:12 GMTWdatatablG2wu2wu createdMon, 21 Apr 2008 23:55:17 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:08 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:14 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:08 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:14 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:48 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:55 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:48 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:55 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:48 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:55 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:48 GMTWdatatablG2w2w createdMon, 21 Apr 2008 23:56:55 GMTWdatatablG7h7h createdFri, 25 Apr 2008 17:51:06 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG?$?$ createdThu, 01 May 2008 22:11:32 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG2u2u createdMon, 21 Apr 2008 23:48:59 GMTWdatatablG7l77l7 createdFri, 25 Apr 2008 18:08:39 GMT$$Geneva28E2I|LANDmac twitterOutlinerSuite.openOutline () +GenevaT22LANDmac twitterOutlinerSuite.openOutlineFromWeb () HGenevaT?@?W|LANDmac edit (@user.twitteroutliner.queue, windowtitle:"TwitterOutliner Queue") #GenevaT7s7t3LANDmac twitterOutlinerSuite.init () edit (@user.twitterOutliner) op.firstsummit () op.fullExpand () window.zoom (@user.twitterOutliner) WdatatablG7s7s createdFri, 25 Apr 2008 18:40:54 GMTWdatatablG7s7s createdFri, 25 Apr 2008 18:41:25 GMTWdatatablG7t7t createdFri, 25 Apr 2008 18:42:16 GMT#RYGeneva28E??Z|LANDmac TwitterOutliner Open Outline Open Outline from Web - Open queue - Open prefs table r s_ t t#pwpGenevapKGeneva28]?^ ;ALANDmac Changes 5/1/08; 11:44:17 AM by DW Add the right-click menu as a window attribute. 4/25/08; 11:10:18 AM by DW Convert to user.twitterOutliner. local (adrwindow = @user.twitterOutliner.outline) if not defined (adrwindow^) new (outlinetype, adrwindow) edit (adrwindow, windowtitle: user.twitterOutliner.prefs.windowTitle, adrButtonTable:@twitterOutlinerSuite.windowButtons) window.attributes.setone ("adrRightClickMenu", @twitterOutlinerSuite.rightClickMenu) WdatatablG7l7l createdFri, 25 Apr 2008 18:11:08 GMTWdatatablG?]?] createdThu, 01 May 2008 18:44:16 GMTWdatatablG?]?] createdThu, 01 May 2008 18:44:17 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:18 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:19 GMTWdatatablG2828 createdMon, 21 Apr 2008 19:27:50 GMTWdatatablG2828 createdMon, 21 Apr 2008 19:28:13 GMTWdatatablG2828 createdMon, 21 Apr 2008 19:28:20 GMTWdatatablG?]F?]F createdThu, 01 May 2008 18:43:02 GMTx Geneva2?] dLANDmac Changes 5/1/08; 11:44:17 AM by DW Add the right-click menu as a window attribute. 4/25/08; 11:10:18 AM by DW Convert to user.twitterOutliner. 4/21/08; 9:21:13 PM by DW Created. local (adroutline = @user.twitterOutliner.outline) local (xmltext = tcp.httpreadurl (user.twitterOutliner.prefs.opmlUrl)) op.xmltooutline (xmltext, adroutline) target.set (adroutline) editmenu.setfont ("Geneva") editmenu.setfontsize (14) edit (adroutline, windowtitle: user.twitterOutliner.prefs.windowTitle, adrButtonTable:@twitterOutlinerSuite.windowButtons) window.attributes.setone ("adrRightClickMenu", @twitterOutlinerSuite.rightClickMenu) WdatatablG22 createdTue, 22 Apr 2008 04:21:09 GMTWdatatablG?]?] createdThu, 01 May 2008 18:44:16 GMTWdatatablG?]?] createdThu, 01 May 2008 18:44:17 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:18 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:19 GMTWdatatablG22 createdTue, 22 Apr 2008 04:21:11 GMTWdatatablG22 createdTue, 22 Apr 2008 04:21:13 GMTWdatatablG22 createdTue, 22 Apr 2008 04:18:23 GMTWdatatablG22 createdTue, 22 Apr 2008 04:16:58 GMTWdatatablG2727 createdTue, 22 Apr 2008 04:18:47 GMTWdatatablG2<2< createdTue, 22 Apr 2008 04:18:52 GMTWdatatablG2P2P createdTue, 22 Apr 2008 04:19:12 GMTWdatatablG?]F?]F createdThu, 01 May 2008 18:43:02 GMTnz|Geneva<<MMFULANDmac Changes 4/29/08; 3:32:24 PM by DW Created. window.close (window.frontmost ()) twitterOutlinerSuite.openOutlineFromWeb () WdatatablG6Nk6Nk createdThu, 24 Apr 2008 21:49:15 GMTWdatatablG6No6No createdThu, 24 Apr 2008 21:49:19 GMTWdatatablG6Nq6Nq createdThu, 24 Apr 2008 21:49:21 GMTWdatatablG<< createdTue, 29 Apr 2008 22:32:31 GMTn%Geneva?]!?^LANDmac twitterOutlinerSuite.scheduleTwit () Geneva?]?]$LANDmac Schedule Twit... - pAGenevap >mY Geneva29ILLANDmac Changes 5/9/08; 11:08:29 AM by DW Use twitterOutlinerSuite.getSerialnum to determine the name of the archived OPML. 4/25/08; 11:10:18 AM by DW Convert to user.twitterOutliner. 4/22/08; 12:45:47 PM by DW Save archive files in an "opml" sub-folder on S3. 4/22/08; 12:33:59 PM by DW Save to OPML to the archive folder. 4/22/08; 12:14:30 PM by DW Add msg Saving... at beginning, erase at end. msg ("Saving...") local (xmltext = op.outlinetoxml (@user.twitterOutliner.outline)) user.twitterOutliner.prefs.opmlUrl = s3.newobject (user.twitterOutliner.prefs.s3pathOpml, xmltext) local (serialnum = twitterOutlinerSuite.getSerialnum ()) bundle //add to ctsaves if not defined (user.twitterOutliner.prefs.ctSaves) user.twitterOutliner.prefs.ctSaves = 1 else user.twitterOutliner.prefs.ctSaves++ bundle //save to archive folder local (archivepath = user.twitterOutliner.prefs.s3pathArchive + "opml/" + file.getDatePath ("/") + string.padwithzeros (serialnum, 5) + ".opml") s3.newobject (archivepath, xmltext) user.twitterOutliner.prefs.whenLastSave = clock.now () filemenu.savemyroot (this) msg ("") WdatatablG3!3! createdTue, 22 Apr 2008 19:14:25 GMTWdatatablGI,I, createdFri, 09 May 2008 18:08:28 GMTWdatatablGI-I- createdFri, 09 May 2008 18:08:29 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:18 GMTWdatatablG7l7l createdFri, 25 Apr 2008 18:10:19 GMTWdatatablG3z3z createdTue, 22 Apr 2008 19:45:46 GMTWdatatablG3{3{ createdTue, 22 Apr 2008 19:45:47 GMTWdatatablG33 createdTue, 22 Apr 2008 19:33:58 GMTWdatatablG33 createdTue, 22 Apr 2008 19:33:59 GMTWdatatablG3%3% createdTue, 22 Apr 2008 19:14:29 GMTWdatatablG3&3& createdTue, 22 Apr 2008 19:14:30 GMTWdatatablG33 createdTue, 22 Apr 2008 19:14:08 GMTWdatatablG2:2: createdMon, 21 Apr 2008 19:33:05 GMTWdatatablGII createdFri, 09 May 2008 18:06:13 GMTWdatatablG33 createdTue, 22 Apr 2008 19:33:16 GMTWdatatablG2=U2=U createdMon, 21 Apr 2008 19:47:17 GMTWdatatablG2=b2=b createdMon, 21 Apr 2008 19:47:30 GMTWdatatablG2=d2=d createdMon, 21 Apr 2008 19:47:32 GMTWdatatablG2=k2=k createdMon, 21 Apr 2008 19:47:39 GMTWdatatablG33 createdTue, 22 Apr 2008 19:25:09 GMTWdatatablG2=H2=H createdMon, 21 Apr 2008 19:47:04 GMTWdatatablG2=2= createdMon, 21 Apr 2008 19:48:03 GMTWdatatablG33 createdTue, 22 Apr 2008 19:14:08 GMT > }Geneva?]D` \-LANDmac Changes 5/5/08; 1:25:22 PM by DW Better yet, suggest the top of the next hour. 5/1/08; 8:37:19 PM by DW Round to the nearest minute when suggesting a date cause the scheduler only runs once a minute anyway. 5/1/08; 11:45:57 AM by DW The cursor points to a Twit, we put up a dialog asking when it should be sent. Set an attribute accordingly. local (atts, twittext) twitterOutlinerSuite.init () op.attributes.getall (@atts) bundle //set twittext twittext = op.getlinetext () if defined (atts.url) if not defined (atts.tinyUrl) atts.tinyUrl = tinyurl.create (atts.url) twittext = twittext + " " + atts.tinyUrl if sizeof (twittext) > 140 scripterror ("Too many characters, 140 is max: " + sizeof (twittext) + ".") if not defined (atts.whenToSend) atts.whenToSend = clock.now () + (60*60) //one hour from now local (day, month, year, hour, minute, second) date.get (atts.whenToSend, @day, @month, @year, @hour, @minute, @second) atts.whenToSend = date.set (day, month, year, hour, 0, 0) if dialog.ask ("When to send the Twit?", @atts.whenToSend) if not defined (atts.ixQ) atts.ixQ = user.twitterOutliner.queue.serialnum++ local (adrq = @user.twitterOutliner.queue.pending.[string.padwithzeros (atts.ixQ, 5)]) if not defined (adrq^) new (tabletype, adrq) adrq^.whenToSend = date (atts.whenToSend) adrq^.whatToSend = twittext op.attributes.addgroup (@atts) filemenu.save () WdatatablGDADA createdMon, 05 May 2008 20:25:21 GMTWdatatablGDBDB createdMon, 05 May 2008 20:25:22 GMTWdatatablG?? createdFri, 02 May 2008 03:37:19 GMTWdatatablG?ڀ?ڀ createdFri, 02 May 2008 03:37:20 GMTWdatatablG?]?] createdThu, 01 May 2008 18:45:56 GMTWdatatablG?]?] createdThu, 01 May 2008 18:45:58 GMTWdatatablG?^?^ createdThu, 01 May 2008 18:46:39 GMTWdatatablG?^%?^% createdThu, 01 May 2008 18:46:45 GMTWdatatablG?? createdThu, 01 May 2008 22:18:03 GMTWdatatablG?? createdThu, 01 May 2008 22:18:16 GMTWdatatablG2z+2z+ createdTue, 22 Apr 2008 00:06:51 GMTWdatatablG2W 2W createdMon, 21 Apr 2008 21:37:00 GMTWdatatablG2W2W createdMon, 21 Apr 2008 21:37:11 GMTWdatatablG2z:2z: createdTue, 22 Apr 2008 00:07:06 GMTWdatatablG2rg2rg createdMon, 21 Apr 2008 23:33:43 GMTWdatatablG2rm2rm createdMon, 21 Apr 2008 23:33:49 GMTWdatatablG?^K?^K createdThu, 01 May 2008 18:47:23 GMTWdatatablG?^Q?^Q createdThu, 01 May 2008 18:47:29 GMTWdatatablG?c?c createdFri, 02 May 2008 03:36:51 GMTWdatatablG?^+?^+ createdThu, 01 May 2008 18:46:51 GMTWdatatablG?? createdThu, 01 May 2008 22:13:45 GMTWdatatablG?? createdThu, 01 May 2008 22:13:55 GMTWdatatablG?? createdThu, 01 May 2008 22:14:53 GMTWdatatablG? ? createdThu, 01 May 2008 22:15:25 GMTWdatatablG?? createdThu, 01 May 2008 22:15:32 GMTWdatatablG?9?9 createdThu, 01 May 2008 22:16:09 GMTWdatatablG?9?9 createdThu, 01 May 2008 22:16:09 GMTWdatatablG?^@?^@ createdThu, 01 May 2008 18:47:12 GMTWdatatablG?? createdThu, 01 May 2008 22:14:29 GMT }Geneva28E28ExLANDmac This script returns a string which appears in the Status Center on the Radio UserLand home page. return ("I'm a cool Tool!")  @Geneva*+ 8LANDmac op.attributes.getall (@scratchpad.atts) edit (@scratchpad.atts) cGeneva(1(iWLANDmac xml.compile (string (twitterOutlinerSuite.testing.xmltext), @twitterOutlinerSuite.testing.xstruct) MI$(k(k  encodingUTF-8version1.0Mj(k(k  &1 FQ cg |   00001000 id15866534 00002000 nametest82700003000 screen_nametest82700004000 location00005000 description00006000 profile_image_url;http://static.twitter.com/images/default_profile_normal.png 00007000 url00008000 protectedfalse00009000 followers_count0j(k(k 6 BO ]  )- ;00001000 created_atFri Aug 15 19:32:07 +0000 2008 00002000 id 888779758 00003000 text>I'm trying something out. Pay no attention to this. Thank you.00004000 sourceweb00005000 truncatedfalse00006000 in_reply_to_status_id00007000 in_reply_to_user_id00008000 favorited 00009000 userpyb^$(k(k  * 00001000 ?xml0 00002000 status0bm8'*  & . %getattsctest13xmltext Fri Aug 15 19:32:07 +0000 2008 888779758 I'm trying something out. Pay no attention to this. Thank you. web false 15866534 test827 test827 http://static.twitter.com/images/default_profile_normal.png false 0 xstructVGeneva|=f )Geneva 2V, lLANDmac Changes 4/24/08; 1:31:37 PM by DW If the item doesn't have a created attribute, add one. 4/22/08; 9:35:45 AM by DW Provide a way to re-post a twit. local (atts, linetext = op.getlinetext ()) new (tabletype, @atts) op.attributes.getall (@atts) scratchpad.atts = atts edit (@scratchpad.atts) if defined (atts.whenTwitted) if dialog.twoWay ("Hey schmucko, you already posted that twit.", "Fuck It", "Twit It") user pressed Fuck It return atts.whenTwitted = date.netstandardstring (clock.now ()) local (twittext = linetext) if defined (atts.url) if not defined (atts.tinyUrl) atts.tinyUrl = tinyurl.create (atts.url) twittext = twittext + " " + atts.tinyUrl if sizeof (twittext) > 140 dialog.alert ("Too many characters, 140 is max: " + sizeof (twittext) + ".") else if dialog.confirm (twittext) local (username = user.twitterOutliner.prefs.login.username, response) local (password = user.twitterOutliner.prefs.login.password, inresponseto) bundle //set inresponseto local (oldcursor = op.getcursor ()) if op.go (left, 1) local (atts) op.attributes.getall (@atts) if defined (atts.id) inresponseto = atts.id else inresponseto = nil op.setcursor (oldcursor) atts.twitText = twittext twitter.newpost (twittext, username, password, inresponseto:inresponseto, adrresponse:@response) table.copycontents (@response, @atts) if not defined (atts.created) atts.created = date.netstandardstring (clock.now ()) op.attributes.addgroup (@atts) twitterOutlinerSuite.saveOutline () WdatatablG3a3a createdTue, 22 Apr 2008 16:35:40 GMTWdatatablG6<86<8 createdThu, 24 Apr 2008 20:31:36 GMTWdatatablG6<96<9 createdThu, 24 Apr 2008 20:31:37 GMTWdatatablG3a3a createdTue, 22 Apr 2008 16:35:44 GMTWdatatablG3a3a createdTue, 22 Apr 2008 16:35:45 GMTWdatatablG2V2V createdMon, 21 Apr 2008 21:35:36 GMTWdatatablG2V2V createdMon, 21 Apr 2008 21:35:24 GMTWdatatablG2V2V createdMon, 21 Apr 2008 21:35:29 GMTWdatatablG3a@3a@ createdTue, 22 Apr 2008 16:32:48 GMTWdatatablG3a@3a@ createdTue, 22 Apr 2008 16:32:48 GMTWdatatablG2Y22Y2 createdMon, 21 Apr 2008 21:46:10 GMTWdatatablG3a3a createdTue, 22 Apr 2008 16:34:42 GMTWdatatablG3a3a createdTue, 22 Apr 2008 16:34:28 GMTWdatatablG3aA3aA createdTue, 22 Apr 2008 16:32:49 GMTWdatatablG2V2V createdMon, 21 Apr 2008 21:36:25 GMTWdatatablG2W2W createdMon, 21 Apr 2008 21:39:01 GMTWdatatablG2z+2z+ createdTue, 22 Apr 2008 00:06:51 GMTWdatatablG2W 2W createdMon, 21 Apr 2008 21:37:00 GMTWdatatablG2W2W createdMon, 21 Apr 2008 21:37:11 GMTWdatatablG2z:2z: createdTue, 22 Apr 2008 00:07:06 GMTWdatatablG2rg2rg createdMon, 21 Apr 2008 23:33:43 GMTWdatatablG2rm2rm createdMon, 21 Apr 2008 23:33:49 GMTWdatatablG2r2r createdMon, 21 Apr 2008 23:34:14 GMTWdatatablG2W2W createdMon, 21 Apr 2008 21:40:30 GMTWdatatablG2W2W createdMon, 21 Apr 2008 21:39:12 GMTWdatatablG2W@2W@ createdMon, 21 Apr 2008 21:37:52 GMTWdatatablG6<6< createdThu, 24 Apr 2008 20:31:00 GMTWdatatablG6<6< createdThu, 24 Apr 2008 20:31:09 GMTWdatatablG2W%2W% createdMon, 21 Apr 2008 21:37:25 GMTf1Geneva,33LANDmac Changes 4/22/08; 12:38:24 PM by DW Save from a new thread so the button pops back immediately. thread.callscript (@twitterOutlinerSuite.saveOutline, {}) WdatatablG33 createdTue, 22 Apr 2008 19:38:17 GMTWdatatablG33 createdTue, 22 Apr 2008 19:38:19 GMTWdatatablG33 createdTue, 22 Apr 2008 19:38:24 GMT1Geneva,33{##LANDmac Changes 4/22/08; 12:15:39 PM by DW Add msg Building RSS... -- erase at end. msg ("Building RSS...") twitterOutlinerSuite.buildRSS () msg ("") WdatatablG3h3h createdTue, 22 Apr 2008 19:15:36 GMTWdatatablG3j3j createdTue, 22 Apr 2008 19:15:38 GMTWdatatablG3l3l createdTue, 22 Apr 2008 19:15:40 GMTWdatatablG3[3[ createdTue, 22 Apr 2008 19:15:23 GMTWdatatablG3d3d createdTue, 22 Apr 2008 19:15:32 GMT@ Geneva66Nx&!LANDmac Changes 4/24/08; 2:49:21 PM by DW Created. local (s = op.getlinetext ()) op.attributes.getall (@atts) if defined (atts.url) if not defined (atts.tinyurl) atts.tinyurl = tinyurl.create (atts.url) op.attributes.addgroup (@atts) s = s + " " + atts.tinyurl dialog.alert (sizeof (s)) WdatatablG6Nk6Nk createdThu, 24 Apr 2008 21:49:15 GMTWdatatablG6No6No createdThu, 24 Apr 2008 21:49:19 GMTWdatatablG6Nq6Nq createdThu, 24 Apr 2008 21:49:21 GMTWdatatablG66 createdThu, 24 Apr 2008 18:22:24 GMTWdatatablG6M6M createdThu, 24 Apr 2008 18:23:57 GMTWdatatablG66 createdThu, 24 Apr 2008 18:24:55 GMTWdatatablG6Y6Y createdThu, 24 Apr 2008 18:24:09 GMTWdatatablG6`6` createdThu, 24 Apr 2008 18:24:16 GMTWdatatablG6l6l createdThu, 24 Apr 2008 18:24:28 GMTWdatatablG66 createdThu, 24 Apr 2008 18:25:38 GMT@OtcGeneva6< LANDmac Changes 4/29/08; 3:32:24 PM by DW Created. thread.callscript (@twitterOutlinerSuite.reopen, {}) WdatatablG6Nk6Nk createdThu, 24 Apr 2008 21:49:15 GMTWdatatablG6No6No createdThu, 24 Apr 2008 21:49:19 GMTWdatatablG6Nq6Nq createdThu, 24 Apr 2008 21:49:21 GMTWdatatablG<< createdTue, 29 Apr 2008 22:36:14 GMTOGeneva,32X_beLANDmac twitterOutlinerSuite.twitIt () /B,3?  -9 HT eq 00000001 SaveĔ00000002 Build RSS00000002 Countɽ00000002 Re-open 00000003 Twit-It!dVGeneva7c/NJ28E'  , 6B NZ gs x  + ?K S_ fr  background`lbuildRSS` callbacks`0 changeNotes`1` getSerialnum`Finit`Mmenu`x= openOutline`xopenOutlineFromWeb`~Wreopen`rightClickMenu` saveOutline`j scheduleTwit`statusCenterMessage`Vtesting`OtwitIt`" windowButtons` NGeneva28E28F|LANDmac This script runs in its own thread. loop //loop until the application quits Add your code here. thread.sleepFor (10) //sleep for ten seconds P.28EĤ ctenabledscript`բVGeneva 5tGeneva F 2 LANDmac on finalFilter (pta) pta^.renderedText = string.replace (pta^.renderedText, "[[title]]", "") return (true) ����������������������������� ���-����Geneva���������������������������� ��������������Eu �������2 LAND������mac ������������on firstFilter (adrPageTable) return (true) �����������������������*��[����Geneva���������������������������� ��������������Eu ���r���}�2'LAND������mac ������������on pageFilter (pta) if typeOf (pta^.template) == outlineType or typeOf (pta^.template) == wpTextType table.assign (@pta^.template, string (pta^.template)) if typeOf (pta^.template) == stringType and not pta^.indirectTemplate pta^.template = string.replace (pta^.template, "<title>", "[[title]]") html.addPageToGlossary (pta) return (true) �����������������������������������������������y���.���EF�������� ���� ��� ����$���0 ����; finalFilter������׃ firstFilter������؍ pagefilter������J��VGeneva���������������������������� �����������G�N��)�����������������������������������G������728F�������� ����url���!http://127.0.0.1/twitterOutliner/��VGeneva���������������������������� ������������A��'����������������������������n�����������������8H������VArial����������������������������� ������������������������������������������������n����������W����������������������space���/GIFfGIF89a�������!����,�������D�;��VArial����������������������������� ������������������������������������������������������������V��������������� ������� �������"�������+ ����0���: ����C���L ����Q���[ ����aalink���008000bgcolor���FFFFFFflRenderlink���0000FFspaceGif���spacetext���000000vlink���800080��VArial����������������������������� �������������������������������������������������d��������<��������Geneva���������������������������� ��������������F ������z�*LAND������mac ������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>{title} {metaTags ()} {bodyTag ()} {bodytext} dn8>VArial nFFFF000000060001001777AA000000000063000000001001710000001-76FF6FFE18000004800480626200-10626222FFFF01030000100000031000000010E840626222E048E000166266000020000001200000000E,#title "Home" 000400000009000000020100000500000009000000020100000600000032000000010C310FFFF0C00000 20 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001500000002393174393174000A0000001500000002626222626222000B00000005000000020000C00000013000000010369AF101000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĵ7 6%``7F  * 4@ HT [g q} #filters`S#ftpSite`2 #glossary`#images`Y#prefs` #template`A#tools`index`+VGeneva vOx?+` 28E28E j28D7:  9E ^j  :twitterOutlinerInfoXtwitterOutlinerNodeTypestwitterOutlinerRespondertwitterOutlinerRpcHandlers%twitterOutlinerSoapHandlersQtwitterOutlinerSuiteHtwitterOutlinerThreadtwitterOutlinerWebsitetwitterOutlinerWindowTypes-V Lucida GrandetN J%Geneva28Dˋf|LANDmac twitterOutlinerInfo author authorEmail description homePageUrl name releaseDate version twitterOutlinerNodeTypes twitterOutlinerResponder twitterOutlinerRpcHandlers twitterOutlinerSoapHandlers twitterOutlinerSuite twitterOutlinerThread twitterOutlinerWebsite twitterOutlinerWindowTypes ܄Z܄Z`܄Z`܄Z`܄Z`܄Z`܄Z`܄Z`܄Z܄Z܄Z܄Z܄Z܄Z܄Z܄ZYc Lucida Grande Lucida Grande oGeneva E Lucida Grande v6 Lucida Grande Lucida Grande