Tuesday, December 29, 2009

Facebook Makes Search Engine Friendly Note URLs

Maybe they’ve been doing this for awhile, but it’s the first time I noticed
it.

href="http://www.facebook.com/notes/navarr-barnier/she-knows-my-best-and-my-worst/222268802110">facebook.com/notes/navarr-barnier/she-knows-my-best-and-my-worst/222268802110


Notice how it has my name, the note title, and then the ID at the end?  By the way, that
ID is the only thing Facebook cares about in the entire URL.  This exact same link works and points
to the exact same note:

href="http://www.facebook.com/notes/good-day-sir/i-am-a-homosexual/222268802110">facebook.com/notes/good-day-sir/i-am-a-homosexual/222268802110


Just thought it was interesting, and I hadn’t seen it mentioned anywhere before.  So I
thought I’d take a moment to point it out.  It’s probably good information for brands who are
trying to get their Facebook Pages indexed by Google, they can customize the URL to their notes however they
want to when they link to them from their websites (If any brand in the entire world does this, anyway).

Tuesday, December 15, 2009

Settings Needed on Twitter

  • The ability to block someone from showing up in your timeline, but
    not block them from following you.
  • The ability to allow users to send you DMs, even if
    they’re not following you (and block them from doing so on an individual basis).
  • The
    ability to see all @replies from your friends – I WANT THIS BACK

That is all.

Hunting Down the Bugs – TwCLI on Chrome for Linux Beta

This is the first post of a new series, looking at some of the odder
bugs encountered while developing for the expanding Web, no matter how basic a bug it may be.


Thanks to twitter user @paperfairy,
a bug was discovered on my Command Line Twitter Client, href="http://twcli.koneko-chan.net/" rel="me">TwCLI.

For some reason, when
submitting a command in Chrome for Linux, the page would simply refresh, and the command would never be
sent.  At first, I had no possible way to track down this bug.  I didn’t have a linux box
(with a GUI, anyway) so I simply told him that it was unfortunate, but it’d have to stay a bug. 
Until a rel="nofollow">recent post on lifehacker brought my attention to href="http://lifehacker.com/5195999/portable-ubuntu-runs-ubuntu-inside-windows">Portable Ubuntu.
I immediately installed it, opened up the Chrome website in Firiefox, installed Chrome Beta, and headed over
to TwCLI to see what was amiss.

Of course, it was a single line in a detection script to
send Geo-Data to Twitter (as long as the user approved it, of course):

