Featured Post

Twitter Updates for 2008-04-03

bummer, getting skype spam today – first time since I’ve had skype – must be getting popular # From @jonese shared feeds, this is good http://tinyurl.com/35v4kx # @raowen thanks – I did that, still couldn’t get a successful repair. I got it working but with warning. Think...

Read More

Follow @dougrdotnet on Twitter

BNIRIA Adobe Group Launched!

Posted by dougr | Posted in Adobe, BNIRIA, News | Posted on 15-01-2010 | 535 views

Tags: , , , ,

0

BNIRIA Is On!

Today I received notice of approval to start up the Bloomington/Normal Illinois Rich Internet Applications Adobe user group! If you are a Central Illinois Web designer or developer, then we are inviting you to join, discuss, and network with us.

Are You a Recruiter or Business

We also want to reach out to recruiters and businesses who would like to publish design and development positions to a group of professional designers and developers. Your positions would directly reach professionals within the Central Illinois Area and would be published in several social media platforms.

What is BNIRIA

The user’s group is located in Bloomington/Normal, IL, establishing a Central Illinois Adobe platform developer point of presence, community, networking, and social hub which centers on Rich Internet Application development using Adobe tools. We discuss Flex, ColdFusion, Flash, JavaScript, IDEs (e.g. FlashBuilder, Flash, TextMate, DreamWeaver, etc…), along with topics of developer collaboration and project management, which includes discussions of Version Control, RAD development, and team managment tools.

BNIRIA Mission:

To establish a group that will allow networking of local developers, increase local awareness of Adobe technologies, and provide a Web and social-networking presence which is managed by member volunteers. To reach out to local businesses and recruiting companies to provide employment/contract assistance to community developers/designers. To provide a place where developers can come to discuss problems and solutions, establish and maintain contacts and friendships in a relaxed social atmosphere. To have some fun in all these processes.

What Next?

Our next steps are to contact local universities and colleges in an effort to obtain a venue for monthly meetings.  Additionally, we are working to obtain relationships with recruiters and businesses who wish to network design and development positions with our group.  We are going to continue to “get the word out” and let people know about the new Adobe group. We will be working social networking on a continuous basis.

Can I Help?

Absolutely! We need your help in letting people know about the group and where they can join. Let your friends and colleagues know about us, tweet about us and share our links amongst your social networks. If you are a Central Illinois designer or developer, recruiter or business, come join us!

Links

BNIRIA Adobe Group
BNIRIA LinkedIn Group
@BNIRIA

#100blogs challenge Day7 http://bit.ly/4MtAfx

Interview With Kyle Judkins – Promoting Your Site

Posted by dougr | Posted in Interviews, Podcasts (Audio) | Posted on 13-01-2010 | 453 views

Tags: , , ,

0

dougrdotnet Podcast – Episode 2: Kyle Judkins Interview

Brought to you by Douglas Reynolds Consulting

“Putting it all together”
RIA | Business Systems | Executive Administration

In this episode: I interview Kyle Judkins, Blogging Expert, on the topic of Site Promotion, Marketing, Advertising, aspects of Social Media, and Monitizing.

Related Links

Kyle Judkins:
www.lostintechnology.com
www.upyoursocial.com

Twitter: @KyleJudkins

Subscribe To Podcast

Subscribe To Podcast

Subscribe With iTunes

Subscribe With iTunes




#100blogs challenge Day6 http://bit.ly/4MtAfx

Playing With Google Maps Flex API

Posted by dougr | Posted in ActionScript, Flex | Posted on 07-01-2010 | 1,299 views

Tags: , , ,

1

I’m working on some Google Maps Flex API exercises to familiarize myself with working with the API library.

The first things to do are to sign up for a Google Maps API Key, and download the Google Maps Flex Library SWC (use the one with “Flex” in the filename).  I am following the Google Maps API For Flash Docs really closely here as this is the first time I’ve worked with the API.  In the example, to follow, my objective is to create a map where I can add an address, have it geocoded with the Google geocode service, and then display that address as a point on the map with a marker.  I want to have zoom, drag, and also to be able to click on the marker to get the point information in a marker information window.

