Tuesday, December 21, 2010
Klok Sale: Only 5.99 using coupon code
Tuesday, November 30, 2010
Klok 2.2.7 now available - New Features Added
Klok 2.2.7 now available - New Features Added
Monday, November 29, 2010
Adobe AIR Application: Klok Mobile for Android Beta now available - update
Thursday, November 25, 2010
Adobe AIR Application: Klok Mobile for Android Beta now available
Tuesday, November 9, 2010
Adobe AIR Application Klok surpasses half a million downloads
Wednesday, October 20, 2010
What happened to the AIR Marketplace?
Tuesday, October 12, 2010
Flex: The ABC data is corrupt - Solution
VerifyError: Error #1107: The ABC data is corrupt, attempt to read out of bounds.
Friday, October 8, 2010
Android - A breath of fresh (Adobe) AIR
Friday, October 1, 2010
What's new in Klok? Automatic backups and project search
Thursday, September 30, 2010
Adobe AIR Application Klok reaches 350,000 downloads
Tuesday, September 28, 2010
Klok Basecamp and Harvest Connector Betas Now Available
- These are "beta" versions, so there may be bugs. When you find one, please let us know at http://getklok.com/bugs/submitBug.html
- In order to use a connector plugin, you must be using a full version of Klok or the trial version available from the Adobe Marketplace
- You should use a new data file location when using a plugin because your project tree will be populated from the remote system. If your data file has projects in it before connecting, they will not exist in the remote system and therefore not be able to track time against them.
- You cannot edit or add projects in Klok. You must manage your clients, projects and tasks via the web-based Basecamp or Harvest interface
- Once installed, you access the connector configuration by clicking in the lower left corner of Klok where it says "Offline".
- Plugins can expose the ability to do two types of synchronizations. Usually one that pulls items from the remote system and the other that uploads items. What these buttons are call and what they do is up to the plugin and the remote system's capabilities.
- If you delete a project from Basecamp or Harvest, the item will not be deleted from Klok
Thursday, September 16, 2010
Klok 2 - Volume discounts now available online
Wednesday, September 15, 2010
Klok - Update to 2.1.9 - Fixes bugs enhanced collapsed mode
- Fixed: KLOK-67 Can't exit from system tray Klok
- Fixed: KLOK-65 data lost when reassigning a project
- Fixed: KLOK-64 sum of times is incorrect
- Enhanced Recent projects dropdown
Thursday, September 9, 2010
Klokwork Team Connector - Update
So AIR on the iPhone after all?
Tuesday, September 7, 2010
Klok + Klokwork Team Connector - Free 30 Day Trial
Friday, September 3, 2010
Try Full Klok 2 Features Before You Buy
Monday, August 30, 2010
Creating Bullet Graphs in Flex
Klok - How-to videos now available
Friday, August 27, 2010
A note about submitting Klok bug reports or feature requests
Klok 2.1.6 Now Available - Enables custom first day of week
Wednesday, August 11, 2010
Klok updated to 2.1.5 - More Google Calendar Fixes
Friday, August 6, 2010
Klokwork Team Console: Early screenshots now available
Klok: $5 off this weekend only
AIR: Custom Icon Not Showing in Install Dialogs
Thursday, August 5, 2010
AIR Flex NativeMenu bug?
Tuesday, August 3, 2010
Froyo is here... and it's Awesome
Monday, August 2, 2010
OpenPlug Elips - update but still no joy
Well I was able to get past my original problems but after 5 minutes of playing with it I seem to have broken it again. With a very simple app with just text in it it compiles and tests ok from within FlashBuilder and when I package and install to my Android emulator set up with Froyo. However, when I add what I think is bare bones application funcionality, it starts to go haywire again. Basically I have a List that I want to populate with XML from a webservice. My initial thought was to use an mx:WebService (which is what I am doing in the browser version). No luck though... WebService doesn't seem to exist in the ElipsFlexSDK. I could always get the data another way via URLLoader so I forged ahead and figured I would just compile in the XML using an mx:XML tag and come back to the remote data access later.
C:\OpenPlug\My Systems\Flex_XD\ElipsProject\elips_bin\ElipsProject.cpp:582: error: invalid conversion from 'avmplus::Atom' to 'avmplus::ScriptObject*'
OpenPlug Elips - Sounds great but...
Klok 2.1.2 Released - annoying bugs fixed
Thursday, July 22, 2010
Flex Hero now available for download?
Klok 2.1.1 Released - Now supports Google Apps Calendar
Monday, July 19, 2010
Klokwork Team Connector Public Beta Now Available
Wednesday, June 30, 2010
Klok wins Editor's Pick award
Monday, June 21, 2010
Klok updated to 2.0.9 - Fixes some bugs
Thursday, June 17, 2010
Klok | Adobe CS 5 integration anyone?
Wednesday, June 16, 2010
Klok gets a new website
Tuesday, May 25, 2010
Rock Star UX Designer/Flex Developer wanted
Saturday, May 15, 2010
Klok 2 - Now available
Whats next for Klok?
This launch is just the start of some exciting things to come with Klok. We expect to be release some Klok Conntectors for some popular time tracking/project management systems. Stay tuned.
Don't forget you can stay up to date with all the Klok news by becoming a fan on Facebook or following us on Twitter.
Thursday, May 6, 2010
Building Flex 4 AIR application with flex-mojos (Maven) - Update
<flexBuilderCompatibility>true</flexBuilderCompatibility>
Tuesday, May 4, 2010
Someone noticed the worm in the Apple
AgileUI now has a new look
Thursday, April 29, 2010
I finally understand Steve Job's argument against Flash
What I mean by that is the fact that Steve Jobs is so removed from the lowly task of developing software that he cannot comprehend what it would take to create an equivalent application in HTML5, CSS and Javascript. To quote Steve Jobs:
If developers need to rewrite their Flash websites, why not use modern technologies like HTML5, CSS and JavaScript?There really are no words to describe how much this trivializes what Flash developers do.
You might as well say:
Why take a plane from New York to LA when you can ride a bike?"
The two technologies have widely varying capabilities and weaknesses. Why not use HTML5, CSS and JavaScript? Because they aren't good enough yet. They just aren't. I know Steve wants them to be and maybe someday they will but right now you just can't do the same thing. Even if some websites, applications, and games could be done it HTML5, it isn't necessarily cost effective for me to change everything to support one platform.
And do we really need to hear how Apple defines Open again:
Adobe’s Flash products are 100% proprietary. They are only available from Adobe, and Adobe has sole authority as to their future enhancement, pricing, etc. While Adobe’s Flash products are widely available, this does not mean they are open, since they are controlled entirely by Adobe and available only from Adobe. By almost any definition, Flash is a closed system.Now I don't know about you but this statement is just as true as Jobs's
Apple iDevice products are 100% proprietary. They are only available from Apple, and Apple has sole authority as to their future enhancement, pricing, etc. While Apple's products are widely available, this does not mean they are open, since they are controlled entirely by Apple and available only from Apple. By almost any definition, Apple's iDevice is a closed system.And when you think about it, the Flash Player is free, Adobe's Flex SDK is open source and the Flex Compiler is free, the Flash Player format spec is freely available. It doesn't cost anything additional for a developer to start creating apps for the Flash Platform. Just a browser, the free items above and some initiative and off you go. Plus, I can't remember the last time Adobe stepped in an disallowed any Flash application from being sold (or given away for free)
In contrast, you need to buy a Mac from Apple to build iDevice apps, you need to pay for the privledge of becoming an iDevice developer (which doesn't guarantee they will let you actually distribute anything you create). You then have to submit your creation to Apple's approval process (whose guidelines vary widely depending on some unknown criteria). At any time Apple can choose to prevent your creation from being distributed even if it approved it previously.
Now seriously, does Apple really think they are more "Open" than Adobe?
Apparently Jobs also doesn't understand the meaning of the word full. So here is the definition for anyone else who doesn't know:
- containing as much or as many as is possible or normal
- entire: constituting the full quantity or extent; complete;
- complete in extent or degree and in every particular
When a person goes to a website and the whole thing or any significant part of it cannot be seen, then they are by definition not seeing the "full" website. It doesn't matter that YouTube videos can be seen if the ones I want can't be seen. If many of the sites I visit use Flash, and many do, then I am not seeing the "full" web. If I play a lot of games online that are Flash, then I am again not seeing the "full" web.
I do agree that Flash was created in the PC era. However, Objective-C was too. And who cares? Flash is pushing beyond PCs too. Targeting TVs, mobile devices, and anything else with a screen is just as likely with the Flash Platform.
Having Flash on mutliple types of devices does not mean that Adobe (or their developer base) wants to take a single application and run it on every device. What we do want is to be able to leverage some code, logic and assets in order to quickly build contextual apps without driving costs up by recoding everything in a different technology.
Wednesday, April 28, 2010
Building Flex 4 AIR application with flex-mojos (Maven)
After spending a number of hours trying to get my Flex 4 AIR application to successfully build with the maven flex-mojos plugin, I was finally able to create a pom.xml file that worked. There are a few gotchas to deal with which are detailed below. First of all here is the working pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://
www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mcgraphix.xd</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>my-app Flex</name>
<properties>
<flex.framework.version>4.0.0.14159</flex.framework.version>
<sourceDir>src/main/flex</sourceDir>
</properties>
<packaging>swf</packaging>
<build>
<sourceDirectory>src/main/flex</sourceDirectory>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>3.7-SNAPSHOT</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>com.adobe.flex</groupId>
<artifactId>compiler</artifactId>
<version>${flex.framework.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.adobe.flex.compiler</groupId>
<artifactId>adt</artifactId>
<version>${flex.framework.version}</version>
</dependency>
</dependencies>
<configuration>
<sourceFile>AirTest.mxml</sourceFile>
<flexbuilderCompatibility>true</flexbuilderCompatibility>
<descriptorTemplate>${basedir}/src/main/flex/AirTest-app.xml</descriptorTemplate>
<keystore>${basedir}/cert.p12</keystore>
<storepass>secret</storepass>
<includeFileSets>
<fileSet>
<directory>src/main/resources/embedded</directory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</includeFileSets>
</configuration>
<executions>
<execution>
<goals>
<goal>sign-air</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>air-framework</artifactId>
<version>${flex.framework.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</project>
Also notice that includeFiles and includeFileSets configuration parameters are both set. Although the documentation says they are not required, leaving them out causes an exception to be thrown from the sign-air goal. This has been fixed in the latest snapshot.
Also note that it seems to only be possible to include files that are located within the src/main/resources directory.
Also, one other thing to note is that the flex-mojos plugin uses the application descriptor xml file as configured in the descriptorTemplate node. However, there is one change that I had to make in order for the plugin to work. Normally, FlashBuilder updates the descriptor template to specify the name of the SWF in the <content/> node:
<content>[This value will be overwritten by Flex Builder in the output
app.xml]</content>
In order for the sign-air goal to work, I had to manually update that node with the correct value. In my case it needed to be:
<content>my-app-1.0-SNAPSHOT.swf</content>
<flexBuilderCompatibility>true</flexBuilderCompatibility>
UPDATE: You can also use the special ${output} token in the application descriptor as the value of the content tag which will allow the plugin to set the name of the swf into the descriptor automatically. With this approach, you don't need to set the flexCompatibility paremeter. However, that still breaks Flash Builder's Export Release Build function.
The last step if desired is to let the plugin manage the version number in the application descriptor. This can be done by setting the version node with ${version}.
<version>${version}</version>
This doesn't break Flash Builder, however if you use the Export Release Build the version number will be "${version}".
I will bundle everything up and post here shortly.
Friday, April 9, 2010
Lets not forget that the iPhone can have buggy apps when built natively too
Apple pours salt on Adobe's wound...
In a further attempt to crush Adobe, Steve Jobs has announced that starting Monday (coincidentally the same day as the Adobe CS5 launch event) you will no longer be able to dial the number 5 from your iPhone. Steve Jobs states that the number 5 is buggy and has lead to 92% of all iPhone crashes.
Wednesday, April 7, 2010
First problem with Flash Builder 4
Monday, March 8, 2010
What's new with Klok 2?
- Added the ability to import events from Google Calendar or MS Exchange Calendar
- Enhanced the reporting (dashboard and timesheets)
- Added the framework to allow skinning the application (3 additional skins are included)
- Added the framework to allow connecting to third part systems (more info coming soon)
- We fixed over 100 bugs
- and many other enhancements
Wednesday, February 3, 2010
Did Steve Jobs Just Kill the iPad
Thursday, January 21, 2010
Klok 2 Beta update fixes critical issue
Wednesday, January 13, 2010
New Klok 2 Beta build posted last night
We are getting close to release. If you find critical issues make sure you submit them at http://bugs.mcgraphix.com so I can determine when we are ready for release.
Monday, January 11, 2010
Your donations are on their way
Friday, January 8, 2010
High resolution PDFs from Flex
pdf.addImage(myPanel)
What this actually does is take a low resolution screenshot (72 DPI) of the component and add it as an image to the pdf. So when you print the pdf, the quality is pretty bad. After some digging I found this post which seemed to be exactly what I was looking for. I thought that simply doing this would do the trick:
var image:ImageSnapshot = ImageSnapshot.captureImage(myPanel, 300, new PNGEncoder());
private function internalEncode(source:Object, width:int, height:int,
transparent:Boolean = false):ByteArray{// The source is either a BitmapData or a ByteArray.var sourceBitmapData:BitmapData = source as BitmapData;var sourceByteArray:ByteArray = source as ByteArray;if (sourceByteArray)sourceByteArray.position = 0;// Create output byte arrayvar png:ByteArray = new ByteArray();// Write PNG signaturepng.writeUnsignedInt(0x89504E47);png.writeUnsignedInt(0x0D0A1A0A);// Build IHDR chunkvar IHDR:ByteArray = new ByteArray();IHDR.writeInt(width);IHDR.writeInt(height);IHDR.writeByte(8); // bit depth per channelIHDR.writeByte(2); // color type: RGBAIHDR.writeByte(0); // compression methodIHDR.writeByte(0); // filter methodIHDR.writeByte(0); // interlace methodwriteChunk(png, 0x49484452, IHDR);// Build IDAT chunkvar IDAT:ByteArray = new ByteArray();for (var y:int = 0; y <>{IDAT.writeByte(0); // no filtervar x:int;var pixel:uint;for (var j:int = 0; j <>{pixel = sourceBitmapData.getPixel(j, y);IDAT.writeByte(pixel >> 16 & 0xFF);IDAT.writeByte(pixel >> 8 & 0xFF);IDAT.writeByte(pixel & 0xFF);}}IDAT.compress();writeChunk(png, 0x49444154, IDAT);// Build IEND chunkwriteChunk(png, 0x49454E44, null);// return PNGpng.position = 0;return png;}
pdf.addPage();var image:ImageSnapshot = ImageSnapshot.captureImage(page, 300, new NonTransparentPNGEncoder());var resize:Resize = new Resize ( Mode.FIT_TO_PAGE, Position.CENTERED );pdf.addImageStream(image.data, ColorSpace.DEVICE_RGB, resize);
Then I just save my pdf to a ByteArray and use the FileReference to save it.
var bytes:ByteArray = pdf.save(Method.LOCAL);var file:FileReference = new FileReference();file.save(bytes, filename);