Saturday, June 14, 2008

Let 'em Eat Cake

A winter tradition the last few years is to receive a
birthday cake from Mark...also known as Poo-baca,
Poo-Man-Chu, Poo-Man or any number of other Poo-related
names. Mark is the Waste Water Treatment Plant Tech
and some feel he sometimes has a little too much
time on his hands. We went to a birthday party this
weekend where Jay-Bird was presented with this pretty
cake from Poo-baca. Sometimes they look good enough to
eat. However, if you look at the ingredients, however
good it may look, it might cause a few Pepto-Bismo
momments when digested. When I asked him for a recipe
I could put on my blog, he was more than happy to oblige:

Grammy Bacca’s Poo-licious Cake

6 cups Class A or B processed sludge*

*this can be biosolids processed from belt press, centrifuge,
or compost pile; pre-tested for microbial and organic nutrient
& at least 14-17% solids content after de-watering for
consistency and body

3-4 cups Hand-whipped cream topping--cooled
6 oz. Syrup of choice--warmed
4 oz. Sprinkles of choice
2-3 oz. Candy of choice

---------------------------- --------------------------

Take the sludge and pack into a non-stick or pre-coated
decorative mold. Let stand at room temperature (preferably
20 C [ 70 F ]) for 2-4 hrs. When ready to decorate, carefully
turn molded sludge onto a serving plate/platter (preferably
fine china, silver, or acceptable equivalent) and release
sludge from mold by tapping and slight force. If mold crumbles
at all you will have to start all over or apply delicate hand
“spackling” techniques to the molded sludge to put it to rights.

After cake is satisfactorily positioned onto the plate or
platter, take the pre-refrigerated hand-whipped cream and
spread evenly onto the surface—taking extra care in easing it
over the edges of the mold. Then—as liberally and decoratively
as you wish—apply dobs of your favorite syrups, sprinkles,
candies, and accents (edible or non-edible)

***be careful when pressing or inserting decorations, for the
molded cake may crumble

Keep at cooled temperature (0-4 C [ 32-40 F ]) until ready
to serve

Serves 4-8 per cake

Enjoy!!!
Love Ya…Grammy Poo-bacca!!!

Dark Days Ahead

The photos above were taken by Bill, the NSF Station Manager
this May (top two photos) and last May (bottom two photos).
Even though we turned off quite a few lights last year to
conserve energy, this year we've probably turned off twice
as many and it's very obvious when comparing the photos. I
for one am very happy since I am a Dark Sky proponent and we
will see many more stars and auroras here in town. There
are some who would rather turn on all of the lights but I
think it's more how Antarctica should be and not just some
big town on the edge of the wilderness. Safety does however
play a big part of our lives down here and I concede that we
need to have a fair share of lights on so people will not
hurt themselves. For the next few months, this will be our
view when looking over McMurdo as the Sun is long gone and
even the very dim twilight at midday will be gone in less than
a week. However, with the lights vastly dimmed, I'm
looking forward to some fantastic sky shows this winter!

Tucker to Castle Rock

The MEC (Mechanical Equipment Center) is tasked this
winter to put 250 hours on the new Tucker tracked vehicles.
Once a week, Sean and Josh take two people from town out on
the Castle Rock Loop on a two hour trip. This week, Lynn
and I got to go. We hadn't been to Castle Rock before
and we hadn't ridden in the new Tuckers before so it was
a doubly nice trip. The Tuckers are tracked vehicles so
they roll over the snow easily and had no problem at all
climbing from the Sea Ice up the glacier headed to Castle
Rock.


I was pretty surprised how steep the terrain was around
Castle Rock and it's definitely a long slide down to the
bottom of the glacier. Lots of people make this 9.3 mile
loop trip on foot or skis, but they definitely have more
energy than I do. I was very happy making it in a warm
vehicle.


On the way back, we were riding along the top of the glacier,
so we were fairly high up compared to McMurdo Sound to the
right and the Ross Ice Shelf to the left. At this high
up, you could see that it's a lot brighter to the north,
but you'd have to go hundreds of miles to actually see
the sun. And this was at 3:30 in the afternoon. We had
a great trip and hopefully we'll be able to go out again
after it's completely dark to see lots of stars.

WINFLY-WhenFly-OpenFly

The powers that be in the land up north have
decided that we will not have our traditional
WINFLY the third week of August. They're
replacing it with something officially called
ADVON, (Advanced Echelon...some vague military
term). What it comes down to though is that we
will not be leaving the third week of August as
planned. Instead we will be departing as early
as September 1st (not likely) or as late as
September 15th (more likely). This caused
several people to leave early last week that
were scheduled to Winter with us. They either
had definite plans for that period or had
immigration issues that they couldn't risk
fouling up because a date had changed. More
than likely we will only get three weeks off
before returning here for the Summer. As a
result, we can kiss our trip to Tibet, Nepal
and Bhutan goodbye as it was supposed to start
on September 4th. It seems like the folks who
are currently on the Ice might have been a bit
of an afterthought when the plans were being
drawn up for this period (whatever you want to
call it) but we are cogs in the machine and
that's the way it works. Can't get too upset
over it as it does mean three more weeks of pay
which will come in handy. My cynical side though
makes me wonder if they're planning on sending
a plane for us at all in five months.

"They said bidey-bye to them what they'd
birthed. And from the nothing, they looked back...
and Captain Walker hollered, Wait, one of us
will come! Wait, one of us will come! And
somebody did come. Walker! We's heartful to
you, Captain Walker. We's ready now. Take us
home.

Sunday, June 1, 2008

Photoshop 3D Layers Tutorial

This video tutorial shows how to add a 3D object in a photo and some 3D layer effects.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Photoshop Patch Tools and Levels Tutorial (0)
  • How To Make a Feed Icon in Photoshop Video Tutorial (1)
  • Photoshop Filter: Liquify Tutorial (0)
  • Fix a Website using GreaseMonkey and Firebug (0)
  • You Suck At Photoshop Video 1 (0)

Type Mathematical Formulas with Ease Using LyX

LyX is an open-source document processor which runs on Mac, Windows and Linux. They called it a “document processor” simply because unlike most word processors, it encourages an approach to writing based on the structure of the document rather than the appearance. This means that you do not have to worry about the appearance of your document because the software will handle the details for visual layouts.

The software is free with no strings attached. Using LyX for typing regular notes and letters is as easy as using your favorite word processor. The main feature of the software is its ability to produce complex equations with ease while providing a professional look for the created document. It takes a little time to get used to and to learn the commands for the software, but once you get the hang of LyX, you can turn LyX into a very useful document tool. You can check out their video demo here.

LyX is a great alternative for your usual word processor and a great tool for creating documents that contains simple and complex equations. It is light and does not eat up a lot of memory and you can download it for free.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Evernote: Remember Everything, Access Anywhere (5)
  • Help Find Cure for Diseases by Playing Foldit (0)
  • Xobni: Email Organizer for Outlook Users (0)
  • Use Multiple Online Language Translators with Translate.Net (3)
  • Turn your iTunes into an Alarm Clock (0)

Search Available Domains Faster Using Domize

We all know that searching of an available domain name can be such a pain. Typing a name at a time and hoping that the search will return a “this domain is available.” It can be very time consuming and frustrating at the same time.

Domize is a domain name search engine that lets you search domain names faster and gives quick results of available and unavailable domains. The engine is very easy to use and is secured over SSL. Like most domain search tools out there, all you have to do is type in the domain name that you want to search. Then it gets interesting. With every character that you type, the engine will show a result of the availability of your domain for every letter that you add. This will give you additional information and a greater possibility of finding a shorter domain name.

After each search, a snapshot preview of the available domains can be accessed easily. Just hover your mouse cursor over the red colored text (red means taken and blue means available), and a snapshot window will popup. If you did not find what you are looking for, you can edit the text in the Domize search bar and the results will change as you add or remove a letter or character to your domain name. This will save you a lot of time while playing around with ideas for a domain name.

Thousands of domain names are being registered everyday. Finding an available name gets even harder with conventional domain search tools. Using Domize as a tool for finding a domain name will certainly give you an edge and save you a lot of time.

Note: Domize also offers iPhone support.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Powerset: The Natural Language Search Engine (1)
  • Stumpedia: The Social Powered Search Engine (2)
  • Google Just Banned Ecocho on Earthday (0)
  • Ecocho: The Green Search Engine (3)
  • Evernote: Remember Everything, Access Anywhere (5)

Spot what your Favorite Celebrities are Into