After following through the docs, I found that it is really easy to get a basic map to render with very little code.  To do this, you can simply declare a new map object inside your main application file using the following mxml:

<maps:Map id="map" mapevent_mapready="onMapReady(event)"
 width="100%"
 height="100%"
 key="[enter API key here]"
/>

Along with the onMapReady method which handles map properties:

//called by the mapevent_mapready event in maps, instantiated in <maps:Maps...
private function onMapReady(e:MapEvent):void{
 //enable mouse wheel zoom and add the standard google zoom contorl to map
 map.enableScrollWheelZoom();
 map.enableContinuousZoom();
 map.addControl(new ZoomControl());
}

That is enough to put a global map on your screen, now we need to give the map some information.  I want to be able to provide an address and have the Google service geocode it for me.  In order to do this, I am going to need the API ClientGeocoder class.  The following method creates a new ClientGeocoder, sets up geocode event listeners, and passes the address from a TextInput into a method from the ClientGeocoder class, called geocode(String), that accepts a String argument, which will be the address.

//this method takes care of the address geocoding, handling result events
private function geocode(event:Event):void {
 geocoder = new ClientGeocoder();
 //geocoder event listeners for success or failure
 geocoder.addEventListener( GeocodingEvent.GEOCODING_SUCCESS,geoSuccess);
 geocoder.addEventListener(GeocodingEvent.GEOCODING_FAILURE,geoFail);
 //geocode the address, passing in the address from textfield
 geocoder.geocode(addy.text);
}

If the geocoder returns success, the following listener method is called.  I assign the placemarks property value from the result to a variable and if it has length, I set the map center, the initial map zoom level, the map type, the marker point for the placemark, and add the marker to the map.  I also setup a listener for a click event on the marker that will call a method that creates an address information window.

//listener method if the result event returns success
private function geoSuccess(event:GeocodingEvent):void {
 //assign the placemarks value from the response
 placemarks = event.response.placemarks;
 //check and see if response returned any placemarks
 if (placemarks.length > 0) {
  //set the center of the map to the placemark point, set initial map zoom and type
  map.setCenter(placemarks[0].point,15,MapType.NORMAL_MAP_TYPE);
  //create a new marker for the placemark
  marker = new Marker(placemarks[0].point);
  //listen for a click event on the marker
  marker.addEventListener(MapMouseEvent.CLICK, addMarker);
  //add the marker on map
  map.addOverlay(marker);
 }
}

Here is the addMarker method called from the geoSuccess method.

//listener method for marker click event
private function addMarker(event:MapMouseEvent):void {
//open the placemark information window
marker.openInfoWindow(new InfoWindowOptions({content: placemarks[0].address}));
}

If the result event returns failure, then I simply launch an Alert, notifying the user that geocoding failed.

Here is the resulting application thus far:

Get Adobe Flash player





I’m going to be continuing to play with the API.  As I learn more and add to this app, I plan on successive follow-up posts which discuss additional functionality.

HTH!

#100blogs challenge Day5 http://bit.ly/4MtAfx

Git – Every Day Commands

Posted by dougr | Posted in Git | Posted on 06-01-2010 | 592 views

Tags: , , ,

0

I’ve been using Git, rather than SVN, for the past 6 months now.  There are many powerful and useful commands, yet there are only few that I actually use on a daily basis.  So, if you are newish to Git and want a quick guide, then here you go.

Seldom Used

Create A Repository:

$ mkdir myProject
$ cd myProject
$ git init

Adding Files To The Repository

You can, if you wish, use this command following the $ git init shown in the previous example.

$ cd myProject
$ git add .

Note the [ .] following [$ git add], that is a space and a dot which means add everything below ./ in the current directory.

Often Used

Performing a Commit

This command will commit all changed files, since last commit, and remove any deleted files.

$ cd myProject
$ git commit -a

This command will commit all changed files, since last commit, and remove any deleted files. The addition of -m will allow the addition of a commit message.

$ cd myProject
$ git commit -a -m "re #xxx I just referenced a ticket number and am providing change detail."

Undoing Changes

This command will undo all changes to a file which have occurred since the last commit.

