[ del.icio.us poetry ]

http://www.lastampa.it/redazione/default.asp
http://blog.notdot.net/2010/02/Writing-a-twitter-service-on-App-Engine

Writing a twitter service on App Engine

Services that consume or produce Twitter updates are popular apps these days, and there are more than a few on App Engine, too. Twitter provide an extensive API, which provides most of the features you might want to access.

Broadly, Twitter's API is divided into two distinct parts: The streaming API, and everything else. The streaming API is their recommended way to consume large volumes of updates in real-time; unfortunately, for a couple of reasons, using it on App Engine is not practical at the moment. The rest of their API, however, is well suited to use via App Engine, and covers things such as retrieving users' timelines, mentions, retweets, etc, sending new status updates (and deleting them, and retweeting them), and getting user information.

Authentication

Most of Twitter's API calls require authentication. Currently, Twitter support two different authentication methods: Basic, and OAuth. Basic authentication, as the name suggests uses HTTP Basic authentication, which requires prompting the user for their username and password. We won't be using this, since it's deprecated, and asking users for their credentials is a bad idea. The OAuth API makes it possible to call Twitter APIs on behalf of a user without knowing their password, and that's what we'll focus on today.

The key features of OAuth is that every consumer - that's you - needs a 'consumer key' and a 'consumer secret'. As the names imply, the first one is a key that identifies you, while the second is a secret value, known only to you and Twitter. Together, these allow you to prove to Twitter that you are who you say you are. In addition, for each user you authenticate, you'll need to store a user token and a user secret. These operate in the same way as the client token and secret, and allow you to prove to Twitter that you're making legitimate requests on behalf of that client.

In order to get permission to act on behalf of a user, you need to go through an authentication process. This consists of sending the user to a URL on twitter.com, where Twitter asks them if they want to authorize you to use their account. If the user agrees, Twitter redirects the user back to your site, embedding in the URL the details required. After that, you have all the necessary keys and secrets to use the API as that user (until they revoke your access!)

OAuth is a relatively straightforward protocol, but it'd be nice if we didn't have to implement it ourselves. Fortunately, Mike Knapp has already done all the hard work for us, in the form of the AppEngine-OAuth library (that link goes to my own fork of it, which has a few improvements that haven't yet made it into the mainline). This library takes care of all the nitty-gritty of OAuth authentication and making OAuth requests, making things Just Work.

Using AppEngine-OAuth

The first thing you should do is go to Twitter and create an OAuth consumer. Take the key and secret you're given, and store it somewhere - as a configuration variable in your code, or in the datastore, wherever suits. Next, download the library from the link above - you only need the file 'oauth.py', and place it in your app's root.

There are three major components you need to integrate: Sending the user to Twitter to be authenticated, handling the redirect back to complete authentication, and making API calls using the credentials. We'll tackle these in order.

Starting the Authentication process

Initiating authentication is easy. First, construct an oauth.TwitterClient:

consumer_key = "LKlkj83kaio2fjiudjd9...etc"
consumer_secret = "58kdujslkfojkjsjsdk...etc"
callback_url = "http://www.myurl.com/callback/twitter"
 
  client = oauth.TwitterClient(consumer_key, consumer_secret, callback_url)

Here, callback_url should be the complete URL of the callback handler in your app. Next, you can generate a URL and redirect the user to it as follows:

self.redirect(client.get_authorization_url())

Completing Authentication

When the user is done at Twitter, they will be redirected back to the callback URL you provided. Handling this requires constructing another instance of the TwitterClient, as above, and calling get_user_info on it:

class CallbackHandler(webapp.RequestHandler):
  def get(self):
    client = oauth.TwitterClient(consumer_key, consumer_secret, callback_url)
    auth_token = self.request.get("oauth_token")
    auth_verifier = self.request.get("oauth_verifier")
    user_info = client.get_user_info(auth_token, auth_verifier=auth_verifier)

The 'user_info' variable here is a dict containing the relevant information about the authenticated user. Of particular interest is the "token" and "secret" keys, which we need to store to authenticate future requests, and the "username" key, which identifies the user. Services like Twitter also return additional keys - for instance, "name", which is the user's display name, and "picture", a URL to their avatar. If you want to see a real working example of a callback handler, here's Tweet Engine's one.

Making Authenticated Requests

Now that you've authenticated the user and stored their credentials, you can make authenticated requests as them. Again, the OAuth library makes this easy. We once again construct a TwitterClient instance, and call .make_request on it, passing in the URL, the user's OAuth token and secret, as well as any additional parameters:

client = oauth.TwitterClient(consumer_key, consumer_secret, callback_url)

additional_params = {
  status: "Testing Twitter OAuth",
}

result = client.make_request(
    "http://twitter.com/statuses/update.json",
    token=client_token,
    secret=client_secret,
    additional_params=additional_params,
    method=urlfetch.POST)

The 'result' variable, here, is a urlfetch Response object, which you can treat as you would the result of any other urlfetch call. Again, for a real example, you can check out how Tweet Engine does it, though in this case it's slightly complicated by some extra layers of abstraction we haven't covered here.

Rate Limiting

One concern a lot of users have about using Twitter via App Engine is rate limiting. Twitter has two different rate limiting systems: per-IP, and per-app/per-user. This comes up a lot with users of the search API via App Engine, because all App Engine apps make external requests via the same pool of IPs. Authenticated requests, such as those we're making, are all rate limited per app and/or user, so we don't have to be worried about the per IP ratelimits.

That's all there is to using Twitter's OAuth API on App Engine. Have a use-case in mind? Let us know in the comments!

Comments

blog comments powered by Disqus
http://gce.nu/

Email newsletter

Please add me to to the mailinglist

Sign up now

Latest blog entry

Date: 13/08/2010

Prepares an amazing exhibition with the international artist Thierry Feuz (AU) which opens with full boom Friday, August 20.

Read the text

CURRENT EXHIBITION

BEYOND THE HURRICANE / Thierry Feuz (AU)

OPENING RECEPTION / PRIVATE VIEW
FRIDAY AUGUST 20 FROM 4PM - 7PM

Christoffer Egelund Gallery is proud to present the solo exhibition "Beyond the Hurricane" by Austrian artist Thierry Feuz (b. 1968). The exhibition is the artist's second solo show in the gallery and he displays new paintings, drawings and sculptures that present a different view to traditional depictions of flowers and nature. The exhibition "Beyond the Hurricane" opens up to a world of biomorph flowers floating weightless in indefinite monochrome spaces - to pure abstract striped multi-colored canvases, where everything recognizable is dissolved.

With poetic sensibility and a refined hand Thierry Feuz’ creates his paintings using a mix technique of acrylic and lacquer, which highlights and intensifies the colors and gives vibrant life to his semi abstract na...

More about this exhibition

Next in Project Room

Crystel Ceresa (CH)
White Noise
Oct 1 - Oct 30

Next in Main Gallery

Crystel Ceresa (CH)
White Noise
OCT 1 - OCT 30

Copyright Galleri Christoffer Egelund + all rights reserved + no use of images without permission
http://www.treasurydirect.gov/indiv/research/indepth/tbills/res_tbill.htm

RESEARCH CENTER

Treasury Bills In Depth

Treasury bills, or T-bills, are typically issued at a discount from the par amount (also called face value). For example, if you buy a $1,000 bill at a price per $100 of $99.986111, then you would pay $999.86 ($1,000 x .99986111 = $999.86111).* When the bill matures, you would be paid its face value, $1,000. Your interest is the face value minus the purchase price. It is possible for a bill auction to result in a price equal to par, which means that Treasury will issue and redeem the securities at par value.

You can buy a bill in TreasuryDirect or Legacy Treasury Direct, or through a bank, broker, or dealer. The table below shows the types of bills available for purchase by each of those means.

Term **TreasuryDirect Legacy Treasury Direct Bank/Broker/Dealer
4-Week Bill Yes ***No Yes
13-Week Bill Yes Yes Yes
26-Week Bill Yes Yes Yes
52-Week Bill Yes Yes Yes
Cash Management Bills No No Yes

*Treasury rounds to the nearest penny using conventional mathematical rounding methods.

**Effective April 2009, TreasuryDirect permits accounts for both individuals and various types of entities including trusts, estates, corporations, partnerships, etc. See Learn More about Entity Accounts for full information on the new registration types.

***Not sold in Legacy Treasury Direct, but can be transferred into this system after purchase.

You can bid for a bill in two ways:

  • With a noncompetitive bid, you agree to accept the discount rate determined at auction. With this bid, you are guaranteed to receive the bill you want, and in the full amount you want.
  • With a competitive bid, you specify the discount rate you are willing to accept. Your bid may be: 1) accepted in the full amount you want if the rate you specify is less than the discount rate set by the auction, 2) accepted in less than the full amount you want if your bid is equal to the high discount rate, or 3) rejected if the rate you specify is higher than the discount rate set at the auction.

