System admin notes from the cloud migration

In the process of setting up my new server environment I have learned quite a few new little tricks to make this work. Firstly lets walk through the environment as I planned it before implementation

The key to note here is that I only have one externally facing IP address. I then have a decent router capable of port forwarding (any home model router will do here) at the front of my network. It routes traffic to the QNAP NAS and the Server running the virtual machines. You can also see that I setup a SAN between the QNAP and Server on the 10GBe network connections. The IP Addresses are not actually correct anymore but in terms of planning this worked out to help me wrap my head around what I wanted to do.

The DomO (server) is running CentOS 5.X since it had best hardware support – reasonable end of life and is generally secure and stable at this point. All of my DomU instances are running CentOS 6.X because they do the real work and I want the newest packages to install on them.  Most of my instances are used for serving some sort of web content or application server content. All of them are proxied behind a dedicated Apache instance running ProxyPass (mod_proxy) rules to connect either via AJP or HTTP to the other instances. This allows my router to just forward all traffic coming in on port 80 to the dedicated Apache instance. I may later evaluate things like HAProxy or just some load balanced Apache solution, but for now this works as I am not dealing with high throughput traffic – maybe one day that’ll be a great problem to have and I will just move this setup to some fatter pipes.

It is worth noting that CentOS has some SE Linux rules enabled by default and they will break ProxyPass without making these changes:

http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel

Immediately allow apache to connect out to other ports

/usr/sbin/setsebool httpd_can_network_connect 1

Permanently allow apache to connect out to other ports

/usr/sbin/setsebool -P httpd_can_network_connect 1

My DomO instance is synchronizing the entire CentOS distribution down via RSync so that installing new packages is super fast and occurs over the 1.x.x.x network (10GBe) rather than fetching from the outside world.

This is how I accomplished that

0 */6 * * * /usr/bin/rsync -avvzH –delete rsync://mirror.anl.gov/centos/ /opt/ISOS/CentOS/ > /tmp/centos.rsync.log

I noticed that I needed to be able to connect up to my machine remotely to adminster it so I installed X11VNC on the Dom0 instance and invoke it by calling these commands via SSH from anywhere I want to connect. I will likely lock this down to only accept ssh connections from certain IPs:

Connect to server with the following command and launch x11vnc

ssh -L 5900:localhost:5900 root@host.com ‘x11vnc’

or if no one is logged in yet

ssh -L 5900:localhost:5900 root@host.com ‘x11vnc -auth /var/gdm/\:0.Xauth’

After this I can run the command:

vncviewer localhost:0

(Reference above http://wiki.zenwalk.org/index.php?title=HOWTO_Use_x11vnc)

to connect to my machine and see the desktop. This is useful if I need to use graphical installers to configure my other DomU instances. This was a blocker to install Glassfish actually for my NETS instances so now it is good that I have solved that issue.

With respect to actually spinning up new servers, I installed a virtual machine by following documentation I found here:

http://pbraun.nethence.com/doc/sysutils_xen/dom0.html

However after creating a vm-skeleton and leaving it turned off I was able to clone it via a script to get me a few machines installed quickly and allocated.

Example of creating a new server:

virt-install -p –name=vm-1 –location=/opt/ISOS/CentOS/6/isos/x86_64/CentOS-6.2-x86_64-bin-DVD1.iso –bridge=xenbr0 –ram=4096 –disk path=/var/lib/xen/images/vm-skeleton,size=40,sparse=false

Duplication of servers (creates 10 servers)

for i in 1 2 3 4 5 6 7 8 9 10 ; do virt-clone -o vm-skeleton -n vm-$i -f /var/lib/xen/images/vm-$i ; done

The last issue I had to resolve was related to using AJP with Glassfish. I was creating proxypass rules like this:

<VirtualHost *:80>

ProxyPass / ajp://192.168.1.61:8080/ keepalive=on timeout=600

ProxyPassReverse / ajp://192.168.1.61:8080/

ServerName nets.neosavvy.com

</VirtualHost>

However the default number of threads that Apache allocates is 100 but the default that Glassfish will listen for is 5. So quickly Apache will overload Glassfish and start queuing requests and will cause them to timeout. Errors look like this:

[Wed Jan 18 14:08:59 2012] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can’t receive header

[Wed Jan 18 14:08:59 2012] [error] ajp_read_header: ajp_ilink_receive failed

[Wed Jan 18 14:08:59 2012] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) (192.168.1.61)