style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom:
4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%;
padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr;
max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right:
silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
else             style="color: #0000ff">if(google.gears) {




This
single line was throwing an exception I hadn’t encountered in other browsers – Google wasn’t defined. 
Oddly, I thought it would handle that properly, since google wasn’t defined, it would just skip over it, but
instead it threw an error and halted all further javascript code.



The
fix was simpler than tracking down the bug, I simply had to add this to the start of the javascript code:



style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom:
4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%;
padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr;
max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right:
silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">

try{ if(!google)
{ google = 0; } } catch(err) { google = 0; }






And
voila, I had both a check for google, and a catch if it decided to throw errors while checking for it.



Whether
this is a Chrome bug or not, I don’t know – I simply don’t know enough about JavaScript in order to say so
either way.  But, are undefined variables supposed to throw errors, or are they simply supposed to
return false?

Friday, December 11, 2009

JavaScript & CSS3 Lightbox

src="http://gist.github.com/254614.js?file=css3_lightbox.js">


Usage:


  • Call createLightbox(); to create the actual lightbox element (does
    not display anything).

  • Call fillLightbox(string
    content) to fill the lightbox with RAW HTMLor

    Call
    appendLightbox(element childElement)
    to append a DOM Node directly into the lightbox.

  • Call setLightboxSize(int
    width, int height, null, string unit) to set
    the width and height of the lightbox.  Unit will default to pixels “px” if not specified.


  • Call showLightbox() to actually display the lightbox to the user.


  • Call boolean lightboxVisible() to determine if
    the lightbox is still visible or not.

  • Call hideLightbox()
    to remove the lightbox from view.

  • Call cleanLightbox()
    to delete all content inside the lightbox container.

Thursday, December 10, 2009

Quickly Romanize Japanese using Google Translate

style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top:
0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image"
src="http://tech.gtaero.net/wp-content/uploads/2009/12/image_thumb.png" width="504" height="284" />

For those starting to learn Japanese, you may be stuck trying to figure out how to
pronounce some new Kanji you just found (at least, in their current sentence).  Normally, you’d
have to look in a Jisho (Dictionary) and try to figure out how they might be modified in their current form. 
Luckily, Google Translate is much, much more helpful.

Just plug in the Japanese, tell it
to translate from Japanese to Japanese, and then click the “Show Romanization” button and voila! 
You have instant Romanization of your unknown kanji.  Of course, in order for you to make use of
Google’s output, you might need to know some language constructs.

For example, in the
image above we see Google says “Ganba~tsu te” where we had “頑張って.”  Knowing how っ works, we’re able
to deduce that Google meant Ganbatte.

Wednesday, December 9, 2009

5 Top Publishers Plan Rival to Kindle Format, Ignore Existence of PDF

Five of the nation's largest publishers of newspapers and
magazines are teaming up to challenge Amazon.com Inc.'s Kindle electronic-book reader with their own
technology that would display in color and work on a variety of devices.
- Ryan
Nakashima, The
Washington Post
.

As I’m sure you all know by
now; I am a coder above all else.  With this one piece of data, you should know there are two
things I despise in this entire world:

  • Flash and

  • PDF

Why?  Because they’re closed off, proprietary, and
quite frankly a bitch to deal with on computers.  However, that doesn’t stop me from advocating
their use for WHAT THEIR ACTUAL PURPOSE is (or, in the case of flash – should be).

So, it
should come as only a slight surprise that I’m incredibly agitated over these new formats.  You’re
creating “book” file formats that will “display in color” and “work on a variety of devices.”  Huh,
isn’t there already a format specifically for publications, made to work on any multitude of devices? 
Let’s see, oh, right Portable
Document
Format
– A
file format made SPECIFICALLY to render the same way on any device.

Kudos, Publishers –
You’ve just re-invented the wheel.

Thursday, December 3, 2009

I’m sorry but we need government

href="http://protoblogger.com/2009/12/03/im-sorry-but-we-need-government/">by Dave Winer on Protoblogger

/>When I was coming of age, in the time of Watergate and Vietnam, like many others I was so fed up with
government, that I came to believe that we needed to fuck up the government so it could stop fucking with
us. The United States was bad, that’s what we thought, and there was a lot of justification for that point
of view. I voted for Reagan, as a lot of other people did, because he said what we believed. Let’s get on
with doing our thing, and keep the government from screwing up. Of course it turns out that isn’t what
Reagan was doing, he was just saying that to get our votes. Figures.

LOL @ 1984

style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top:
0px; margin-right: auto; border-right: 0px" title="Cadets listen to the President Barack Obama's
speech at the U.S. Military Academy at West Point in West Point, N.Y., Dec. 1, 2009. (Official White House
Photo by Pete Souza) This official White House photograph is being made available only for
publication by news organizations and/or for personal use printing by the subject(s) of the photograph. The
photograph may not be manipulated in any way and may not be used in commercial or political materials,
advertisements, emails, products, promotions that in any way suggests approval or endorsement of the
President, the First Family, or the White House. " border="0" alt="Cadets listen to the President Barack
Obama's speech at the U.S. Military Academy at West Point in West Point, N.Y., Dec. 1, 2009.
(Official White House Photo by Pete Souza) This official White House photograph is being
made available only for publication by news organizations and/or for personal use printing by the subject(s)
of the photograph. The photograph may not be manipulated in any way and may not be used in commercial or
political materials, advertisements, emails, products, promotions that in any way suggests approval or
endorsement of the President, the First Family, or the White House. "
src="http://tech.gtaero.net/wp-content/uploads/2009/12/4153678305_0d253070f7_o11.jpg" width="454"
height="305" />

Look, I’m not going to play the political game here – I LOVE
Obama and even though I don’t agree with his recent decision on the Afghan War will continue to support him
– but seriously, giving your speech at a Military Academy?  I couldn’t have possibly kept myself
from commenting on how funny it is that almost your entire audience is dressed nearly IDENTICALLY.


How can you not compare this event to the 1984 stereotype?

For reference, the
Apple 1984 Commercial (remake):

id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:61bb014e-df5f-4734-b04a-5baf5896391f"
class="wlWriterEditableSmartContent">
name="movie" value="http://www.youtube-nocookie.com/v/BxShzoUjiAQ&hl=en_US&fs=1&rel=0&hd=1"> name="allowFullScreen" value="true"> src="http://www.youtube-nocookie.com/v/BxShzoUjiAQ&hl=en_US&fs=1&rel=0&hd=1"
type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480"
height="385">

Tuesday, December 1, 2009

Word 2010 Blogging

Toying around with the interface for publishing blog posts in Microsoft Word
2010 Beta.

src="http://tech.gtaero.net/wp-content/uploads/2009/12/120109_2055_Word2010Blo1.png" alt=""/>

It truly is fascinating, but I don't think it'll manage to replace Windows Live Writer,
which definitely has a much better, and more blog-specific user interface.

Sunday, November 29, 2009

Google Voice OMS Code on Github

I pushed the 子猫ちゃん Google Voice OMS service’s code to github, so you can now
download it – albeit, to make it work it’ll take a lot of hacking and a lot more editing.

Either
way, I’ve gotten no donations and no offers for free SSL hosting, so it looks like this project just will
not be seeing the light of day.  It’s a shame, I worked a long time to make it work, and it’s
obviously something a lot of business professionals would be able to find a use for.

Oh
well, you can find the project on github.


Remember to abide by the Usage License!

Thursday, November 26, 2009

Why I now Prefer JSON to RSS/XML

This might mainly be a “call-out” to Dave Winer, since he is continually
attempting to push RSS for all sorts of data that should be inherited around the web – although, he has
stated before that he likes JSON – I think – My memory is not so good, even my girlfriend has been
complaining about it.

Either way, I’m just going to take a small amount of time here to
list why I no longer like XML and RSS for portable data.

It’s too low-level.


XML and RSS are a markup language, of course.  It’s very low-level code, and is generally
a pain to parse in any language.  Which is why I prefer JSON.


It’s high-level code.

JSON is a very simple object – It’s basically an array of
data.  Here is some XML vs. JSON:

XML


style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<data            style="color: #0000ff">>




 <user id="876232">




 <name>User Name            style="color: #0000ff"></name            style="color: #0000ff">>




 <screenName>User            style="color: #0000ff"></screenName            style="color: #0000ff">>




 </user>




</data>




JSON



style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom:
4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%;
padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr;
max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right:
silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">

"user":[            style="color: #006080">"id":876232,"name":            style="color: #006080">"User Name","screenName":            style="color: #006080">"User"]






Even
though you can get similar results by making id its own tag in the XML, its still difficult to parse. 
Where as with JSON, the data is already formatted and easily accessible.  Especially in my favorite
language, PHP.



id="codeSnippetWrapper">

// For Json




 $json = json_decode($data,TRUE); // Decodes JSON
and makes it a true array



style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%;
padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr;
border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible;
padding-top: 0px"> $id = $json["user"][ style="color: #006080">"id"];



 $name = $json["user"][            style="color: #006080">"name"];




// For XML




 $xml = new SimpleXML($data);




 $id = $xml->user["id"];




 $name = $xml->user->name;






The
two are very close, but in the end JSON is more simplistic – because its such a high-level language.

Wednesday, November 25, 2009

Google Voice in Outlook

EDIT: I managed to bring this into being thanks to other
people generously letting it run on their servers (though unfortunately I can't vouch for the security).
 You can check it out at http://www.gvoms.com.
Additionally,
I've also made the source code available over at https://github.com/navarr/Google-Voice-OMS

If
you’re a regular reader to my blog, I’m sure you read yesterday’s post about how href="http://tech.gtaero.net/2009/11/how-google-voice-could-gain-a-head-in-the-business-world.html">Google
Voice could gain a head in the business world.  At that time, my dream of connecting Google Voice
and Outlook via OMS was far from completion, with the only work I’d managed to accomplish being a simple
reading over of the related technologies.

Well, late last night a certain gear clicked
in my brain, and I spent the entire night awake and coding PHP on a local XAMPP server.  But my end result
was fruitful – I finished successfully coding an Outlook Mobile Service that allows the delivery of SMS
through the Google Voice system.

Here is a video showing it off:
id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:cf70ab77-6981-4b19-baee-c2c8a1936a1e"
class="wlWriterEditableSmartContent" style="width: 480px; display: block; float: none; margin-left: auto;
margin-right: auto; padding: 0px;">
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> name="allowFullScreen" value="true" /> name="src" value="http://www.youtube-nocookie.com/v/Oa_U-KZyhHI&hl=en_US&fs=1&rel=0&hd=1"
/> type="application/x-shockwave-flash" src="http://www.youtube-nocookie.com/v/Oa_U-KZyhHI&hl=en_US&fs=1&rel=0&hd=1"
allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" />


I’m
not yet prepared to release the source code for this, though.  (Messy, Messy, Mess! as Double D would say). 
There’s a lot in my mind about it, it took a lot of work and I’m not ready to see forks and duplicate
services pop up.  (Sorry guys =S).  Be on the look out for follow up posts that describe some of the
technologies I had to learn to make this possible.

Oh, also – If you’d like; Help
sponsor this project (I can’t afford to make it public ATM) with either Free (VERIFIED) SSL Hosting for a
subdomain of a domain I own [contact me], or the
money to make it public using my current host ($62.40/yr) [ href="http://www.dreamhost.com/donate.cgi?id=12437">donate through my host].  I would be most
appreciative if you could offer either of these to get this thing up and running!

Tuesday, November 24, 2009

How Google Voice Could Gain a Head in the Business World

Google Voice, albeit still in Beta, is a very popular Google application for creating a
single phone number to manage all your phones, with texting, and times to ring and not ring them.  It’s very
powerful.

One of the nicest additions is the ability to read and reply to SMS on your
computer.  I, personally, find this one of Google Voice’s best features.  Even if you don’t have a Cell
Phone – you can sign up for Google Voice and now you have free texting.  What could be better?

Well,
I can think of one thing – Connecting it with Outlook

href="http://tech.gtaero.net/wp-content/uploads/2009/11/UntitledTextMessage.png"> style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width:
0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Text Messaging in Outlook 2010"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/UntitledTextMessage_thumb.png" border="0" alt="Text
Messaging in Outlook 2010" width="640" height="332" />

Outlook has, in the
last few versions, supported adding a SMS Bridge using whatever protocol it is they use in addition to a
MAPI store.  It wouldn’t be very hard for Google Voice to tap into this, and provide free text messages for
all Outlook Users – It would even gain a competitive edge over other service providers, in that your text
messages from outlook would come from your actual phone number, and replies to them would be sent to your
computer and your phones.

href="http://tech.gtaero.net/wp-content/uploads/2009/11/OutlookMobileServiceAccount.png"> style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width:
0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Outlook Mobile Service Account"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/OutlookMobileServiceAccount_thumb.png" border="0"
alt="Outlook Mobile Service Account" width="640" height="464" />

Now, I
was going to be mean and keep this idea all to myself – but not only do I NOT
have hosting with SSL (I can’t afford it~) but I don’t know anything about the various protocols I would
need to know in order to make this work.

So Google, don’t you think it’s time to take
the Business World by storm with your revolutionary phone service?

(PS: I would also
like MMS.  Even the iPhone got it before you did, and that’s sad.)

Sunday, November 22, 2009

simpleTAPI v0.2.1 – Build 16 (Twitter API Library)

I’ve renamed the Twitter API Library to “simpleTAPI.”  Yes, I’m not
very good at names when it comes to this sort of thing.  We’ve jumped forward two builds since my
last post here.

Build 15

  • The
    addition of a quick variable, bool Twitter::geo_enabled.
    Returns TRUE if
    the user has turned on geo functionality, FALSE if not.

Version
0.2.1

  • Re-Organized classes.  Separated TwitterOAuth
    and OAuth into separate files, and moved them along with Twitter into a “twitter” folder.  All
    classes can be loaded simply by including Twitter.lib.php.

Build 16

  • Fixed a minor inconsistency in
    TWML where different functions returned different links to a twitter user’s profile.
  • Fixed
    a bug where specifying screennameonly=TRUE for TWML::name resulted in an empty hyperlink.

Examples

  • Started work on Example files
    to teach how to use simpleTAPI.  Currently, the only one included is a basic Update script. 
    This file includes logging in, updating a status, and returning the same status as well as some basic TWML
    examples.

So, enjoy!  I will continue to improve this library. 
Please remember to post all issues and feature requests either on this blog or the href="http://github.com/navarr/simpleTAPI">github page.

Thursday, November 19, 2009

Twitter API Library Build 13 (Breaking Change)

I pushed href="http://github.com/navarr/PHP-Twitter-API-Library/commit/f27608a709ac04676df68a3689845c72eb4755cf">Build
13 today.  This build adds the recent addition of descriptions to a user’s list.


This change breaks:

  • TwitterAPI::lists_create
    and
  • TwitterAPI::lists_update

The new profiles for these commands are as follows:

TwitterAPI::lists_create(
str $name [, str $description = NULL [, bool
$privacy = TWITTER_PRIVACY_PUBLIC ] ] )

TwitterAPI::lists_update(
str $name [, str $new_name = NULL [, str
$description = NULL [, bool $privacy = NULL ] ] ]
)

Tuesday, November 17, 2009

Twitter API Library Build 12

If you’ve been watching this blog, you’ll notice I skipped Build 11 – It was
small, and was trumped by its quick replacement – Build 12.  Builds 11 and 12 fixed five previous
known issues, while build 12 fixed a non-issue with build 11.  Fixes listed below:


  • The following now work with all users:
    • Twitter::get_sn_from_id()

    • Twitter::get_name_from_id()
    • Twitter::get_id_from_sn()
    • TWML::name()
    • TWML::profile_pic()
  • Addition of User
    Cache commands for use by TWML and the get_x_from_y() commands.

As always,
the most recent build is available at github.

Twitter API Library Version 0.2 Build 10

I pushed Version 2 Build 10 of the Twitter API Library to href="http://github.com/navarr/PHP-Twitter-API-Library">github.  This new version
still does not fix any of the previous errors, so the changelog is quite minor.

  • Updated
    to TwitterOAuth v0.2-beta
    • "fixes
      several bugs"
    • Support for OAuth 1.0a
  • Added
    a boolean return to require_login().

Monday, November 16, 2009

Twitter API Library Build 9

I’ve pushed Build 9 of the Twitter API Library to href="http://github.com/navarr/PHP-Twitter-API-Library">github today.  Interesting
thing, it adds a few missing API features but does not yet fix any of the previous problems.

New
features are all Authenticated API Calls:

  • search
  • trends

  • trends_current
  • trends_daily
  • trends_weekly

  • users_search
  • trends_available
  • trends_location

Yes, that means that we’ve added support for the following portions of the twitter api:


  • Search
  • Trends
  • User Search
  • Local
    Trends

Enjoy, and as always please report any and all errors you get.

Help Make Facebook Better For Him

I saw this pop up on my Facebook homepage and couldn’t help but laugh. 
This is definitely one of the funniest things I’ve ever seen.

href="http://tech.gtaero.net/wp-content/uploads/2009/11/image2.png">Help make Facebook better for Tom Anderson src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb2.png" width="269" height="424" />

Friday, November 13, 2009

Twitter API Library 0.2 in Near Future

Some of the current issues with the Twitter API Library seem to be with the
Twitter OAuth library we’re using courtesy of Abraham Williams
I looked into simply updating the code to the newer version of TwitterOAuth, but it seems that are multiple
incompatibilities that prevent us from doing so, requiring a rewrite of some of the automated authentication
code.  As much of a bad thing that this is, it is a good thing as well, and hopefully the newer
version of our library will add some much desired features.

Until then, v0.1 will still
work for most things.

Monday, November 9, 2009

Twitter API Library – Build 8

I’d like to introduce Build 8 to the masses.  Sorry for the long
delay in posting, but I was working on a new Twitter Client, href="http://twcli.koneko-chan.net/" rel="me">TwCLI (which uses the Twitter API Library and is
Open Source).

Build 8 contains unsupported support for
Twitter Lists.  Basically, we have built Twitter lists into the library, but a large number of
functions are not working for what seems to be an incompatibility between our OAuth Libraries and Twitter.


Change Log:

  • Added array
    api->lists_update( string $old_name, string
    $new_name = null, string $privacy = null) [Working]

  • Added array api->lists_get( string
    $screen_name = null, int $cursor = null)
    $screen_name defaults to the
    logged in user if set as null. [Working]
  • Added array
    api->lists_display( string $screen_name, string
    $list_slug) [Unverified]
  • Added array
    api->lists_statuses( string $screen_name, string
    $list_slug, int $since_id = null, int $max_id = null, int
    $count = null, int $page = null) [Working]
  • Added
    array api->lists_memberships( string
    $screen_name, string $list_slug, int $cursor = null) [Unverified]

  • Added array api->lists_subscriptions(
    string $screen_name = null )
    $screen_name defaults to the logged in user if
    set as null. [Unverified]
  • Added array
    api->lists_destroy( string $list_slug ) [Not
    Working
    ]
  • Added array api->list_members(
    string $screen_name, string $list_slug, int
    $cursor = null ) [Unverified]
  • Added array
    api->list_membersAdd( string $list_slug, int
    $user_id ) [Working]
  • Added array api->list_membersDelete(
    string $list_slug, int $user_id ) [Unverified]

  • Added array api->list_isMember( string
    $screen_name, string $list_slug, string $screen_name_to_check ) [Unverified]

  • Added array api->list_subscribers( string
    $screen_name, string $list_slug, int $cursor = null) [Unverified]

  • Added array api->list_subscribe( string
    $screen_name, string $list_slug ) [Unverified]

  • Added array api->list_unsubscribe( string
    $screen_name, string $list_slug ) [Unverified]

  • Added array api->isSubscriber( string
    $screen_name, string $list_slug, string $screen_name_to_check ) [Unverified]

Known Issues:

  • No Support
    for Unauthenticated Requests.
  • $tw->name() does not support users other than the
    currently logged in user.
  • $tw->profile_pic() does not support users other than
    the currently logged in user.
  • $twitter->get_sn_from_id() does not support users
    other than the currently logged in user.
  • $twitter->get_name_from_id() does not
    support users other than the currently logged in user.
  • Two instances of Twitter API
    Library can not co-exist on the same sub-domain.
  • $twitter->api->lists_destroy()
    is returning “Incorrect Signature.”

Friday, November 6, 2009

Twitter API Library – Build 7

Well, this is going to break some things if you’re using an older build. 
Primarily any method that required the ID/Screen Name/User ID of a user.  I thought I had pushed
out this change before the Build 4 release, but apparently it was still on my computer.

Now,
any API methods that were function( mixed $id = NULL, string
$screen_name = NULL, int $user_id = NULL ) are now: function(
mixed $id, int $id_type = TWITTER_ID ). $id_type can be one of
“TWITTER_ID” (lets twitter decide if you’re using a screen name or user id), “TWITTER_SN” (tells twitter
you’re using a screen name) or “TWITTER_UID” (tells twitter you’re using a user ID).  This
parameter may be omitted and will default to TWITTER_ID.

URI: href="http://sandbox.gtaero.net/twitter_api/code.php?b=7">http://sandbox.gtaero.net/twitter_api/code.php?b=7


Change Log:

  • Changed Tri-optional User
    Identification procedure in the API methods to Two Parameters $id and $id_type.
  • Added
    array api->lists_create( string $name
    [, int $privacy = TWITTER_PRIVACY_PUBLIC ] )
  • $privacy
    may be one of TWITTER_PRIVACY_PUBLIC or TWITTER_PRIVACY_PRIVATE

Known
Issues:

  • No Support for Unauthenticated Requests.

  • $tw->name() does not support users other than the currently logged in user.

  • $tw->profile_pic() does not support users other than the currently logged in user.

  • $twitter->get_sn_from_id() does not support users other than the currently logged in user.
  • $twitter->get_name_from_id() does not support users other than the currently
    logged in user.
  • Two instances of Twitter API Library can not co-exist on the same
    sub-domain. (All Versions)

Thursday, November 5, 2009

Twitter API Library – Build 6

Decided to push out one last, though much smaller, build tonight – Build 6. 
Build 6 moves from Authorize to Authenticate and adds a TWML function.  There are some other small
changes in Build 6 from the other builds, but these are not documented yet, and will probably require the
help of someone who knows more about OAuth than I to become supported (yes, I’m talking about setup_login()
and set_cache_dir()).

URI: href="http://sandbox.gtaero.net/twitter_api/code.php?b=6">http://sandbox.gtaero.net/twitter_api/code.php?b=6


Change Log:

  • Moved from using OAuth
    Authorize to OAuth Authenticate.  Users will no longer have to continually click “Allow this
    application.”  Now they just do it once and Twitter API Library will auto-magically log them in
    next time.
  • Added bool $tw->if_is_user(
    int $user_id ) which returns true if the current user is the same as the inserted ID,
    and false if they aren’t.

Known Issues:


  • No Support for Unauthenticated Requests.
  • $tw->name() does
    not support users other than the currently logged in user.
  • $tw->profile_pic()
    does not support users other than the currently logged in user.
  • $twitter->get_sn_from_id()
    does not support users other than the currently logged in user.
  • $twitter->get_name_from_id()
    does not support users other than the currently logged in user.

Twitter API Library – Build 5

URI: http://sandbox.gtaero.net/twitter_api/code.php?b=5
(Preview Level Code)

Change Log:

  • Added
    string $twitter->get_sn_from_id(int
    $uid)
  • Added string $twitter->get_name_from_id(int
    $uid)
  • Added string $tw->profile_pic(
    [ int $uid = NULL [, array $options = NULL ] ] )
    Options:
    • bool linked = true – Link to the
      User’s Profile
    • string size = thumb
      (of small, thumb, large, or full) – Base Size of the Image
    • int
      height = Size’s Default – Height in Pixels
    • int
      width = Size’s Default – Width in Pixels

Known Issues:

  • No Support
    for Unauthenticated Requests.
  • $tw->name() does not support users other than the
    currently logged in user.
  • $tw->profile_pic() does not support users other than
    the currently logged in user.
  • $twitter->get_sn_from_id() does not support users
    other than the currently logged in user.
  • $twitter->get_name_from_id() does not
    support users other than the currently logged in user.

Twitter API Library – Build 4

I’m going to post status updates on the Twitter API Library, despite the fact
that I don’t think anyone is using it yet.  I’ll post Change Logs to the blog.

URI:
http://sandbox.gtaero.net/twitter_api/code.php?b=4
(Preview level Code)

  • Addition of Read-Only “Quick Variables” for easy access.
    • $twitter->uid – Logged In User’s ID.
    • $twitter->name
      – Logged In User’s Full Name.
    • $twitter->screen_name – Logged In User’s Screen
      Name.
    • $twitter->first_name – Logged In User’s First Name (generated).

    • $twitter->last_name – Logged In User’s Last Name (generated).

  • Changes to $twitter->require_login() process (happens once per
    session):
    1. $twitter->require_login() is called.
    2. OAuth Data
      is Gathered from Twitter’s Server.
    3. User is Redirected to Twitter OAuth Authorization
      Page.
    4. OAuth Redirects User to Call Back Page (which should include or BE Twitter.php)
    5. Twitter API Library automatically redirects to page that called require_login() with
      OAuth Token
    6. $twitter->require_login() is called.
    7. OAuth
      Authorized Tokens are Stored and page is refreshed automatically without the OAuth Token in the URI.

      • Authorization Tokens can then be called for storage using
        list($token_key,$token_secret)
        = $twitter->get_login().
      • If Authorization Tokens have been stored, entire
        process can be skipped using $twitter->use_login($token_key,$token_secret);

    8. $twitter->api->account_verifyCredentials() is called and the result is
      cached.
    9. Quick Variables are created.
  • First
    Preview of “TWML” or
    Twitter Markup Language.
    • TWML should be called with $tw = new
      TWML($twitter);
    • Created
      Tag: $tw->name([ int $uid = NULL [, array $options ] ] )
      Supported Options:

      • linked = true (link to profile)
      • useyou = true (display “you” instead of
        name if logged in user)
      • firstnameonly
        = false (only display first name)
      • lastnameonly = false (only display last name (if available, else first))

      • screennameonly = false (only display screen name)
      • possessive = false (use possessive case,
        e.g. “your”)
      • reflexive =
        false (use reflexive case, e.g. “yourself”)
      • style="background-color: #ffffff">capitalize = false (capitalize if not a name, e.g. “Your”)
      • subjectid = NULL

  • Added
    $twitter->api->call_amount() which returns the amount of requests made to twitter (this
    instance).

Known Issues:


  • No Support for Unauthenticated Requests
  • $tw->name() does
    not support users other than the currently logged in user.

Tuesday, November 3, 2009

[Wave Preview Update] Groups Showing up in Waves

style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top:
0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb1.png" width="244" height="154" />

As you can see in the above screen shot, groups on Google Wave are now getting their own
icon and full contact card (as opposed to being slightly supported).

This is also going
to be the first in a series of posts updating on the status of the Google Wave Preview
This post and all subsequent posts will be hash-tagged.

#wavePreviewUpdate

Twitter PHP Library

Well, being a PHP developer I quickly got excessively tired of looking for the
proper Twitter Library with all the features that returned good results, and I got tired of looking for
proper libraries and classes that could interface with OAuth.

Then, I found a relatively
new (albeit “Beta”) Twitter OAuth Library, but it still required more steps than I really wanted to do just
to get user authentication in a program.  So I decided to finally piece everything together and
write Twitter API Library.


This library basically does everything you would expect it to do, except for Unauthenticated
Requests and the Search API… I haven’t gotten around to coding that in yet, as it was not the primary focus
of this library.

The library is not thoroughly tested, but theoretically shouldn’t
encounter any errors.  I would be very grateful to anyone who’ll test it for me.  (I can’t
work out the bugs without testers, so please, test!).

Another Quick YouTube Audio Player Update

The generator now also supports a Progress Bar and Time Code in three
different sizes.

Read
More
.

YouTube Audio Player Updates

The YouTube Audio Player
has gotten three much-needed updates.

  • Autoplay
  • Loop
  • Playlist Support

The first two, Autoplay and loop –
which is self-explanatory, are checkboxes that allow you to enable them.  (You’ll need to click
Make to update the embeddable code).

The third, Playlist Support is fairly
self-explanatory.  This allows you to embed not just a single video, but an entire playlist using
the audio player.  There are two ways to use this feature.  Either enter the URL of a
playlist URL, or the URL of a video in a playlist and check the “Entire Playlist” option.

align="center"> value="http://www.youtube-nocookie.com/p/923B38B82283F854"> value="true"> src="http://www.youtube-nocookie.com/p/923B38B82283F854" type="application/x-shockwave-flash"
allowscriptaccess="always" allowfullscreen="true" width="62" height="25"> href="http://www.youtube.com/view_play_list?p=923B38B82283F854"> src="http://www.gtaero.net/ytmusic/play.png" alt="Play" style="border:0px;" />


Of course, with these updates comes an update (hopefully the last) to the
bookmarklet, which can be added to your browser bar by dragging this link: href="javascript:document.location='http://gtaero.net/ytmusic/?q=' + encodeURIComponent(document.location);">Generate
Audio Player.

Enjoy!

Sunday, November 1, 2009

The Licensing Revenue Model

Full Disclosure: I do not personally know if any
companies do what I’ve written about in this post.  These are merely some thoughts I had on how to
make money by creating a License for others to use.

It has been often discussed and is
basically a known fact that the future of the world is Open Source.  As technology increases, more
and more people want to contribute, and everyone wants to see their idea expand before them without having
to do any of the hard work themselves.  This is where Open Source comes in.  Open Source
is having the code available to all, so that others can patch it, can contribute, and can make your idea
come to life whether or not you still want to work on it.  But that isn’t the topic of today’s
post.

With a boost of popularity in the Open Source direction, there is a new
seldom-thought of business that has opened up the doors of possibility – Licensing.  Open Source
users want their ideas expanded, but not stolen, and this is where Licensing comes in.

You
see all over the internet different licenses, GNU, MIT, Apache, Creative Commons – and personally, I don’t
know a thing about any of them.  But if the companies that control them wanted to make money off of
their licenses, it would be simple – without even charging the creators of content a penny.

The
revenue stream lies in protecting the license.  Lets say you’re
creative commons, and a absolutely MAGICAL deviantArt artist uses your license for their work, lets say BY-NC-ND,
meaning that use of the picture has to be attributed to the artist, and it can’t be used commercially nor
can derivative works be made from it without the Artist’s expressed consent.  One day, the artist
sits down to watch a movie, and sees her wonderful work in the background – Her License has been violated.


If you, Creative Commons don’t do anything to help her, then people
don’t believe in your license.  Less people use it, and suddenly it isn’t so popular.  But
if you take on the case, pursue legal action, and sue over it for her, giving
her a decent percentage of the profit and keeping the rest, then the artist got her retribution, and you as
an organization just made money.  Since you were so eager to defend the artist’s rights, more and
more people use your license to protect their work.

Is this unethical?  No,
of course not.
  The law is on your side.  The author said that their work
could only be used in this way, and it was violated.  You’re protecting the rights of the people,
and making money while you’re at it.

It’s Facebook’s Turn to Scratch OUR Back

style="border-bottom: 0px; border-left: 0px; margin: 5px 0px 5px 10px; display: inline; border-top: 0px;
border-right: 0px" title="image" src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb.png"
border="0" alt="image" width="63" height="244" align="right" />
Quite possibly one of the
largest and most influential things pulling users to Facebook has always been the application platform. 
It’s simple, it’s intuitive, and developers are doing everything they can to make money off the platform,
including advertisements and href="http://www.techcrunch.com/2009/10/31/scamville-the-social-gaming-ecosystem-of-hell/">resorting to
sleazy scams
like Offerpal and SuperRewards, all the while paying Facebook more and more money for
advertising that, most of the time appears on other application’s sidebar.

Why
has it taken us Developers this long to realize it?  Facebook is making a profit off of our applications and
giving us absolutely nothing in return.  Not only are developers paying
Facebook to get more users, but we’re giving them free advertising space and revenue.  It’s obviously time
that Facebook started scratching the developer’s back by giving them some of the revenue off the
advertisements that appear on their own application pages!  This would offer application developers a clean,
non-scammy, non-shoddy revenue stream with advertisements that would always fit with the Facebook platform
policy, without even disrupting the feel of the application.

Facebook is constantly
complaining about the scammy and shoddy methods developers implement to try to make their application more
viral to manage some form of income, but if Facebook just paid developers a percentage for the
advertisements being placed on those same developer’s applications, than the entire Facebook experience
would be cleaner and much more appealing to the end user.

Why hasn’t anyone thought of
this before?

Saturday, October 31, 2009

The King of all Music Apps

Five years ago, I didn’t care a single little bit about music in any way shape
or form.  Now, I have over 4 gibibytes or so of it, and I can’t seem to find an application to manage
it decently.

I recently tried MediaMonkey, but what i thought would auto-update all of my
music, just assigned it to the album of a completely unrelated artist and screwed up a good bit of my
library!  Ughh!

So, I’m still trying to find a Music Management Application that
can do the following:

  • Update MP3 ID3 Tags (with:)
  • Update
    Album Artwork (High Resolution)
  • Update Album and Track names and Artists, Year, Genre
    (basics)
  • Add/Update Lyrics (Unsynchronized & Synchronized if Possible)

  • Move into custom directories the user specifies.

It needs to do
this for both English/Japanese tracks.  iTunes and Windows
Media Player
both do most of these functions fairly well, but their library isn’t nearly big
enough.

If I had an app that could do all that perfectly, and almost automatically, that
would be great.  Pulling the data from wherever it needed to, FreeDB, Gracenote, Amazon, anything
it could possibly get its hands on.

Does anybody know of an app that does all/most of
this, or am I eventually going to have to write my own?

Friday, October 30, 2009

SimpleTwitter Update

I’ve pushed a simple update to the href="http://tech.gtaero.net/2008/02/javascript-simple-twitter-feed.html">SimpleTwitter
JavaScript.  Change log (if its even needed) below.

  • Support for
    Twitter Lists

    • Uses the same format as twitter, for example @ href="http://twitter.com/navarr/shogi">navarr/shogi




  • Support for Turled Profiles

    • style="background-color: #ffffff;">Using the variable &turl=true
      will link @replies to turled beta-profiles instead of
      twitter profiles.

    • Surprisingly,
      this doesn’t break in co-ordination with lists.  It just doesn’t display the list.




  • Uses Search API


    • We moved to the search API for retrieving tweets,
      as well as pulling a JSON file instead of XML.  This MAY BREAK your current
      implementation (though it should not).  If it does, you can use the older script by pulling old.php
      from the server instead of index.php




Yeah,
that’s it.  Was thinking about making the default for &turl being true instead of false, but figured
that’d probably annoy more people than it was worth (at least until I get turled to be of more use as a
twitter replacement).

Tuesday, October 27, 2009

YouTube Mini Audio Player

If you read my personal blog (which a lot of you probably don’t even know
exists) you’ll commonly see music embedded as mini-YouTube embeds.  It turns out, the magic height
is 25 pixels, and the magic width (for play/pause and mute) is 62 pixels.

style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 62px; padding-right: 0px; display:
block; float: none; padding-top: 0px"
id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:483cec9e-036b-43a9-b49a-eb9506b37975"
class="wlWriterEditableSmartContent">
name="movie" value="http://www.youtube-nocookie.com/v/4pXfHLUlZf4&hl=en&fs=1&rel=0"> name="allowFullScreen" value="true"> src="http://www.youtube-nocookie.com/v/4pXfHLUlZf4&hl=en&fs=1&rel=0"
type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="62"
height="25">[audio on youtube]

However, it is kind of a burden to do this every time you want to embed a mini player (you have to
edit at four fields in the HTML!)  So to simplify this process, I, like any programmer before me,
created a generator.  Just type in the URL
to the YouTube video and press make, and you’ll get a preview as well as the cross-browser HTML-esque mess
of a code to embed.

Of course, if you’re truly lazy, just
drag the bookmarklet below to your bookmark bar in your web browser, and click it on any YouTube video and
you’ll be taken to the page with the code already generated.

href="javascript:document.location='http://gtaero.net/ytmusic/?q=' + document.location">Generate
Mini-Player

Source code is available via link at the bottom of the
page.

style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px;
border-left-width: 0px" title="80x15[1]" border="0" alt="80x15[1]"
src="http://tech.gtaero.net/wp-content/uploads/2009/10/80x151.png" width="80" height="15" />


xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title"
rel="dc:type">class::Scrobbler by rel="cc:attributionURL" property="cc:attributionName" xmlns:cc="http://creativecommons.org/ns#">Navarr T.
Barnier
is licensed under a rel="license">Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.

Based on a work at xmlns:dc="http://purl.org/dc/elements/1.1/">gtaero.net.
Permissions beyond the
scope of this license may be available at rel="cc:morePermissions" xmlns:cc="http://creativecommons.org/ns#">mailto:[email protected].

Old Code – class::Scrobbler

A long time ago I wrote some PHP code for the AudioScrobbler API.  I
wrote it as more of a proof-of-concept and never touched it again, so I don’t know how well it works. 
I may play around with it some more as part of a test just to make sure the thing still works, but I wanted
to share my code with you.

href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/" rel="license"> style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px"
alt="Creative Commons License" src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/80x15.png" />



href="http://purl.org/dc/dcmitype/Text" xmlns:dc="http://purl.org/dc/elements/1.1/">class::Scrobbler
by property="cc:attributionName" xmlns:cc="http://creativecommons.org/ns#">Navarr T. Barnier is
licensed under a Creative
Commons Attribution-Noncommercial-Share Alike 3.0 United States License
.
Based on a
work at codepad.org.

Permissions beyond the scope of this license may be available at href="mailto:[email protected]" rel="cc:morePermissions" xmlns:cc="http://creativecommons.org/ns#">mailto:[email protected].

Source available at codepad and continued
after the break.

Sunday, October 18, 2009

New Facebook Layout Screenshots (EXCLUSIVE)

So, I got those href="http://tech.gtaero.net/2009/10/facebook-navigational-changes.html" rel="me nofollow">screenshots I
was telling you about yesterday.

href="http://www.flickr.com/photos/navarr/4022867725/"> src="http://farm3.static.flickr.com/2504/4022867725_6365ac898e.jpg" />

href="http://www.flickr.com/photos/navarr/4023626426/"> src="http://farm4.static.flickr.com/3477/4023626426_ec6fdf3e20.jpg" />

href="http://www.flickr.com/photos/navarr/4022867955/"> src="http://farm3.static.flickr.com/2606/4022867955_b1fa11fe33.jpg" />

href="http://www.flickr.com/photos/navarr/4023626496/"> src="http://farm4.static.flickr.com/3502/4023626496_cbdb763487.jpg" />

A
picture is worth a thousand words.  As for four, that depends on if each single picture is worth a
thousand words or the algorithm for how much a multitude of pictures together are
worth.

Saturday, October 17, 2009

Facebook Navigational Changes

I observed today on the Facebook account of a person close to me, some changes
that had been made to the site that really stood out and grabbed my attention.  Upon review, these
changes are not currently in affect on my own version of the Facebook page, and have not yet been reported
by any of the major Facebook blogs, so I will post some reports on what I saw here.

The
header is a bit bigger, and the notification icon has been moved up to it, possibly the application icon as
well but I did not take a close look.  I think there was also a message icon to display the unread
count of the inbox.

Assuming this wasn’t an error, (or that it was and it isn’t fixed by
tomorrow) I should be able to present you with screenshots.

Otherwise, please be on the
lookout for these changes, and if you notice them yourself, please upload a screenshot to some site and link
to it from here.

I hope to bring you continued coverage of these changes as they unfold.

Monday, October 12, 2009

Boycotting Virgin Mobile USA

So, I’ve started a boycott.  This one’s for real, although I’m unable
to participate in it myself (I can’t afford a new phone.)

Please join me in my efforts to
Boycott Virgin Mobile USA.  The company blocks twitter.  That’s really the only reason. 
They acknowledge that they “do not support it” and they refuse to support it, despite my unlimited plan, so,
I’m calling for a boycott!

Please Tweet this blog and join me in my efforts! 
This is unacceptable =)

Thanks~


Navarr

Friday, October 2, 2009

C++, I learned it

Practically overnight, too.  Of course, that thanks to my knowledge
of Java and PHP, as well as href="http://cplus.about.com/od/learning1/Learn_about_C_and_how_to_write_Programs_in_It.htm">tutorials by
About.com.  Basically, C++ is like this:

Wednesday, September 23, 2009

Needed: An Open-Protocol System for Commenting on the Web

One thing that many blogs have embraced is the trackback system for blogs to
shout out to other blogs that they’re linking to them or using their information.  This is a
wonderful idea, and a similar solution should be applied to comments.

Now, I’m not fully
up to speed with micro-formats and RDF, and such, but such a system should be easy to create and implement. 
The first thing we should do is extend RSS to include it.  We already have the <comments>
tag, which should obviously link to an RSS feed of comments for the item (using this new system, anyway.) 
So we need to add a <postComment> tag, yes?

This tag could go in either the
<channel> element (for Comment-Streams) or in the <item> element (for
news-streams and/or as a direct reply to other comments).  Lets break it down something like this:


style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
 1: <postComment             style="color: #ff0000">method="post"            style="color: #0000ff">>




 2: <link>http://www.example.org/postComment.php</            style="color: #800000">link>




 3: <input             style="color: #ff0000">type="hidden"
name="newsID"
value="12345"
/>




 4: <input             style="color: #ff0000">type="text"
name="name"
required="true"
/>




 5: <input             style="color: #ff0000">type="text"
name="email"
required="true"
/>




 6: <textarea             style="color: #ff0000">name="comment"
/>




 7: <captcha            style="color: #0000ff">>




 8: <link>http://www.example.org/captcha/render.php</            style="color: #800000">link>




 9: <desc>How many kittens are in the picture?</            style="color: #800000">desc>




 10: </captcha            style="color: #0000ff">>




 11: </postComment            style="color: #0000ff">>




This
would allow a large amount of customization for systems that have different fields without too much change
needed.  Just an extension to the current RSS spec.  Essentially something similar could
be done.  What are your thoughts, improvements, and ideas for this?

Thursday, September 17, 2009

Twitter gets new Following Block

New Twitter<br />            Follow Block


As seen in the image above, Twitter got a new following block to replace the small
button they had previously, mimicking the same look and feed on the following and followers
pages.

Saturday, September 12, 2009

Patterned Backgrounds & Background-Attachment

Something very crucial to most, if not every, website
layout is commonly overlooked by even some of the most experienced amateur web designers:  Using
Background-Attachment properly on Patterned Backgrounds.

When using a patterned
background, such as simple lines or a pattern, you generally don’t think about how it will affect the user’s
eyes or attention, but more so the way it will look, and generally you don’t specify anything more than a
background-image.  The default value for background-attachment
still exists, though – and it is scroll.

This is a bad thing for one major
reason.  A scrolling, patterned background distracts the user from the content of the
page
.  A person’s eyes follow movement.  It catches there attention and
pulls them in.  This technique is often used for form elements, such as buttons, or navigation. 
However, when using a patterned background, this is a bad thing.  Instead of being able to focus on
the content of the page, the user’s eyes will instead be distracted by the moving background images, making
it harder, and slightly  more painful to see.

Continue reading to see and
compare the differences of the two styles.

Friday, September 11, 2009

Japanese Mnemonic to memorize the first 20 Elements

すいへいりーべぼくのふね。ななまがるシップスクラークか。
Suihei riibe boku no fune. 
Nanamagaru shippusu kuraaku ka?

This special mnemonic is used by the Japanese to remember
the first 20 elements, in order.  Continue reading for a mapping and a brief explanation where the
reason might not be immediately understood.

Small Update: class::mp3Data v0.2

I just wanted to publish a small blog post letting you know that I have
updated the mp3Data class to version 0.2.

Change log:


  • Added function getArts() to retrieve ALL artwork embedded in ID3v2.  These
    function returns an ordered array of PHP Image Resources.

Hope that if you
use it, you enjoy the small change (not that it will be useful to many people)!

Code is
located at pastebin and retains the same usage
permissions as v0.1.

Wednesday, September 9, 2009

Apple Propaganda Takes a Stab at Nintendo

Apple reported today at it’s event that the iPod Touch was better
than the Nintendo DS for the following reasons: href="http://www.engadget.com/2009/09/09/live-from-apples-its-only-rock-and-roll-event/"> style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px;
margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="no-multi-touch[1]"
src="http://tech.gtaero.net/wp-content/uploads/2009/09/nomultitouch1.jpg" border="0" alt="no-multi-touch[1]"
width="244" height="159" align="right" />






  • No Multi-Touch User Interface


  • Games
    are Expensive


  • No App Store



  • No iPod


align="left">Now, If you don’t like to listen to me rant, It would probably be a safe bet that you’ll
want to skip this post, because I’m going to be going into great deal about what exactly is wrong with those
reasons.  If you’re willing to listen to me rant and rave, then just continue reading :)