$ cd myProject
$ git checkout HEAD^ path/to/myFile


Working Remote

Getting A Remote Git Repository

This command will clone a remote repository to a local directory location.

$ git clone git@remote.url.com /local/path/directory

Updating A Local Repository With All Remote Changes

$ git pull

Updating A Remote Repository With All Local Changes

$ git push

Those are the most common commands that I use for every project. There are allot more for special situations. The Git Docs are pretty good, a bit hard to read (in my opinion), but I became accustom to it pretty quickly. My transition from SVN was relatively painless, I was up and running on an existing remote project within a few hours.

HTH!

#100blogs challenge Day4 http://bit.ly/4MtAfx

Douglas Reynolds Consulting – Relocation…Future

Posted by dougr | Posted in Douglas Reynolds Consulting, News, Personal | Posted on 05-01-2010 | 607 views

Tags: , , , ,

2

Very recently, myself and family relocated from the Portland, OR area to Bloomington/Normal, IL.  As a result, we needed to decide what we wanted to do with the consultancy.  I decided that Douglas Reynolds Consulting should live on, should continue to provide service to our existing clients, and continue to develop new clients.  Since, to a great degree, our services are provided remotely, we feel quite confident that we’ll be able to continue on with business as usual.  We’ve been spending much of our time getting networked into the new location, communicating with our clients, developing leads for new clients, and managing account changes, etc…  We have much to do yet, amounting to a task list with over 150 items resulting from relocating.  We are very excited about opportunities that are present in Illinois and prospecting is going well.  Certainly, we are interested in your inquiries for RIA, Business Systems, and Executive Administration services, regardless of location, so feel free to contact us to discuss your needs.

We have big, no, huge community goals this year in our new location.  We will be contributing to the community of developer’s in the Bloomington/Normal area.  I have already begun this process by submitting an application to start an Adobe Community RIA group with the hopes of bringing developers in this area together to network, share information, assist one-another with troubleshooting problems, and have a place to “get their geek on” and have fun.  Additionally, we wish to bring area business and education (we have Illinois State University and Illinois Wesleyan University here) awareness of the local developers and Adobe platform solutions with the hopes of strengthening the Adobe community and resources available to those businesses and institutions.  We’re going for Adobe community with all of our resources.

We are going to be adding a series of ‘Kit’ solution packages.  We are currently breaking down all of the services which we provide, discerning which ones are most in demand, and which ones best compliment one-another.  We will then be putting together a standardized set of packages and pricing.  Of course, any Kit may be customized to fit individual client’s needs, but we will be able to provide a series of entry points, better communicating initial project budget and needs requirements.  We believe this will simplify the process of providing for client needs, as well as to create a degree of self-service that potential clients may use in comparing various solutions.

In order to assist with the new Kit structure, brand awareness, and sales/retention, we are going to be adding a new internal position, Director of Evangelism.  Our new Director, to be named in the next couple of weeks, will aide in Kit development, marketing and sales, and evangelism of Douglas Reynolds Consulting services.

Within our Adobe platform development, we will be implementing Flex 4 for all future developments, unless otherwise specified by client requirements.  ColdFusion will continue to be our server-side platform solution in all cases where possible, falling back on PHP as needed.
We intend to incorporate allot more JS jQuery into our maintenance and future projects.  We have been so stoked with the UX design results we’ve achieved, in such a light-weight library, that jQuery has won our hearts and minds.

We will be coming up with more business/platform development ideas along the way, because, well, that is what we do.
Thank you to all of our clients for making it possible for us to do what we love…Develop.

RIA | Business Systems | Executive Administraion
“Putting it all together”sm
Douglas Reynolds Consulting
http://www.douglasreynoldsconsulting.com

#100blogs challenge Day3 http://bit.ly/4MtAfx

Dynamically Resizing Shapes With ActionScript

Posted by dougr | Posted in ActionScript, Flex | Posted on 04-01-2010 | 1,087 views

Tags: , , , , ,

2