[Wed Jan 18 14:09:33 2012] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can’t receive header

[Wed Jan 18 14:09:33 2012] [error] ajp_read_header: ajp_ilink_receive failed

[Wed Jan 18 14:09:33 2012] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) (192.168.1.61)

All I had to do to fix this was to change the http-thread-listener’s thread-pool to be 100 instead of 5.

Reference (http://www.java.net/forum/topic/glassfish/glassfish/jkenabled-thread-leak)

I am sure I will have more notes to post and hopefully these will help someone out when they are setting up their own small network.

NYC Tech Event Planning

Recently I have been working on an event for programmers and business folks here in NYC. It is quite the task and requires a lot of work and the initial cost of having an event here is actually worth writing about.

There are a few things you need to have a good event here or anywhere for that matter

  1. Space to adequately and comfortably seat ~75 people
  2. Food and Beverages for them to eat and be comfortable during the event
  3. Prizes to give away to the winners
  4. General supplies (pens/paper etc)

So we have found some great space to have an event but ultimately it ranges drastically from $1000 per day to $7000 per day. This immediately increases the cost of having an event to something that would require some corporate sponsorship (at the 7k side – not the 1k side).

Then of course there is the food, we wanted to have some great beer so a friend of ours is brewing us a batch of good beer. Kegs of beer would have cost us $500 or so for ~75 people. Just think back to your fraternity days to draw on knowledge of price/keg of good beer. Not natural light – the good stuff like Sierra Nevada. He is charging us ~$800 and includes a pint glass for every person who shows up with the event logo on it. [ http://www.brewheister.com/ ]

Food is a tough one but feeding ~75 people pizza you are looking at spending about 600 and then if you want to provide some snacks you are probably going to spend upwards of $1000.

Overall breakdown of the budget to have an event in NY is at minimum about $5000 when you factor in the cost of some prizes. So having a 50 person turnout would require a $100 ticket price just to break even. Now keep in mind I am not trying to put together an event to make a profit, I want to throw a kickass event for the tech community in NY. No one is going to be willing to pay $100 for a ticket for a one day event though, but I am wondering if a $70 price tag is legit and a pricepoint people are willing to pay.

Thoughts anyone?

I moved…out of the flippin cloud

So I finally did it, with all this talk of SOPA and PIPA I have been diligently questioning how valid the movement to the cloud really is. Well I must say I owe a great bit of gratitude to the existence of the cloud. I wanted to launch a service and I had virtually no money to buy hardware and test things out in a public way. Rackspace enabled me to easily throw together a few Linux boxes on demand and voila I was deploying my code.

The service oriented architecture of things like Harvest and Jira Studio have given me access to useful project management and business management services. Without those cloud hosted services I would not have been able to take on some of the things I was able to take on last year.

Well at the end of the year it seemed like it was time to make an investment in the growth of Neosavvy. So along with some advice from a trusted colleague I began planning the new server that will host NETS and other Neosavvy services. The cost of running things in the cloud adds up. Its $1000/yr for Jira studio, and $550/yr for Harvest (5 users) and nearly $3000 / year for rackspace on 3 relatively small servers. Actually purchasing hardware and leveraging CentOS with XenServer Hypervisor has enabled me to spin up 10 beefy virtual servers and there is room for 10 more for additional processing power.

Having the opportunity to get closer to the hardware has been an absolute pleasure as well. With the cloud of course you don’t have to do any of this planning, procurement, interoperability of hardware, or systems administration. Getting the opportunity to work with it is fun and exhilarating and oftentimes the reason people get into computing to begin with. It isn’t all just about the software.

So while I don’t necessarily think the cloud is a bad place for things to get started, I do think that it is the wrong way to cost effectively grow a business. The cost of setting up services in the cloud is far greater than the cost to run and maintain servers by a trained professional. In the new year I plan to write about some of the network topology I am introducing and systems admin tricks I am leaning on to make my network provide services to run Neosavvy as a business.

Applying the Scientific Process to test runtime performance of HGroup vs Group

Introduction

Recently I have been having debates with one particular Flash developer over the finer points of software engineering and architecture. One of our recent conversations was about renderer performance and another person’s code. The person had been using HGroup in an ItemRenderer and it was posited that Group performs drastically faster than HGroup for positioning items in a horizontal fashion.

Now may I first preclude the code that follows by saying, I prefer to see renderers written to extend the lowest level base class in Flex 3, usually UIComponent and in Flex 4 ItemRenderer with absolute positioning. However I will frequently cheat when I am in a hurry and use a Box or Group to make my life easier.

Code can be found here

Hypothesis

Group performs notably faster than HGroup when being instantiated for use in a renderer. The reason is because HGroup extends Group and base classes are faster to instantiate than subclasses.

Testing

To test this hypothesis I created a simple program that does the following:

  1. Adds a button to execute a simulation and two grids to display the results
  2. A simulation is composed of the following steps
  3. Create 10,000 HGroups and assign them to a variable
  4. Call the garbage collector
  5. Get the current time with getTimer()
  6. Execute test (create 10,000 HGroup’s and assign them)
  7. Stop the timer with stopTimer()
  8. Calculate the time spent doing critical section code
  9. Save the times to a StatisticVO
  10. Create 10,000 Groups and assign them to a variable
  11. Call the garbage collector
  12. Get the current time with getTimer()
  13. Execute test (create 10,000 Group’s and assign them)
  14. Create a HorizontalLayout object and assign it to each group after each one is created
  15. Stop the timer with stopTimer()
  16. Calculate the time spent doing critical section code
  17. Save the times to a StatisticVO
  18. After the simulation the program analyzes the results, shows an average for each object and then presents a winner
  19. Additional runs can be accomplished by clicking the run button

Experiment

I have run the experiment now 5 times with the following results:

Test Run 1
HGroup was slower than Group
HGroup Avg Time: 1102 (ms)
Group Avg Time: 1088.5 (ms)
Delta: 13.5 (ms)

Test Run 2
HGroup was slower than Group
HGroup Avg Time: 1010.2 (ms)
Group Avg Time: 981.3 (ms)
Delta: 28.9 (ms)

Test Run 3
HGroup was slower than Group
HGroup Avg Time: 969.2 (ms)
Group Avg Time: 944.8 (ms)
Delta: 24.4 (ms)

Test Run 4
HGroup was slower than Group
HGroup Avg Time: 1004.2 (ms)
Group Avg Time: 982.7 (ms)
Delta: 21.5 (ms)

Test Run 5
HGroup was slower than Group
HGroup Avg Time: 993.4 (ms)
Group Avg Time: 951.5 (ms)
Delta: 41.899 (ms)

Results
Average Delta: 26.0398

Conclusions

It is safe to say that Group does instantiate faster than HGroup on large data sets, but the time complexity of both of these operations is arguably negligible even on very large data sets. So this amount of difference in performance would really only matter if you were performance optimizing an application. The main thing worth noting though is that in the scenario where performance optimization is important, one shouldn’t be using a Group class at all, someone should extend UIComponent or SkinnableComponent and do layout absolutely. The runtime difference in instantiating UIComponent vs Group is over 300(ms) so those performance gains would be much larger than any performance gain received by using Group vs HGroup.

I have to admit that my side of the argument was technically wrong in that I believed that there was no huge difference between HGroup and Group and thus I saw no reason to give the other engineer a hard time about using HGroup vs Group in his renderer code. The team mate’s argument that Group is much faster was also not true, however technically was true that Group is faster than HGroup with a negligible time comparison.

I know this seems like a trivial argument, but sometimes it is nice to follow simple scientific process to learn something very specific and new. I would love feedback from others and encourage you to download the simple test application I built to execute these tests. Please shoot me a comment or post to me on twitter if you have some feedback.

Code can be found here

Rant on Code Formatting

Recently I have been working on a major investment banks single dealer platform. This is a really cool project with some very cutting edge Flex and ActionScript work in it. It also has an impressive amount of code produced in the 3 year lifespan of the project. There has been a diligent effort to make sure the code is properly formatted, but in my opinion the approach taken seems a bit wasteful.

They have drawn up some interesting code standards (just to name a few):
1) 3 spaces represent a tab
2) No line should exceed 120 characters
3) Split up chained function calls on multiple lines