Coolspotters is a social networking site launched to public beta a few days ago which focuses on finding and cataloging stuff that celebrities use. The service will appeal most to celebrity fans who wants to check out what their favorite stars are using. They can also contribute to the community by creating their own “spots”. A “spot” is the term used by Coolspotters when a certain product is associated with a celebrity. Spots can be anything that is discovered in movies, magazines, TV, snap shots, paparazzi shots, etc.

We all see great stuff being worn and used by our favorite celebrities - in magazines, TV, in movies - but there’s never been an easy way to find out exactly what the great stuff is! So, we built one.

You don’t have to join Coolspotters to enjoy their service. If you just want to browse around and check out “spots”, registration is not needed. Serious spotters however will be required to create an account in order to contribute and enjoy other features.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Xobni: Email Organizer for Outlook Users (0)
  • Insoshi Introduces an Open Source Social Networking Platform (0)
  • Iron Man Movie Wallpapers Up for Grabs (0)
  • I Am Legend Global Banners (0)
  • Killer Bean Official Trailer (1)

Seero Releases Embed Feature in their Geotagged Video Service

Seero is a San Francisco based startup that we introduced a while back which is the first true geo-broadcasting platform which seamlessly integrates live mobile webcasting and GPS mapping. The service is very promising especially with new features constantly being added.

The team just introduced their embed feature for the service which will give you the ability to broadcast live in your blogs and websites. All you need to do is to get the embed codes in your Seero profile. You can choose to embed a particular broadcast or the entire profile (This type of embed will connect to a broadcaster’s live feed or on-demand playlist (if not live)) of the broadcaster and let your viewers choose which broadcast they want to watch within the embedded video. There are two format shapes to choose from (horizontal and vertical).

Today, Seero’s Chief Creative Officer, David Rothschild, will be broadcasting live and on-location from the Where 2.0 conference (May 12 - 14). David will provide in-depth coverage and interviews on recent advances in location-based technology as a member of the press. You can check out the live broadcast in the embedded video below.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Seero Launches to the Public (2)
  • Seero to Give Live Webcasting with GPS Mapping (1)
  • Nissan GT-R Disengages Speed Limiter When In a Racing Circuit. (6)

Xobni: Email Organizer for Outlook Users

Xobni (Inbox spelled backwards) is a Microsoft Outlook plugin that helps you manage and organize your emails by utilizing existing Outlook features and creating an email-based social network within your email client. Bill Gates quoted Xobni as “The next generation of social networking.” The plugin features; quick e-mail searches, quick attachment discovery, automatic extraction of phone numbers, automatic schedule creator and email conversation threading. Check out the video demo below for a more detailed explanation on how Xobni works.

This is a new and interesting way of managing your emails if you are using Outlook (the most popular email client in the world). The plugin is currently available for Outlook 2003 and Outlook 2007 and they are planning on releasing Xobni in other email clients and platforms. This is a great idea for Xobni to create an application/plugin to make Outlook users’ life a little easier. Think of the time that one can save by using this plugin. This will allow the users to be more productive and have easier time managing information in their emails.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Backup to Email: Useful Backup Tool for your Files (0)
  • Help Find Cure for Diseases by Playing Foldit (0)
  • Spot what your Favorite Celebrities are Into (2)
  • Type Mathematical Formulas with Ease Using LyX (0)
  • Use Multiple Online Language Translators with Translate.Net (3)

Create Your Own Video Sharing Site with StartYourTube

Want to know what it feels like to have your own YouTube? StartYourTube is the Ning of video sharing sites. It lets you easily create your own video site without hassles. There is no installation needed, no servers and other technical stuff. It’s just like creating a blog in Blogspot. Actually the procedure is very similar to creating a Blogspot account where you create an account, customize your site (upload logos, change theme colors etc), use your own domain name and advertise (where they keep 40 percent of the revenues for the free account).

Being a video sharing site, StartYourTube lets you have your own members where they sign up and share their tubes in your created tube site. The service is free but will only allow you to have 10 thousand page views per month and upload a maximum of 200 videos which should not exceed 2 GB of storage space. You also get to have a “Powered by StartYourTube” mention in your pages and you cannot disable advertisements. This is not a bad deal considering that you are paying them nothing but it is not enough to survive a Digg effect if ever one of your videos gets dugg. However, a paid account will let you get a bigger storage space and bandwidth, remove the StartYourTube mention, run your own ads and keep all the profit.

The trick is to start free play around with a niched video site and eventually upgrade your account if your site becomes popular. This is another interesting service and a potentially useful one (if they can offer larger bandwidths and storage) for people who wants to start a niched tube site.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Flickr Launches Video Service for Pro Users (2)
  • Photoshop 3D Layers Tutorial (2)
  • Photoshop Patch Tools and Levels Tutorial (0)
  • Create a Flash-Based Website Online Using Wix (2)
  • Fix a Website using GreaseMonkey and Firebug (0)

Mento: A Fresh New Bookmarking Service

There are lots of link sharing sites out there but Mento thinks that it could be better and simpler for users. Mento provides a lightweight, non-intrusive solution for easy bookmarking, sharing and tagging.

To use Mento, just register and download the Firefox or Internet Explorer extensions, or use their bookmarklet which works on all browsers. When you click the bookmarklet or Mento button, a small popup window will appear asking which Mento service you would like to use. The send feature will allow you to send the links (along with images and comments) to your Mento friends, groups, tags or email buddies. The save feature will generally save the link to your mento profile allowing you to place tags, images and notes along with the link. The reply feature will allow you to comment on the link(s) provided that it has already been saved by somebody in your network. This will also keep track of the linking activities of your Mento friends whether they have previously saved a particular link which will prevent duplicate link sharing in your network. The site also keeps track on how many times a link you’ve shared has been clicked, and which members have clicked it.

Mento also offers outside link sharing by allowing you to publish links to del.icio.us, FriendFeed, Magnolia, Tumblr, and Twitter. They also have a Facebook app that allows friends to view and comment on your links without having to install the application themselves. You can also use the AddThis widget to publish your links on other bookmarking sites. Talk about not being selfish.

Mento is another addition to the numerous social bookmarking services in the internet. The site is fresh looking and packed with sharing features which are also user friendly. If you are in the market for an alternative bookmarking service, Mento is definitely worth checking out.

Thanks for subscribing to © http://www.orangeinks.com - visit the author for more great content.



Related Reading

  • Fix a Website using GreaseMonkey and Firebug (0)
  • Iminta What? (4)
  • Test Websites on Differrent Browsers and Operating Systems using CrossBrowserTesting (3)
  • Get Blogging Suggestions for your Content Using Zemanta (2)
  • Get Instant Phone Text Answers for your Questions with Mosio (1)

Yard sale web site portal - Website Design Freelance Job

The site will be a portal site for adding yard sales and helping people market such sales.... here is the basics you may contact me for any clarifications here, it will involve some simple database programming as well---let me stress this ...WE ARE LOOKING FOR A COMPLETE TURN KEY JOB HERE...thanks below is the copy and paste of the word doc...I will attach it as well for easier reading... Daily Yard Sales The site needs to have the following functions: 1) Homepage. a. User Login In i. Must provide a "create user area" –they can either create themselves as a "Shopper" or "Seller" 1. Once created the USER DATA BASE information will be created—this will define the following: a. Type of User ("Shopper" or "Seller") b. Name & Mailing Address & Email Address c. If seller: i. Location of Sale ii. Estimate on number of sales per year they have d. If shopper: i. Number of sales attended per year ii. Category of Shopping 1. Clothing 2. Books 3. Childrens Toys 4. Baby Toys 5. Video Games 6. Electronics 7. OTHER CATS b. Interactive Google Map i. Google map must show by CITY & STATE(picked by drop down) with pin points of all available sales in that area 1. A "FEATURED" mouse over for ad sites so that when their pin is moused over there is an additional "Featured picture" for the sale 2. Get directions drop down to use map to coordinate a "route" between users address and other sales ii. c. Featured Sales i. When the "Shopper Picks" their state, the FOUR FEATURED below the MAP on the home page will become active for that CITY & STATE (this will have to be programmed in such a way for users who come directly to the site via the "city.dailyyardsells.com" to be able to navigate directly to the page for the appropriate city ii. The featured sales will be distinguished by a star or icon on the map iii. Featured sales will have a Clickable page that will link to the interiorior pages… 2) Interior Pages 1. Silver ($7.99 per listing per week) a. One Featured Item with downloadable picture (that user can implement) and a text box to explain the item b. 5 Featured Items (Bulleted TEXT template) c. a 500 character box to list additional information 2. Gold (13.99 per listing per week) a. Three (3) Featured Listings with accompanying text boxes for the user to control and implement b. 10 Featured Items (Bulleted text area) c. A 1000 character text box d. Featured Map Button which links to a Google map and show the address of the sale 3. Platinum ($16.99 per week) a. Ten (10) Featured Listings with accompanying text boxes b. 20 Featured Items (Bulleted text area) c. A 5000 character text box d. Featured Map Button which links to Google to show the address of the sale e. An email account with will forward to their normal email –without putting that email in the "public domain" (all you will have to program here is a contact page for the platinum sign ups that will notify our email admin to set them up a " 4. 4. Platinum Plus ($24.99 per week) a. Twenty (20) Featured Listings with accompanying text boxes b. 20 Featured Items (Bulleted text area) c. A 5000 character text box d. Featured Map Button which links to Google to show the address of the sale e. An email account with will forward to their normal email –without putting that email in the "public domain" (all you will have to program here is a contact page for the platinum sign ups that will notify our email admin to set them up a " f. Online "store" with up to twenty listings to get paid via pay pal link for items g. Auto emails to our data base when an item is updated in your featured listings area to "shoppers" who have expressed an interest in this type product 3) Additional Feature a. Newsletter sign up on Homepage b. Add page that will link to our Godaddy store with will allow for ad selection and payment c. Contact page

