Monday, April 20, 2009

Andromeda Presenation from BarCamp Orlando

Monday, April 6, 2009

Cable Monopolies

Part1

It really seems like Brighthouse is not will to work with the customer AT ALL.

I recently moved down to Cocoa, FL from New York and prices are generally higher up there and I was paying around $140.00 a month for the following:

1 HD Multi Room DVR
1 SD Cable Box
HBO Package

10 MB Down / 2MB Up

Unlimited Nation Wide...

and paid a total of around $150 a month including taxes and the occasional on-demand rental.

Now Brighthouse wants to charge me $119 a month for the following:

1 HD DVR (Not Multiroom)
1 SD Box
10 MB Down / ??? Up
No HBO

$161.73 a month!!!!

Then I asked if there was anything they could do and possible provide the DVR box free of charge and try to work with the customer or if there was anything else they could do and they told me absolutely not.

Something is wrong here.

When I was switching from Cablevision to Fios up in New York Cable vision was willing to make each service 29.95 a month.

Part2
WOW BrightHouse Networks Customer Service is horrible.

So I finally decided to go online last night after all the phone call fun, and signed up for the double pack...For Internet Service and TV Service, including the extras I wanted.

I never got a confirmation email and no one called me this morning, so I called them and the lady told me there was nothing in the system so I went ahead and put the order in and got an install appointment for wednesday(good). Cable/Internet is the only thing holding me back from moving into my house right now.

Not 10 minutes after I get off the phone does the BrightHouse Promotions department call me and start to go into a speech about brighthouse and then i guess he looks at his screen and says "oooo, I was calling to offer $50 off your first month, for setting up your order online. but I see that you went ahead and called prematurely." So I responded with well cant you give me the $50 off I just signed up today. He said "Well, you would have to cancel the order..." so I said OK cancel the order. His response was..."Well I cant cancel the order you would have to call back and cancel the order"...I said oh ok well this is strike 2 for customer service, and then he started to tell me how he disagrees...thats when i hung up...unfortunately this is the only cable broadband provider in the this area and I guess they could give a rats ass about making any of their customers happy.

So 2 strikes for BrightHouse Cable before they even get into my house.

Wednesday, February 11, 2009

Thunderbird Extension Development

I've spent the last two weeks developing a thunderbird(tb) extension and I must say trying to find information specific to tb development is very hard to come by. Firefox plugin development information is all over the place. But tb resources are hard to come by. I have put together a quick reference that will hopefull get crawled by google and maybe give some help to others that are trying to do the same thing. Please not that this is just a qucik reference, of things I foudn to get the job done...they might not be the best method of doing things but it gets the job done.

Thunderbird Extension Development


Overlay Reference:

  • chrome://messenger/content/messenger.xul- statusbar

  • chrome://messenger/content/mailWindowOverlay.xul- Toolbar Menu (taskPopup), Message Context Menu (threadPaneContext)

  • chrome://messenger/content/msgHdrViewOverlay.xul- Attachment Context Menu (attachmentListContext)

Accessing Attachments

  1. var attachmentList = document.getElementById( 'attachmentList' ) // returns attachment list

  2. var selectedAttachments = attachmentList.selectedItems; //Get selected attachments


Getting Message Information

var MessageUri = GetFirstSelectedMessage(); // Get Message URI


/* Get message body as it appears in preview window */

body = document.getElementById("messagepane").contentDocument.body.innerHTML;


Accessing Limited Message Header information

  1. var msg = messenger.messageServiceFromURI(uri); // get message object

  2. var hdr = msg.messageURIToMsgHdr(uri); // get header object

  3. var subject = hdr.mime2DecodedSubject; // get Subject

  4. var from = hdr.mime2DecodedAuthor; // get From

  5. var to = hdr.mime2DecodedRecipients; // get To

  6. var msgdate = new Date( hdr.date/1000); // turn epoch into date

  7. var messageid = hdr.messageId; // get message ID



Downloading Attachments

This piece of code will take all selected attachments and download them to C:\ with their original filenames.


  1. attachments = this.getSelectedAttachments();

  2. for( i=0;i

  3. var attachment = attachments[i];


  4. /* Create a file interface object */

  5. var file = Components.classes["@mozilla.org/file/local;1"].

  6. createInstance(Components.interfaces.nsILocalFile);

  7. var fullfilepath = 'C:/test/' + attachment.displayName;

  8. file.initWithPath(fullfilepath);

  9. if(!file.exists()) {

  10. file.create(0x00,0644);

  11. }

  12. messenger.saveAttachmentToFile( file, attachment.url, attachment.uri, attachment.contentType, null );

  13. }