They enforce that 3 spaces should represent a tab, but this is a non-editor default in any of the 3 ide’s that compile Flex code. Eclipse defaults to represent a tab as 4 spaces. IntelliJ has the same default but represents and treats a tab as 4 spaces. I am unsure of FDT’s default behavior. It is almost like they chose the default of 3 spaces for a tab to force people to have one extra tiny thing to remember when switching Eclipse workspaces.

No lines should exceed 120 characters I reckon to help the client out with their monitor sizes. A large portion of the monitors in use in the NY office are non-widescreen monitors. So in a fullscreen Eclipse IDE there are only 80-120 characters visible when debugging or browsing the navigator. This is ridiculous and in my opinion creates non-standard code because a formatter can’t fix and make all the classes consistent. People will use random line breaks to try to not break this rule.

The same really applies for the line breaks between chained functions. I use chained function calls a lot but don’t want to be forced to put things on a new line just because of a coding standard. I do think there is an argument here though for file revision history tracking. If all new chained function calls are on a new line then it is possible to look back through history to find out what changed easily as opposed to one line having multiple changes of parameters or removals of chained calls.

My last minor rant function declarations should look like this – all extra white space included:

public function foo( barVar : String, bazVar : Number ) : SomeReturnType
{
 // code here
}

To another degree this is also correct