Excel sheet - Data Entry Freelance Job

Here is a project of data entry in excel sheet. delivery in 3 days. Please send the total fees. Objective: 1.Creating/Setting formula to all required fields. 2.Creating combo box ( Scroll) 3.Generating 02 kind of reports one is numeric and the other is graphs. •In case there is source code or worksheet pass word, then you have to advise it to me before release final payment. Introduction: All required action to be done by you has explained by inserted comment on every field of Excel file attached. I have created an Excel file with one field each of 38columns in sheet 0ne and one field each of 37 columns in sheet 03. Sheet 01 contained A to T field of daily data entry for each record starting with date. Sheet 02 contained list of company’s names and company’s number. All company names alphabetical (Tickers) has number also for example: company name is RIBL and the same company’s number is 1010. You will notice that the default direction has set on Right â€" to â€" Left due to that all English text in all fields will be replaced to Arabic language after finished creating the objective therefore Do not escrow the Excel worksheet. The language change will be done by service buyer. To avoid writing name each time and some time with errors I want to be scrolling combo box of name and tickers number, that once I start name with S for example all ticker’s name starting with Saudi Hollandi, Saudi Fransi, Sabic etc, will be listed. And so on with other letters. Also by number if I start with 1 then all 1010, 1020, 1030 etc. Next, once I selected either one by number or by alphabetic, then both fields will paste name & the related number. Box date will appear once the curser reached to date field, infect, I have created already box date but half of the box is hided which need to be fix. In each day I will add/use around 2 to 5 rows with new date and it will continue going on regardless when will stop probably for next several years, therefore please make sure that the setting formulas are valid for all rows in this book/file. From this work sheet I want to generate 03reports, 02 are numeric and the other has Excel chart. In some field I have use Cell instead of field but both are the same meaning. Reports: 1-Transfer selected data from sheet 01 to reports. •Closed record reports: Select date from & to then search all closed record and loaded template report. •What to do tomorrow: Select date of record from 01Feb 2008 to 01Feb 2008 for one day which I have created in sheet 01 or from 01 Feb 2008 to 02 Feb 2008 for more than 01 day and transfer to report template 2- Indexes Charts Reports of (Date) •Transfer selected data of Passed, Remaining & balance fields representing each index individually of 09 Indexes from sheet 03 to sheet 1 and translate the same to Excel graphs with loading to report template. •This job to be done within 3 day. More explanations: 1-Please select Name along with ticker number directly and loaded to the table and create combo scroll box. 2-All text in table, it mean's table heading in sheet one plus three, non numeric fields like F5 for example in sheet one. Consequently all reports which generated from the Arabic text on sheet one will load to Arabic text also. 3-Correction in sheet one, In field B13 click comment, please delete row 8 and put B7 instead /replacement of row 8..

Wednesday, May 14, 2008

Laser Removal Equipment Website (B2B) - I need content - Web Content Writing Freelance Job

Hello, My plan is to open a Business to Business Laser Hair Removal equipment/Tattoo Removal machine website that also offers many skin products and a full-turn key solution for customers who want to open and operate thier own laser hair removal salon or business. We are selling the machines and equipment but also sell skin products as well. I need a full outline on what laser hair removal is, the emergence of med-spas, the overall technology on how it works, and I need a full outline of what Laser Hair Removal is, what the difference is between different types of Lasers...the full package. Example...... What is the process? -- "Imagine having no hair -- not having to shave anymore....this is all possible thanks to the new technology of Laser Hair Removal. Your customers will have the ultimate experience etc...." What is Tattoo Removal? What is Skin Rejuvanation? What is a Photofacial? What is the difference between a Yag Laser and an IPL laser? How does an IPL work? (the whole process) I need some research about what this system and technology is all about and I need it explained for customers on my web site. I am looking also to sell creams and lotions so I would need some articles explaining different skin conditions and how they can be avoided and treated by using certain materials or creams. We plan on selling the equipment and also the full turn-key solution to set up a customer with a full salon plan. I am looking for at least 7-10 artices What is ? PERMANENT HAIR REMOVAL - SKIN REJUVENATION - SCARS REMOVAL - ROSACEA - ACNE - ANGIOMA - ERYTHROSIS - PSORIASIS - VITILIGO - DERMATITIS - KELOIDS - PIGMENTATION - STRETCH MARKS - WRINKLE REDUCTION -

Have Punch Lines, Need Your Drawings - Cartoon Illustration Freelance Job

Greetings and thanks for reading this request. I have imagination and wit (but seem to be lacking in modesty) and seek to marry my ideas for cartoons (including captions) with your drawing expertise. My preference for cartoons is generally the simple type with fewer drawing lines that are often found in popular magazines. My vision is for us to both invest the time and the effort to submit hundreds of cartoons to various publications over a period of months in hopes of seeing a number of them published. I know nothing about this business (that ought to make you feel pretty good) but I would hope that through our good work we could earn contracts with publications, or at a minimum, be regular contributors. I would estimate that I could submit at least 7 ideas per week, but if it turned out to be as much fun as I think it might be, and you are up to it, perhaps we could put out many more than that. You could pretty much live anywhere, and we would use e-mail to communiate with one another. Should we make any money, which is certainly a goal, I would envision us splitting it equally. Only your name need appear on the work, though if you want to give me a little credit when you are interviewed by Larry King that would be okay too. My preference is for you to manage the business of submitting and tracking, and if you'll do that perhaps you could take 55%. We could split the costs of postage, envelopes, paper, etc. We would not have to establish a business per se, but rather we could be pooling our work as 2 independent contractors without any long term commitment to one another unless of course we put our names on the line at some future date for some kind of commitment we both agree to. As needed I can provide you with numerous business and character references; I believe in fair and honest dealings. And, you should know that the only work I am interested in teaming with you is okay for all ages. So, if you're saying to yourself "wow, what an opportunity, to team with a guy who I have never heard of, who admits he has no experience, who is not willing to pay me anything out of pocket for my time...I',m sure glad I read this one", then maybe we're a match. Will you please send me some sample drawings and advise me of any questions or comments that you might have. I am most appreciative of your time and consideration. With Regards, Doug Fowler

Vtiger Signup script - Vtiger / PHP / MySQL / LAMP / DNS / BIND / APACHE - Website Programming Freelance Job