Sunday, February 1, 2009

Upgrading My Desktop

So I am going to upgrade my computer....here is what i am going with:

Intel BOXDP35DPM LGA 775 Intel P35 ATX Intel Motherboard

ASUS EN9800GT HB/HTDI/512M GeForce 9800 GT 512MB 256-bit GDDR3 PCI Express 2.0 x16 HDCP Ready SLI Supported

hec X-Power Pro 600 600W Continuous @ 40°C ATX12V V2.2 SLI Ready CrossFire Ready Power Supply

Intel Core 2 Quad Q8200 2.33GHz LGA 775 95W Quad-Core Processor Model BX80580Q8200

I am also going with 8GB of ram.

Only thing let to decide on it CPU cooling.

Linux will rock and I will be dual booting XP(maybe Vista) so that I can play StarCraft 2 when it comes out.


Comments/ Suggestions??

Thursday, January 15, 2009

PETA Wow I want some of what your all taking

So PETA has decided that fish should now be called sea kittens. and they let you create a "sea kitten" on their site. Well you let me know when you see something in the ocean that looks like this.


Create Your Own Sea Kitten at peta.org

Sunday, October 12, 2008

Andromeda: Give it a chance

I have been working with Andromeda for well over a year now and I can honestly say that I love this framework! I have tried many other frameworks including the following:
  • Mach II (ColdFusion)
  • FuseBox (ColdFusion & PHP)
  • Joolma (Not necessarily a framework)
  • MyCMS (PHP) developed by jeff@madtasty.com
And I have always found a reason that I could not use the framework in the fashion it was intended. I guess this is because alot of framework take the MVC approach and try to separate the business logic from the display logic. The MVC approach can cause a very large headache when you are picking up somebody elses' project and they are no longer around to answer questions. It also can cause a little bit of a headache because in my option it tries to be too organized. So I have never really used a framework for any given project because once I have started on these projects I have found the need to modify the framework in such a way that now what I have made exists outside the framework.

Now going back to the MVC approach, its definetly a good idea on paper however in the site/application is still just file based. So in the end instead of looking in say one object file you are looking in about 2,3,4 or even more places just to add a field to the page.

In my opinion Andromeda takes an MVC type approach and separates the business logic from the code completely, and puts it in the database. All your business rules go into the database and now the database does the validation, so you can never have invalid data.

Andromeda uses YAML to define the database and the rules. An example of this would be:

table contacts:
module: addressbook
column name:
primary_key:"Y"
description: Name
tooltip: Persons Name
uisearch: "Y"
column add1:
primary_key: "Y"
column add2:
column city:
column state:
column zip9:

The above creates a table called contacts with 6 column: name, add1, add2, city, state, zip.
Andromeda has predefined columns. I have used only predefined columns in the table above, but sya you wanted to create another field to store the contacts favorite food, you could achieve this in the following way:

column favorite_food:
type_id: vchar
description: Favorite Food
table contacts:
module: addressbook
column name:
primary_key:"Y"
description: Name
tooltip: Persons Name
uisearch: "Y"
column add1:
primary_key: "Y"
column add2:
column city:
column state:
column zip9:
column favorite_food:



You now have defined a column "favorite_food" that can be used in any other table in your application. Now once we build our application this table will exist in our application and can be edited right away with 0 code. One of the things I love the most about Andromeda is that it created the CRUD (CReate, Update, Delete) screens for you, with 0 code so any time you might have spent creating these screens is no longer needed and if you go back and look at my table definition you'll see there is a property called "module". This allows us to assign permissions groups for each of these modules. This is done in the following way:



group editors:
description: Address Book Editors
module addressbook:
permsel: "Y"
permdel: "Y"
permins: "Y"
permupd: "Y"


This defines a group called "editors" and gives it SELECT(permsel), DELETE(permdel),INSERT(permins), and UPDATE(permupd) permissions to any table in the module address booke. OK I am sure by now you are asking "but how does this put the business logic in the database?" OK lets say we now want to be able to assign phone number to these contacts we can now add a couple more tables to allow for this.



group editors:
description: Address Book Editors
module addressbook:
permsel: "Y"
permdel: "Y"
permins: "Y"
permupd: "Y"
column favorite_food:
type_id: vchar
description: Favorite Food
table contacts:
module: addressbook
column name:
primary_key:"Y"
description: Name
tooltip: Persons Name
uisearch: "Y"
column add1:
primary_key: "Y"
column add2:
column city:
column state:
column zip9:
column favorite_food:

table phonetypes:
module: addressbook
column name:
primary_key: "Y"
uisearch: "Y"
description: Phone Type
tooltip: Phone type eg. Cell, Home, Work

table contactnumbers:
description: Contacts Phone Numbers
foreign_key contacts:
uisearch: "Y"
primary_key: "Y"
foreign_key phonetypes:
primary_key: "Y"
uisearch: "Y"
column phone:



We've now added two tables(phonetypes & contactnumbers). The phonetypes table is extremely simple and allows us to add phone types such as Cell, Work, Home, etc...

The contactnumbers table has foreign_keys to the two previous tables contacts & phonetypes and that will tell the system that the primary_key fields from those tables need to be included in this table and to also make the primary_keys for this table. Our CRUD screens we will also have a drop down list for the foreign_key entries and this is done again with 0 code. What these primary_keys do is restrict each contact to having one phone type for each contact. If you try to insert more than one phone number for each phone type for a given contact, whether it be through the CRUD screens or even the SQL command line you will get an error telling you that the record already exists. So you don't have to make sure the record exists before you try inserting it, its done for you...yes of course you can still do this just so that your application wont have a DB error thrown back but the benefit of this is you can never get more than one phone type for a given contact into the system.

Now say for instance you wanted to have the number of phone number for each contact included in the contact record, you can have this done in the database for free with what Andromeda calls AUTOMATIONS. Here is how this is achieved:



column num_phones:
type_id: int
description: Number of Phone Numbers
table contacts:
module: addressbook
column name:
primary_key:"Y"
description: Name
tooltip: Persons Name
uisearch: "Y"
column add1:
primary_key: "Y"
column add2:
column city:
column state:
column zip9:
column favorite_food:
column num_phones:
automation_id: COUNT
auto_formula: contactnumbers.phone



Once again we've added another column definition(num_phones) and now you'll notice the automation_id property of COUNT and the auto_formula of contactnumbers.phone this tells Andromeda to do a count of records in the contactnumbers table that reference this table as a parent table(foreign_key). This is only a tip of the iceberg when it comes to Andromeda. There are many other useful automations and features such as ranged primary keys and dominant records.


This entire article is my opinion and probably not that well organized but I highly suggest taking a look at this "Database Development System/Framework". My basic examples above do not even compare to what is possible with Andromeda. It does sometimes take changing the way you approach certain things but in the end you will have drank the coolaid realized why you will never use another framework again.

I would highly suggest joining the mailing list and sending an email if you think something cannot be approached in the way you like. I have found more than once that the way that I like isn't the best way.

**Comments are welcomed and appreciated, even if you don't agree**

Monday, June 30, 2008

ExtJS

I've been working with ExtJS lately, and I must say I am highly impressed. For those of you not familiar with ExtJS (Ext), Ext is a crossbrowser javascript framework that allows for the creation of RIA (Rich Internet Applications).

Ext uses the latest and greatest web 2.0 methods, such as ajax, which has built in parsers for JSON, XML, text and possibly some other formats. Ext allows for the creation of desktop looking interfaces with just som simple notation(Ext is probably not the first project to do this)...this in my opinion is one of the greatest things Ext has to offer. The simple notation way of creating these interfaces allows for rapid deployment of interfaces, and takes the GUI creation out of the hands of the developer, and allows the developer to focus on getting the data to the front end.

Alot of chatter has been generated in the past couple of months on the decision to change the licensing model. The most current version of Ext uses the GPL 3.0 model in my opinion it may have not been the greatest of choices for a license however it still allows you to create open source applications. And if you want to build an application that you will be selling for $ you can purchase a license which will ultimately help support the project and only make it better.

There is one negative aspect to Ext, the documentation....yes all the information you need is there and they even give some basic code in the documentation however in my opinion the examples of interfaces/widgets are all given in the notation format of creating objects however the examples in the docs all give examples of referencing things or adding eventlisteners via old sytle javascript. This i think determs alot of people, they do have a community support forums but that can also at times be discouraging, as it may take a couple of bumps to get a question answered.

In my opinion the Ext documentation could take a lesson from the PHP documentation and add common examples in this notation style format, for the various things you may want to do with an object/widget/datastore.

In the end Ext is a great product with a bright future and just needs to polish its documentation as well as it has its interface objects.