To place a noncompetitive bid, you may use TreasuryDirect, Legacy Treasury Direct, or a bank, broker, or dealer.

To place a competitive bid, you must use a bank, broker, or dealer.

Key Facts:

  • Bills are sold at a discount. The discount rate is determined at auction.
  • Bills pay interest only at maturity. The interest is equal to the face value minus the purchase price.
  • Bills are sold in increments of $100. The minimum purchase is $100.
  • All bills except 52-week bills and cash management bills are auctioned every week. The 52-week bill is auctioned every four weeks. Cash management bills aren't auctioned on a regular schedule.
  • Cash management bills are issued in variable terms, usually only a matter of days.
  • Bills are issued in electronic form.
  • You can hold a bill until it matures or sell it before it matures.
  • In a single auction, an investor can buy up to $5 million in bills by non-competitive bidding or up to 35% of the initial offering amount by competitive bidding.
http://www.pabloburgueno.com/2009/03/clasificacion-de-redes-sociales/
http://d.hatena.ne.jp/kotorikotoriko/20100903/1283449779
Hatena::Diary

ȥꥳ Υڡ򥢥ƥʤɲ RSSե

硼

2010ǯ0903

ͽǯΥɽϥФ

ͽǯ˽ǤƤ®ܤΥɽˤĤƤǤ

®ܤˤĤƤβ

®ܤΥʸˤĤ

Ťɽإ٤äƤ̡Ǻǽ˻ȤäΤϼͼ餷Ǥɡ̡ͤˤޤ궽̣ʤ

ǧȤϤʤǤ

줸ʸϤξǺǽ˻Ȥ줿ΤϲͤΤָŤإ٤Ϲ®ܤ˽Ф褿ΤǡŤäƤդ˿줿ӤǤ

줬λǯ塢ϤʸˤΤޤ޽񤫤ƤΤǡᤤΤͽǯǤ͡õС˸ŤΤФ褽ʴǤ

ʤ®ܤˤϡСȤɥȤ¸ߤƤޤ

Ȥ櫓Ǻϡɴǯι®ܤ˽ФƤ륫ʸҲ𤷤ƹԤȻפޤ

ߤߤȤѤΥʸ

०⥬⥬˥˥㥢̣⥦ռतǤ졼

ߤ̲ꤳƤͤοǤ͡

¥¥󡢥󥬡󡢥󥬥󥬥󥬥

ϤξͤƤ벻Ǥ

Ǻäޤ

ܥܥ㥰˥㥰˥񤭤ޤȡȤߤϥ˥ߥǤФ

ˤȽáޤޤ

ѤΥʸ

ʪʷޤɽ륫ʸǤ

֥áá

ӥ塼á֡󡢤Ĥܡ󥷥á

ƣʼҤ򿶤󤷤Ƥ롣

ޤʷϵФƤޤ͡

äξ֡Ȱİáޤȡۤ餬äȹԤäƻ޴֡ĥФ졢ɡǥݤޤӥ塼֡󡢥ɡ󡢥äȤʤ롣

ƣʼҤͤԤƤͻҤǤ

åϤơɤưȡ饰饫ååȤ羾⺬ȴޤ

åȤΤϾդäѤβȴƿͤ򲥤ȤΤϹδܤǤ

ӥ塼á֡󡢥ӥ塼äȤޤǥƥåǤ⿶󤹤褦ˡ奦奦֤礭ʾϮӤޤΤǡλäۤϡ֡󻰴֤ķ;夲Ƥޤޤ

ƣʼҤȴϮӤʤͤķФޤ

ɥХå֥ݤޤ

ݤޤ

䥨ȥܡǤꤲ뵤ǡɥХåɡ󥺥󡢥⡼

饬饬å㥢ȱŨɶä