public function foo( barVar : String
                               ,secondVar : Object
                               ,bazVar : Number ) : SomeReturnType
{
 // code here
}

Just seems like we could use some formatter as the above standards aren’t well defined and some people will define the first function like the second and some people will just put all parameters on one line. So to SAY that there is a standard is a bit of a loose comment considering I can identify examples where there ISN’T a standard.

So my solution to this is to either use SourceMate or IntelliJ’s code formatting feature. Right now we are forced to memorize the coding standard which means that the coding standard isn’t a standard. Different people remember different things. Anyways with a source formatter no format needs to be remembered – just have to run the formatter and trust that the team uses the same one!

Please Donate to help Tornado victims Dave and Gaye Watson in Sanford NC

Some near and dear friends of mine are being directly affected by the recent tornados in Sanford NC that occurred on April 16, 2011. They run a small Nursery that has been one of the major places in the Sanford and surrounding areas to receive plants and landscaping materials.

Their entire infrastructure and most of their crop (if you can call it that) was destroyed in the recent tragic events in Sanford NC. I have constructed this website to help them gather some funds to rebuild their business before the major season to come where they would make a large majority of their business for the year.

If you can find any spare amount you are willing to donate please just donate here. If you have any questions please don’t hesitate to contact me.

How to work as an Independent Consultant in NYC

My primary client for most of the last 8 months has been located in NYC and given Neosavvy is a NC Incorporated business I have learned quite a bit about traveling to NY for business.

Firstly you must be registered as a Foreign Corporation to do work when physically located there even if just for one day. They are the strictest state I have read about in regards to work location and paying taxes so this as it turns out is really important. Not only must you be a registered corporation but you must also elect the Subchapter S accounting status with NY if you are actually managing your accounting that way. Most states in the Union will just let you observe your federal tax election, however NY in its ever aiding willingness to complicate business makes you file it again with them. If you are in my situation where you don’t make a timely election (within 3 months) you will have to file a plea to request they let you make a late election. Mine is pending, and right now Neosavvy is being treated like a C Corporation which unfortunately is causing some really unexpected double taxation which hopefully others can avoid by reading this.

