tag:blogger.com,1999:blog-7108023802720331512024-02-19T07:50:00.993-05:00FutureMacNews items, tutorials, opinions and speculation about the future of technology from Apple and othersAndrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-710802380272033151.post-3256027708396326012008-08-09T20:42:00.007-04:002008-08-09T21:11:14.575-04:00iPhone Location Blacklist Mystery SolvediPhone expert Jonathan Zdziarski recently discovered what he thought was a <a href="http://www.iphoneatlas.com/2008/08/06/iphone-can-phone-home-and-kill-apps/">remote killswitch for iPhone apps</a>: a blacklist located at <a href="https://iphone-services.apple.com/clbl/unauthorizedApps">https://iphone-services.apple.com/clbl/unauthorizedApps</a>. He thought it could be used "to disable applications that the user has already downloaded and paid for." However, Daring Fireball's John Gruber found out from a source that the list only serves to <a href="http://daringfireball.net/2008/08/core_location_blacklist">prevent malicious apps from accessing location information</a>.<br /><br />In order to test the blacklist out, I set up a DNS server on my Mac that pointed <code>iphone-services.apple.com</code> to my own web server. I then added the <code>unauthorizedApps</code> file in the <code>clbl</code> directory of my server. I switched the iPhone to use the DNS server on my Mac when on my WiFi network, and then tested the blacklist URL in Safari. It worked, so I tried modifying the file to block the Maps app from getting location info:<br /><div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:350px; height:200px; overflow:scroll;white-space:nowrap"><pre><code>{<br /> "Date Generated" = "2008-08-10 00:24:27 Etc/GMT";<br /> "BlackListedApps" = {<br /> "com.apple.Maps" = {<br /> "Description" = "Being really bad!";<br /> "App Name" = "Apple Google Maps";<br /> "Date Revoked" = "2004-02-01 08:00:00 Etc/GMT";<br /> };<br /> };<br />}</code></pre></div><br /><br />When I opened the Maps app and told it to find my location, it gave me the following error message:<br /><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG5lef6HKGkjMyhZVYmV_PFsl8-9N4Q1aKiWw8dQNisZqAEvW7wMdXAHenpgxRCmfGa8Bgvr5Y76qEtOHDDHDjsjmFlz5pY0twQggBLZ0PMNUxt0uQ65kpzeeNWqX52X0V4fTmeSAVR0A/s400/locationDenied.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5232687331790728818" /><br /><br />Otherwise, it worked normally. Once I removed the Maps app from the blacklist, it could find my location once again.Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com0tag:blogger.com,1999:blog-710802380272033151.post-49521231264240974532008-07-11T01:24:00.009-04:002008-07-11T02:11:37.968-04:00NetNewsWire to LaterLoopI have found a better way of saving NewNewsWire articles to read later in Safari on my desktop or iPhone:<br/><br /><a href="http://www.laterloop.com/">LaterLoop</a> is a site that allows you to add links to your reading list, then later easily view those links in your desktop or mobile browser. This is similar to <a href="http://www.instapaper.com/">Instapaper</a>, <a href="http://del.icio.us/">Delicious</a> (using a toread tag), etc.<br/><br />I like the interface better, however, because when you save a link, rather than opening a pop-up or redirecting you to a new page to save the link, the page simply flashes. This is a nice feature when using it in the browser, but it ends up being crucial to being able to use it within NetNewsWire.<br/><br />I hadn't realized this when I made an <a href="http://futuremacblog.blogspot.com/2008/03/improved-netnewswire-to-delicious.html">AppleScript script to save NNW articles to Delicious</a>, but NNW has the ability to run JavaScript "bookmarklets" located in the Scripts menu. Normally, you can take a bookmarklet such as LaterLoop's "Save for Later" bookmarklet, copy the address, paste it in a text file whose name ends in <code>.js</code>, and place it in NNW's Scripts folder (you can find this folder by clicking "Open Scripts Folder" from the Scripts menu in NNW). <br/><br />Unfortunately, NetNewsWire returns the homepage of the RSS feed as the current URL rather than the URL of the specific article. To correct this, I had to download and modify the LaterLoop script and bookmarklet so that they pull the actual URL of the article.<br/><br />To use my modified version, save this as <code>ll.js</code> and remember which directory you saved it in:<br /><div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:350px; height:200px; overflow:scroll;white-space:nowrap"><pre><code>(function(){<br /> __ll_u = 'http://www.laterloop.com/post/?key=' + document._ll;<br /> document._ll = '';<br /> function getFirstElementByClassName(tag, className, dom){<br /> var elems = dom.getElementsByTagName(tag);<br /> for (var i = 0; i < elems.length; i++) {<br /> var elem = elems[i];<br /> if (elem.className.indexOf(className) != -1) <br /> return elem;<br /> }<br /> return null;<br /> }<br /> function unescapeHTML(str, doc){<br /> var dom = doc || document;<br /> var div = dom.createElement('div');<br /> div.innerHTML = str;<br /> return div.childNodes[0].nodeValue;<br /> }<br /> function getGoogleReaderItem(){<br /> var page_url = null, page_title = null, source_title = '', do_save = false, is_google_reader = false;<br /> var google_reader = /\/\/www\.google\.com\/reader\/view/ig;<br /> var location = dom.getElementById('newsItemTitle').firstChild.getAttribute('href');<br /> var dom = window.document;<br /> if (location.match(google_reader)) { //if (page_url.indexOf('//www.google.com/reader') != -1) {<br /> is_google_reader = true;<br /> var current_item = dom.getElementById('current-entry');<br /> if (current_item) {<br /> var h2 = current_item.getElementsByTagName('h2');<br /> var link = getFirstElementByClassName('a', 'entry-original', current_item);<br /> var stream_title = getFirstElementByClassName('span', 'entry-source-title', current_item);<br /> var is_stream_title_and_not_shared_item = !stream_title.getElementsByTagName('img') || stream_title.getElementsByTagName('img').length == 0;<br /> if (stream_title) {<br /> if (is_stream_title_and_not_shared_item) {<br /> source_title = stream_title.innerHTML;<br /> }<br /> else {<br /> stream_title = getFirstElementByClassName('a', 'entry-source-title', current_item);<br /> source_title = stream_title.innerHTML;<br /> }<br /> }<br /> if (source_title == '') {<br /> stream_title = dom.getElementById('chrome-stream-title');<br /> if (stream_title) {<br /> stream_title = stream_title.getElementsByTagName('a');<br /> if (stream_title && stream_title.length) {<br /> source_title = stream_title[0].innerHTML;<br /> }<br /> }<br /> }<br /> if (h2.length && link) {<br /> page_title = unescapeHTML(h2[0].innerHTML, dom);<br /> page_url = link.href;<br /> source_title = unescapeHTML(source_title, dom);<br /> }<br /> }<br /> }<br /><br /> if (page_url && page_title && page_url != '' && page_title != '') {<br /> do_save = true;<br /> }<br /><br /> return {<br /> is_google_reader: is_google_reader,<br /> do_save: do_save,<br /> url: page_url,<br /> title: page_title,<br /> source: source_title<br /> };<br /><br /> }<br /> var google_reader_item = null;<br /> try {<br /> google_reader_item = getGoogleReaderItem();<br /> }<br /> catch(x) {}<br /><br /> __ll_w = window;<br /> __ll_d = __ll_w.top.document;<br /> __ll_e = encodeURIComponent;<br /><br /> var do_save = true;<br /> var do_fade = true;<br /><br /> if (google_reader_item && google_reader_item.is_google_reader) {<br /> if (google_reader_item.do_save) {<br /> var referrer = 'http://www.google.com/reader/view/#bkml1';<br /> __ll_u += '&title=' + __ll_e(google_reader_item.title) + '&url=' + __ll_e(google_reader_item.url) + '&via=' + __ll_e(referrer) + '&greader=1&source_title=' + __ll_e(google_reader_item.source) + '&src=wk&v=1&fmt=js&t=' + (new Date().getTime());<br /> do_fade = false;<br /> }<br /> else {<br /> alert('LaterLoop could not identify which item is currently selected. Please click on a story and try again.')<br /> do_save = false;<br /> }<br /> }<br /> else {<br /> __ll_u += '&title=' + __ll_e(__ll_d && __ll_d.title.replace(/^\[(Saving...|Saved)\]\s/, '') || '') + '&url=' + __ll_e(__ll_d.getElementById('newsItemTitle').firstChild.getAttribute('href')) + '&via=' + __ll_e(__ll_d.referrer) + '&src=wk&v=1&fmt=js&t=' + (new Date().getTime()); <br /> }<br /><br /> if (do_save) {<br /> __ll_e = document.createElement('script');<br /> __ll_e.setAttribute('type', 'text/javascript');<br /> __ll_e.setAttribute('charset', 'UTF-8');<br /> __ll_e.setAttribute('src', __ll_u);<br /><br /> document.body.appendChild(__ll_e);<br /> }<br /><br /> var __ll_ID = 'laterloop-overlay-shadow';<br /> var shadow = document.getElementById(__ll_ID);<br /> if (shadow) {shadow.parentNode.removeChild(shadow);}<br /> shadow = document.createElement('div');<br /> shadow.id = 'laterloop-overlay-shadow';<br /> shadow.style.opacity = "0.0";<br /> shadow.style.MozOpacity = shadow.style.opacity;<br /> shadow.style.top="0";<br /> shadow.style.left="0";<br /> shadow.style.width="100%";<br /> shadow.style.height="100%";<br /> shadow.style.display="block";<br /> shadow.style.position="fixed";<br /> shadow.style.backgroundColor="#fff";<br /> shadow.style.zIndex = "99997";<br /> shadow.onclick=function() {this.style.display='none';};<br /> document.body.appendChild(shadow);<br /> function fadeIn(obj, max, current) {<br /> if (!current) {<br /> current = 0.1;<br /> }<br /> else {<br /> current = Math.min(current+0.15, 1);<br /> }<br /> obj.style.opacity = current;<br /> obj.style.MozOpacity = shadow.style.opacity;<br /> if (current < max) {<br /> setTimeout(function() {fadeIn(obj, max, current);}, 15);<br /> }<br /> else {<br /> setTimeout(function() {document.__ll_elapsed=true;}, 500);<br /> }<br /> }<br /> document.__ll_elapsed=false;<br /> if (do_save && do_fade) {<br /> fadeIn(shadow, 0.7);<br /> }<br /> if (!do_save) {<br /> setTimeout(function() {<br /> document.title = document.title.replace(/^\[(Saved|Saving...)\]\s/, '');<br /> }, 500);<br /> }<br /> })();<br /></code></pre></div><br />Then save this bookmarklet to NNW's Scripts folder with a name ending in <code>.js</code>:<br /><div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:350px; height:40px; overflow:scroll;white-space:nowrap"><pre><code>javascript:void((function(){var%20d=document;var%20h='file:///Users/andrew/';d._ll='KNsDvhqgrfcpJBmWtjfe';try{var%20e=d.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src',h+'ll.js');d.body.appendChild(e);}catch(x){e=encodeURIComponent;w=window;qs='&key='+d._ll+'&title='+e(d.title||'')+'&url='+e(d.getElementById('newsItemTitle').firstChild.getAttribute('href'))+'&via='+e(d.referrer)+'&fmt=html&src=wk&v=1&t='+(new%20Date().getTime());u=h+'/post/?'+qs;w.top.location.assign(u);return;}s='[Saving...]%20';d.title=s+d.title.replace(s,'');})());<br /></code></pre></div><br />You will need to replace <code>file:///Users/andrew/</code> with the path to the directory in which you saved <code>ll.js</code>.<br/><br />For this script to work, you will also need to select <span style="font-weight:bold;">Enable JavaScript</span> under NNW preferences > Browsing > News Items. The script should show up in the scripts menu, where you can click it to save the current article to LaterLoop (assuming you are logged in). To make this even more convenient, you can easily add a keyboard shortcut to this script. Go to System Preferences > Keyboard & Mouse > Keyboard Shortcuts, press the + button to add a new shortcut, select NetNewsWire as the application, type in the filename of your script as the Menu Title, and assign whatever keyboard shortcut you want. I assigned it to Cmd-1, which is the keyboard shortcut I use for the LaterLoop bookmarklet in Safari.<br/><br />Now I can press Cmd-1, and the current article flashes to let me know it's been saved to LaterLoop.<br/><br />Here's a <a href="http://www.screencast.com/t/HRTJrtqH91" target="_blank">brief video of it in action</a> (this video would only play in Firefox for me).<br/><br />You might be thinking, why couldn't I use this technique with Delicious or Instapaper (the other two services I've tried)? Well, the Delicious bookmarklet doesn't seem to do anything in NNW, and the Instapaper bookmarklet replaces the article's text with "Saved", then closes NNW. However, I'm sure there are other services out there that will work with the technique I've described, so if you are using another service you may want to try it out using your existing bookmarklet.<br/><br />This system works very well, but the one other thing I would really like to be able to do would be to view my unread LaterLoop links in NNW. LaterLoop does in fact publish an RSS feed of your links, but they a.) Include links you've already read and b.) limit the number of links in your feed to 30.<br/><br />As an aside, the NetNewsWire style you see in the video is called <a href="http://cameron.io/project/bullit">Bullit</a>.Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com1tag:blogger.com,1999:blog-710802380272033151.post-65850028313889619492008-03-18T00:42:00.021-04:002008-04-03T09:32:11.130-04:00Improved NetNewsWire to del.icio.us AppleScriptLarry from <a href="http://scriptingforlawyers.com/">ScriptingForLawyers.com</a> has submitted a much-improved version of the NetNewsWire to del.icio.us script. His version uses the cURL terminal command to post to del.icio.us in the background, so it works without the help of Safari or Firefox. It asks you for your username and password the first time you run the script, then stores it to a preference file thereafter. Furthermore, it includes error handling to alert you if your NetNewsWire headline did not post correctly.<br /><br />Here's the improved script:<div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:350px; height:200px; overflow:scroll;white-space:nowrap"><pre><code><br />property usernamePasswordString : ""<br />property tagsString : ""<br /><br />on run<br /> checkUsernameAndPassword()<br /> postToDelicious()<br />end run<br /><br />on postToDelicious()<br /> tell application "NetNewsWire"<br /> if exists selectedHeadline then<br /> set u to "\"?&url=" & (URL of selectedHeadline) & ¬<br /> "&description=" & (title of selectedHeadline) & ¬<br /> "&tags=" & tagsString & "\""<br /> set curlStatement to "/usr/bin/curl -u " & usernamePasswordString & " -d " & u & " https://api.del.icio.us/v1/posts/add"<br /> set retValue to do shell script curlStatement<br /> if retValue contains "wrong" then<br /> display dialog "Headline did not post to del.icio.us. Something went wrong."<br /> end if<br /> else<br /> display dialog "Please select a headline to post to del.icio.us"<br /> end if<br /> end tell<br />end postToDelicious<br /><br />on checkUsernameAndPassword()<br /> -- Check to see if the file where our username and password are stored exists<br /> try<br /> do shell script "cd " & POSIX path of (path to preferences as text) & "; ls | grep com.larrystaton.toread.txt"<br /> try<br /> set prefFile to ((path to preferences as text) & "com.larrystaton.toread.txt")<br /> open for access file prefFile with write permission<br /> set prefs to read file prefFile using delimiter {return}<br /> close access file prefFile<br /> set usernamePasswordString to item 1 of prefs<br /> set tagsString to item 2 of prefs<br /> on error e<br /> close access file prefFile<br /> end try<br /> on error<br /> set username to text returned of (display dialog "Please enter your del.icio.us username" default answer "username")<br /> set pass to text returned of (display dialog "Please enter your del.icio.us password" default answer "password")<br /> set tags to text returned of (display dialog "Please enter any desired default tags" default answer "toread ")<br /> try<br /> set prefFile to ((path to preferences as text) & "com.larrystaton.toread.txt")<br /> open for access file prefFile with write permission<br /> set eof of file prefFile to 0<br /> write username & ":" & pass & {return} & tags to file prefFile<br /> close access file prefFile<br /> on error e<br /> close access file prefFile<br /> end try<br /> set usernamePasswordString to username & ":" & pass<br /> set tagsString to tags & " "<br /> end try<br />end checkUsernameAndPassword</code></pre></div><br /><br />[Update: Larry and I have improved the script even further to fix a bug with the preference file, and to add a prompt to ask you your desired default tags the first time the script is run. If you want to later change your username/password or default tags, just trash the preference file named <code>com.larrystaton.toread.txt</code> in your <code>~/Library/Preferences/</code> folder, and it will ask you again for this information the next time the script is run.]<br /><br />[Update 2: As Mario pointed out in the comments, the script would get into trouble when the default tag was left completely blank (it would ask for your username/password/default tag every time). The new version of the script avoids this problem by inserting a space after the default tags. I simply changed <code>set tagsString to tags</code> to <code>set tagsString to tags & " "</code>.]Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com8tag:blogger.com,1999:blog-710802380272033151.post-80230470341621785572008-03-15T22:49:00.015-04:002008-03-19T00:53:51.391-04:00NetNewsWire to del.icio.us with "toread" tag using Applescript[Update: Check out a <a href="http://futuremacblog.blogspot.com/2008/03/improved-netnewswire-to-delicious.html">much-improved version of this script</a> submitted by Larry of <a href="http://scriptingforlawyers.com/">ScriptingForLawyers.com</a>.]<br /><br />I've modified existing NetNewsWire to del.icio.us Applescripts to save the currently-selected news item to del.icio.us with the tag "toread". You can easily change this tag to whatever tag you use to mark items you wish to read later on.<br /><br />The script works by running JavaScript in Safari that opens a pop-up window that sends your URL and tags to del.icio.us and then closes that window. Currently, I have the window set to stay open for 0.5 seconds (<code>delay 0.5</code>), but you can adjust this if it wasn't enough time.<br /><br />To adjust the tags that are sent to del.icio.us, edit the line containing <code>"&tags=toread " & (subject of selectedHeadline)</code>. You can set multiple preset tags by separating them with spaces. For instance, to add tags "readlater" and "for:user1234", change this line to <code>"&tags=readlater for:user1234 " & (subject of selectedHeadline)</code>. If you don't want the subject(s) of the new item to be added to the tags, simply remove <code>& (subject of selectedHeadline)</code>.<br /><br /><div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:420px; height:100px; overflow:scroll;white-space:nowrap"><pre><code>tell application "NetNewsWire"<br /> set u to (title of selectedHeadline) & ¬<br /> "&url=" & (URL of selectedHeadline) & ¬<br /> "&tags=toread " & (subject of selectedHeadline)<br />end tell<br /><br />tell application "Safari"<br /> do JavaScript "javascript:void(open('https://api.del.icio.us/v1/posts/add?description=" & u & "','delicious','toolbar=no,width=150,height=100'));" in document 1<br /> delay 0.5<br /> close current tab of front window<br />end tell</code></pre></div><br /><br />I personally run this script using a Trigger in QuickSilver.Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com5tag:blogger.com,1999:blog-710802380272033151.post-74194710346866557772008-02-19T20:33:00.013-05:002008-03-19T00:55:10.974-04:00Links for Future of Computer Interfaces<div>Here are some interesting links about the future of human-computer interfaces.</div><br /><div><br /> <strong>Multitouch Interfaces</strong><br /> <ul><br /> <li><a href='http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9058841'>Replacing mice with touch screens</a></li><br /> <li><a href='http://www.macrumors.com/2008/02/19/apple-depicts-advanced-multitouch-gesturing-control-panel-in-mac-os-x/'>Multitouch Gesturing Control Panel in Mac OS X (Patent)</a></li><br /> <li><a href='http://www.engadget.com/2008/02/19/apple-patent-hints-at-advanced-multitouch-features-iphone-cop/'>More on Multitouch Gesturing Control Panel in Mac OS X</a></li><br /> <li><a href='http://gizmodo.com/338502/magic-cube-heralds-the-future-of-gaming-and-human-interfaces'>Magic Cube Interface</a></li><br /> <li><a href='http://www.appleinsider.com/articles/08/02/21/mega_apple_filing_details_next_gen_multi_touch_input_surface.html'>An Apple multi-touch patent</a></li><br /> </ul><br /> <strong>Motion Tracking</strong><br /> <ul><br /> <li><a href='http://www.cs.cmu.edu/~johnny/projects/wii/'>Johnny Chung Lee's Wii Projects</a></li><br /> <li><a href='http://www.pramnos.com/story69-2390.html'>3D interface with Compiz Fusion</a></li><br /> <li><a href='http://www.ps3fanboy.com/2008/02/01/developer-makes-desktop-vr-application-for-ps-eye/'>VR with PS Eye</a></li><br /> <li><a href='http://www.engadget.com/2008/02/19/gesture-controlled-robot-is-at-your-service/'>Gesture-controlled robot</a></li><br /> <li><a href='http://en.wikipedia.org/wiki/OpenCV'>OpenCV, Intel's library for gesture recognition, motion tracking, and more</a></li><br /> <li><a href='http://danielbaggio.blogspot.com/2008/01/webcam-opengl-opencv-head-tracking.html'>3D Environment with OpenCV, OpenGL, and a Webcam</a></li><br /> <li><a href='http://kotaku.com/358978/playstation-eye-tank-war-demo-is-next-gen-tech'>Allowing objects drawn on paper to be used in a game</a></li> </ul><br /> <strong>Other</strong><br /> <ul><br /> <li><a href='http://news.bbc.co.uk/2/hi/technology/7254078.stm'>Mind Control for Gaming</a></li><br /> <li><a href='http://www.dailytech.com/OCZ+Prepares+to+Ship+300+Brain+Mouse/article10929.htm'>Mind Control for Gaming (Cont.)</a></li><br /> <li><a href='http://news.yahoo.com/s/afp/20080303/tc_afp/lifestylejapantechnology'>Controlling an iPod with a wink</a></li><br /> </ul><br /></div>Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com0tag:blogger.com,1999:blog-710802380272033151.post-49299742317282422682008-01-30T15:54:00.002-05:002008-03-19T00:55:20.052-04:00Firefox on the iPhone?<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KSGlIiHMaa4fZbTrH7G7OCgJSPCZmZNXuki7s1IKKAsVyueYk0xLN7VNjsRjtySYwDv9kratWIt5g_lyKHi5vtPc_up8-7XcfWy7Ez0KND-O-x_7TwHth-jz3fSbGU67MPiXRJPbmhU/s1600-h/Picture+7.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KSGlIiHMaa4fZbTrH7G7OCgJSPCZmZNXuki7s1IKKAsVyueYk0xLN7VNjsRjtySYwDv9kratWIt5g_lyKHi5vtPc_up8-7XcfWy7Ez0KND-O-x_7TwHth-jz3fSbGU67MPiXRJPbmhU/s400/Picture+7.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5161377745740858098" /></a><br />Here's a mockup of what a version of Firefox for the iPhone might look like. While Mozilla has not yet announced whether they will port this to the iPhone, they are working on a <a href="http://wiki.mozilla.org/Mobile/">mobile version of Firefox</a> for both touch-screen and regular smart phones. They have stated that they will be supporting Windows Mobile and Linux devices, and that "support for other Platforms may be added in the future." A working UI mockup of Mobile Firefox can be <a href="http://wiki.mozilla.org/Mobile/UI/Designs/TouchScreen#Mockup">downloaded and run</a> through Firefox.<div><br /></div><div>It is pretty evident that the Mobile Firefox team was inspired by Mobile Safari on the iPhone in their UI design. An iPhone version of Firefox would bring two things to the iPhone: 1) Extensions such as Adblock and Greasemonkey, and 2) Support for <a href="http://developer.mozilla.org/en/docs/The_Joy_of_XUL">XUL</a>, which could be used to create web applications.</div>Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com1tag:blogger.com,1999:blog-710802380272033151.post-63198514729693705322008-01-27T17:20:00.000-05:002008-01-30T01:05:32.483-05:00XMPP for Push Services<div>Matt Tucker writes on <a href="http://www.jivesoftware.com/community/blogs/jivetalks/2008/01/24/xmpp-aka-jabber-is-the-future-for-cloud-services">Jivesoftware.com</a> about using XMPP (also known as Jabber) for push-based cloud services. The idea is that, rather than having the client software poll the service at a regular interval, which wastes resources, the server will <span class="Apple-style-span" style="font-style: italic;">push</span> updates to the client as they become available. While this has always been the desired way to update clients, with HTTP it is not easy to set a push system up. </div><br /><div>Using the XMPP protocol, originally developed for instant messaging, one could develop an e-mail client that is set up as a subscriber in an XMPP connection. The server would send new e-mails to the client as XML fragments in the data stream.</div><br /><div>A number of XMPP-related projects are hosted at <a href="http://www.igniterealtime.org/">Ignite Realtime</a>. These projects include <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">OpenFire</a>, an XMPP-based IM server, <a href="http://www.igniterealtime.org/projects/spark/index.jsp">Spark</a>, an XMPP-based IM client, <a href="http://www.igniterealtime.org/projects/smack/index.jsp">the Smack API</a>, a Java XMPP API, and the <a href="http://www.igniterealtime.org/projects/xiff/index.jsp">XIFF API</a>, a Flash XMPP API. <a href="http://today.java.net/pub/a/today/2006/10/05/instant-messaging-for-jabber-with-smack.html">Java.net</a> has an interesting write up (including examples) of Smack.</div>Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com0tag:blogger.com,1999:blog-710802380272033151.post-53721415628178763692008-01-19T04:06:00.000-05:002008-01-30T01:11:14.118-05:00iPhone Web Clip Bookmark IconsYou can easily give your site a custom icon when it is added to the iPhone's home screen as a WebClip bookmark. According to Apple's <a href="http://developer.apple.com/iphone/devcenter/designingcontent.html">iPhone Dev Center</a> just create a 57 x 57 pixel PNG image, name it <span style="font-family:courier new;"><span class="Apple-style-span">apple-touch-icon.png</span></span>, and place it in the root directory of your web site.<br /><br />If you want to set a specific icon for a web page, add a customized version of the following line to your page's <span style="font-family:courier new;">head</span> element:<br /><span style="font-family:courier new;"><br /><link rel="apple-touch-icon" href="/customIcon.png"></span><br /><br />What should you do if your favorite site has not yet created an icon? Peter Zich has created a bookmarklet that allows you to enter the URL of your desired icon for any site. First, create a bookmark in Safari on your Mac (or any other bookmark database that syncs with the iPhone), give it an appropriate name ("Set Icon"), and overwrite the URL with the following Javascript, from <a href="http://pz2.ucls.uchicago.edu/webclipIcons.js">Peter Zich's site</a>:<br /><br /><div style="margin-left: 20px; margin-top:10px; margin-bottom:10px; padding: 5px; border:1px solid; width:420px; height:100px; overflow:scroll;white-space:nowrap"><pre><code>javascript:var isThere=-1;var theURL=window.prompt("Enter URL of Webclip image (57x57px png):","http://");var html_head=document.getElementsByTagName('head').item(0);var all_Links=html_head.getElementsByTagName('link');for(var i=0;i<all_Links.length;i++){if(all_Links.item(i).getAttribute('rel')=='apple-touch-icon'){isThere=i;}}if(isThere<0){theLink=document.createElement('link');theLink.setAttribute('rel','apple-touch-icon');theLink.setAttribute('href',theURL);html_head.appendChild(theLink);}else{if(window.confirm("Custom webclip icon was found on site, overwrite?")){all_Links.item(isThere).setAttribute('href',theURL);}}</code></pre></div><br /><br />An alternative version of the script, also available on his site, lets you automatically prepend the common part of your image URLs. On his version, it prepends <span class="Apple-style-span" style="font-family:courier new;">http://pz2.ucls.uchicago.edu/webclipIcons/</span>, where a number of bookmark icons are available to use.Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com1tag:blogger.com,1999:blog-710802380272033151.post-39184937019306090072008-01-12T15:35:00.000-05:002008-01-30T01:01:24.411-05:00WiMAX in Apple Laptops Starting Tuesday?<span class="Apple-style-span" style="font-size:small;">It has been </span><a href="http://valleywag.com/tech/rumormonger/can-apple-save-wimax-344015.php"><span class="Apple-style-span" style="font-size:small;">widely speculated</span></a><span class="Apple-style-span" style="font-size:small;"> that Apple may build WiMAX technology, </span><a href="http://www.intel.com/technology/wimax/index.htm"><span class="Apple-style-span" style="font-size:small;">provided by Intel</span></a><span class="Apple-style-span" style="font-size:small;">, into upcoming laptops. Interestingly enough, Steve Job's Macworld keynote on Tuesday coincides with </span><a href="http://www.nytimes.com/idg/IDG_002570DE00740E18002573CD00048CD3.html?ref=technology"><span class="Apple-style-span" style="font-size:small;">the date Sprint has announced</span></a><span class="Apple-style-span" style="font-size:small;"> to "</span><span class="Apple-style-span" style="line-height: 22px; "><span class="Apple-style-span" style="font-size:small;">begin offering mobile Internet business agreements for... WiMAX network access".</span></span><div><span class="Apple-style-span" style="line-height: 22px; "><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">WiMAX will p</span><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">rovide users with a ubiquitous broadband internet connection. Sprint, for instance, previously promised to </span></span><a href="http://www2.sprint.com/mr/news_dtl.do?id=16761"><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">provide coverage to 85% of the continental US</span></span></a><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">. They have since backed off from this promise because their deal with Clearwire to provide support for rural areas </span></span><a href="http://www.infoworld.com/article/07/11/12/Sprint-hints-at-cutback-on-ambitious-nationwide-WiMax-rollout_1.html"><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">fell through</span></span></a><span class="Apple-style-span" style=" "><span class="Apple-style-span" style="font-size:small;">, but if devices supporting WiMAX become popular, the </span><span class="Apple-style-span" style="font-size: small;">fi</span></span><span class="Apple-style-span" style="font-size: small;">nancial</span><span class="Apple-style-span" style="font-size:small;"> incentive to build out this network could make 85% coverage a reality.</span></span></span></div><div><span class="Apple-style-span" style="line-height: 22px;"><br /></span></div><div><span class="Apple-style-span" style="line-height: 22px;"><span class="Apple-style-span" style="font-size:small;">Intel also plans to </span><a href="http://www.intel.com/technology/wimax/products.htm?iid=tech_wimax+body_products"><span class="Apple-style-span" style="font-size:small;">provide WiMAX chipsets</span></a><span class="Apple-style-span" style="font-size:small;"> for "a wide range of consumer devices such as Mobile Internet Devices [and] PDAs", providing the possibility for future iPhones to include a WiMAX chipset.</span></span></div>Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com0tag:blogger.com,1999:blog-710802380272033151.post-32997207405345641602008-01-12T14:33:00.000-05:002008-01-27T17:16:39.163-05:00First PostWelcome to my blog. I am a Computer Engineering and Computer Science student at Northeastern University. This blog will act as a platform to express my ideas and opinions regarding topics that interest me. I will be posting interesting news items, tutorials, opinions and speculation. Topics I will be writing about include computer hardware and software (primarily Apple's), Web technologies, gadgets (including mobile phones such as the iPhone), video gaming, and the future of technology. <div><br /></div><div>I have been a Mac user for 15 years, a Linux user for 3 years (primarily as a server), and am also pretty experienced with Windows. I have been doing Web development for 6 years, and contributed primarily to the Flash, Flex, and Silverlight chapters in <a href="http://www.deitel.com/">Deitel's</a> <a href="http://www.deitel.com/books/iw3htp4/">Internet & World Wide Web, 4/e</a> as an intern this summer. I also have some experience programming in Objective-C, C++ and Java on Mac OS X and Linux.</div><div><br /></div><div>Future posts will not be nearly as centric on myself, but I figure it is useful for readers to know my background.</div>Andrew Fadenhttp://www.blogger.com/profile/05426249474722922100noreply@blogger.com0