饬饬å㥢äƤΤϿͤŨӥåꤵ뤿˸ƣʼҤФǤ

Ͽͤ򻦤ʤ褦ˤ褦ȤθޤʸϻƤФäǤ

ͻѤΥʸ

ȤǤϥ䡼áɥ󡢥á󡢥äȱϤʹޤơΤΤ󥺥󻦤ޤ

ȤǿμԤƣʼҤˤäƥ󥺥󻦤Ƥޤ

䤷Ǥ͡

åååå

ϸƣʼҤ٤ʤͤ򻦤Ƥ̡ؤꤿʤǤ͡

ʼҡ֥áǤɽؽФá००襤á

००襤äȡƣʼҤܤäƤǤɡʤܤ餻ʹ֤Ϥ˻ޤ

ʼ֥㥢Хϼۥá

ĥĤȿȤɤƥݡȽ夲ȡۤ϶̤򽳤ƥå֥֥ȸϻäȻפȥɥ󡢤Ĥ˻¤ͤϡôꤲդȡȭγѤäƿʴʴˤʤäƻǤޤä

֥ҥáĤʹֵͤƨá

ȭγѤäƿʴʴȤǰǤ͡

ܺ

뤤ȤӿǤ뤫ɤ⤳Ϲ뤤ΤǤ뤫ȤͿ㤦夦ƤСѡ

δ䶫̣ͤʬʤ

ʤͤʰʻŻ褿Τ

ɽƤɴǯʾΤΤФꡢ⤿äͤοʹ֤ˤä¤Ƥޤ

ɤƤޤǤ˰ʻŻ򡢤äͤοʹ֤٤ΤʬϤȻפޤ֤ä㤱ä򤹤ȡäФǤ

ޤ®ܤϡȬʸäƷޤäƤޤ

ڡ­ʤܤʤΤʤ餳ʸ̤ϼɬפޤ

˿͵Τ륭餬о줹Ҥϡ夲ΰ٤4ܤˤʤޤ̡Ϣܤ䤹Τ˻Ƥޤ͡

4ܤȻʸ塢ɥޥäȾ餤Ǥɡͤˤ٤롣

Ūäþʹ֤ϫ­ФĤ००襤äȤͤ㤦夦ƤСѡǤ

Ȥ櫓ǺϹܤ˽ФƤ륫ʸˤĤƤΤäǤ

®ܤΤȤ¾ˤ񤤤ƤΤǶ̣ΤͤϤɤ

shaphere939shaphere939 2010/09/03 08:12 줬ΥΥ٤

ѥкΤΥߡǤ⤷ƤⲿϤʤǤ


ȥåХå - http://d.hatena.ne.jp/kotorikotoriko/20100903/1283449779
ޡȥե˺ŬɽǸ
http://www.groupon.co.uk/deals/london
Save up to 90% on exclusive deals: Get access to restaurants, spas, sporting events, cinema tickets and much more...
Sign up here and discover the latest deals:
???stardeals.main.index.deal.mycitydeal??? our email address Choose your city (other city?)  
  • You can unsubscribe from our newsletter at any time
  • We will never share your email address with a third party
Sign up for exclusive daily offers:

- Enjoy amazing savings at your city’s top restaurants, heavenly health spas, premier sporting events, concerts and more ...
- The Groupon UK concept: collective buying means collective savings for all - up to 90%!
Previous Deals
Cinema
just £1
Spa
90% off
Sushi
70% off
Sport
save 80%
http://thedailywh.at/
http://www.naturefootage.com/
Share & Follow
Twitter Facebook WordPress Blog YouTube ShareThis  

NATURE STOCK FOOTAGE

Nature Footage features premium High Definition stock footage for Media Professionals, representing over 250 leading cinematographers worldwide.

Download Free Preview Downloads
Calculator 2x and 3x Fast Forward Playback
Calculator  Stock Footage Pricing Calculator
Clipbin Clipbins for Organizing Your Clip Selections
Clipbin Online Orders with Delivery by Download

NatureFootage now offers Royalty Free with
licensing options starting at $149 per clip!

REGISTER NOW

STOCK FOOTAGE HIGHLIGHTS


NEW ROYALTY FREE COLLECTION

Nature Footage Royalty Free

ROYALTY FREE license options for thousands of video clips: HD, SD, and web & mobile. All footage available for immediate download.

THE NATUREFOOTAGE PREMIUM COLLECTION

Nature Premium Video Footage

View our PREMIUM COLLECTION, video footage that defines creative excellence. These high production value clips, that require big budgets to capture, will change your perception of stock footage.

FEATURED CINEMATOGRAPHER

Nature Footage Professional Cinematographers

Beautiful. Moving. Riveting. Stunning. These are the words that are often used to describe the work of Kevin Railsback.
Browse All Cinematographers

HIGH DEFINITION DEMO REEL

Nature Wildlife Video Footage

View our DEMO REEL showcasing the breadth and diversity of our HD collection. From Macro to Aerial, topside and underwater, the NatureFootage collection is as comprehensive as the natural world.

FREE FOOTAGE RESEARCH

Underwater Stock Footage and Photography Send us a SHOT REQUEST and we'll do the research. With access to an expanding nature library and a global network of cinematographers.

FOOTAGE SEARCH

Footage Search is a powerful business solution. Enable your stock footage web site with the best in search, preview, purchase, and delivery.
 
ORDER ONLINE or call +1-831-375-2313 or 1-866-375-2313 (Toll-Free)


Disclaimer: Stock Footage and Video Clips are licensed by Footage Search. NatureFootage provides high quality video clips of wildlife,
outdoor sports, and travel destinations to provide value to our customers. All of our video footage and nature pictures are copyrighted
and may not taken without a media license and/or written approval. Thank you for visiting Nature Footage.
 
 
http://github.com/facebook/scribe
http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci928405,00.html
ICT
Home > Midmarket CIO Definitions - ICT
SearchCIO-Midmarket.com Definitions (Powered by WhatIs.com)
EMAIL THIS
LOOK UP TECH TERMS Powered by: WhatIs.com
Search listings for thousands of IT terms:
Browse tech terms alphabetically:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #

ICT


DEFINITION - ICT (information and communications technology - or technologies) is an umbrella term that includes any communication device or application, encompassing: radio, television, cellular phones, computer and network hardware and software, satellite systems and so on, as well as the various services and applications associated with them, such as videoconferencing and distance learning. ICTs are often spoken of in a particular context, such as ICTs in education, health care, or libraries. The term is somewhat more common outside of the United States.