Federal Sub Chapter S Election form
Election by Federal S Corporation to be treated as a New York S Corporation

The second thing is that if you employ anyone even for 1 hour a month and they physically are doing work in NY even just for one business meeting, you are required to have a workers compensation policy. Any decent sized company should probably have workers compensation, but NY must be explicitly mentioned in the policy as a insured location. This can cause some really hefty fines if you don’t comply as the law says it’s a $2000 / 10 Day period of non-compliance. They will let the fine accrue to quite a high amount before they notify you as well. So be sure to set up a workers compensation policy, its cheap $500/year should cover a small team of software developers or accountants, or other pencil pusher-esque jobs.

I am currently using the PayCycle pay as you go workers compensation policy. If you use PayCycle for payroll (which is very cost effective vs PayChex and ADP) you can have them take care of disability insurance and workers compensation. They are an Intuit Company and are really helpful for simplifying the process for those of us small enough to be using QuickBooks.

There are some other travel related accounting principles worth noting as well that are specific to NY, I am unsure of how lenient they are on it at this time. Primarily regarding long term travel to NY. After a period of 12 months you are considered a resident and can no longer expense travel to NY. I question this to some degree because I know of consultants doing a lot of work in NY traveling here for very long periods, easily over 3 years, and they are expensing their corporate apartments and regular meal per diems long beyond the 12 month period my CPA has instructed me to observe. So it seems even if you have negotiated travel terms for your work you will be unable to show those as non-taxable expense for a period of 12 months. This could be incorrect but definitely worth bringing up with your CPA when beginning any work in NYC.

I hope this helps people please email me or comment if you have similar experiences as I am working my way through understanding how to be a upstanding business citizen of NYC.

NETS 1.0 Released

Today we have officially released version 1.0 of the Neosavvy Expense Tracking System (codenamed NETS). It has been operational in a test phase for the past 3 months while critical bugs and workflow issues were fixed and improved.

Major improvements

  • Password reset and security features to ensure that users can properly login if they are locked out or unable to remember their password.
  • Users can now upload receipts in PNG or JPG format to a generic location for later categorization and expense report creation. Receipts can be added via the web application or mobile application (using the device’s camera).

If you are interested in taking a look at the tool go to: http://nets.neosavvy.com:8080/nets/expense/, if you have ideas or feedback for ways to improve the existing functionality please email me at aparrish [at] neosavvy.com. We welcome all feedback, especially if you find the tool useful.

Remember, right now it is free to use and we love users!

What’s coming next

We have begun revamping the signup and marketing pages to help drive more users to the application and improve SEO. A major feature we have begun work on is improving the expense report creation flow. We believe this is one of the most painful tasks of other expense trackers. However, we believe we haven’t solved this problem elegantly yet. Major improvements to that workflow will be coming soon.

Additional roadmap improvements in the coming year are related to manager approval of expense reports to increase manager productivity and help save management time when looking at large groups of expense reports. We also plan to spend time improving the out of the box feel of the company signup process and employee invitation process. Client and Project management are going to be made more intuitive as well.

We look forward to all the feedback and addition of new features please don’t forgot to give us feedback and keep an eye out for the real name of the NETS expense tracker as we are going to be renaming it to something a bit more interesting!

Flex Customer Meeting – Quick Meeting Minutes

I have been invited by my colleagues to visit the Flex Customer Meeting, and I am getting to discuss some unofficial topics with the Flex SDK team. Deepa Subramaniam the Product Manager for Flex, Andrew Shorten Platform Evangelist for Adobe Air, Steven Strongrundan Adobe Flex SDK Developer, as well as many other Flex SDK members were present. Some of the attendees from the consumer side of the meeting were Wells Fargo, Morgan Stanley, Sharp Healthcare, VMWare and Fidelity Investments. This was a very small meeting and thanks so much for the invite.

Seems as though concerns around if Adobe Flex within enterprises is considered a dying platform. There apparently is a strong contention that HTML 5 is applying pressure to CIO’s of top enterprise flex users to consider stopping with Flex and using things like Sencha Touch or JQuery to implement rich interfaces.