There are allot of applications where dynamic resizing of shapes is necessary, and useful. Dynamic data is one of the corner stones of Rich Internet Application (RIA) development. When combined with User Experience (UX) design elements, we can deliver meaningful information back to our users, creating a rich user experience, a greater degree of interest, along with interactivity. Involving our users in our applications and providing information dynamically elevates our applications dramatically from that of static content.
Dynamic resizing of shapes is just one way that we can utilize data and provide visual cues and feedback to our users, delivering meaningful information from data. In my following example, I am going to illustrate one way that dynamic resizing of shapes may be used. There are a myriad of different ways to use this technique, applied to various display objects, limited only by imagination.

Creating a UI Level Indicator

In this example, I am going to write a level indicator meter which responds dynamically to amplitude data from an audio file.  The applied use for this example would be, for instance, left and right meters for audio level indication.

Classes and Methods Used In This Example

The ActionScript Sprite Class

Sprite is a basic display object class which can display graphics.  Sprite can be a parent, meaning that Sprite can contain children.

with()

The ActionScript with method calls an object once and then allows successive properties to be accessed and modified within the with() statement.  This is a really nice convenience method, saving the need for calling the class over and over for each property.

The ActionScript Graphics Class

Graphics is a display class that provides us a means to create shapes, helper methods include: drawRect(), drawRoundRect(), drawCircle(), and drawEllipse(), I’ll be using the drawRect() method.  There are several public methods available in this class, of which I am going to use 4 in this example.

  • lineStyle(thickness:Number= NaN, color:uint = 0, alpha:Number = 1.0, pixelHinting:Boolean = false, scaleMode:String = “normal”, caps:String = null, joints:String = null, miterLimit:Number = 3)
  • beginFill(color:uint, alpha:Number = 1.0)
  • drawRect(x:Number, y:Number, width:Number, height:Number)
  • endFill()

lineStyle() is just as it reads, this method provides access to properties of the shape’s line styling, such as thickness, color, etc… as shown in the method’s properties above.

beginFill() provides access to the shape’s fill properties, such as color and alpha.

drawRect() does just that, it draws a rectangle, the available properties allow for x and y assignments, along with width and height of the rectangle.  Just gotta love self-documenting code :-)

endFill() actually adds the fill properties to the shape, as defined in the beginFill() method.

The ActionScript SoundChannel Class

The SoundChannel class is the sound controller class.  In ActionScript, every sound is assigned to a channel, there can be multiple channels, just like having a left and right channel for stereo or having n-number of channels that may be mixed together.  In this example, I am going to be using 2 of the class’ public properties.

  • leftPeak
  • rightPeak

The leftPeak and rightPeak properties are read only and are used to assign the volume amplitude to the associated channels.

The ActionScript UIComponent Class

The UIComponent Class is the base class for all visual components in ActionScript.  I am going to create an instance of this class that will contain the level indicator display objects.  I will be adding this instance to the stage with all its children.

A Simple Dynamic Resizing Shape Example

In this example, the first thing I do is declare the private vars I’m going to need in the creation of left and right rectangle display objects which will, later, resize based upon dynamic data.  I also declare the SoundChannel class var and a UIComponent class var.  I then create an init method which sets up the left and right display objects and adds them to the base class levelUI UIComponent class instance.

In the onEnterFrame method, I update the left and right shape’s widths on each onEnterFrame event.  The data used to update these values is obtained from the left and right peak values accessed from the SoundChannel object.

private var channel:SoundChannel;
private var left:Sprite;
private var right:Sprite;
private var levelUI:UIComponent;

//setup left and right sprites and apply graphics style properties and positions
//on application initialization
private function init():void{
 //create the left sprite
 left = new Sprite();
 //define the left shape and properties
 with(left.graphics){
   lineStyle(0,0x00AF33,1);
   beginFill(0x00AF33,1);
   drawRect(0,0,1,5);
   endFill();
 }
 //position the left sprite
 left.y = 60;
 left.x = 20;

 //create the right sprite
 right = new Sprite();
 //define the right shape and properties
 with(right.graphics){
   lineStyle(0,0x00AF33,1);
   beginFill(0x00AF33,1);
   drawRect(0,0,1,5);
   endFill();
 }
 //position the right sprite
 right.y = 75;
 right.x = 20;

 //add left and right sprites as children to the levelUI display object
 levelUI.addChild(left);
 levelUI.addChild(right);
 //add levelUI to the display
 this.addChild(levelUI);
 }