According to the European Commission, the importance of ICTs lies less in the technology itself than in its ability to create greater access to information and communication in underserved populations. Many countries around the world have established organizations for the promotion of ICTs, because it is feared that unless less technologically advanced areas have a chance to catch up, the increasing technological advances in developed nations will only serve to exacerbate the already-existing economic gap between technological "have" and "have not" areas. Internationally, the United Nations actively promotes ICTs for Development (ICT4D) as a means of bridging the digital divide.

LAST UPDATED: 14 Jan 2004

Do you have something to add to this definition? Let us know.
Send your comments to techterms@whatis.com

More resources from around the web:
- SearchMobileComputing explains "Wireless for really remote folks."
- An Intel IT Paper looks at "ICT: Addressing the ICT skills shortage in Europe."
- An Issues Paper from the UN looks at "Information and Communications Technology for Development" in greater depth.





FILE EXTENSION AND FILE FORMAT LIST
File Extension and File Format List:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #










Mid-market CIO ICT Research and Reports
About Us  |  Contact Us  |  For Advertisers  |  For Business Partners  |  Site Index  |  RSS
SEARCH 
TechTarget provides technology professionals with the information they need to perform their jobs - from developing strategy, to making cost-effective purchase decisions and managing their organizations' technology projects - with its network of technology-specific websites, events and online magazines.

TechTarget Corporate Web Site  |  Media Kits  |  Reprints  |  Site Map




All Rights Reserved, Copyright 2007 - 2010, TechTarget | Read our Privacy Policy
  TechTarget
http://www.cyanogenmod.com/

postheadericon CyanogenMod-6.0!

CyanogenMod-6.0 is hitting the mirrors right now! This is our first stable release based on Android 2.2, and we’ve hit our target list of devices. I’m completely amazed at what this project has become and the community that has developed around it, and it’s only just getting started.

You can get your CM-6 fix with ROM Manager, or head over to our forums and pick your device. You can also find all things CM-related on the relevant forums at XDA.

Thank you to everyone who’s contributed and everyone who’s supporting us!

postheadericon CyanogenMod Games Clan

So, whilst we were talking in our IRC channel, a group of us were discussing about how a lot of us all love playing online games, on various platforms.

So, I came up with the idea of a CM Games Clan, that being -=CMC=-

It’s still early days at the moment, but the intention will be to have as many CyanogenMod users all forming a massive games clan, probably the biggest in the world? Who knows!

I’m currently working on a new section of the website that will be specifically for the clan. For now, I’ve also created an IRC channel dedicated to the clan, so discussion can take place there.

Moderators for each platform / game will also be required, come and join us on IRC @ Freenode #cmclan

Love or Hate? Feedback is appreciated.

@SatanR1

*Edit: I’ve now created the Steam group : http://steamcommunity.com/groups/cyanogenmod

I’ll work on integrations and other coolness for the website shortly …… thanks for the feedback so far!

postheadericon Gerrit Source Code Review

CyanogenMod has taken a huge step forward in terms of organization over the past few months.  You may have noticed a recent move to a Github Organization, which makes administration of the source code repositories much easier.

Unfortunately, Github’s fork system doesn’t really work all that great when you have as many contributors sending code changes through as CyanogenMod does.  Because of this, we have decided to implement our own Gerrit instance.  Gerrit is developed by Google and used primarily for source code review for the Android project, so it should be familiar to anybody that has made code submissions to AOSP.

If you have contributed code in the past, or would like to help us review submissions, head over to http://review.cyanogenmod.com/ and sign up.  We are using Gerrit effective immediately, and your changes will be reviewed and make their way into the CyanogenMod source much quicker if you use Gerrit.

If you need help, I’ve created a wiki article which is currently a work in progress, however it should help get you started.

Thanks for all your contributions!  CyanogenMod wouldn’t be where it is today without the great community of developers that we have.

@ChrisSoyars

PS – I’ll be writing a blog post soon on our continuous integration setup using Buildbot, an amazing open source product.

postheadericon CyanogenMod-6.0 Status Update

A new round of release candidates went out this weekend for all of our supported devices with a lot of new features. It’s time to switch to bugfix mode and get an actual release out. Head over to the download section/forums to get the latest release candidates and nightly builds.