Testing is also a concern not only Unit Testing but also Functional testing of visual components. The claim from Deepa is that the unit testing framework created by adobe for validating the framework itself will be open sourced in the future to help show off ways to improve our unit testing and functional automation of flex applications. I can definitely say this is a pain point for me and I have yet to see a good implementation of this aside from testing Presentation Models and Remote services.

508 compliance is a interest to enterprise customers and in the Road Map talk it was definitely mentioned that it would be improved in the future. IAccesible2 is the interface that the Flash Player team is focusing on improving this featureset

I asked the question regarding if the Flash Player code could be open sourced given that it is consistently in contention against HTML 5 as an unstable platform. Given it’s blackbox nature maybe providing the source to the community to allow us to improve problems where they exist may improve the platform and rejuvenate its use in Enterprise applications. In response to that it is re-evaluated regularly every year, however there is no plan to open source the platform in the near future.

There was a need expressed to display HTML content and PDF content inside of flex applications due to the current lack of support for both of these. Maybe we will see that in the near future – no promises were made.

Security of SWF distribution and Air app distribution was expressed by a developer who feels the current state of Obfuscation tools and security is a bit lacking. He requested a solution for the security to be added to the FlashPlayer

Flex/Spark questions about some of the missing feature parity and the methods of migrating to the new platform were asked. As Deepa said in her discussion yesterday the feature gap is going to closed at worst in the next two minor releases. Charting components and Grid components are being released soon. Also Buttons with Icons are now in Here 4.5

Flex 3.6 has some bug fixes that will be released soon, but it is taking some time to finalize that release. There is no plan for many more builds after the 3.6 fix that comes off. Encouraging people to build off the 4.0 branch is the right thing to do according to Deepa. She is also claiming that there is no near term goal to deprecate the old MX components (hopefully obvious to everyone) but as the feature gap is closed it may come in the future.

A Morgan Stanley employee commented on the need for Concurrency to support real time updates on multi-screen applications which is a real need in Financial application development. It seems as though it is in agreement with the marketing and product management team. He also requested that the Grid be optimized for performance and to have a base performant data grid that has minimal features and then extensions to enable other features.

Someone from VMWare was wondering what happens when all of these enterprise applications migrate to Flex 4 / Spark components from their MX components and Flex 3 architectures. There seems to be a strong commitment from the Product Management at Adobe and Marketing to say that Flex 4 components are the direction to go and that it will be a long term focus for some time to come.

Another Morgan Stanley employee requested that the Jira found / fixed bug annotations be fixed to not say Moxie/Gumbo etc. Deepa said she is going to fix it next week.

I asked if the compiler direction with Falcon is going to close the API for things like IntelliJ and Flex Mojos for Maven. Deepa responded to say Marvin Froeder is working alongside the compiler team to add extensions and stay involved and they are working to tread the fine line carefully between being open and closed on their new compiler API.

Quite a lot of concern was voiced for the quality of training provided by Adobe for new developers. Also the lack of very complex examples are a huge problem with the state of the situation with regard to Flex Performance. There need to be more fundamental articles written to help explain how to use patterns properly in Flex. There were also voices requesting a better profile to help improve performance, specifically something that will make the profiler better will be the ability to export the data captured during a profiling session.

AdobeMAX Keynote Live Blog

Introduction – The Age of the Digital Living Room

Ely Greenfield and Matt Chotin are hanging out in the middle of the crowd to introduce the 400 inch television on stage. Now Ben Forta is dressed like Larry King with the backdrop to make some announcements I am sure. Ben is pointing out the horrible content of the web, and how we should be creating great content for the web. Hilarious introduction ensues to show the frustrated computer users of the world similar to a bunch of hungry Ethiopians. Now its Pimp my app on the quality of Adobe Customer Service. Apparently they claim their systems for internal customer service applications are complicated and hard to use. So the Pimp my app crew is going to fix it. Apparently they are solving the problem by creating a PROcess map. This helped to explain the pattern of the system to identify the correct way to define and solve the problem. They are basically highlighting a simple analysis process. They are now demoing the ability to use Flash Catalyst to demonstrate a rapid prototyping scenario which shows how to create a simple application with only designer skills. Now Ming is stepping in to show how to hook up this prototype to LiveCycle DS and Coldfusion for database access. They are making the sale for LiveCycle DS as a 100k messages in a second with 500 concurrent flex clients connected. Pretty sweet if the real thing lives up to its promise. They now are showing the ability to do IM and ScreenSharing with LiveCycle collaboration services. The awesomeness of their mobile solutions is the rounded out bit at the end of the demo of Pimp my App.