//I want the shape's sizes to update at the beginning of entry into each frame
//A movie at 24 frames per second will call this method, using the onEnterFrame
//event, 24 times per second.
private function onEnterFrame(event:Event):void{
 //check and see if a sound channel object already exists
 if(channel != null){
   left.width = 50 * channel.leftPeak; //set the left shape's width
   right.width = 50 * channel.rightPeak; //set the right shape's width
 }
}

There is a bit more to do here in order to write a functional prototype that updates dynamically.  Namely, we need a sound object that holds the actual sound file.  This is beyond the scope of this article, however, additional information may be found in the livedocs.

HTH!

#100blogs challenge Day2 http://bit.ly/4MtAfx

Embedding Fonts In Your Flex App

Posted by dougr | Posted in CSS, Flash, Flex | Posted on 01-01-2010 | 1,345 views

Tags: , , , ,

1

Often, designers provide me with specifications which include non-standard font types.  In order to ensure that users view my application’s fonts as I intend, it is necessary to embed these fonts into Flex.  Not doing so can create issues with meeting requirements, problems with layout when user’s browser’s substitute the closest font match (that doesn’t really match at all), and it is simply good practice.  Embedding fonts allows me to create a unified and custom visual appearance that will set an application apart from others using standard font types.  Of course, if you are using standard font types, such as Times New Roman or Arial, for instance, then embedding isn’t necessary.

Embedding fonts in Flex applications is a pretty simple process of creating a SWF in Flash with the font embedded within.  By font, I do mean singular, it is best practice to create a single SWF for each font style to be used in your application.  Ok, lets get started.

First, launch Flash and create a new Flash file named font_bold.fla, save the FLA to a location in your project (I usually create a directory named FLA, outside my SRC directory where it won’t be compiled into application but will always be available right in the project tree).  Note – the font you wish to embed into your Flex application needs to exist on your development machine.  Once you have created your new Flash file, add a new dynamic checkbox to the stage, it doesn’t matter where, it doesn’t matter what color or size as these attributes can be controlled in your Flex application’s styles.  I like to type the name of the font face in the textbox so that it is immediately evident what font I’m working on.  In the properties panel, name the instance and make sure that its type is “Dynamic Text”, as shown below.

Add a dynamic checkbox

The next step is to actually embed the font.  In order to accomplish this, I need to expand the properties panel, if not already, and access the “Character Embedding” menu.

Open Character Embedding

When choosing the embedded character sets, its really important to choose only those sets that will be needed in your application.  Embedding fonts can come with the expense of sizable SWF files, so limiting the character sets can aide in reducing the size of the embedded font SWF.  Below, I have chosen only the sets that are required for my app (highlighted in blue), these are probably the same ones which will be needed in most instances.  Select your desired character sets and click “OK”.

Select Character Sets

At this point, I am ready to save and publish font_bold.fla.  Be sure to check and adjust your publish settings, in File>Publish Settings, I only need a Flash (.swf), the filename should be font_bold.swf by default.  This will save the .swf in the same folder as my FLA, I wish to save it to a different location, a directory named swf which is inside an assets directory under my src directory.  Once I have my publish settings configured, all I need to do is publish.  At this point, I am done in Flash and am moving over to Eclipse to work on my Flex project.

In my main application file, I need to embed the swf file into my application, inside an mx:style tag set.

@font-face
{
  src: url("../assets/fonts_bold.swf");
  font-family: "ConduitITCStd Bold";
}

Now, I can assign the embedded font to my text styles within my application, just as I would with any standard system font.  I do this in my style sheet as follows:

In my main application file I set an mx:style source to the path of my css file.

<mx:Style source="../assets/skins.css" />

In my styles.css file I add the following (along with any other style attributes required):


.moreBoldText
{
  font-family: "ConduitITCStd Bold";
}

Repeat this procedure for each embedded font.
HTH!

#100blogs challenge Day1 http://bit.ly/4MtAfx