Vtiger / PHP / MySQL / LAMP / DNS / BIND / APACHE / CRON PART 1: Vtiger signup automation script. The purpose of the script is to automate new account creation for a free hosted Vtiger service. A new user should be able to create a new Vtiger instance and installation for a company form his browser by entering: Page 1: Username Password - Strong (Ajax)? Pasword confirmation Empresa or autónomo? (radio button) Page 2: Based on radiobutton: - Case Empresa: Company name Commercial name Company CIF Contact Name Contact Surnames (2): Contact Phone Contact Mobile phone Contact Email - Valid (Ajax)? Are you human? - Case autónomo: Name Surnames (2) User NIF Commercial name Contact Phone Contact Mobile phone Contact Email - Valid (Ajax)? Are you human? Page 3: Account creation successful? Not: Derivate to support window Yes: Welcome and service agreement/contract When the user clicks on the confirmation link: - A new folder is created in apache server and the vtiger files are copied into it. - A new customer is created in our own vtiguer - A new virtual host is created in apache server using the suggested URL. - Vtiger is configured and ready to use (no manual installation required) - An admin account is created with the username, password and email provided. Bizboost is our own domain where the service will be hosted. Option A: apache Virtual hosts: URL: companyname.bizboost.es - Available? - An email is sent to customer with a confirmation link. Option B: Subdirectory structure: URL: crm.bizboost.es/companyname - Available? - An email is sent to customer with a confirmation link. Option C: Own Domain: URL: crm.companydomain.tld In option C, the domain is an existing one and is owned by the company signing up for our service. - Welcome email with username, password, contact info and access URL. PART 2: Vtiger interstitial and internal advertising: Objective is to ad advertising on login page and inside Vtiger, just over the actual Vtiger interface or even better just above main horizontal menu. No frames can be used because of advertisement networks not accepting it so it must be embedded in actual vtiguer´s pages a) Incorporate to the login page Full size (800 x 600) advertising (interstitial, obtrusive) not allowing the user to login for some seconds. After 8 seconds the login form shows (or fades) up so the user is able to login. b) Full size "screen saver" page overlay with an ad, (same way as login). After some time of inactivity on any page of the Vtiger app, a screen saver shows, with a full size ad and the login form. It is very important that the user never looses actual work in progress or data already introduced in any Vtiger form, so make screensaver run in a layer over actual CRM page. c) Integrate 1 Leaderboard (728 x 90 pixel) "banner spot" inside Vtiger. - Top position. d) Integrate 1 Large Rectangle (336 x 280 pixel) "banner spot" inside Vtiger - Middle position. (only for main page) d) ) Integrate 1 Wide Skyscraper (160 x 600 pixel) "banner spot" inside Vtiger - Right position. All positions will have support for static media, rich media, video, rich media/video and Google ad sense. Banners on/off on a per installation basis. There is an Open Source ad server in our web server, you can download it and play to see if the ads fit right and don't distort the user interface. Download at: http://www.openx.org/ PART 3: Vtiger internal tabs/buttons: Personalization of vtiger internal labels: Objective is to have some new tabs in the standard Vtiger interface bar to inform users about existing external services. Destination pages are shown inside Vtiger and need no special design. Just let CSS flow? 1) Add E-learning button. With a link to a static "about: e-learning" page with a text and a link to actual E-learning app. 3) Add shop button. With a link to a static "about: shop" page with a text and a link to actual ecommerce site. 4) Add support button. With a link to the support page witch will lists contacts and support options. 5) Add 2 new rows to the vtiger´s company profile. 6) Add 2 new rows to the Invoice. 7) Account cancellation link in the vtiger admin section. (rename directory?) Payment options: a) 100% escrow. or b) 50% when showing working aplication on your server + 50% after 3 days testing in our servers.

Thursday, May 8, 2008

Updated VSTS VPC Available

Brian Randell has just given the official word that there is a new VSTS/TFS 2008 VPC available:

It's no April's Fool day joke.

A new all-up image has been posted. It's been updated with Office SP1, the December 2007 TFS Power Tools, and all Windows Updates.

Also available with it are some labs to help you look at the various aspects of Team System.  And, for that final bit of good news, it won't expire until December 31st, 2008.

Don't forget, you can use Free Download Manager to help you queue up and download all the different ZIP files.

DirectX MVP 2008

This would not have been possible if it wasn't for the people in the community.

Thank you to everyone, SADeveloper.NET, Gamedev.net and the XNA community over at http://creators.xna.com/. These are the communities that have made this possible! Thank you!

If you would like me to come and present a session on XNA or Game Development concepts, please don't hesitate to contact me!


Thank you once again to everyone! 

Share this post: email it! | bookmark it! | digg it! | reddit! | kick it! | live it!

Visual Studio Team Suite vNext "Rosario Express" will be FREE

Auf der MIX-Konferenz in Las Vegas hatte ich die Gelegenheit für eine exklusive Vorstellung im Akquaknox-Restaurant [1] im The Venetian Hotel. Zusammen mit anderen Microsoft Regional Directors und dem neuen Vice President Scott Guthrie durfte ich einen ersten Blick auf die letzten Bits des Visual Studio 2008 Codename "Rosario" werfen. Es handelte es sich hierbei aber nicht um die öffentlich verfügbare CTP-Version [2], sondern um die neue Visual Studio Team System "Rosario Express" Version, die vollständig kostenfrei sein wird.

Die VSTS Express Edition ist auf ein Team von 5 Personen beschränkt und kann nur mit dem TFS Workgroup Edition an einem Standort betrieben werden. Einzige Beschränkung sind maximal 10.000 Work Items pro Solution, mehr werden aber die meisten Projekte onehin nicht brauchen. Die Entscheidung finde ich sehr spannend, insbesondere da die meisten kleinen Teams die Team System Funktionalität sehr wohl benötigen und gut gebrauchen können. Diese Entscheidung wird definitiv zur Verbreitung von Team System beitragen.

Eine öffentliche CTP wird voraussichtlich Ende April verfügbar sein. Vielleicht klappt es noch rechtzeiig zur TeamConf. Aber, wie immer mit den Releases, erstmal abwarten.

[1] http://www.venetian.com/AQUAKNOX.aspx
[2] http://www.microsoft.com/downloads/details.aspx?familyid=8450eff5-24ad-44c3-ab91-1ed88ef2f4f0&displaylang=en

Setting up authentication in asp.net MVC

I wanted to setup user authentication in asp.net MVC, and I wanted it to tie in with the built-in IIdentity and IPrincipal support that is already in asp.net, but I did not want to have to setup asp.net membership services. I wanted to have my own user objects, and I wanted to save/retrieve them through my user repository just like my other domain objects. All of this was done for a demo, so it is certainly not production quality code, but I hope it helps you.

First off I setup my User table in my database, it looks like this:

This is obviously just a start, but it is enough to get the job going. I have dragged this database table onto the Linq To Sql designer and it created my User object like so:

Next in my UserRepository class I have a method that looks like this:

public User GetUserByUsername(string username)
{
    RecipeZoneDataContext context = ContextFactory.GetRecipeZoneContext();
    return (from u in context.Users where u.UserName == username select u).SingleOrDefault();
}

This way when someone tries to login, I can pass their username into this method and it tries to look that user up. You will notice that we use a "SingleOrDefault" method in order to return a single user or "null" in case there is no user by that name. Next I have created a method on my UserController named "Login" that looks like this:

public void Login()
{
    _viewData.Redirect = Request.QueryString["redirect"];
    RenderView("Login", _viewData);
}

Here we are looking for a query string parameter named "redirect" that is going to contain a url that we will redirect to upon successful login. We assign this to our UserControllerViewData class and then pass that to RenderView. The UserControllerViewData is just a class that I use to hold view data for most of the actions on my UserController class.

My Login view is then rendered:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">  
    <%= Html.RenderUserControl("~/Views/Shared/ErrorMessages.ascx") %>
    <%using (Html.Form<UserController>(c => c.LoginValidate(RedirectUrl)))
      { %>
    <table>
        <tr>
            <td>
                Username:
            </td>
            <td>
                <%=Html.TextBox("User.UserName")%>
            </td>
        </tr>
        <tr>
            <td>
                Password:
            </td>
            <td>
                <%=Html.Password("User.Password")%>
            </td>
        </tr>
        <tr>
            <td>
            </td>
            <td>
                <%=Html.SubmitButton("login", "Login")%>
            </td>
        </tr>
    </table>
    <% } %>
</asp:Content>

Here we are using a few of our Html helper methods. We use the Html.Form helper method in order to create our html form as well as to render our url that the form will post back to. I am using the overload that takes an Expression and then renders the url based on the controller type and method that you call on it in the expression. You can see that we are posting back to a different action called "LoginValidate" and we are passing the "RedirectUrl" as a parameter to it.

The LoginValidate controller action looks like this:

public void LoginValidate(string redirect)
{
    if (Models.User.ValidateUser(Request.Form["User.UserName"], Request.Form["User.Password"]))
    {
        if (!String.IsNullOrEmpty(redirect) || String.Compare(redirect, "none", true) == 0)
        {
            Response.Redirect(redirect, true);
        }
        else
        {
            RedirectToAction("", "");
        }
    }
 
    _viewData.ErrorMessages.Add("Invalid username or password.");
    RenderView("Login", _viewData);
}