I used to work in Flex

The lameness continues with a George Michael rendition of a video to help aid the set change about coding in Flex. There was a further ridiculous hip-hop ad for using Flash. And now a little love song duo for Adobe Air … horrible… maybe the set change is over.

Kitchen Stadium – Shopping Application Build out – Mystery Ingredient = Flex

The deal here is they are showing off the way you can work in Flash Catalyst and work with Flash Builder to implement the code and the backend integration. Looks like in FlashBuilder you can create an outline skin component and send it back to the Flash Catalyst. All it takes is defining some metadata that allows the designer’s tools to know of an integration point. Also some of the code generation tools appear to have been extended that I was unaware of like event handler generation. Also the ability to send a FlashBuilder project back to Flash Catalyst to iteratively augment things in Catalyst – very cool as this was a huge workflow missing

A FURTHER HINT THAT APPLE IOS IS ON TARGET TO HAVE MOBILE SUPPORT FOR FLASH/FLEX

Acrobat wow commercial time, apparently leverages your Flex development skills to create great looking PDFs. Pretty cool actually as PDF generation is a real pain unless you offload to Java’s FOP or iText library, so if there is a shortcut to that problem it would be pretty nice.

Ben on HTML 5

There is a point now that HTML 5 is going to enable the Rich Multi-screen design of the future, however Flash enables the same thing. So the question is where do you draw the line between them? The response to that is that a client should just be enabled to be successful with whatever technology they choose. Some of these things are now enabled in HTML 5 but it seems Flash is the pioneer of these features. So basically HTML 5 is the platform to have the chance to innovate. The question of HTML 5 being the Adobe Flash Killer – is Adobe committed to HTML 5. Responsively they are claiming that actions speak louder than words and Dreamweaver and Adobe Edge received a solid investment in improving and adding HTML 5 support. Looks like JQuery mobile is being added to Dreamweaver – seems pretty cool to help eliminate the boiler plate code generation for mobile.

The whole thing has switched to a Sesame Street (Technology street) solution to make HTML 5 play nice with Flash. Looks like the lady Android is in an open relationship with HTML 5 and Flash…hilarious.

Making the Moneyzzz

Apparently Adobe TV is devoted to helping make the monies. How many websites out there actually make any money, the point here is that developers and designers work so hard to make a ton of content that produces no money. This will be devoted to how Adobe is dedicated to producing a solution to monetizing content. Looks like the Adobe InMarket Developer MarketPlace can be used to help push content to consumers. Right now we can get a free code signing certificate to upload applications and sign content. Looks like enrollment in the market is free, but later will cost $300 for some subscription time. The paid developer program will be free for one year to sign up – guess I will do that ASAP. Now they have switched over to a Kramer type ad for mobile apps. How do you get customers to look at your mobile application. Apparently optimization is the claim. Jeez….attention span hard to maintain at this point.

Ben Forta Live again…

Kevin Lynch is being featured again today to reflect on the keynote from yesterday. I have to wonder if they will make time for another big announcement. Looks like Richie from Google TV is on as well to speak on Google TV. The future of television is one that will be the wave of the future will be the introduction of the smart TV. The google platform is a platform for great web content with Adobe Flash and HTML 5….hrm really? Guess just reiterating the relationship from the Sesame street skit. Its odd the focus on the TV space, and they are definitely pushing it hard at this AdobeMAX. All of us are getting Logitech TV Devices – thats pretty badass fun stuff for us.