PHP class mp3Data – Get ID3 Info from MP3

So recently, I submitted a bid on a project to make a lyrics website using
PHP.  I haven’t been contacted about whether or not I won the bid yet, but I decided that I might
as well start some preliminary work on backend coding – It’ll make my life easier, and deliver a faster and
better result to the client, so why not?

Why am I mentioning this, you ask? 
What does my personal life have to do with my tech blog?  Well, I’m getting to that!

I
almost immediately thought.  “Hey, wouldn’t it be really cool if the admin of the website could
simply upload an MP3 file and pull almost, if not all of the data from it to use on the site?” After which,
I quickly searched around for something that would allow me to do just that, to read the ID3 tags on an MP3
file.

The first thing I came to, was the search result on the PHP website for “id3,” the
ID3 PECL Library
Unfortunately, after trying for a very long time on DreamHost, I not only couldn’t get it to install, but
had just wasted probably an hour in an attempt to.  Not only that, but the library was still in its
alpha stage.

Some quick internet searching took me to the href="http://getid3.sourceforge.net/">getid3 library, a robust library programmed to read ID3
data tags (and other types of metadata?) from almost any type of file.  I quickly set about to
using it, and found its internal structure complicated and confusing.  It didn’t even offer me a
quick and easy way to access the album artwork.

After a good period of time learning some
of the basic structure of ID3 and how the getid3 library worked, I set about to coding up a library of my
own to quickly interface with getid3 and retrieve the information I needed.

The result is
class::mp3Data.  A very, very simple library
built exclusively to interface with getid3 and retrieve basic information about an mp3 file while still
retaining more advanced information for coders who need it.  Take a look at some example code and
the licensing permissions after the break.

Creative Commons License src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/80x15.png" />