First we pass our UserName and Password to our User.ValidateUser method. If the user is validated then we check for a redirect and if one exists then we redirect. Otherwise we redirect to a default controller and action. Here we have entered no defaults, you would want to fill them in. If we don't succeed then we add an error message to the view data and redirect back to our Login action. There is a bit of data we have to put into the web.config first though:

<authentication mode="Forms">
  <forms name=".APPNAME" protection="All" cookieless="UseCookies" />
</authentication >

This just sets up our application to use forms authentication, and then sets a few parameters on it. After we have this setup we can now call the ValidateUser method. The ValidateUser method looks like this:

public static bool ValidateUser(string username, string password)
{
    var userRepository = new UserRepository();
 
    User user = userRepository.GetUserByUsername(username);
    if (user == null)
    {
        return false;
    }
 
    if (String.Compare(user.Password, password, false) == 0)
    {
        var authTicket = new FormsAuthenticationTicket(1, username, DateTime.Now,
                                                       DateTime.Now.AddMinutes(30), true, "");
 
        string cookieContents = FormsAuthentication.Encrypt(authTicket);
        var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieContents)
                        {
                            Expires = authTicket.Expiration,
                            Path = FormsAuthentication.FormsCookiePath
                        };
        if (HttpContext.Current != null)
        {
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
        return true;
    }
    return false;
}

We pull the user and if it doesn't exist then we immediately return. Then we compare passwords (yes, there is no encryption at this point, like I said, demo) and if they match then we create our authentication ticket. This is part of the forms authentication system and it lets us specify which user is currently logged in. We create a cookie with our data and write it out, then return true. Pretty simple! This saves our username that is logged in, but what about our roles? We need to be able to tell if someone is a normal user or an administrator. In order to do this we have to implement the Application_AuthenticateRequest method in the global.asax file.

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{            
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null)
    {                
        FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        var identity = new GenericIdentity(authTicket.Name, "Forms");
        var principal = new CustomPrincipal(identity);                                
        Context.User = principal;
    }
}