Supported devices for 6.0:

  • Nexus One
  • Motorola Droid
  • HTC EVO
  • HTC Desire
  • HTC Incredible
  • HTC Hero (GSM/CDMA)
  • HTC Dream
  • HTC Magic
  • HTC Aria
  • MT3G Slide
  • Things that aren’t in 6.0. but may be in 6.1

  • Vibrant support
  • Wimax, HDMI, or FM radio on the EVO
  • Apps2EXT
  • CM6.. Coming soon to a phone near you!

    Here’s something to ponder.

    postheadericon CyanogenMod-6.0.0-RC3 – Nexus One

    Latest version: 6.0.0-N1-RC3 – 08/15/2010
    Download: CLICK HERE
    Mirror: CLICK HERE
    MD5Sum: e78d66969e4288877ea86bb6d1da9696

    Google Addon: HDPI-20100814
    Mirror: CLICK HERE
    Mirror: CLICK HERE

    Radio Firmware: 4.0.6.00.12_7 (FROYO RADIO, REQUIRED!)
    Download: CLICK HERE
    MD5Sum: 3321c196d8ec1cf748fd20c3c4068520

    Check here: CM Forums | XDA Forums

    Enjoy, and don’t forget there is also a newer version of Google Apps!

    /SatanR1

    postheadericon CyanogenMod-6.0.0 RC1

    It’s been a few weeks of work, and a great effort from everyone involved! I’d like to present the first CM6 release candidates for the Nexus One, Dream, and Magic phones! Versions for other devices are on the way.

    Check out the CHANGELOG for a full list of features and contributors.

    It’s available for download via ROM Manager, or direct links can be found in the links below:

    Nexus One: CM Forums | XDA Developers

    Dream & Magic: CM Forums | XDA Developers

    postheadericon CyanogenMod-6 Progress

    It’s been just under a week since Google released Froyo (Android 2.2) into the open-source world and we’ve made great progress on CyanogenMod-6 already. Approximately 20 of us on the CM team are working hard on merging all of the community-developed extras in, as well as porting to new devices. Google did a great job and really gave us the best foundation to start from this time around.

    Here’s where we stand so far.. Most of the CyanogenMod extras have been merged. Some features are being reworked (like trackball settings), new device ports are well underway. The first devices to see CM6 experimental releases will most likely be the Nexus One and Droid simply because those are the devices that “just work”. The Dream/Sapphire port has everything working but one small issue remains. Wes Garner has the Slide port well underway. I don’t have a status report of the Desire, Incredible, and Evo versions at this time.

    I’m expecting that we should have some experimental releases by the weekend, but please don’t spam us asking for ETAs.. We are just as excited to get this out as you are :)

    You can follow our progress on Github or drop by irc.freenode.net in #cyanogenmod or #koush.

    Regarding updates to CM5.. A small update will be coming this weekend to fix a few bugs but the focus will remain on CM6!

    Thanks to everyone who has been supporting us with testing, bugfixing, code, new features, and of course donations. CM is what it is because of the community. Thank you!

    postheadericon New Website Design!

    Well, without stating the obvious the CyanogenMod website has been completely re-designed with a custom theme.

    The theme now blends in more in line with our Forum and soon to follow also the Wiki.

    I’m now working on the integration and other features between the CM Web portfolio. These are taking longer to develop and may take a bit more time before the implementation is fully in place.

    Until then, enjoy your new CyanogenMod website!

    SatanR1

    Recent Comments
    Daily Stats

    16,414
    Unique
    Visitors
    Powered By Google Analytics
    .
    http://www.latartinegourmande.com/2008/10/21/curried-winter-squash-soup-red-lentil-coconut-milk-clams/
    http://tympanus.net/codrops/2010/03/09/a-fresh-bottom-slide-out-menu-with-jquery/
    http://oauth.net/

    For Consumer developers...

    If you're building...

    • desktop applications
    • dashboard widgets or gadgets
    • Javascript or browser-based apps
    • webpage widgets

    OAuth is a simple way to publish and interact with protected data. It's also a safer and more secure way for people to give you access. We've kept it simple to save you time.

    For Service Provider developers...

    If you're supporting...

    • web applications
    • server-side APIs
    • mashups

    If you're storing protected data on your users' behalf, they shouldn't be spreading their passwords around the web to get access to it. Use OAuth to give your users access to their data while protecting their account credentials.

    Learn more about the emerging OAuth 2.0 work.
    http://wordpress.bytesforall.com/

    ThemeFrame Release is getting closer - Last chance to get into the Beta Users group

    ThemeFrame is at Beta 11 now

    The opportunity to get an unlimited lifetime license for only $80 will be over soon. The price of the official release will be significantly higher, but this won”t affect existing Beta users.As of today there are over 500 Beta users.

    To get ThemeFrame Beta, visit ThemeFrame  and see the 3-step process described at the bottom of the page.

    Here is a new ThemeFrame Video, here is the Forum where you can ask Presales questions, and here’s a current screenshot:

    ..

    ThemeFrame is a very visual WordPress Theme Creation tool that runs on your desktop, in a browser. It creates unlimited standalone, white-label WP themes that you can use on unlimited sites for an unlimited time, you can even distribute/sell/give away the themes you create with ThemeFrame.

    ThemeFrame is not a WP theme itself, it does not install inside Wordpress and does not require Wordpress to run. Themes created with ThemeFrame don’t need ThemeFrame to run, they are standalone Themes in their own right.

    Some Highlights:

    • Drag & Drop Layout items
    • CSS Inspector with Live Preview
    • Color Pickers & Size Sliders
    • Creates Standalone Themes
    • Creates White-Label Themes
    • Browser-Safe, incl. IE 6
    • Up to 6 Sidebars
    • Over 20 custom widget areas
    • Export / Import Themes
    • FTP Transfer built in
    • … actively developed, with active forum, with moderators

    Atahualpa 3.5.3 released

    This release includes several bug fixes, special thanks to Paul / Juggledad for finding & fixing these:

    Download Atahualpa Version 3.5.3

    Downloaded a total of 14902 times

    Check out the Forum to discuss Atahualpa with other users

    Atahualpa 3.5.2 released

    New in 3.5.2:

    • New WP 3+ menu system integrated with 2 “Menu Locations”: “Menu 1″ and “Menu 2″. The old “Page Menu Bar” and “Category Menu Bar” keep working if you don’t setup a menu with the new system.  You can also use 1 new menu and 1 old menu, i.e. “Menu 1″ and “Category Menu Bar”. Only 2 menus total can be used at a time.
    • Style Export/Import system now in JSON format instead of serialized/base64_encode which leads to the following issue IF you exported a settings file in 3.5.1:
    • If you have a custom style that you exported in Atahualpa 3.5.1 (=base64), and you want to import that into Atahualpa 3.5.2 (JSON) then you’d need to do some legwork: Download this zip file , extract it, rename the file “uploadBASE64.php” to “upload.php” and replace the existing “upload.php” inside 3.5.2 with this new file. This adds the missing base64 functionality back into 3.5.2. The reason that this isn’t simply integrated in 3.5.2 is that Wordpress.org won’t list the theme that way because base64 tends to be misused to hide malicious code etc. - I should have thought about that.
    • If you don’t have existing styles that you want to import then you do not need to do the steps described above

    Download Atahualpa Version 3.5.2

    Downloaded a total of 2186 times

    Check out the Forum to discuss Atahualpa with other users

    Atahualpa 3.5.1 released

    This is a relatively good version. I suggest that you upgrade unless you’re completely happy with your current version. Updating just means uploading the new theme directory (/atahualpa351/) into /wp-content/themes/ so that you end up with /wp-content/themes/atahualpa351. Then choose the new theme (version) at WP Admin -> Appearance -> Themes.

    This version has smooth animation for the page and category menu bars, and a new default style in addition to the existing new styles.Discuss this release at the forum

    Download Atahualpa Version 3.5.1

    Downloaded a total of 19041 times

    P.S.: The menu bar animation doesn’t display properly in IE, at least in certain cases. It will be fully browser compatible in the next Atahualpa version. Note: This animation is not turned on by default. See Atahualpa Theme Options.

    How to import other styles: There are several additional styles in /atahualpa/styles/ such as “ata-round.txt” etc… You can start using these new styles by importing these style files into Atahualpa, see Atahualpa Theme Options.

    Athualpa 3.5.0 released

    This has fading header images as a new feature plus a new style, see /atahualpa/styles/ata-adsense.txt

    Discuss this release at the forum

    Download Atahualpa Version 3.5.0

    Downloaded a total of 2652 times

    Thanks for the Belorussian translation by Patricia

    Check the languages section of the forum for this and other translations. I will update this list and link to other translators as well.  Feel free to send me a PM on the forum if you don’t appear here within the next weeks.

    Atahualpa 3.4.9 released

    This works for me both locally and on the web server. If the new settings don’t get picked up try restarting your browser, it might be a caching issue. That’s not to say that this is guaranteed bug-free.

    Download Atahualpa Version 3.4.9

    Downloaded a total of 4378 times

    Atahualpa 3.4.8 released

    Still some issues… 3.4.9 is coming Sunday May 9, 2010, late evening.

    -> Monday May 10, 2010

    Please try this version 3.4.8 as 3.4.7 didn’t use existing settings. (Additionally, the download link was broken due to a missing slash http:// )

    The changes since 3.4.6 are rather huge so yet another update (3.4.9) may be required until everything runs smooth again.

    Download Atahualpa Version 3.4.8

    Downloaded a total of 2561 times

    Note: The first 8 downloads had one little image path issue (hardcoded path to widget lists bullets in default style ata-default.txt, using one of my domains). Please download again if you have no little round bullets in widget lists, in the new “default style”:

    Atahualpa 3.4.7 released, with Import/Export feature

    3.4.7 has several bug fixes http://forum.bytesforall.com/showthread.php?t=5279 and a long awaited new feature, a style import/export feature, including 2 extra styles (one being the old, “classic” style), and the DB queries are reduced from 200+ to 1 per pageview.

    Download Atahualpa Version 3.4.7

    Downloaded a total of 2531 times

    Atahualpa 3.4.6 released

    The post thumbnail size couldn’t be changed, and this bug also affected the “Configure Excerpts” options, see http://forum.bytesforall.com/showthread.php?t=5750

    Please ask questions at the BFA Wordpress Forum

    Download Atahualpa Version 3.4.6

    Downloaded a total of 11884 times

    ThemeFrame at Beta 6 now

    We are at Beta 6 now and moving forward quickly.

    Get lifetime access to ThemeFrame with a donation of $80 at forum.bytesforall.com.

    HowTo: Become a (free) member at forum.bytesforall.com first, then - while being logged in at the forum - make your donation by clicking the Donate button, then send a PM (Private Message) to Flynn to get added to the ThemeFrame user group (already over 300 users!).

    Once the ThemeFrame Release Candidate 1 is available - which won’t take very long from now on -   this opportunity for early adopters will be gone, and ThemeFrame will cost well over $100.

    If you get in now you only pay the reduced price of $80 and get lifetime access to all future upgrades of ThemeFrame.

    What is ThemeFrame? ThemeFrame is a WordPress Theme creation application for Windows & Mac.

    • “WYSIWYG” (What you see is what you get) functionality
    • Drag & Drop
    • Live Preview
    • Creates white-label, standalone WordPress Themes.
    • No coding (neither PHP nor CSS) required.
    • Thousands of settings, all done with the mouse - no coding
    http://strobox.com/photos

    (287) Total Photos

    of 19

    Category

    Lights

    Sort By

    4839956099_d00930cfc2_o.jpg

    No comments yet

    RB_Session_-551-Edit.jpg

    No comments yet

    4_X_6.jpg

    No comments yet

    Lemon.jpg

    No comments yet

    Denise2.jpg

    No comments yet

    family.jpg

    No comments yet

    10-01-01_089.jpg

    (1) Comment

    fight08a.jpg

    (3) Comments

    face.jpg

    No comments yet

    IMG_4188a_(Custom).JPG

    (1) Comment

    4951109073_69fa49d2df_o.jpg

    (1) Comment

    2010_Makenzie_HatField-1.jpg

    No comments yet

    Brandon_Colbert_003San_Diego_Photographer_1.jpg

    No comments yet

    Dana2_copy.jpg

    No comments yet

    00014_13.12_.jpg

    No comments yet

    00012_13.04_.jpg

    No comments yet

    00011_13.01_.jpg

    No comments yet

    (287) Total Photos

     |    Showing

    photos per page

    http://www.sfsn.ethz.ch/
    printlogo
    ETH Zuerich - Startseite
    Swiss Forum for Sport Nutrition
     
    Deutsch English

    Swiss Forum for Sport Nutrition

    Herzlich willkommen beim

    Schweizer Kompetenzzentrum für Sporternährung

    Das Kernstück unserer Webseiten bilden die aktuellen und fundierten Informationen zur Sporternährung »»

    Das Swiss Forum for Sport Nutrition legt Wert auf wissenschaftlich fundierte und aktuelle Informationsvermittlung. Sobald neueste wissenschaftliche Erkenntnisse erhärtet sind, werden diese laufend in die Webseiten integriert.
    tri_rad_lang
     

    Wichtiger Hinweis:
    Diese Website wird in älteren Versionen von Netscape ohne graphische Elemente dargestellt. Die Funktionalität der Website ist aber trotzdem gewährleistet. Wenn Sie diese Website regelmässig benutzen, empfehlen wir Ihnen, auf Ihrem Computer einen aktuellen Browser zu installieren. Weitere Informationen finden Sie auf
    folgender Seite.

    Important Note:
    The content in this site is accessible to any browser or Internet device, however, some graphics will display correctly only in the newer versions of Netscape. To get the most out of our site we suggest you upgrade to a newer browser.
    More information

    © 2010 Swiss Forum for Sport Nutrition, ETH Zürich | Impressum | Disclaimer | 22.2.2010
    top
    http://blog.andreaskahler.com/2010/03/google-appengine-google-docs-some.html

    March 9, 2010

    Google AppEngine + Google Docs + Some Python = Simple CMS

    I was looking for a CMS that could run on the Google App Engine lately. As the free quotas are pretty high, a GAE powered CMS would make sense for small personal web pages that do not get too much traffic and have to run on a tiny budget. There are some CMSes (e.g. the App Engine Site Creator) but I didn't like them a lot. They are either too restricted or don't seem to have a large user base which makes their future uncertain. Also, as the GAE datastore is not a standard database, you have additional issues: How to backup? Possibility to migrate to another host? How to import or export of data?
    My search ended without having found something I really liked...

    But while searching, I had an idea: Why not just use a spreadsheet hosted on Google Docs as the base for a CMS? It has a couple of advantages:
    • Simple, everybody knows how to use a spreadsheet application
    • you get an online editor for free
    • Google Docs does versioning, so it's easy to roll back changes
    • Backup/restore and import/export is simple
    The GAE app would only need to pull the data from the spreadsheet, apply some post-processing and output it. Not really much for the app to do, so I decided to write a little prove-of-concept application. I was using the following ingredients
    • Google App Engine SDK for Python
    • gdata-python-client, the Python version of the Google Data API to access the spreadsheet
    • Mako, a templating system for Python
    • and some code to glue these together
    The app expects 2 tables to be present in the spreadsheet: pages and templates. Both need a content column, the templates table also needs a name column. That's it. It could look like this:

    templates:


    pages:


    There are 2 templates defined, main and defs. The template main is the base template for the html output, defs holds some Mako style methods (more on whose later).

    The pages table holds 3 pages. The first one is used as the root document, the others can be got via http://<host>/page/<id>. The content is treated as a Mako template, references to other templates are resolved by looking up the name in the templates table. Therefore the first two lines load methods from the defs template and make the page inherit from main:


    <%namespace import="*" file="defs" />
    <%inherit file="main"/>


    The page content invokes 2 methods, image() and page(). The methods make use of global objects that are injected into the global Mako template context:

    • pageid, which is the id of the page currently rendered
    • page, representing the current page row, a dict with the column names as keys
    • db, the Database object. Row objects can be retrieved like this:
      db.<table>[<row_no>]['<col_name>']

    Using the db object any table of the spreadsheet can be accessed. This way the system can be extended in a really easy way. In out little example this is used for the image() method. References to images are stored in a table called images and are referenced by an id:




    <%def name="image(id)">
    <img src="${db.images[id]['url']}" alt=""/>
    </%def>


    When rendering the root url, this now results in:


    <html>
    <head><title>Welcome!</title></head>
    <body>
    <h1>Welcome!</h1>
    <p>

    <p>Some text</p>
    <img src="http://www.andreaskahler.com/me.png" alt=""/>
    <br/>
    <a href="page/2">link to page 2</a>

    </p>
    this is the footer
    </body>
    </html>

    Not really a useful page, but you get the idea.

    The python code for the whole thing looks like this:

    #!/usr/bin/env python

    import sys
    import logging
    import cgi
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp import util
    import gdata.spreadsheet.text_db

    from mako.template import Template
    from mako.lookup import TemplateLookup
    from mako.runtime import Context
    from StringIO import StringIO

    email = 'your.google.account@gmail.com'
    password = 'yourpasswd'
    spreadsheet = 'spreadcms' #name of spreadsheet
    table_pages = 'pages'
    table_templates = 'templates'
    col_name = 'name'
    col_content = 'content'

    class Db:
    """ wrapper for the spreadsheet. places the tables into its __dict__ """
    def __init__(self):
    self.client = gdata.spreadsheet.text_db.DatabaseClient(username=email, password=password)
    self.db = self.client.GetDatabases(name=spreadsheet)[0]
    for table in self.db.GetTables():
    name = table.entry.title.text
    self.__dict__[name] = Table(self, name)

    def getTableRecord(self, table, row_no):
    return self.db.GetTables(name=table)[0].GetRecord(row_number=row_no).content


    class Table:
    """ wraps a spreadsheet table. access rows with their index (starting with 1) """
    def __init__(self, db, table):
    self.db = db
    self.table = table

    def __getitem__(self, index):
    return self.db.getTableRecord(self.table, index)



    class MainHandler(webapp.RequestHandler):
    """ the main web request handler """
    def connect(self):
    try:
    self.db = Db()
    except gdata.spreadsheet.text_db.Error, err:
    self.response.out.write(err)
    return False
    return True

    def get(self):
    if not self.connect():
    return

    # get page id, default to 1
    pageid = 1
    parts = self.request.path.strip('/').split('/')
    if len(parts)==2 and parts[0]=="page":
    try: pageid = int(parts[1])
    except ValueError: pass

    page = self.db.__dict__[table_pages][pageid]

    mylookup = TemplateLookup(filesystem_checks=False)

    #load all templates
    i = 1
    while True:
    try:
    template = self.db.__dict__[table_templates][i]
    mylookup.put_template(template[col_name], Template(template[col_content], lookup=mylookup))
    except:
    break
    i+=1

    content = page[col_content] or ""

    # invoke Mako
    try:
    t = Template(content, lookup=mylookup)
    mylookup.put_template("_page"+str(pageid), t)
    s = t.render(page=page, pageid=pageid, db=self.db)
    self.response.out.write(s)
    except Exception,e:
    s = "<h1>Error</h1>"
    s += "<pre>" + cgi.escape(str(e)) + "</pre>"
    s += "<h1>Page</h1>"
    s += "<pre>" + cgi.escape(page[col_content]) + "</pre>"
    self.response.out.write(s)


    def main():
    application = webapp.WSGIApplication([('/', MainHandler),
    ('/page/[0-9]+', MainHandler)],
    debug=True)
    logging.getLogger().setLevel(logging.DEBUG)
    #logging.getLogger().setLevel(logging.WARNING)
    util.run_wsgi_app(application)


    if __name__ == '__main__':
    main()



    Of course this is not production-ready code. A lot of error handling is missing and one needs a proper way to handle the gdata login captcha requests (I guess storing a valid token would work). There is also no caching implemented.

    This of course is not intended to replace a full-blown CMS. But I guess if you would spend some time fixing these things, this could be suitable for small web sites, where all content is more or less static.
    Google AppEngine + Google Docs + Some Python = Simple CMS
    I was looking for a CMS that could run on the Google App Engine lately. As the free quotas are pretty high, a GAE powered CMS would make sense for small personal web pages that do not get too much traffic and have to run on a tiny budget. There are some CMSes (e.g. the App Engine Site Creator) but I didn't like them a lot. They are either too restricted or don't seem to have a large user base which makes their future uncertain. Also, as the GAE datastore is not a standard database, you have additional issues: How to backup? Possibility to migrate to another host? How to import or export of data?
    My search ended without having found something I really liked...

    But while searching, I had an idea: Why not just use a spreadsheet hosted on Google Docs as the base for a CMS? It has a couple of advantages:
    • Simple, everybody knows how to use a spreadsheet application
    • you get an online editor for free
    • Google Docs does versioning, so it's easy to roll back changes
    • Backup/restore and import/export is simple
    The GAE app would only need to pull the data from the spreadsheet, apply some post-processing and output it. Not really much for the app to do, so I decided to write a little prove-of-concept application. I was using the following ingredients
    • Google App Engine SDK for Python
    • gdata-python-client, the Python version of the Google Data API to access the spreadsheet
    • Mako, a templating system for Python
    • and some code to glue these together
    The app expects 2 tables to be present in the spreadsheet: pages and templates. Both need a content column, the templates table also needs a name column. That's it. It could look like this:

    templates:


    pages:


    There are 2 templates defined, main and defs. The template main is the base template for the html output, defs holds some Mako style methods (more on whose later).

    The pages table holds 3 pages. The first one is used as the root document, the others can be got via http://<host>/page/<id>. The content is treated as a Mako template, references to other templates are resolved by looking up the name in the templates table. Therefore the first two lines load methods from the defs template and make the page inherit from main:


    <%namespace import="*" file="defs" />
    <%inherit file="main"/>


    The page content invokes 2 methods, image() and page(). The methods make use of global objects that are injected into the global Mako template context:

    • pageid, which is the id of the page currently rendered
    • page, representing the current page row, a dict with the column names as keys
    • db, the Database object. Row objects can be retrieved like this:
      db.<table>[<row_no>]['<col_name>']

    Using the db object any table of the spreadsheet can be accessed. This way the system can be extended in a really easy way. In out little example this is used for the image() method. References to images are stored in a table called images and are referenced by an id:




    <%def name="image(id)">
    <img src="${db.images[id]['url']}" alt=""/>
    </%def>


    When rendering the root url, this now results in:


    <html>
    <head><title>Welcome!</title></head>
    <body>
    <h1>Welcome!</h1>
    <p>

    <p>Some text</p>
    <img src="http://www.andreaskahler.com/me.png" alt=""/>
    <br/>
    <a href="page/2">link to page 2</a>

    </p>
    this is the footer
    </body>
    </html>

    Not really a useful page, but you get the idea.

    The python code for the whole thing looks like this:

    #!/usr/bin/env python

    import sys
    import logging
    import cgi
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp import util
    import gdata.spreadsheet.text_db

    from mako.template import Template
    from mako.lookup import TemplateLookup
    from mako.runtime import Context
    from StringIO import StringIO

    email = 'your.google.account@gmail.com'
    password = 'yourpasswd'
    spreadsheet = 'spreadcms' #name of spreadsheet
    table_pages = 'pages'
    table_templates = 'templates'
    col_name = 'name'
    col_content = 'content'

    class Db:
    """ wrapper for the spreadsheet. places the tables into its __dict__ """
    def __init__(self):
    self.client = gdata.spreadsheet.text_db.DatabaseClient(username=email, password=password)
    self.db = self.client.GetDatabases(name=spreadsheet)[0]
    for table in self.db.GetTables():
    name = table.entry.title.text
    self.__dict__[name] = Table(self, name)

    def getTableRecord(self, table, row_no):
    return self.db.GetTables(name=table)[0].GetRecord(row_number=row_no).content


    class Table:
    """ wraps a spreadsheet table. access rows with their index (starting with 1) """
    def __init__(self, db, table):
    self.db = db
    self.table = table

    def __getitem__(self, index):
    return self.db.getTableRecord(self.table, index)



    class MainHandler(webapp.RequestHandler):
    """ the main web request handler """
    def connect(self):
    try:
    self.db = Db()
    except gdata.spreadsheet.text_db.Error, err:
    self.response.out.write(err)
    return False
    return True

    def get(self):
    if not self.connect():
    return

    # get page id, default to 1
    pageid = 1
    parts = self.request.path.strip('/').split('/')
    if len(parts)==2 and parts[0]=="page":
    try: pageid = int(parts[1])
    except ValueError: pass

    page = self.db.__dict__[table_pages][pageid]

    mylookup = TemplateLookup(filesystem_checks=False)

    #load all templates
    i = 1
    while True:
    try:
    template = self.db.__dict__[table_templates][i]
    mylookup.put_template(template[col_name], Template(template[col_content], lookup=mylookup))
    except:
    break
    i+=1

    content = page[col_content] or ""

    # invoke Mako
    try:
    t = Template(content, lookup=mylookup)
    mylookup.put_template("_page"+str(pageid), t)
    s = t.render(page=page, pageid=pageid, db=self.db)
    self.response.out.write(s)
    except Exception,e:
    s = "<h1>Error</h1>"
    s += "<pre>" + cgi.escape(str(e)) + "</pre>"
    s += "<h1>Page</h1>"
    s += "<pre>" + cgi.escape(page[col_content]) + "</pre>"
    self.response.out.write(s)


    def main():
    application = webapp.WSGIApplication([('/', MainHandler),
    ('/page/[0-9]+', MainHandler)],
    debug=True)
    logging.getLogger().setLevel(logging.DEBUG)
    #logging.getLogger().setLevel(logging.WARNING)
    util.run_wsgi_app(application)


    if __name__ == '__main__':
    main()



    Of course this is not production-ready code. A lot of error handling is missing and one needs a proper way to handle the gdata login captcha requests (I guess storing a valid token would work). There is also no caching implemented.

    This of course is not intended to replace a full-blown CMS. But I guess if you would spend some time fixing these things, this could be suitable for small web sites, where all content is more or less static.
    blog comments powered by Disqus
     
    http://www.alamy.com/

    19.92 million stock photos, cut outs, illustrations and more

    Alamy logo
    more
    © 2010 | Site map | Follow us on Twitter

    People

    Date taken

     

     

    Minimum file size







    Orientation




    Image type



    Additional images

    Reportage/historical images which due to their origin may contain imperfections.

    Search terms

    With all the words
    With the exact phrase
    With at least one of the words
    Without the words
    http://community.livejournal.com/inception_kink/3434.html?thread=3625834#t3625834
    http://developer.yahoo.com/yui/articles/gbs/