Here you see how we are pulling the authentication ticket out of the cookie (if it exists) and we are creating a GenericIdentity object (this is because we don't need any additional functionality for our IIdentity class) and then we create an instance of our CustomPrincipal class which is just a class we have created which implements IPrincipal. This interface has the methods for checking roles. In this application I have just put in some simple code to test for roles since I wanted to keep it simple. This class looks like this:

public class CustomPrincipal : IPrincipal
{        
    public CustomPrincipal(IIdentity identity)
    {
        Identity = identity;
    }
 
    public bool IsInRole(string role)
    {
        if (String.Compare(role, "admin", true) == 0)
        {
            return (Identity.Name == "JustinEtheredge");
        }
        else
        {
            return false;
        }
    }
 
    public IIdentity Identity
    {
        get; private set;
    }
}

As you can see we just check for one role, "admin", and I hardcoded it against my username. I could obviously create a table to manage this, but I have not done so. So, now that we all of this setup, how are we going to use these roles? Well, we are going to create custom ActionFilterAttributes! Of course! I want to be able to protect my controller actions like this:

[UserInRole("Admin")]
public void List(int? page)
{
    _viewData.Users = _userRepository.GetUsers();
    RenderView("List", _viewData);
}

This UserInRoleAttribute will now make sure that you are authenticated and that you are in the "admin" role before it will let you access this controller action. If you aren't authenticated then it will forward you to the login page with a redirect to send you back to where you came from. This attribute looks like this:

public class UserInRoleAttribute : ActionFilterAttribute
{
    private readonly string roleName;
 
    public UserInRoleAttribute(string roleName)
    {
        this.roleName = roleName;
    }
 
    public override void OnActionExecuting(FilterExecutingContext filterContext)
    {
        if (filterContext.HttpContext.User.IsInRole(roleName)) return;
 
        //use reflection until they expose this method
        MethodInfo methodInfo = filterContext.Controller.GetType()
            .GetMethod("RedirectToAction",
                       BindingFlags.ExactBinding |
                       BindingFlags.NonPublic |
                       BindingFlags.Instance, null,
                       new[]
                           {
                               typeof (RouteValueDictionary)
                           }, null);
        methodInfo.Invoke(filterContext.Controller,
                          new object[]
                              {
                                  new RouteValueDictionary(
                                      new
                                          {
                                              controller = "User",
                                              action = "Login",
                                              redirect = filterContext.HttpContext.Request.Url.AbsolutePath
                                          })
                              });
    }
}

This class is actually very simple. The constructor simply takes a roleName and saves it. When the action is called the OnActionExecuting method is called and we simply test the current user to see if they are in the saved role. Otherwise we use some reflection in order to call "RedirectToAction" on the controller class since it is private. Hopefully they will implement this method in the ActionFilterAttribute base class, or they will make it public on the Controller class. But for right now this is the easiest way I could find to call it.

So, what else do we need? Well, we need some way for a user to logout. For this I simply added a Logout action that looks like this:

public void Logout()
{
    FormsAuthentication.SignOut();
    RedirectToAction("List");
}

That is all. You just call SignOut and then redirect to whatever action you want. You could also add a redirect parameter here if you wanted, so you could return to whatever page you clicked "logout" on.

So, there you have it. I'm sure that there is something that I am forgetting, but this post is pretty long and I am tired. :) Please let me know if you see anything that I did wrong or could have done differently! I hope you enjoyed it!

How To: Use the XmlDataSource object load XML data to a GridView

Last week I showed you how to read an XML file, load it to a DataSet and assign those values into a GridView. Today I'll show you how you can read an XML file using the XmlDataSource object.

Let's assume that we have an XML file called Symbols.xml in our App_Data folder

that contains the following data

<?xml version="1.0" encoding="utf-8" ?> <Symbols>     <Symbol ExecutionSymbol="ATT" Name="AT&amp;T"></Symbol>     <Symbol ExecutionSymbol="MSFT" Name="Microsoft"></Symbol>     <Symbol ExecutionSymbol="GOOG" Name="Google"></Symbol>     <Symbol ExecutionSymbol="CSCO" Name="Cisco"></Symbol>     <Symbol ExecutionSymbol="IP" Name="International Paper Co."></Symbol>     <Symbol ExecutionSymbol="MF" Name="MF Global"></Symbol>     <Symbol ExecutionSymbol="Q" Name="Qwest Communications International Inc."></Symbol>     <Symbol ExecutionSymbol="BMC" Name="BMC Software Inc."></Symbol>     <Symbol ExecutionSymbol="WCI" Name="WCI Communities Inc."></Symbol>     <Symbol ExecutionSymbol="SPY" Name="SDRs"></Symbol>     <Symbol ExecutionSymbol="LEH" Name="Lehman Brothers Holdings Inc."></Symbol>     <Symbol ExecutionSymbol="XLF" Name="Financial Select Sector SPDR"></Symbol>     <Symbol ExecutionSymbol="QQQQ" Name="PowerShares QQQ TR 1"></Symbol>     <Symbol ExecutionSymbol="IWM" Name="IShare Rus 2000 INDX"></Symbol>     <Symbol ExecutionSymbol="GE" Name="General Electric Co."></Symbol>     <Symbol ExecutionSymbol="MER" Name="Merrill Lynch Co., Inc."></Symbol>     <Symbol ExecutionSymbol="BAC" Name="Bank of America Corporation"></Symbol>     <Symbol ExecutionSymbol="INTC" Name="Intel Corp"></Symbol>     <Symbol ExecutionSymbol="F" Name="Ford Motor Co."></Symbol>     <Symbol ExecutionSymbol="QID" Name="UltraShort QQQ ProShares"></Symbol> </Symbols>

and we want to load it to a GridView with no server-side code and a quick and easy way. The answer is to use the XmlDataSource object. The XmlDataSource control is an ASP.NET control that allows you to automatically read XML Data and make that data readily available to any ASP.NET control.

To start using this control, go to your Toolbox and drag the XmlDataSource control to your page.

Once the control is on the page it would popup a dialog that has configuration options for our XmlDataSource control. Click the "Configure Data Source" button to configure our XmlDataSource

A popup like below will come up that allows you to select the Xml file you want to your XmlDataSource object to read. It also gives you the option to select the XSL file. You can also specify an XPath expression to use to filter the data in our Xml.

Click the "Browse" button for the "Data File" option to select an XML file.

A new dialog will appear that will let you navigate the folder tree to select your desired XML file

Click "Ok" and you'll be taken back to the "Configure Data Source" screen. Click "Ok" again to finalize the XML data assignment.

Now that we have the file set in to our XmlDataSource control we need assign it to a control. We can do that by dragging a GridView control to our form.

Next, we need to assign the XmlDataSource control as the data source for our GridView. We can do this by selecting our XmlDataSource from the "Choose Data Source" dropdownlist.

Click "XmlDataSource1" and you will notice that our GridView was automatically updated and now shows the contents of our XML file.

Easy huh? Next up, Consuming Web Services in ASP.NET

 

Wednesday, May 7, 2008

FxCop Now Targeting Speeding

Almost two months ago, at the February Adelaide Geek Dinner, I was expressing my frustration at one of my Visual Studio solutions taking too long to build and how I would like Visual Studio to build using multiple processors just like the new MSBuild /m parameter.

Paul Stovell made the comment that even with the improvement that multi-core builds was giving me, my solution really shouldn't be taking that long to build. Given that Paul wasn't familiar with my particular project layout and I naturally didn't have a copy with me, the conversation quickly went onto other topics.

However, Paul's comment stayed with me for days after, bugging me every time I waited for the latest build to complete. Then, while staring at the VS Output window during a build, I noticed that most of the time seemed to be spent running FxCop on each project.

I decided to rebuild the solution but this time disabling code analysis via the appropriate build switch. I watched the build time drop from 40 seconds to just 10 seconds by skipping the FxCop process.

Excellent! But given that our entire team runs with Option Strict On, Treat Warnings As Errors, and the Code Analysis Check-in Policy, how could I possibly revert to such a lax build process for the sake of decreased build time?

The answer is to disable Code Analysis in each project's settings (and unfortunately the check-in policy too) but leave it enabled in the Team Build script so it runs and gets reported via the continuous integration build that runs after each check-in. Luckily we've also been running with FxCop for so long that we tend to avoid writing code that would cause violations in the first place.

I met with Paul over the weekend and mentioned my success with better build times. When I told him I had been running FxCop with every build, he just laughed, amazed.

Juggle.com

Well, I can finally start releasing the name of our product / company / web site since 1 - we are officially expanding the team and hiring more people, 2 - the placeholder page is up at juggle.com, and 3 - the CEO accidentally updated her LinkedIn profile two weeks ago.  Oops.  But I can't tell you what we are building yet.

Hey, here is a good way to find out.  Join the company!

Hiring in St. Louis

We are a small web development group looking to expand our team. Plain and simple, we are looking for great developers. We are focused on finding people who have a passion for development and are excited to be part of a team that is developing a leading semantic web application. There's no Ruby, Java or PHP here… Microsoft only.

You will be working in a fast paced environment that deals with a lot of Web 2.0 (I really hate that term) technology.  We value team members who make the internet a part of their lives, not just a place they send their hard work for other people to use.  Here's a quick test.  Which search engine just threw in the towel?  What do Alex and Kevin sit on?  What's the point of Twitter?  What should manager Rob write himself?

What to expect from our environment? 

We have one core rule:  Create great software.  There is no team of red tape police who have locked down your workstation and blocked 50% of the sites on the internet.  No crazy rules about reading blogs or blocking IM. 

Each Monday we start a new development iteration where you will commit to the amount of work you can get done for the week.  Thursday's are code reviews, so no sneaking in a DataSet to get the job done quick.  Friday's are iteration review meeting day where you will demo what you finished during the week.  And every morning is a quick standup meeting.

Qualifications:

  • You should know C# or VB.NET (but you will be using C#), ASP.NET 2.0 or higher and SQL Server 2005.
  • It would be helpful if you also knew AJAX and how to write unit tests.
  • It would be really great if you already knew CSLA or ComponentArt.

The Joel Test results: 11 out of 12.

  1. Do you use source control? (YES)
  2. Can you make a build in one step? (YES)
  3. Do you make daily builds? (YES+)  We believe in continuous integration.  No breaking the build.
  4. Do you have a bug database? (YES)
  5. Do you fix bugs before writing new code? (YES)
  6. Do you have an up-to-date schedule? (YES)
  7. Do you have a spec? (YES)
  8. Do programmers have quiet working conditions? (NO) You will be working in an open area with 4 other developers.
  9. Do you use the best tools money can buy? (YES)
  10. Do you have testers? (YES)
  11. Do new candidates write code during their interview? (YES)
  12. Do you do hallway usability testing?  (YES)

Still interested even after #11?  Then send me an e-mail using the contact form or scott.kuhl@juggle.com.

Technorati Tags: hiring,st. louis,asp.net,juggle.com

Dynamic lookup

A while back Charlie Calvert and Mads Torgersen wrote about dynamic lookup being part of the plans for C# 4.0. A code block specified with the "dynamic" key word will allow dynamic lookup with syntax like follows:

static void Main(string[] args) {     dynamic     {         object myDynamicObject = GetDynamicObject();         myDynamicObject.SomeMethod();         // call a method            myDynamicObject.someString = "value"; // Set a field         myDynamicObject[0] = 25;              // Access an indexer     } }

While this is a welcome feature I want it now! Of course I could resort to reflection but it gets tiresome writing all the code needed just to get a simple field or property so I made a little library that lets me write the previous example as follows:

static void Main(string[] args) {     dynamic     {         object myDynamicObject = GetDynamicObject();         myDynamicObject.Member("SomeMethod").Call();			// call a method            myDynamicObject.Member("someString").Set("value").Call();	// Set a field         myDynamicObject.Member("Item")[0].Set(25).Call();		// Access an indexer     } }

 

This also allows me to access private, protected or internal members of objects and on top of that it can compile functions for invoking the member on several instances of the same type.

I provide the code here but I'm sure there are several bugs in it so please don't use it in your applications as is. Actually please don't use it for anything like that without asking permission first...

#region Using Directives using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Globalization; using System.Reflection.Emit; 

Interactive MAD Fold-ins - coolness

This is awesome, and has nothing to do with tech(found via twitter):

Interactive MAD magazine fold-ins from the sixties to today.

ProfileCommon in WebApps fixed quite easily with no addins required

In my previous post, I was sort of happy to see an update for WebProfile for use in VS08.  The thing is, I really dislike the error you get in the build with this approach, I just can't use that in a production environment.  So... I did some more digging and came across this solution by Jon Galloway.  You should read his article for a full explanation of what is going on.

His samples are in C# which is great, but there are some caveats to doing it in VB.

Here is the same code in VB:

 

    Public Class UserProfile         Inherits ProfileBase          Public Shared Function GetUserProfile(ByVal username As String) As UserProfile             Return CType(Create(username), ProfileBase)         End Function          Public Shared Function GetUserProfile() As UserProfile             Return CType(Create(Membership.GetUser().UserName), ProfileBase)         End Function          <SettingsAllowAnonymous(False)> _         Public Property Description() As String             Get                 Return TryCast(MyBase.GetPropertyValue("Description"), String)             End Get             Set(ByVal value As String)                 MyBase.SetPropertyValue("Description", value)             End Set         End Property          <SettingsAllowAnonymous(False)> _         Public Property Location() As String             Get                 Return TryCast(MyBase.GetPropertyValue("Location"), String)             End Get             Set(ByVal value As String)                 MyBase.SetPropertyValue("Location", value)             End Set         End Property          <SettingsAllowAnonymous(False)> _         Public Property FavoriteMovie() As Integer             Get                 Return CInt(MyBase.GetPropertyValue("FavoriteMovie"))             End Get             Set(ByVal value As Integer)                 MyBase.SetPropertyValue("FavoriteMovie", value)             End Set         End Property     End Class 

When using this approach in VB, I still get some occasional errors in the designer when using SplitView, a recompile makes these go away and the code does indeed run fine.  It seems to be something in the background compiler... I wish Microsoft would fix this silly 4 year old bug.

Anyway, I really like this approach MUCH better than placing the profile data in web.config.  If you are relying on the code and some genius decides to add a field or change the name it will cause any dependent code to go haywire anyway when the CodeSpit is regenerated.

When I am controlling the Fields in Code (where it should be anyway...) That is not a major concern since we know what we are doing when the code changes and its not in an editable file by someone not actually Testing the code.

Therefore, all the other methods have many problems that just aren't worth dealing with when this is simple, elegant, effective and safe.

I also find it much easier to just use an instance rather than some other suggestions of using a Property in a BasePage. 

i.e

Dim prof = UserProfile.GetUserProfile()
or
Dim prof = UserProfile.GetUserProfile(username)

I also found that turning off Automatic updates seems to help with the errors for some reason, with it turned off, I don't seem to get them any more and thus you need to do your saves with an instance or you will have to perform a save after changing any item since getuserprofile will overwrite any unwritten changes to the object because it is creating a new instance every time.

So my resulting web.config looks like this:

<profile automaticSaveEnabled="false"
           enabled="true"
           inherits="ProfileUtility.UserProfile">

This is for the Default Provider, if you use  Custom Provider as well, use the following:

<profile defaultProvider="<YourProviderName>"
           automaticSaveEnabled="false"
           enabled="true"
           inherits="MonetaModel.UserProfile">

IE8 will be the only browser not to support opacity

I recently blogged about that IE8 beta1 currently doesn't have any support for the CSS3 opacity property or the alpha filters that is used in IE5.5/IE6/IE7. Microsoft had noted in one of their whitepapers that they would plan on adding some CSS3 support based on customer feedback. The lack of opacity is one of the most requested features in their bug tracking system, so natually I figured that they were going to add opacity to a future beta.

However, this week the IE team wrote that they are NOT going to include this in IE8 but will consider it for a future version.

This would make IE8 the only browser to not support any form of opacity, and "break" A LOT of exisiting websites, tools etc. that rely on this (including several of Microsoft's own websites and API's). I'm flabbergasted.

If you as me think this is wrong, go and sign up for the IE8 beta program and vote and comment on this issue.

Click here to sign up for the IE8 beta program. Afterwards you should be able to see, vote and comment on the opacity bug entry:

https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=331735

Semantic Web in the news

In scanning new Semantic Web news, I'll be looking out for re-use of data. The momentum around Linked Open Data is great and exciting -- let us also make sure we make good use of the data.

Saved By: James Kim | View Details | Give Thanks

Tags: Semantic Web, Tim Berners-Lee, mashup, re-use of data, Web of data

Book: Fructose ‘missing link’ in obesity epidemic

GAINESVILLE, Fla. — Could the simple sugar responsible for putting the sweet in everything from bananas to root beer be the missing link in understanding what puts the fat on a person’s thighs? Yes, according to a book penned by a University of Florida researcher that was published today.

In his book, “The Sugar Fix: The High-Fructose Fallout That Is Making You Fat And Sick,” Dr. Richard Johnson reviews the increasing evidence that fructose may play a role in the obesity epidemic and proposes a low-fructose diet he believes could help people lose weight and potentially prevent diabetes and cardiovascular disease.

“We recognize that obesity has multiple causes, including eating too much and exercising too little, but we think a missing piece of the obesity puzzle is fructose intake,” said Johnson, the J. Robert Cade professor of medicine and chief of the division of nephrology, hypertension and transplantation in the UF College of Medicine. “It’s not fructose itself that is the problem, but eating too much of it.”

Americans consume nearly three times as much fructose as a century ago, Johnson said. Although the major source of fructose is soft drinks, it’s found in a variety of foods such as fruit, juice, sweetened cereals and pastries.

“We think fructose makes you obese not simply by the calories it provides but because it also tricks hormonal systems that control appetite,” Johnson said. “You don’t get a sense of being full so you keep eating. It (fructose) may also be important in the development of diabetes, kidney disease and heart disease.

“An additional problem is that the more fructose you eat, the more sensitive you become to it,” Johnson said. “If you want to have success losing weight, you have to cut out fructose for two weeks. At that point you are no longer as sensitive and you can resume a low-fructose diet with ease.”

Johnson’s book, which was published by Rodale, contains a diet he developed with nutritionist and dietitian Elizabeth Gollub, as well as tables listing the fructose contents of common foods. Fructose content is not found on most labels.

Unlike other low-carbohydrate diets, which require dieters to reduce all carbs, Johnson’s plan targets fructose. Starchy foods like potatoes and rice aren’t a no-no as in low-carb diets. And after the first two weeks, dieters can resume eating fruit and having treats such as cake in moderation.

“Most people are used to eating about 50 percent of their diet as carbohydrates,” Johnson said “When you cut it way back and have a very high-protein, high-fat diet, it’s very hard to sustain. It’s also not necessarily healthy. What’s great about our diet is we can maintain a normal carbohydrate-protein-fat balance, and when you do that, the diet is much easier to sustain.”

Johnson became interested in fructose while studying hypertension. He and his colleagues discovered that uric acid increased blood pressure in animals and that ingesting fructose seemed to spur production of uric acid. Reducing uric acid in these animals helped control blood pressure and other problems such as pre-diabetes.

“The effect of fructose to cause pre-diabetes and raise blood pressure may be more important than its effects to increase weight,” Johnson said. “Our studies suggest that, even if one can control one’s weight, that excessive intake of fructose may increase the risk for high blood pressure and diabetes. Going on a low-fructose diet will have benefits above and beyond losing weight.”

The research in Johnson’s book came from studies in his own lab as well as from other scientists studying fructose in cells, animals and humans at other institutions, he said.

He also reviews the history of fructose consumption, comparing it with the rise of obesity. The two histories mirror each other, he writes.

Although fructose consumption was already on the rise when high-fructose corn syrup was invented, the introduction of this sweetener in the late 1960s accelerated the increase. High-fructose corn syrup contains about as much fructose as table sugar but is cheaper to produce, leading companies to produce bigger portions of sweets and soft drinks for the same price, Johnson said.

Today, Americans eat 30 percent more fructose than they did in the 1970s and three times as much as in 1900, when the obesity rate was 5 percent, Johnson said. About 33 percent of adults are now overweight or obese, according to the Centers for Disease Control and Prevention.

“After reading this book I found myself looking more carefully at labels, looking specifically for high-fructose corn syrup,” said Dr. Andrew Whelton, an adjunct professor of medicine and the former director of clinical nephrology at Johns Hopkins University. “I was amazed to see it so often.

“Although this book was put together for a lay audience, I thought it would be useful for health-care providers, particularly for anyone who deals with issues of obesity and diabetes.”

Scientists: New technique identifies molecular ‘biomarkers’ for disease

GAINESVILLE, Fla. — University of Florida chemists are the first to use a new tool to identify the molecular signatures of serious diseases — without any previous knowledge of what these microscopic signatures or “biomarkers” should look like.

Reported this month in the online edition of the Journal of Proteome Research, the advance could one day lead to earlier detection and improved treatment of some types of cancer as well as other diseases.

“With many diseases, the problem has been that we really don’t know what to look for,” said Weihong Tan, a professor of chemistry and the lead author of the paper. “What we’ve done is create a technique to identify the biomarkers despite that limitation.”

Doctors often diagnose cancer and other diseases based on the appearance of a tumor or a patient’s symptoms. While such traditional methods can be effective, they sometimes identify a disease only after it is established. For example, clinicians may get tipped off to the presence of lung cancer — which kills more people than any other type of cancer — based on visible images of a tumor that appear on radiological exams of a patient’s lungs.

Because earlier detection typically improves outcomes, doctors would like to spot disease at the molecular level, before it grows or spreads and manifests itself in more obvious and harmful ways. Given that diseased cells’ molecular structures differ from those of healthy ones, that approach should be possible, and researchers have had some success finding such “biomarkers” using antibodies, Tan said. But despite years of research, biomarkers for most diseases remain elusive or unreliable, he said.

His group turned to “aptamers,” single-strand chains of DNA or RNA that recognize and bind to target protein molecules, as a new tool. His paper reports the first-ever successful use of the aptamers to discover a molecular biomarker — in this case, one for leukemia.

Tan said his group used cell-SELEX, a process his group developed and patented.

Researchers create trillions of different varieties of aptamers in a solution. They then immerse cells known to carry the sought-after disease in the solution. After an incubation period, they rinse the cells.

The vast majority of the aptamers wash away, but those with stronger molecular affinity for the diseased cells remain. The researchers repeat the process several times, eventually shrinking the pool of aptamers to as few as 10 to 25 very strongly attached aptamers — those most closely associated with the diseased cells. Analysis then reveals these aptamers’ molecular structure, as well as the molecular structure of the cells’ biomarkers they bind to.

“As long as the molecules in question are expressed in a substantially different way on diseased and normal cells, they can be identified,” Tan said.

Rebecca Sutphen, associate professor and director of the Genetic Counseling & Testing Service at the H. Lee Moffitt Cancer Center & Research Institute in Tampa, said improved diagnosis may not be the only application of the research.

“The opportunity to identify cancer cell-specific biomarkers and potentially detect small numbers of cancer cells has many potential clinical applications, including disease detection, better imaging of tumors and even potential application for stem cells,” she said.

Other biomarkers have been found for leukemia, but none is particularly reliable, Tan said. Tan and his colleagues reported using aptamers to recognize cancer cells in a 2006 paper in the Proceedings of the National Academy of Sciences. Tan said the latest paper advances that work by revealing the target biomarkers the selected aptamers recognize, Tan said. These targets will form a molecular foundation in understanding diseases, he said.

“In 2006, we did not know what the aptamer recognized on the cancer cell surface,” he said. “In this current work, we report discovering these biomarkers, which then form the molecular foundation for us to understand the cancer and to prepare different molecular tools for molecular medicine.”

Tan said the research is particularly promising because aptamers are relatively easy and inexpensive to manufacture compared with antibodies. “This offers the potential for wider application,” he said, adding that aptamers could one day be used not only to detect disease, but also to ferry therapeutic agents to diseased cells.

The research was funded in part with two grants from the National Institutes of Health. It was also funded with two grants from Florida’s Bankhead-Coley Cancer Research Program and one grant from the State of Florida Center of Excellence in Bio/nano sensors.

The paper’s co-authors are Dihua Shangguan, Zehui Cao, Ling Meng, Prabodhika Mallikaratchy, Kwame Sefah, Hui Wang and Ying Li.

UF family finance expert gives top 10 ‘What Not to Do’ list for taxpayers

GAINESVILLE, Fla. — Tax season is one of the most stressful times of the year. And a University of Florida expert cautions against making common mistakes that can complicate matters as we go about accounting for our income with the federal government.

So Michael Gutter, an assistant professor in family financial management with UF’s Institute of Food and Agricultural Sciences, has compiled a list of Americans’ top 10 tax-season gaffes.

1. Not making use of VITA (Volunteer Income Tax Assistance) sites. If your taxes aren’t terribly complicated–you don’t own a business or have a lot of investment income to report–then VITA is an underused resource worth checking out.

“That’s the first thing I would tell people, is to make use of those sites. They have a lot of oversight by state regulatory agencies and the IRS and they’re audited internally before tax forms are sent up and approved and they’re e-filed for free,” he said. “It’s a free service, done by people who literally work with tax code day in and day out.”

Check with your local county extension office or the Florida Prosperity Campaign, www.prosperitycampaign.com, to find your closest VITA site.

2. Not keeping organized records and missing deductions or credits you deserve.

Gutter said taxpayers should keep in mind that the tax code is designed to promote and encourage good-citizen type behavior: Getting an education, taking care of your children, buying a home, giving to charity, etc.

“There are so many opportunities for people to try and save legitimately between deductions and credits,” he said. “A tax credit is a dollar for dollar reduction in your tax liability, so by not taking advantage of it, you’re really giving away your own money.”

3. Not using your kids to your best (tax-saving) advantage.

If you have children, Gutter said, a number of tax credits might be relevant for you. If you have college-age offspring, there are even more.

Go to www.irs.gov and search “education tax credit.”

4. Not realizing that if you’re struggling financially, you might be eligible for the Earned Income Tax Credit, a credit for low-income workers. Even if your income isn’t high enough to require a tax return, you can still get the credit.

Go to www.irs.gov and type “Earned Income Tax Credit” in the search box.

5. Spending your tax-refund windfall instead of filling out IRS Form 8888. The 2-year-old form can be used to automatically funnel your tax refund into one or more accounts, such as a savings account or an IRA or other safe place where you won’t be tempted to spend it on an impulse item.

Go to www.form8888.org

“It helps people with the self-control issue that we all have with money,” Gutter said. “It burns a hole in everyone’s pocket, it just depends on what temperature it burns in your pocket and how fast.”

He advises taxpayers to use tax refunds sensibly: Reduce debt first, put money toward retirement or pay bills.

6. Not realizing you can go back and amend previous years’ returns.

If you find this year that you haven’t been taking a tax deduction you’re legitimately eligible for, Gutter says, it’s perfectly acceptable to go back and file amended returns for those years.

7. Buying into the hype over speedy refund anticipation loans.

Unless you are in a true financial emergency, tax refund anticipation loans are “not typically in people’s best interest,” Gutter said.

The loans are similar to paycheck advance loans, he said. The “refund” you get is generally the refund you would have gotten if you’d waited–minus a fee or interest.

8. Not realizing you can make IRA contributions for the previous year up until tax filing day.
So until April 15, 2008, you can contribute to your IRA for tax year 2007.

9. Delaying filing a return without a good reason.

This just leaves your refund in the government’s hands when it could be accruing interest for you, Gutter said. There are some instances where it might make sense to sit on one’s tax return until the last minute–such as waiting to pay Uncle Sam if you still owe taxes, as a way to keep the money working for you until the last moment.

10. Breaking the law by lying on your taxes or not filing a return at all.

“We always tell people, even if you owe the IRS money, work on it–you’re not going to get away with this for very long,” he said. “And if you don’t know how to file your taxes, get some help. But not filing is not in your best interest.”

Economy slows Florida population growth to lowest level in 30 years

GAINESVILLE, Fla. — The bursting of Florida’s housing bubble and overall economy has also let the air out of the state’s famed population growth, which has shrunk to its lowest levels in three decades, according to the latest projections from the University of Florida.

“A tremendous slowdown is forecast over the next few years compared to what we’ve experienced during the last five years,” said Stan Smith, director of UF’s Bureau of Economic and Business Research. “The state has not experienced a decline of this magnitude since the mid-’70s, when we were in a national recession.”

The Sunshine State is expected to add an average of only about 209,000 residents a year between 2007 and 2010, compared with annual increases of about 418,000 people between 2002 and 2006, he said.

Although Florida remains a major destination for retirees, far more young and middle-aged people move into the state to find work than their older counterparts arrive to retire, Smith said. But declining job opportunities have stanched the influx of younger people, he said.

“The vast majority of Florida’s population growth is due to migration, and during a recession the rate of job creation slows down in Florida,” he said.

The biggest group moving to the state during the last four or five decades has typically been those in their 20s and 30s, with those 65 and older accounting for only about 15 percent of in-migration, Smith said. But younger people in their 20s and 30s also make up the biggest share of those leaving the state, which is why Florida became the nation’s oldest state after World War II, he said.

Robust real estate markets and burgeoning construction fueled Florida’s growth from 2002 to 2006, just as it did during the boom years of 1971 to 1974, Smith said. In turn, the housing market’s decline dramatically curbed population growth after 2006, just as a national recession in the ’70s sharply limited expansion between 1974 and 1977, he said.

Another reason growth typically slows during a recession in addition to the availability of fewer jobs is that people have difficulty selling their houses, which delays their move, he said.

“We’ve certainly seen a slowdown in economic growth nationally, and it’s even possible we may be in a recession right now, although we won’t know for sure until later this year,” he said.

Projections call for Florida’s population to return to more normal growth levels of about 317,000 a year between 2010 and 2020, similar to the 1980s and 1990s, Smith said. Although there also was a slowdown in growth during recessions in the 1980s and 1990s, it was nowhere near the steep decline of the 1970s or that which is taking place now, he said.

“It’s really sort of a boom-and-bust pattern that we have seen in Florida,” Smith said. “The years between 2002 and 2006 were the biggest in terms of absolute increases since the early ’70s, and then just as we experienced in the ’70s we are going from a period of high- to low-growth numbers.”

The county projected to grow the fastest in percentage terms between 2007 and 2010, Lafayette in Florida’s Big Bend, is something of an anomaly because it owes its top spot to prison construction, Smith said. It is predicted to grow from 8,215 in 2007 to 9,200 in 2010, he said.

Otherwise, many of the high-growth counties are the same as in past years, he said.

Flagler, which was the fastest-growing county between 2000 and 2007, jumping from 49,832 to an estimated 93,568, is expected to continue to expand at a rapid rate, to 103,500 by 2010, Smith said. Its coastal location, proximity to Jacksonville and relatively low cost of living, as well as the presence of the large Palm Coast development, contribute to its high ranking, he said.

Other rapidly growing counties are Sumter, which owes its surge in part to prison expansion and the increasing number of residents at The Villages retirement community, and Osceola County, which receives spillover from nearby Orlando.

In terms of absolute numbers, the counties expected to make the biggest gains between 2007 and 2010 are Miami-Dade, from 2,462,292 to 2,512,300; followed by Orange, from 1,105,603 to 1,154,200; and Hillsborough, from 1,192,861 to 1,234,900.