L-EXP

Most viewed Feeds


      view feed content A typesafe criteria query API for JPA (Hibernate - Relational Persistence for Java and .NET)   [31 views, last view 20 min and 40 secs ago]

The public draft of the JPA 2.0 specification is already out and includes a much-awaited feature: an API that lets you create queries by calling methods of Java objects, instead of by embedding JPA-QL into strings that are parsed by the JPA implementation. You can learn more about the API proposed by the public draft at Linda's blog.

There's several reasons to prefer the API-based approach:

  • It's easier to build queries dynamically, to handle cases where the query structure varies depending upon runtime conditions.
  • Since the query is parsed by the Java compiler, no special tooling is needed in order to get syntactic validation, autocompletion and refactoring support.

(Note that JPA-QL syntax validation and autocompletion is available is some IDEs - in JBoss Tools, for example.)

There's two major problems with criteria query APIs in the Java language:

  • The queries are more verbose and less readable.
  • Attributes must be specified using string-based names.

The first problem isn't really solvable without major new language features (usually described as DSL support). The second problem could easily be solved by adding a typesafe literal syntax for methods and fields to Java. This is now a sorely needed feature of the language, it's especially useful in combination with annotations.

There have been some previous efforts to work around the lack of method and field literals. One recent example is [Broken Link]. Unfortunately that particular approach forces you to represent every persistent attribute as a public getter method, which is not a restriction that is acceptable in the JPA specification.

I've proposed a different approach to the JPA EG. This approach comes in three layers:

  • A metamodel API for JPA
  • A query API where types and attributes are specified in terms of metamodel API objects
  • Support for third-party tooling which would generate a typesafe metamodel from the entity classes

Let's take go layer-by layer.

The Metamodel

The metamodel API is a bit like the Java reflection API, except that it is provided by the JPA persistence provider, is aware of the JPA metadata, and uses generics in a clever way. (Also it uses unchecked exceptions.)

For example, to obtain an object that represents an entity, we call the MetaModel object:

import javax.jpa.metamodel.Entity; ... Entity<Order> order = metaModel.entity(Order.class); Entity<Item> item = metaModel.entity(Item.class); Entity<Product> item = metaModel.entity(Product.class);

To obtain attributes of the entity, we need to use string-based names, as usual:

import javax.jpa.metamodel.Attribute; import javax.jpa.metamodel.Set; ... Set<Order, Item> orderItems = order.set("items", Item.class); Attribute<Item, Integer> itemQuantity = item.att("quantity", Integer.class); Attribute<Item, Product> itemProduct = item.att("product", Product.class); Attribute<Product, BigDecimal> productPrice = product.att("price", BigDecimal.class)

Notice how the metamodel types which represent attributes are parameterized not only by the type of the attribute they represent, but also by the type that they belong to.

Also notice that this code is non-typesafe and can fail at runtime if no persistent attribute with the given type and name exists in the entity class. This is the only non-typesafe code we'll see - our goal is keep the rest of the API completely typesafe. How does that help us? Well, the trick here is to notice that the metamodel objects represent completely static information about a persistent classes, state that doesn't change at runtime. So we can:

  • obtain and cache these objects at system intialization time, forcing any errors to occur upfront, or even
  • let a tool that has access to our persistent classes generate the code that obtains and caches metamodel objects.

That's much better than having these error occur at query execution time, as they do in the previous criteria query proposal.

The metamodel API is generally useful, even independent of the query API. Currently it's very difficult to write generic code that interacts with JPA because JPA metadata may be partitioned between annotations and various XML documents.

But, of course, the most popular use of the metamodel is to build queries.

Queries

To construct a query, we pass metamodel objects to the QueryBuilder API:

Query query = queryBuilder.create(); Root<Order> orderRoot = query.addRoot(order); Join<Order, Item> orderItemJoin = orderRoot.join(orderItems); Join<Item, Product> itemProductJoin = orderItemJoin.join(itemProduct); Expression<Integer> quantity = orderItemJoin.get(itemQuantity); Expression<BigDecimal> price = itemProductJoin.get(productPrice); Expression<Number> itemTotal = queryBuilder.prod(quantity, price); Expression<Boolean> largeItem = queryBuilder.gt(itemTotal, 100); query.restrict(largeItem); query.select(order); query.distinct(true);

Of course, this could be written more compactly, but I'm trying to draw attention to the generic types of the objects that make up the query. The type parameters prevent me from writing something like this:

orderItemJoin.get(productPrice); //compiler error

The use of generics means the compiler can detect when we try to create a path expression by combining a queried entity of one type and an attribute of some other type. The metamodel object productPrice has type Attribute<Product, BigDecimal> and therefore cannot be passed to the get() method of orderItemJoin. get() only accepts Attribute<Item, ?>, since orderItemJoin is of type Join<Order, Item>.

Expressions are also parameterized by the expression type, so the compiler detect mistakes like:

queryBuilder.gt(stringExpression, numericExpression); //error

Indeed, the API has sufficient typesafeness that it's more or less impossible to build an unexecutable query.

Generating a typesafe metamodel

It's completely possible to build queries with only the metamodel API and the query API. But to really make the most of these APIs, the final piece of the puzzle is a little code generation tool. This tooling doesn't need to be defined by the JPA specification, and different tools don't need to generate exactly the same code. Nevertheless, the generated code will always be portable between all JPA implementations. All the tool does is reflect upon the persistent entities and create a class or classes that statically cache references to the metamodel Entity and Attribute objects.

Why do we need this code generator? Because writing Attribute<Item, Integer> itemQuantity = item.att("quantity", Integer.class); by hand is tedious and slightly error prone, and because your refactoring tool probably isn't smart enough to change the string based name when you refactor the name of the attribute of the persistent class. Code generation tools don't make these kind of errors, and they don't mind re-doing their work from scratch each time you ask them to.

In a nutshell: the tool uses the non-typesafe metamodel API to build a typesafe metamodel.

The most exciting possibility is that this code generation tool could be an APT plugin for javac. You wouldn't have to run the code generator explicitly, since APT is now fully integrated into the Java compiler. (Or, it could be an IDE plugin.)

But didn't code generation tools go out of fashion recently? Wasn't one of the great features of ORM solutions like Hibernate and JPA that they didn't rely upon code generation? Well, I'm a great believer in using whatever tool is the right solution to the problem at hand. Code generation has certainly been applied to problems where it wasn't the best solution. On the other hand, I don't see anyone bashing ANTLR or JavaCC for their use of code generation to solve the problem they address. In this case, we're working around a specific problem in the Java type system: the lack of a typesafe metamodel (reflection is one of the worst-designed language features). And code generation is simply the only solution that works. Indeed, for this problem it works well.



hibernate.org - Hibernate - Hibernate - Relational Persistence for Java and .NET
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Muchos juegos y aplicaciones para tu iPhone en descarga directa (Blogs sobre el iPhone)   [2263 views, last view 27 min and 51 secs ago]
languagetypetext/htmlvalue

-4seasons 1.0-drQ[C4PDA]
-Accounts 2.9.1-kidmoneys
-AirCoaster 3D 2.4.1-kidmoneys
-Airfare 1.6-TheGoonies
-Allure 1.3-kidmoneys
-American Presidents 2 in 1 2.3.0-D2[C4iD]
-Anytime Golf - Magic Touch 1.1-kidmoneys
-Aqualution - The Beginning 2.1-neppyfx
-Astronauts 1.0.3-drQ[C4PDA]
-Banner Deluxe 1.2.8-kidmoneys
-Battle Field 1.1-kidmoneys

102 MB
http://rapidshare.com/files/235248597/05-22-09-1.rar

-CongressPro 3.1-kidmoneys
-CozyQuest 1.0.15-kidmoneys
-Dead Words 1.2.1-D2&C4PDA
-DinoSmash Online 1.0.patched-C4PDA
-DOCUMENTS 2 1.1-kidmoneys
-Earth Scenery 1.0.1-alibaba
-Euro Radio 1.5-alibaba
-feX - Friend Exchange for Facebook 2.0-COREPDA
-Files (Email, Document Viewer, File Storage) 1.3.1-kidmoneys
-Flashback 1.1.patched-C4PDA
-GL Golf Deluxe 1.07-kidmoneys
-Glide Factor 1.1-kidmoneys
-Handwriting Typewriter ‘Notes’ 1.2.0-kidmoneys
-HDR Camera 1.4.0-kidmoneys
-HydroTilt 2.2.1-kidmoneys

97 MB
http://rapidshare.com/files/235250281/05-22-09-2.rar


-Grand Pro 1.1.4.patched-COREPDA
-i Sniper 0.2.1-kidmoneys
-iBear Money 2.6.2-kidmoneys
-iBody 1.7.2-kidmoneys
-iBrawl 1.1-kidmoneys
-iDrone 1.3-kidmoneys
-iFare Finder 1.7-heyyouguys
-IndyCar Mobile 1.0-alibaba
-iStudent 1.11-drQ[C4PDA]
-iStyle 1.2-kidmoneys
-iXpenselT 2.4.1-kidmoneys
-J Admin Mobile 1.2.1-kidmoneys
-jfControl - Allround Remote Control 2.0-kidmoneys
-Keeper 3.0-kidmoneys
-Mazetrix 1.1-kidmoneys

97 MB
http://rapidshare.com/files/235251978/05-22-09-3.rar

-Monkey Flight 1.10-kidmoneys
-Pee Monkey Jungle Fire 1.1.4-kidmoneys
-PhotoForge 1.2-kidmoneys
-Pinch ‘n Pop! 1.3.4-kidmoneys
-Platypus 1.20-kidmoneys
-Pocket God 1.16-chazzy
-Radio (91 norske kanaler) 2.0-touch_94
-RadioTimes 1.0.3-bellbrie
-Randgrid synthesizer and drum machine 1.0.4-kidmoneys
-RiverMote 1.4-kidmoneys
-Robotco 1.2.1-kidmoneys
-Ruben & Lullaby 1-Aloware
-Shift 001.patched-C4PDA
-Super Hangman Pro 1.1-kidmoneys
-Tower of Witch 1.1-kidmoneys

102 MB
http://rapidshare.com/files/235253600/05-22-09-4.rar

-Smokeless 1.4-most_uniQue
-StockAdvisor 1.1.0-D2[C4iD]
-StudioApp 1.2-kidmoneys

104 MB
http://rapidshare.com/files/235255145/05-22-09-5.rar

-Metro Maximus 1.5-kidmoneys
-StockWatch 4.01-alibaba
-Todo 2.0.1-kidmoneys
-Trixel 1.1-kidmoneys
-Twitterrific Premium 2.0.1-kidmoneys
-Unit Converter 1.0.24-iphoniak
-Upcoming Events 4.1.1.patched-C4PDA
-WarShip 1.1-kidmoneys
-XAtomic Ultimate 1.0.2-kidmoneys

79 MB
http://rapidshare.com/files/235256344/05-22-09-6.rar

-AC-130 iSniper from the sky! 1.1-kidmoneys
-Acupoints Ultimate 2.0-kidmoneys
-Ancient Legion 1.1-kidmoneys
-Assault on Mafia 1.1.1-kidmoneys
-Asso piglia tutto 1.1-ITALIA
-Autovelox 1.2-ITALIA
-Birdie 1.5.1-antdell
-Bones TestPeds 09 1.0-esi
-Cam 3D 1.0.2-mega4i
-Card Shark Solitaire Deluxe 3.5-dodoburd
-CatzEye 1.1-kidmoneys
-Convertbot 1.3.patched-C4PDA
-Credit Card Expense Manager 2.1-kidmoneys
-Currency FX 1.0-kidmoneys
-Diamond Hunter 1.2-kidmoneys
-Disneyland Resort Trivia 1.0-kidmoneys
-Downhill Bowling 1.0.6-kidmoneys

98 MB
http://rapidshare.com/files/235624282/05-23-09-1.rar

-FlickFlak 1.0-Mgssidley
-Free SMS 1.04-kidmoneys
-Friki Tricks 1.1-most_uniQue
-Fruited 1.02-kidmoneys
-GravSynth 1.0-kidmoneys
-Guitarist’s Reference 2.8.1-kidmoneys
-Human Atlas 1.0-kidmoneys
-i-c-LiveCams (IP-PTZ Webcam Streaming Video) 2.31-Mauro84
-i41CX+ RPN Calculator with Printer 2.1-kidmoneys
-iBot Sumo 1.2.0-Mgssidley
-iDcrm 1.0-kidmoneys
-Imagine Poker Touch 1.5.1-chazzy
-iSpadez - A Spades Game 2.2.1-meta
-iSébastien 1.0-esi

99 MB
http://rapidshare.com/files/235625627/05-23-09-2.rar

-iSpeak French 1.2-haxor133t
-iStudent 1.11-drQ[C4PDA]
-iText - Free SMS-MMS Texting 1.2-kidmoneys
-J Admin Mobile 1.2.1-kidmoneys
-Karate Terms 1.0-esi
-Keeper Password & Data Vault 3.0-kidmoneys
-LCube 1.30-COREPDA
-Les Blondes - Episode 10.6 1.0-esi
-Lexulous 1.0-alibaba
-LifeTicker 1.7.0-kidmoneys

102 MB
http://rapidshare.com/files/235627323/05-23-09-3.rar

-London Bus, Tube & Rail Journey Planner 1.1-alibaba
-Magic Filler 1.1-most_uniQue
-miWall Wallpaper-Backgrounds + 1.2kidmoneys
-MotivationalQuotes 1.35-alibaba
-Mouse Menace 1.0-esi
-My Secrets 1.2-alibaba
-myMovies 1.4.1-kidmoneys
-NBC’s The Office Challenge 1.1.2-kidmoneys
-Packing (+TO DO!) 4.3-topche
-ParaJumping 1.1-bteamer
-Parking App 2.0.2-kidmoneys
-PathBuilder 1.0-kidmoneys
-Peekababe 1.1-kidmoneys
-Photo Touch Purikura 1.3-kidmoneys
-PhotoCooker 1.0.3-kidmoneys
-Pirate Master III 1.12-kidmoneys
-Pirate Panic 1.0-isa
-politicoTracker 1.0-kidmoneys
-ProcessAway Credit Card Terminal 2.1-kidmoneys
-Property Evaluator 2.4-iont
-PsychMeds 1.0-esi
-Public Radio 1.5-kidmoneys
-Revelations1 1.7-esi
-Robot Wars 3D 1.1-kidmoneys
-Server Admin Remote 1.2.3-kidmoneys
-Sonic the Hedgehog 1.0.0-CX

90 MB
http://rapidshare.com/files/235629286/05-23-09-4.rar

-StepStones 1.0.1-kidmoneys
-Sticky Balls 1.0-esi
-Super Hangman Pro 1.1-most_uniQue
-Super Pender 1.5-esi
-Sushipedia 1.0.1-meta
-Terminator - Salvation Graphic Novel 1.0-esi

95 MB
http://rapidshare.com/files/235631448/05-23-09-5.rar

-The Quest- Islands of Ice and Fire 2.0-kidmoneys
-Trading Faces 1.0-alibaba
-TV Shows 1.3.0-kidmoneys
-USing Karaoke 1.0-isa
-Why all monkeys are long-armed 1.0-esi
-Wiki! pro 1.0.0-alibaba
-Wine Enthusiast Guide 1.3-kidmoneys
-World Countries and Leaders 1.0-alibaba
-ZAGAT TO GO ‘09 1.2.102-meta
-Terminator 1.0-D2[C4iD]

75 MB
http://rapidshare.com/files/235632592/05-23-09-6.rar

Talking Latin American Spanish to English Phrasebook 2.0-macosmovil (464MB):
http://www.megaupload.com/?d=UCRT2NCA

Talking Latin American Spanish to French Phrase Book 2.0.1-macosmovil (170MB):
http://www.megaupload.com/?d=9V22LAKS

-4 Tracks DX Pocket Studio 1.1-D2[C4PDA]
-a World of Lullabies - Lullaby your Kids 2.1-itaintrite
-ABCRacer 1.1-esi
-AlcoholCalc 1.0-alibaba
-Amateur Surgeon 1.0.1
-Arvale - Ocean of Time 1.0-Dheed
-aSmart HUD+Speedcams 1.3
-Atomic Clock (Gorgy Timing) 2.10-JackTrav

98 MB
http://rapidshare.com/files/235992786/05-24-09-1.rar

-Attack 1-attack
-Aw’ Shugs 1.1-kidmoneys
-Bark ‘n’ Woof ( Doggy Sounds ) 1.3-itaintrite
-Barzellette! 1.1.6-ITALIA
-Beijing Opera 1.0-esi
-Bellum - Tactics 1.0-esi
-Bird Tweets ( Tweeting Birds ) 1.1-itaintrite
-Brave Dwarves 1.1-kidmoneys
-BurgerBurger 1.0-esi
-CaloriesUS 1.00-alibaba

99 MB
http://rapidshare.com/files/235994244/05-24-09-2.rar

-Cambridge Advanced English-Chinese Dictionary 2.1-kidmoneys
-Camera Plus 2 2.1.1.patched-Calku
-Cams Ahoy ! Europe 2.0.1-ITALIA
-Carpenter’s Helper 1.0-kidmoneys
-Chimp Adventure 1.0-esi
-Clean My Screen - The Ultimate Screen Cleaner 1.0-Dheed
-Construction Site - Men at Work 1.3-itaintrite
-Cooking Star 1.1-WYSE

102 MB
http://rapidshare.com/files/235995572/05-24-09-3.rar

-Dave Matthews Band Revenge 1.0-most_uniQue
-Dillo! - Italiano - Loquendo Voice Dialer 1.1-ITALIA
-Easy DrumMachine 1.1.1-esi
-EdiMon+ 1.0-kidmoneys
-fantaFootball Serie A 08-09 1.1.1-ITALIA
-FiC - Filipino iPhone Community 1.0-D2[C4iD]
-FillCircle 1.0-esi
-Fleurs de Montagne 1.0-esi
-Fortune Cat 1.0-esi
-French History threw Kings, Emperors and Presidents 1.0-polk
-Friki Tricks 1.1-kidmoneys
-G-Park 2.4-ITALIA
-Gears 1.0-kidmoneys
-Gears 1.0-PhaseII
-Guimbarde 1.0.1-esi

90 MB
http://rapidshare.com/files/235996964/05-24-09-4.rar

-Hidden Music - Prank Box1.8-itaintrite
-Hungarian Wines 1.0-esi
-iBusiness News 2.1.1-alibaba
-iChainsawX 1.3-drQ[C4iD]
-iCorps - USMC Pocket Reference 3.0.0-esi
-iDownload 1.1-alibaba
-iNapkin 1.2-kidmoneys
-Inspirational Quotes 1.0-most_uniQue
-iPearl 1.0-esi
-iSmiley 1.0-esi
-Jellyfishes 1.0-esi
-Jisho Touch (Multilingual Japanese English Dictionary) 1.5-kidmoneys
-Johnny Crash 1.0.0-esi
-Join the Dots 1.0-esi
-Keyboard Shortcuts 1.0-esi
-Kitty (Meow ‘n’ Purr Kittens) 1.2-itaintrite
-Lange Biochemistry and Genetics Flash Cards 1.1

95 MB
http://rapidshare.com/files/235998442/05-24-09-5.rar

-Laughter 1.2-drQ[C4iD]
-Man United Anthems 1 1.0-esi
-Man United Heroes 1 1.0-esi
-Measures - Unit Converter 1.2.7-COREPDA
-MovieBase 1.0-kidmoneys
-MyReef 3D 1.01-kidmoneys
-Mystique. chapter 1 - foetus 1.0-esi
-Ninja Shadow 1.6.2-kidmoneys
-OzSlang 1.0
-Period Tracker 5.0-alibaba
-Phone Rings 1.1-itaintrite
-Pigskin Pass 1.0-esi
-Pipe 1.2-most_uniQue
-Port Defender - Tower Defense 1.0.6-kidmoneys
-Port Defender 1.0.6.patched-COREPDA
-Puzzle Ball 1.0-esi
-RateWatch Pro 1.0-alibaba
-RECalc - Real Estate Mortgage Loan Calculator 1.4.2-alibaba
-ReflexTest 1.1-drQ[C4iD]
-Romeo and Juliet 3.1-alibaba

75 MB
http://rapidshare.com/files/235999994/05-24-09-6.rar

-ScaryCastle 1.7-drQ[C4iD]
-Scoops 1.6-itaintrite
-Scream Illusions - Prank Box 1.8-itaintrite
-Sexy Sudoku 1.0-kidmoneys
-Shuffled 1.0-esi
-Sick Guy 1.1-itaintrite
-Sleuth 1.0-esi
-SomaFM Player 1.0-esi
-Speed Muscles MD 1.0-esi
-SpeedSurfer 1.0-esi
-SpiritWriter Trick 1.1-drQ[C4iD]
-Squeaky the Duck 1.1-itaintrite
-Stella GTD 1.0-esi
-StressTest 1.7-drQ[C4iD]
-SuccessIts! Motivational Poster Creator 1.0–most_uniQue
-Sugar Buzz 1.0-kidmoneys
-Super Marble Roll 1.0-kidmoneys
-SuperEnal8LE 1.2.0-ITALIA
-TanZen 1.5.4-lightmaster
-Taxiball 1.0-esi
-Tea Round 1.0-esi

75 MB
http://rapidshare.com/files/236001436/05-24-09-7.rar

-The Chemical Touch 1.5.1-lightmaster
-The Chemical Touch 1.5.1.patched-C4PDA
-The Gun - Ultimate Sound Box 1.4-itaintrite
-TheGun 1.3-drQ[C4iD]
-Tides of War 1-kidmoneys
-Toki Tori 1.0-VNMagicTeam
-Totem Quest Slot 1.0-esi
-Virtual Pool Online 1.97-dNaPOD
-WAR (Machine Gun, Bomb, Explosion, etc) 1.3-itaintrite
-YXflash.v1.0.rar
-ZOOZbeat Rock 1.0-kidmoneys

75 MB
http://rapidshare.com/files/236002472/05-24-09-8.rar

-25 Things Guys wish Girls Knew 1.0-phil
-3D Tunnel Vision 1.1.1-T_Z
-A Robo Riot! 1.0-phil
-A seXy nurse 1.0-F-14
-Absalt Alarm Clock 2.5.2-itaintrite
-Ambiance Classic 1.5.5-kopimi
-Apache HTTPD Directives 1.00-herewe
-aWake!Simply - 7 Day alarm and bedside clock 2.0.1-most_uniQue
-Barcelona 1.0-F-14

102 MB
http://rapidshare.com/files/236356232/05-25-09-1.rar

-Beer Opener 1.0.1-most_uniQue
-Blocks 1.3-most_uniQue
-Box of Sox 1.0-MeUp
-BSDMan 1.0-herewe
-CalcsPro - Mortgage Calculators 1.31-alibaba
-China (Travelto) 1.6-alibaba
-Clopy 1.0-esi
-Converted 1.6.2-alibaba
-Darkness - Sun, Moon, Clock 2.01-liddokun
-Deca Sudoku 1.0-herewe
-Doodle Jump 1.2.1-Isnt_me
-Dzikir and Doa Collections 1.0-alibaba
-Emailer - Wide SMTP Emailing 1.6-most_uniQue
-English Premier League Live 1.3.1-dNaPdA
-Faby - Air City 1.0-phil
-Flight Update 3.0-alibaba
-Food Observer 1.0.1-phil
-France (TravelTo) 1.6-alibaba
-Galactica 1.2-MeUp
-GameBox Arcade ( Oldschool SFX ) 1.3-itaintrite
-Geek Test 1.0-phil
-Germany (Travelto) 1.6-alibaba
-Hearing Test - Prank Box 1.9-itaintrite

97 MB
http://rapidshare.com/files/236357814/05-25-09-2.rar

-G-Park 2.5-most_uniQue
-Goaaal! 1.0-F-14
-Good Food 1.0-phil
-HomeBudget 1.1.2-alibaba
-iCab Mobile (Web Browser) 1.5-liddokun
-iCash 1.2-drQ[C4iD]
-iSwineFlu 1.0-F-14
-iTradeAnalysis - Improve Trading1.4-alibaba
-Kitty (Meow ‘n’ Purr Kittens) 1.3-itaintrite
-Kryzer Prologue 1.0-Dheed
-Mart Bingo 1.02-most_uniQue
-Math King 1.2-most_uniQue
-MegaHolidays 1.01-alibaba
-Microbiology Pronunciations 1.1-most_uniQue
-Morphing-Animal 1.0-herewe
-Most Addictive Game 1.0-phil
-Night Shift - Maids 2.0-herewe
-Night Shift - Nurses 2.0-herewe
-Night Shift - Secretaries 2.0-herewe
-Nombre Clef 2.0
-p-i-m Studies For Guitar 1.0.1-phil
-Palavras Cruzadas 1.0.1-brazzas
-Phone Rider 1.1-rickth64
-Pichirp Pro 1.0-most_uniQue

103 MB
http://rapidshare.com/files/236359324/05-25-09-3.rar

-Puzzle Bubble 1.0-F-14
-Reflexo 1.0-herewe
-Rise of Atlantis 1.0.0-herewe
-Robot Rover 1.0-herewe
-Russian English Dictionary 1.0-drQ[C4iD]

101 MB
http://rapidshare.com/files/236360918/05-25-09-4.rar

-Scotch 1.0-phil
-Sexy Game 2.0-alibaba
-Sherlock Holmes complete collection 3.1-herewe
-Social Butterfly 1.0-phil
-Sonic the Hedgehog - Sonic 2 MOD 1.0.0-DMI
-Space Shuttle 9.10-MeUp
-SpeedSurfer 1.0-esi
-Stupid Cloud! 1.0-phil
-SWIRL - 3D Arcade Racing 1.0-jerrymaguire
-SyncSing 1.0
-texTure MMS 1.3-most_uniQue
-Tough Topics 1.0-phil
-Turbo Subs 1.1.6-phil
-US President Quotes 1.65-alibaba
-Vegas Mate 1.5.3-phil
-Video Game Updates 1-herewe
-World View Live 1.3.2-luxbut
-Zip Codes 1.1-alibaba

82 MB
http://rapidshare.com/files/236362398/05-25-09-5.rar

Artículos relacionados


basehttp://feeds.feedburner.com/eiphone
[Noticias descarga gratis jailbreak juegos ]
EstudioiPhone - Blogs sobre el iPhone
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Doblando la esquina a tu página web con jQuery (40 blogs a seguir en el 2009)   [30 views, last view 38 min and 26 secs ago]

Cuando hablamos de diseño web, sobre todo en la fase propiamente de diseño en programas de edición de gráficos, es relativamente frecuente observar un efecto conocido como ??page curl? o pliegue de página.

Para entendernos todos, es el efecto que observamos cuando pasamos las páginas de un libro por ejemplo.

Si quieres agregar un toque curioso a tu sitio web y agregar una esquina que se doble para mostrar el contenido de debajo te vendrá bien este plugin libre para jQuery creado por Elliott Kember.

Para hacerlo funcionar sólo necesitarás usar jQuery y jQuery UI (preferiblemente la versión 1.5) con el módulo resizable. Luego con un par de líneas de código y creando un elemento con id ??target, que contendrá lo que quieras que se vea tras la página, estarás listo.

The Sexy Curls jQuery plugin: http://www.elliottkember.com/sexy_curls.html

Vía Ajaxian

Otras entradas que pueden interesarte:
  • A Site a Day: Un showcase de sitios web con las miras altas
  • Limpia y Optimiza tus Hojas de Estilo
  • links for 2008-11-05
  • Alexa contra Statsaholic: Abusones en la web 2.0
  • 10 cosas que cualquier desarrollador de PHP debe saber

[Javascript ]
Webmaster Libre - 40 blogs a seguir en el 2009
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Using BitmapData.hitTest for Collision Detection (Flash, Flex and Air related Blogs)   [171 views, last view 39 min and 8 secs ago]
languagetypetext/htmlvalue

The Flash Player contains a number of APIs for handling collision detection within Flash content. The DisplayObject class contains hitTest and hitTestPoint which can be useful if you need to detect bounding box collisions, or detect collisions between an individual point and bounding boxes or shapes.

However, BitmapData also contains a hitTest API, which can check collisions on BitmapData. Where the API really shines, is when you need to detect collisions between the visible areas of DisplayObjects (and not just of their bounding boxes). The API contains functionality for testing collisions between BitmapData and a Point, BitmapData and a Rectangle, and BitmapData and another BitmapData. It is the last item that I will focus on in this post.

Since you can get BitmapData from a DisplayObject the API can be used to detect very exact collisions between the visible areas of DisplayObjects, even if the DisplayObjects have irregular shapes.

Here is a simple example that uses the API to detect collisions between the visible areas of two MovieClips using BitmapData.hitTest.




 

And here is the code

var redRect:Rectangle = redClip.getBounds(this); var redClipBmpData = new BitmapData(redRect.width, redRect.height, true, 0); redClipBmpData.draw(redClip); var blueRect:Rectangle = blueClip.getBounds(this); var blueClipBmpData = new BitmapData(blueRect.width, blueRect.height, true, 0); blueClipBmpData.draw(blueClip); addEventListener(Event.ENTER_FRAME, enterFrame); function enterFrame(e:Event):void { blueClip.x = mouseX; blueClip.y = mouseY; if(redClipBmpData.hitTest(new Point(redClip.x, redClip.y), 255, blueClipBmpData, new Point(blueClip.x, blueClip.y), 255 )) { trace("hit"); redClip.filters = [new GlowFilter()]; } else { redClip.filters = []; } }

 

Basically, the content contains two MovieClips on the timeline. We draw the graphics for each MovieClip into a BitmapData instance, and then use the BitmapData.hitTest API to see if the visible parts of the MovieClip (non-transparent) instances collide.

Couple of notes on the example:

1. The initial fill for the BitmapData is transparent pixels. This is necessary to detect just the visible areas of the DisplayObject.

2. The Point instances passed to hitTest are used to align the BitmapData instances for the comparisons.

This example works regardless of the contents or shape of the DisplayObjects. However, if either of the DisplayObjects have had any transformations applied to them (such as rotation), then the collision detection wont work correctly.

In order to get it to work, you need to apply a Matrix when drawing the BitmapData to account for the transformation applied to one or both DisplayObjects. If you haven’t worked with Matrices and DisplayObject transformations, this can be a little daunting at first (it was for me). If you are new to using Matrices, I suggest reading this excellent article on Matrices in Flash over at senocular.com.

Luckily for me, Trevor McCauley, who runs senocular.com, also happens to works for Adobe on the Flash Player team. He really helped me understand how how to get the hit detection to work when the DisplayObjects have had transformations applied to them.

Here is the example:



 

and the code:

addEventListener(Event.ENTER_FRAME, enterFrame); function enterFrame(e:Event):void { blueClip.x = mouseX; blueClip.y = mouseY; redClip.rotation++; var blueRect:Rectangle = blueClip.getBounds(this); var blueOffset:Matrix = blueClip.transform.matrix; blueOffset.tx = blueClip.x - blueRect.x; blueOffset.ty = blueClip.y - blueRect.y; var blueClipBmpData = new BitmapData(blueRect.width, blueRect.height, true, 0); blueClipBmpData.draw(blueClip, blueOffset); var redRect:Rectangle = redClip.getBounds(this); var redClipBmpData = new BitmapData(redRect.width, redRect.height, true, 0); var redOffset:Matrix = redClip.transform.matrix; redOffset.tx = redClip.x - redRect.x; redOffset.ty = redClip.y - redRect.y; redClipBmpData.draw(redClip, redOffset); var rLoc:Point = new Point(redRect.x, redRect.y); var bLoc:Point = new Point(blueRect.x, blueRect.y); if(redClipBmpData.hitTest(rLoc, 255, blueClipBmpData, bLoc, 255 )) { trace("hit"); redClip.filters = [new GlowFilter()]; } else { redClip.filters = []; } blueClipBmpData.dispose(); redClipBmpData.dispose(); }

 

Note that we use the bounds of each DisplayObject to determine the BitmapData size and not the height / width of the DisplayObject. This is because the transformation will most likely modify the bounds, and we need to take this into account. In the first example, we could have just used the height and width of the DisplayObjects since they were the same as the bounds, but in general you should get in the habit of using the bounds.

We also pass a Matrix to each BitmapData.draw call to account for any transformations that may have been applied to the DisplayObjects (in this case rotations). I could try and explain what the Matrix is doing, but to be honest, im still trying to get my head around it. Instead, Ill let Trevor explain it (from an email he sent to me):

For this you need the transformation of the object as defined by DisplayObject.transform.matrix. Since everything is in the same container, we still won’t have to worry about walking up hierarchies to get contcatenated/global matrices – we can just use that which is directly applied to the target object (transform.matrix). This gives you the full transform of that object. But for the purposes of capturing a bitmap, we only want the non-translation parts of that transform. This is because when a bitmap is captured, it’s captured from the 0,0 location in the coordinate space of the captured object outward into positive space. The translation of the matrix of the desired object is its position in its parent coordinate space, not its own. HOWEVER, if that object’s own 0,0 location is within the middle of its graphic elements, drawing it into a Bitmap directly from 0,0 could cause cropping. So in terms of that translation as it is to be used with BitmapData.draw(), it’s still important to make sure everything in the target object is captured. And in doing that, it means shifting everything that would appear in negative coordinate space over into positive coordinate space.

Luckily, using getBounds (again) this is quite simple. We can use getBounds to determine the bounds of an object in its parent coordinate space – this includes its transformations. We also know the location of 0,0 within the parent coordinate space because that is the same location it places the target object using its x and y properties. With that, we can get the needed bitmap translation by simply subtracting the bounds x,y from the object’s own x,y. In code that essentially becomes

var b = t.getBounds(t.parent);
var m = t.transform.matrix;
m.tx = t.x – b.x;
m.ty = t.y – b.y;
var bmp = new BitmapData(b.width, b.height, true, 0);
bmp.draw(t, m);

where ‘t’ is the target display object.

Now, I will be the first to admit that I am still wrapping my head around some of this stuff, especially with the use of the Matrices to offset the transformation. However, the second example above is generic and robust enough to be used for general pixel perfect collision detection on visible portions of DisplayObjects.

One note, is that the examples above assumes that the items being compared share the same parent. If they don’t you need to make some additional adjustments (to take into consideration other transformations), but that is a post for another day.

Btw, if you don’t already, you need to read senocular.com. This is one of the best resources on understanding ActionScript 3 and the Flash Player.

Update : One optimzation which you can make is to first check if the bounding boxes of the DisplayObjects overlap (using DisplayObject.hitTestObject), and only if they do, use BitmapData.hitTest to see if their visible areas are touching.

basehttp://feeds.feedburner.com/MikeChambers/
[General ]
Mike Chambers - Blog about Flash and related - Flash, Flex and Air related Blogs
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Truco de Anti gravedad con una botella de agua (40 blogs a seguir en 2008)   [154 views, last view 59 min and 59 secs ago]
languageentypetext/htmlvalue

Un truco recurrente en Youtube el de Anti Gravity Water, el truco es muy simple pero impresionante algo que puedes hacer a tus amigos.

Acontinuación el truco:

Y aquí el como lo hizo:

basehttp://www.comolohizo.com/2009/05/17/truco-de-anti-gravedad-con-una-botella-de-agua/
[Como lo hizo? Trucos Explicados! agua botella truco ]
Como lo hizo - 40 blogs a seguir en 2008
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content A simpler way to add Windows Installer major upgrade functionality to your MSI in WiX v3.5 (Top 20 technology world blogs by wikio)   [44 views, last view 1 h, 33 min and 31 secs ago]

Bob Arnson has been working on some simplifications to the WiX language in WiX v3.5, and he has posted some introductory information about a couple of these changes on his blog.  I wanted to link to them here to hopefully help raise visibility for these simplifications:

  • Simplified Windows Installer major upgrade authoring
  • Simplified Component authoring

I have found the major upgrade simplifications to be particularly useful.  A while back, I wrote a step-by-step guide for authoring, building and testing major upgrades using WiX, and that guide later got added to the WiX documentation.

As you can see in Bob’s blog post and in the WiX MajorUpgrade element documentation, Bob’s simplifications will allow WiX v3.5 to handle creating the Upgrade table elements, scheduling the RemoveExistingProducts action, and optionally blocking downgrades if a user tries to install an older version of the MSI after installing a newer version.  You only need to make sure that you include UpgradeCode and Version attributes in your Product element, and then you can use the new MajorUpgrade element in your WiX v3.5 authoring.

If you choose to, you can continue to use the more verbose syntax described in my previous blog post or the WiX documentation for authoring a major upgrade, but you could instead convert to the new MajorUpgrade element in order to more clearly express the behavior you intend for your MSI and to simplify your setup authoring.

The major upgrade and component authoring functionality described in the above blog posts is available in WiX v3.5 builds starting with the v3.5.1315.0 build on SourceForge, and I encourage you to check them out.


[Setup Issues WiX Windows Installer ]
MSDN Blogs - Top 20 technology world blogs by wikio
View original post|Add to del.icio.us|7 months ago | Share

      view feed content Installing Mac OS X (Kalyway) in the Acer Aspire One, aka the MacBook nano (Conferencia Rails Hispana '07)   [528 views, last view 1 h, 47 min and 9 secs ago]

Or how to turn your Intel based Netbook into a Macbook nano and not spend 1600 euro trying1.

A couple of months ago both crews of Venera7 and El Geek Errante, driven by the geeky rush of the moment, decided to buy the quite sexy netbook from Acer, the Aspire One. The idea was to have something extremely light and portable that could be carried in a small bag with a book and some other small stuff.

The Acer Aspire One has a nice set of features: a 9? LED backlit glossy screen, 120Gb HD, a really small factor, 2 USB ports, 1Gb RAM (expandable to 1.5Gb), an Intel Atom 1.6GHz processor and an integrated Intel GMA 950 video card. And all for 350 Euro (taxes included). It??s quite easy to find in Spain and I guess in general around the world. We bought our white ones at PC City in Madrid; I guess after that they ran out of stock for the weekend in the white model :-)

We thoroughly evaluated the MSI Wind, the Dell Inspiron Mini, the HP whatevermodelitisthatisverysmall, and the Asus Eee PC. Turns out in terms of features/usability/size the Acer is the best option. Basically, MSI Wind and Dell are too big, HP is too slow, and Asus Eee PC is too crappy and too small (keyboard is for children). Anyway, go to Youtube and see the reviews, comparisons and tour de forces by yourself.

Surprise, I´m not only installing Mac OS X!

Yep buddies, that´s right. I´ll also explain how to repartition the internal disk to have Mac OS X as the main OS and a small Ubuntu partition for Linux stuff (like wireless hacking), install both operating systems, and configure GNU´s Grub to be able to dual boot them.

The plan will be to partition the Aspire One internal disk into three different physical partitions: first one for Mac OS X (110Gb), second one for Ubuntu Desktop (9Gb) and the third one for Linux swap space (1Gb).

I´ll explain all the details in the upcoming sections.

What will work and what won??t

Everything will work charmingly (including the official Apple Mac OS X updates and the integrated webcam) except for the following things (that we´ll try to minimize with different software toys):

  • Sleep: will not work at all. Actually, closing the lid will cause the computer to shut down inmediately, but we´ll workaround it using InsomniaX.
  • Automatic switch between internal speakers and the audio output jack. This one is solvable installing some additional Kernel Extensions, but SoundSource does the trick pretty well anyway.
  • The integrated SD readers. Personally I don´t give a damn about this one, especially when I have more USB slots available than in my MacBook Pro to connect all kinds of external storage.

If you have already googled about the Acer Aspire One and Mac OS X, yes, everything else is working. Amazing, huh? Just wait to see the steps to tune up your little creature!

Hardware you??ll need
  • A working Apple Macintosh Intel2 Machine running Mac OS X or a PC running any version of Linux or Windows (this post will assume you have a Macintosh computer as described. If not, I??ll give some pointers on how to perform the operations described for Mac OS X in other platforms)
  • An Acer Aspire One A120. For a more Apple-ish style, get the white one ;-) As I already said, 350 euro is pretty much the standard price after taxes in almost any store.
  • An Apple sticker. You can get one from one or your Apple products (notebooks, iPods, iPhones?). It??s required to stick it on your Acer Aspire One and in doing so agreeing to the Mac OS X licensing terms.
  • [OPTIONAL] A Dell Broadcom based 1490 PCI Express Wireless Card. US$15 if you get a refurbished one from a Taiwanese dealer at eBay.
    This item is not required unless you want working wireless in your computer with Mac OS X, which I wanted.
  • [OPTIONAL] A 1Gb SIMM module, if you want to take advantage of the wireless upgrade operation to also upgrade your Acer??s memory to 1.5Gb. That I also did. 16 euro in any decent on-line computer store.
  • A >256Mb USB stick, for updating the Acer Aspire ONE BIOS.
  • An external USB DVD drive or a 8Gb USB Stick or an >8Gb empty external USB Hard Disk. Actually, if you have the 8Gb USB Stick or the external USB hard disk, you won??t need the >256Mb USB stick because it??s possible to reuse them for the BIOS update.
Software you??ll need
  • A valid, legal, purchased copy of Mac OS X Leopard. Buy it, the OS is so frakkin?? good Apple guys deserve the money.
  • Kalyway Mac OS X 10.5.2 (Google it to find a torrent)
  • Kalyway Mac OS X 10.5.3 Combo Update
  • Mac OS X 10.5.4 Combo Update
  • Mac OS X 10.5.5 Combo Update
  • Linux Ubuntu Desktop 8.10 Intrepid Ibex
  • OSX86 Tools build 149
  • Paul´s Wind Drivers & Utilities Pack.
  • ALC268FIX file for the sound drivers.
  • A 11.52Mb FreeDOS image. We´ll see how important it is to download this in the Updating the Aspire One section.
  • Acer Aspire One Official BIOS Update
  • PC EFI v8.0
  • Rogue Amoeba´s SoundSource
  • InsomniaX
  • Realtek RTL810E ethernet card drivers for Mac OS X Intel
  • Chun Nan´s Totally Amazing AppleACPIBatteryManager Kernel Extension (you´ll have to create an account in InsanelyMac to download it.
Upgrading your Aspire One hardware

First of all, as I??ve already said, you don??t need to do this if you don??t want to either upgrade your memory or change your wireless card, although the latter is strongly recommended because it doesn??t make much sense to have a netbook that isn??t able to surf wirelessly, doesn??t it?

So, let??s assume you??re convinced and you??ve already purchased and received all your gear (typically for Spain the Dell WiFi card delivery takes 2-3 weeks).

Now breath deeply: you??ll have to open your Acer Aspire One. Fear not, my friend, because the operation is quite easy. What I??ll do here is point you to the best Aspire One hacking tutorial out there and just make some comments and remarks about what we??re interested in.

The Aspire One hardware hacking tutorial is a video made by TnkGrl that explains in very detail how to open it. Go there, watch it a couple of times, get the necessary gear to open it and follow her instructions while you´re opening your Aspire One.

So go watch it now!: Tnkgrl awesome Acer Aspire One hacking tutorial

My comments to the video:

  • Get an A4 blank paper sheet and using it as a blueprint of your laptop put all the screws there in the same position they were back in the Acer Aspire One. This way you??ll remember were to screw them back. Also, you may write down your notes in this paper, like marking an screw and saying ??remember to not screw this one too much? or stuff like that.
  • Get the right screwdriver. For me it means a precision star-shaped screwdriver with enough handle to apply some force. How tightly some screws are screwed is not seen in the video, but because I wasn??t using the best screwdriver out there from the beginning, I was about to totally erode a couple of internal screws before unscrewing them. That??s bad quality prime materials, Asus.
  • You don??t need a credit car for opening the keyboard. Believe me. Despite what??s shown in the tnkgrl video, putting off the keyboard is very easy. Just press gently the tabs noted in the video with a flat headed screwdriver and do some lifting with it and voilá, the keyboard will gently fly into your hands.
  • Pay attention to cable connectors. It´s very easy to unplug and plug them if you follow Tnkgrl´s detailed instructions. Also, don´t forget to re-plug the keyboard flat cable or you will end up opening the keyboard again (as it happened to me).
  • Finally, the model Tnkgrl is opening is the SSD disk one (no regular hard disk) so the internals are a bit different. If you are just upgrading your wireless card you don´t care about what I´m going to point out, but if you??re planning to upgrade your memory this is important: to remove the main board as instructed in the video you´ll have also to remove the small circuit board located right to the main one. This only implies removing the wifi switch and three screws. That´s it.

If the process went OK and the original Linpus that came with the Aspire One is still installed, you should be able to see the upgrades from the OS. Don´t worry now, because we´ll see them as soon as Ubuntu Desktop and Mac OS X are installed.

Updating the Aspire One BIOS

To smoothly install Mac OS X in our computer, we´ll have to update the BIOS firmware with the official Acer BIOS update release 3304 you just downloaded. Here´s the detail of what´s inside the download from Acer:

  • The BIOS update itself: ZG5_3304.FD
  • The MSDOS executable upgrade program: FLASHIT.EXE

The Aspire One is able to boot from external USB devices. Thanks to this, we´ll be able to upgrade our software without having to waste a DVD: we´ll just boot an MS-DOS compatible operating system from an external USB drive that has inside the proper upgrade image files and programs.

Now, for doing a bootable USB drive you have mainly two options: do it with Mac OS X or do it with Linux or Windows. The latter is pretty well documented in the Internet, so I won´t go with this one. Alternatively, I chose to make my life a bit more complicated and fight with the method to create bootable USB drives from Mac OS X. Once again, it´s not difficult, it was just poorly documented until now.

So, we´ll create our FreeDOS bootable USB drive and we´ll transfer the two necessary files for flashing our BIOS. The FreeDOS image will have to have enough room to host the extra BIOS flashing files. That´s the reason I´ve chosen to download a 11.52Mb image instead of the traditional floppy images. Anyway, here are the the steps to follow to create the flashing USB drive and update your Acer BIOS:

  • Go to your Intel Mac computer, open a Terminal and type the following to identify the device assigned to your USB stick: $ ls /dev/disk*
  • Now insert your USB drive and type the command again $ ls /dev/disk*

    You should see a new /dev/disk device that corresponds to your USB drive. In my case, it was /dev/disk1 so from now on I´ll assume this is yours too.

    Be careful because we´re going to completely erase the USB drive. If you have data inside it you want to keep, do a backup now.

  • Umount (do no physically extract it) the USB drive: $ sudo umount -f /dev/disk1
  • Now we´ll copy the FreeDOS image we just downloaded. I´ll assume here the image file is in your Downloads folder inside your home directory. Your mileage may vary, so just remember to change the commands accordingly: $ sudo dd if=/Users/javier/Downloads/fd011520.ima of=/dev/rdisk1

    The dd command copies bit by bit the FreeDOS image to your USB drive, so now you have a DOS bootable USB drive.

  • It´s time to copy the BIOS update files to the USB drive. Physically unplug it, plug it in again and with the Finder, copy the two files (ZG5_3304.FD and FLASHIT.EXE) to the USB drive root directory. If for some reason the USB drive is not showing up in the Finder, just go to the command line and copy the files with the cp command. Assuming the new Acer BIOS update files are in ~/Downloads/ZG5_3304: $ cd /Volumes/Untitled $ cp /Users/javier/Downloads/ZGS_3304/* .
  • Eject and unplug your USB drive.
  • Shut down your Acer Aspire One and plug the USB drive in it.
  • Boot the Aspire One and press F12 to go to the boot menu. Select the USB drive you just plugged and hit enter. FreeDOS should be starting by now.
  • Now you have a DOS prompt. First thing to do is to backup the current Aspire One BIOS: A:\> FLASHIT ZG5_3114.FD /G

    This creates a new file in the USB drive root called ZG5_3114.FD containing the actual BIOS. If anything goes south, we´ll always be able to recover our previous BIOS with this file following the instructions you have in Aspire One User Forums

  • It´s time now to reflash the BIOS with the version we downloaded from the Acer website. This is done executing the FLASHIT.EXE program as follows: A:\> FLASHIT ZG5_3304.FD /ALL

    Wait until the process is over. The Aspire One should restart automatically. When done, hit F2 to go to the BIOS setup utility and check that System BIOS information now points to v0.3304

  • Inside the BIOS setup program, hit F9 to recover factory settings. This step is important so do not miss it.

That´s all.

Installing Ubuntu Desktop and configuring multiboot with Grub

Why install Ubuntu in the Aspire One?

Several reasons: it rocks, it??s perfect for wireless hacking if you??re on the go, and it gives you more control over what??s going on with your laptop. Ubuntu Desktop is a supported operating system for the Aspire One, so it??s only a good idea to have it. Besides, it??ll help us partition the Aspire One internal disk and boot Mac OS X properly.

I won??t go with a lot of detail for the Ubuntu installation in your Aspire One because the process is quite standard and well documented. The only three important steps for me were getting the Ubuntu Installation disk in an USB image, the disk partitioning and, of course, Grub configuration that??s far from obvious.

As I??ve already told you, I don??t have an external USB DVD drive, so what I did to install Ubuntu in my Aspire One was to burn and Ubuntu Live cd with the image you just downloaded from the download lists provided before, boot it in an Intel-based computer (your Mac, for example), and follow the instructions in Ubuntu community forums to create a bootable Ubuntu USB distribution. If it has enough space, use the USB drive you just used for upgrading your bios, or the one you??re going to use for Mac OS X Kalyway installation. It really doesn??t matter because you??ll use the Ubuntu bootable USB drive just once.

So, now you??ve got an Ubuntu bootable USB drive. Boot it in your Aspire One by hitting F12 and selecting the external USB drive to boot and start the installation. In my case, using the Ubuntu installer, I chose manual partitioning of the Aspire One disk. I made three partitions: the first one for Mac OS X, was about 110Mb. Second one was for Ubuntu, 8Gb, and the third one took the remaining disk space for Linux swap. Of course, I proceeded to install Ubuntu in the second partition using the third one as swap. When assigning mounting points to the partition, I told Ubuntu installer to locate boot information in /boot under the root directory in the second partition (the one prepared for Ubuntu). It??s there where we will be installing the PC_EFI boot necessary to boot Mac OS X.

Once Ubuntu is installed, boot it in your Aspire One, and prepare to do some administration to configure Grub as the multiboot program. These are the steps I followed to be able to boot Mac OS X after its installation:

  • Log in into Ubuntu with your regular user and open a terminal. Then go to the /boot directory, create a pc_efi directory and copy there the boot_v8 you got when you downloaded PC EFI v8.0. I??ll be assuming you already have the file in your home directory. If not, copy it from wherever you downloaded it there now.

    $ sudo mkdir /boot/pc_efi $ sudo cp ~/boot_v8 /boot/pc_efi

  • Now edit the Grub configuration files to tell it to use PC EFI to boot the Mac OS X partition. Edit the /etc/grub/menu.lst and add the following at the end of the file. If you want Mac OS X to boot first, just make sure to put the following lines before the other similar that are there.

    title Mac OS X root (hd0,1) kernel /boot/pc_efi/boot_v8

Now you should be able to boot Mac OS X once it??s installed. I also tried this procedure with Chameleon EFI and for some reason it didn??t work, so PCI EFI is the one I??m recommending here.

Preparing Mac OS X installation

The Aspire One is now prepared for the Mac OS X Kalyway installation. Next steps will describe how to set up your USB drive to get a bootable Mac OS X image. You don??t need that if you have a working external USB DVD to use Kalyway DVD.

  • Go to your Intel Macintosh computer and insert the USB drive you chose (the 8Gb stick or an external hard disk). Just keep in mind you??ll need enough space to copy a DVD image in it.
  • Fire up Disk Utility and select the USB drive. Go to the partition tab for this this drive, select ??1 partition? from the drop-down menu and name the device ??Kalyway?.
  • Make sure the selected partition format is Mac OS X Extended (Journaled), then click in the ??Options? button that??s located below the partition map picture. Make sure MBR (Master Boot Record) is selected and click OK to apply your changes. Disk Utility will create the partition with the specified format and including a MBR.
  • Now we??re going to restore the image of the Kalyway DVD installer you downloaded onto the USB drive. Select the USB drive, go to restore tab, and drag the Kalyway ISO image from the finder to the field that says ??Source?. Inside destination field, just drag the USB drive. Now click ??Restore? and go to grab a coffee.
  • Eject the USB drive using the Finder and plug it back in.
  • Remember you downloaded OSX86 tools? It??s time now to launch them to make our USB drive bootable. Just be sure you downloaded build 149 (I??m pretty sure the link I posted is the right one, but who nows) because the last versions won??t work for you (I also tried and failed miserably).
    Click the button ??Install EFI/Run FDISK?
  • Select ??Run Script? when the next window appears and it??ll fire up a terminal window. Enter your administrator password, and then you??ll be presented with the text menu. I used here Chameleon EFI - so I entered ??4.? After that it shows you the available disks and partitions. Find your USB drive (mine was /dev/disk3) and enter its number (so in my case it was ??3?). At the next prompt, do what it says - do not select ??0? for the partition scheme, most likely select ??1? for the name of the drive you selected (if you followed my instructions step by step it should be ??Kalyway?). Now just hit Enter, watch it work, and you??re all set.
  • Eject your USB drive and plug it in your Aspire One. Boot it up and right after it press F11. You should be able to boot right off your USB drive.
Installing Mac OS X

Did it work? Is your USB drive booting? Great, the following is where the rubber hits the road.

  • First of all, take that sticker you were saving for your next car and stick it somewhere in your Acer Aspire One. This is apparently necessary because Apple´s Mac OS X license agreement states that you can only install Mac OS X in an Apple Branded computer. Anyway, if you don´t do it I don´t think anybody will notice it, but still looks fine in the white model, specially the one that??s coming with iPod nanos :-)
  • I guess you did boot your USB drive in the previous section and you??re waiting for instructions. If not, do it now! A lot of text output will scroll in front of you. Just relax and wait for Mac OS X to boot.
  • You??ll be presented a language selection menu: select your preferred language and hit next. In my case, for consistency with other computers I have and also because the information you typically find in the Internet is in english, I chose English. After it, it??ll say ??Preparing Installation? for a while.
  • When you get the ??Welcome?? screen, don??t hit continue straight away! Move your point to the ??Utilities?? menu, and select ??Disk Utility??
  • When the Disk Utility application has loaded, click your main drive in the left hand pane (probably the very top entryis your HDD manufacturer??s name??)
  • Click ??Partition?? on the right hand pane.
  • Select the partition you already prepared for Mac OS X (that would be partition 1) and choose ??Erase partition?? with the option ??Mac OS extended Journaled?? selected.
  • Name your partition ??Macintosh HD?? and click ??Apply??.
  • Wait for it to do it??s thing, then select ??Quit Disk Utility?? from the ??Disk Utility?? menu.
  • You??ll now be taken back to the installer welcome page. Click ??Continue??.
  • Click ??Agree?? when the legalese blurb pops up.
  • Choose a destination drive - obviously the one you just partitioned! Click ??Continue??.
  • This is important! Do not click ??Continue?? and click ??Customize, because here??s where we??re going to start ??hacking?? our installation.
  • Let the options you see in front of you as following:
    • Completely uncheck ??Language Translations??.
    • Expand ??Kernels?? and select ONLY ??kernel_9.2speedstep??.
    • Expand ??Graphics_Drivers??, expand ??Intel_GMA?? and select ONLY ??GMA950?.
    • Completely uncheck ??Audio_Drivers??.
    • Expand ??Networks_Drivers??. and select ONLY ??RTL1000?.
    • Completely uncheck ??Mobo_Chipsets??.
    • Completely uncheck ??Thirds_Applications??.
    • completely uncheck ??Patches??.
  • You done? OK, click ??Done??.
  • Click ??Install?? and go and make yourself a cup of hot Cocoa instead of tea! (hey, you??re about to enter the Mac Universe and ruling lands of Cocoa ;-)
  • The install will now take place. To speed it up, I recommend you to click ??Skip?? the installation DVD check, that doesn??t make any sense either because we??re using a USB device.
  • When the ??Install Succeeded?? screen appears, hit ??Restart??.
  • If Grub was correctly configured, after some boot up screens, Mac OS X will now start up for the first time, and take you through the setup wizard.

OK, Mac OS X is now up & running in your Aspire One, but we??re far from finished. Let??s go through the steps necessary to get it ready to use in the following section.

Upgrading your Mac OS X and post-installation steps

Here??s is where we take our Mac OS X to its latest version (at the time of writing this post, it??s 10.5.5) and do some tweaks to have as much as possible working in our personal MacBook nano.

We??ll need to have most of the stuff we listed as software downloads available for the Aspire One so Primo) you have it in an external USB drive that you??ll be plug in into the Aspire One or Secondo) you have now Internet connection from your MacBook nano so you??re able to download it from the Internet.

  • Now that you have booted into OS X for the first time, goto drive name > applications > Utililities > Terminal.

    Currently we are using 9.2 Speedstep Kernel, but we want to use Vanilla Kernel from the original Mac OS X because it??ll allow us to get all the software updates from Apple. We will be installing it in the following steps, but we have to be ready for it. This means we??ll have to make some configuration changes in Mac OS X because for this system vanilla kernel will only support 1 cpu.

    With your favorite editor, edit the /Library/Preferences/SystemConfiguration/com.apple.Boot.plist file to do the following modifications (you could open a Terminal and use vi or just use the Editor program located under ??Applications?? > ??Utilities??). Inside the file, look for ??Kernel Flags?, put there ??cpus=1? and save the file.

  • Get your Kalyway Mac OS X 10.5.3 Combo Update and run the ??1_Kalyway_UpdCombo10.5.3.pkg??. This wil upgrade the system from 10.5.2 to 10.5.3 and step through the installation process. Do NOT hit restart when prompted!
  • After the previous installation has completed, run 2_kalyway_10.5.3_kernel.pkg and step through the installation process. Select now the ??vallina_kernel_9.3? kernel.
  • When finished, click the ??Restart?? button you didn??t hit before to restart your MacBook nano and get ready to press F8 in the boot process.
  • When prompted to do so, press F8 to interrupt the Darwin startup. Type ??update -v?? (without the quotes obviously), and press enter. Your AA1 may reboot a couple of times during this update process.
  • When you have booted back into OS X, you can check the Version details by clicking on the Apple logo on the upper left hand corner> choose about this Mac. Since we are using Vanilla kernel now we can upgrade using Apple original update.
  • Insert now the disk containing the 10.5.4 update, that you should??ve downloaded by now with the rest of the software stuff. Before you run the file, open up Terminal and do the following: $ sudo su - $ while sleep 1 ; do rm -rf /System/Library/Extensions/AppleIntelCPUPowerManagement.kext ; done

    Keep this window open while you run the downloaded update and install it.

  • Double click the MacOSXUpd10.5.4.dmg to mount the image and after the image has mounted, run MacOSXUpd10.5.4.pkg and step through the installation process.
  • Before you reboot, exit the Terminal script by holding down Ctrl and pressing C (Ctrl + C). Close Terminal and hit the button on the Update to reboot your computer.
  • When prompted press F8 and use ??-v? to boot without quotes ( a lot of text msg comming out don??t worry system will boot it self soon )
  • When you have booted back into OS X, get the software you downloaded containing the Mac OS X 10.5.5 update. Again, before you run the file, open up Terminal and do the following: $ sudo su - $ while sleep 1 ; do rm -rf /System/Library/Extensions/AppleIntelCPUPowerManagement.kext ; done

    Keep this window open while you run the downloaded update and install it.

  • Double click the MacOSXUpd10.5.5.dmg to mount the image, and after the image has mounted, run MacOSXUpd10.5.5.pkg and step through the installation process.
  • Before you reboot, exit the Terminal script by holding down Ctrl and pressing C (Ctrl + C). Close Terminal and hit the button on the Update to reboot your computer.

    System will take a long time to reboot let the system be until it will restart, so be patient and give it plenty of time. If in case you run out of patience or it will not reboot you have to do hard reboot on the system and use ??update ??v? steps on boot you??ve already seen here.

Now you??re Mac OS X is Leopard 10.5.5. You??ve got still some steps to perform to get some things running, so let??s go for them.

Making the sound work

  • Get the Paul??s Wind Drivers & Utilities pack you already downloaded into your MacBook nano and select the ??Sound?? directory
  • Double click on AzaliaAudio.pkg, go through the installation wizard and restart the computer.
  • Now run the installer from the ALC268FIX you got with the software downloads you did, but DO NOT restart the system.
  • Before restarting, make sure you delete the /System/Library/Extensions/ALCInject.kext file.
  • From Paul??s Wind Drivers & Utilities, get the Kext Helper b7 application and drag it to your Applications folder. We??ll be using it a lot because it??s gonna be the tool used for installing Mac OS X Kernel Extensions.
  • Fire up Kext Helper (the application you just installed), locate the HDAEnabler.kext file in Paul??s Wind Drivers & Utilities directories, drag and drop it to he Kext Helper application, insert there your user password, and click on ??Easy install??.
  • Fix Permissions with Disk Utility (launch Disk Utility, select your partition and then click on ??Repair Disk Permissions? in the ??First Aid? tab).
  • When repair permissions is done, restart your computer.
  • Goto System Preferences > Sound > make sure that Internal Speakers is selected in Play alerts and Sound effects through.
  • Now that your sound is working, to be able to switch between internal speakers and headphones at your will, install Rogue Amoeba??s SoundSource (the link is also at the beginning of this post).

Fixing the ??About this Mac? message

  • Go to Paul??s Wind Drivers & Utilities Pack location in your Aspire One and under Utilities, double click on About this Mac.pkg.
  • Install it following the instructions. There??s no need to restart here.
  • Check that changes were made by going to the Apple logo in the top right corner > About this Mac and checking that it now says ??Processor Intel Atom CPU N270@1.6Ghz?

Getting 1024?600 resolution

  • Run the Kext Helper application from your Aspire One.
  • Go to Paul??s Wind Drivers & Utilitis Pack location, and drag an drop the following files to the Kext Helper application: AppleIntelGMA950.kext, AppleIntelIntegratedFramebuffer.kext, AppleSMBIOS.kext, ClamshellDisplay.kext and Natit.kext
  • As before, enter your password and click ??Easy Install??.
  • Fix Permissions with Disk Utility (launch Disk Utility, select your partition and then click on ??Repair Disk Permissions? in the ??First Aid? tab) and when finished restart your computer.
  • You can now go to System Preferences > Display to choose a resolution that best fits your needs.

Getting the network plug & unplug to work

  • Install the Realtek RTL810E drivers you downloaded from Realtek if you followed my instructions at the beginning
  • Restart your MacBook nano and you??re all set.

Getting the battery indicator to work

  • Go to the software package you should??ve download by now and unzip it.
  • Inside it, go to the AppleACPIBatteryManager > Build > Release directory. There you should see a AppleACPIBatteryManager.kext file.
  • Fire up the Kext Helper application, drag and drop the AppleACPIBatteryManager.kext file, insert your user password and click on ??Easy Install??.
  • For safety, restart your Aspire One. When done, you should have a working battery indicator.

Avoiding system shutdowns while closing the lid

This one is really easy. Just install InsomniaX (the link is also in the ??Software you??ll need?? list) and configure it to fire up every time you start your Mac OS X. This can be done going to System Preferences > Accounts, clicking on your account and going to the ??Login Items?? tab. There you can click on the ??+?? button and add InsomniaX to the list.

And that??s all, my friends. You should be able to go to the Apple menu and click on ??Software Updates?? to get the latest updates from Apple, and also download and install your favorite Mac OS X applications.

Enjoy the fruit!

Acknowledgements

Here??s the list of people that has been done possible this step by step tutorial:

  • Mario Camou, aka ??The Doctor?, for beta testing quite everything I??ve documented here.
  • Tnkgrl, for the amazingly great blog she has about hardware hacking the Acer Aspire One.
  • Paul, for his Utilities and Drivers pack
  • Harbot, for the tutorial that helped as base to build this one.
  • Chun Nan, for writing the AppleACPIBatteryManager modifications.
  • The joint El Geek Errante and Venera7 crews, that made this possible thanks to our discussions in our weekly ??Chicken Club Sandwich Social Club? geek meeting.
  • To everyone else that I left out of this list. There??s so much work and hacking involved it??s really difficult not to forget someone.
Notas
  1. Yeah, I??m talking about the gorgeous, feature-crippled and extremely expensive MacBook Air
  2. OSX86 Tools won??t work in a PowerPC based Apple computer; I already tried

[Artículo Tecnología ]
Venera7 : Javier Cañadillas - Conferencia Rails Hispana '07
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Eliminar barra Crawler de Firefox (40 blogs a seguir en 2008)   [269 views, last view 1 h, 55 min and 22 secs ago]
Hace algunos días un amigo necesitaba buscar y descargar un programa, concretamente un afinador de guitarras, le dije que lo hiciera desde mi computadora pero que tuviera cuidado con lo que instalara. Cuando vuelvo un par de horas después descubro que Firefox incluía una nueva y agradable barra de herramientas llamada Crawler, le pregunté si sabía lo que era y obviamente contestó que él no la había instalado. Al parecer el programita que probó venía con la barra de regalo que al instalarse sustituye al motor de búsquedas predeterminado y por supuesto, además de no inspirarme confianza, me molestaba.

Procedí a eliminarla, la barra Crawler puede ser desinstalada como cualquier otro programa, luego de hacerlo me aseguré además de eliminar todos los rastros de forma manual y con programas de limpieza. Algunas horas después cuando se suponía que Crawler había pasado a la historia, descubro que al ingresar una palabra en la barra de direcciones de Firefox y presionar ''Enter'', se mostraban resultados de Crawler.


La barra de direcciones de Firefox (donde introducimos las urls de las páginas) puede ser utilizada como un buscador, por defecto utiliza a Google, es muy útil para no tener que escribir una url completa o realizar búsquedas directamente desde allí. La característica implementada se denomina "Browse by Name" y en Zona Firefox se encuentra explicada de forma detallada.

Volviendo a la barra Crawler, aunque la desinstalemos se mantiene como motor de búsquedas en Internet Explorer y Firefox. En el primero es posible eliminarla cambiando las opciones de búsqueda (Internet Explorer 7), seleccionando otro motor como predeterminado y luego eliminando a Crawler Search:


En Firefox el procedimiento es básicamente el mismo aunque debe hacerse desde el ''about:config'', el ''truco'' lo descubrí gracias al experto Nico de Zona Firefox. ?l me proporcionó un par links con la respuesta, uno al foro de Mozilla Hispano y el otro a su blog donde además se explica cómo personalizar el comportamiento de las búsquedas en la barra de direcciones.

(clic para ampliar)

[Firefox ]
SpamLoco - 40 blogs a seguir en 2008
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content DSN pointing to unsupported ODBC driver (VMware virtualization: products, resources, news and information)   [132 views, last view 2 h, 2 min and 31 secs ago]

If you look at the supported OS's..... you'll see that it supports Windows 2003.....

"Supported Operating Systems: Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Vista Service Pack 1; Windows XP Service Pack 3"

The client also supports a range of SQL database versions....

"Microsoft SQL Server 2008 Native Client (SQL Native Client) is a single dynamic-link library (DLL) containing both the SQL OLE DB provider and SQL ODBC driver. It contains run-time support for applications using native-code APIs (ODBC, OLE DB and ADO) to connect to Microsoft SQL Server 2000, 2005, or 2008"



VMware communities - VMware virtualization: products, resources, news and information
View original post|Add to del.icio.us|11 months ago | Share

      view feed content Patch metadata missing (VMware virtualization: products, resources, news and information)   [654 views, last view 2 h, 33 min and 47 secs ago]

So I've got a bevy of ESXi Embedded systems connected to my VirtualCenter server, and I want to use Update Manager to patch them up to current. I've got them attached to the "critical" and "non-critical" baselines. When I try to scan them, the scan fails with:

Failed to scan HOSTNAME for updates. Patch metadata for HOSTNAME missing. Please download updates metadata first.
Now, I'm no dummy. I've read the forums, I've seen the thread and KB article about multiple NICs in my VirtualCenter server, and I edited that vci-integrity.xml file, or whatever it was, to have the URL of the Virtual Center server. And I confirmed that the ESXi host in question could both ping and resolve the virtualcenter server. The VirtualCenter server has unfettered access to the outside, and so has no problem talking to vmware.com or whatever that other site was that was listed in the KB articles. There's another KB article that mentions opening up firewall ports on the "ESX host", but that doesn't seem to be an option with the ESXi host, at least not anywhere that I've seen.

Support tells me that there's only two ways to manage the updates on ESXi embedded systems, using the "VMware Infrastructure Update" application (which requires manually logging into each and every ESXi host), or using some command-line tool. This, frankly, seems insane to me considering the Update Manager seems to be orders of magnitude more powerful in terms of what it can do, and I can't picture ESXi users being forced to do things "the very hard way" like that.

Does anyone have experience with this they'd like to share? I'm beginning to get very frustrated....

Cheers,

Derek



[update_manager update_mgr virtualcenter vum ]
VMware communities - VMware virtualization: products, resources, news and information
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Paragon HFS+ for Windows 8 adds write-access for Mac storage (Resources to integrate Macs and Windows)   [2 views, last view 4 h, 4 min and 28 secs ago]
Paragon Software has released Version 8 of Paragon HFS+ for Windows ($US 40), a new version of software that enables Windows to read and write to Mac-formatted storage. Previous versions provided Windows with read-only access to Mac storage, version 8 adds the ability to write as well. The company also claims that Paragon HFS+ for Windows is the fastest HFS+ driver available for Windows. The software is compatible with Boot Camp...

MacWindows.com - Resources to integrate Macs and Windows
View original post|Add to del.icio.us|68 d ago | Share

      view feed content Cómo Conseguí mi Equipo Strobist Básico por tan solo 80 Euros (Photography technique guides )   [44 views, last view 4 h, 17 min and 51 secs ago]

En un artículo anterior os expliqué en qué consistía la filosofía Strobist y cuales eran los componentes básicos necesarios para iniciarte en la iluminación portátil. En este artículo te explico cómo conseguir tu equipo más básico por muy poco dinero. Por tan solo 80 euros he conseguido juntar mi equipo básico de iluminación, flash incluído. ¿No te lo crees? En este artículo te cuento cómo conseguir cada uno de los elementos del equipo. Verás como al final salen las cuentas.

Introducción Aunque he ido ampliando mi equipo con el tiempo, hoy he querido hacer el ejercicio de reunir los enlaces necesarios para reunir un equipo strobist básico. Como casi siempre, para estas cosas recurro a eBay. Al final es la forma más cómoda que tengo de conseguir material de lo más diverso sin moverme de casa.

Y como de vez en cuando algún amigo me pregunta sobre ideas para regalar a algún amante de la fotografía y me acaba tocando encargarlo a mí, me he decidido a hacer la recopilación para tenerlo a punto si me llega la oportunidad. Y como he hecho otras veces, quería compartirlo contigo.

Todos los artículos encontrados están en la modalidad "Compralo Ya" (el precio mostrado es el final, no se trata de subastas).

Como los productos tienen una duración finita, los enlaces apuntan a las correspondientes búsquedas en eBay. Dependiendo de la cotización del dolar y de las ofertas de los vendedores los precios fluctuarán al alza o a la baja. No olvides marcar la opción "Todo el mundo" en tus búsquedas y ordenar los resultados por "Precio + envío: más bajo primero".

1) Lo primero, el flash

Si ya contáis con un flash os podéis ahorrar este paso (y una buena parte del presupuesto dedicado al equipo de iluminación).

Como vamos a disparar el flash remotamente, no es necesario disponer de un flash TTL, pero si es necesario que tenga la posibilidad de regular la potencia.

En mi caso opté por un Yongnuo YN460, de lo más barato que pude encontrar en el mercado. Lo conseguí nuevo por poco más de 40 euros gastos de envío incluídos, y acabo de ver que se puede conseguir ya por poco más de 30 euros.

En éste artículo te hablo en detalle del flash, donde además hay muchas opiniones y experiencias de usuarios que optaron por uno igual.

2) El trípode para el flash (Light Stand)

De nuevo, eBay es mi referencia. Hay que rebuscar un poco para encontrar lo que uno busca, porque se utiliza un término un tanto genérico para describirlo que coincide con otros productos más baratos. Puedes probar con "studio light stand".

En el momento de escribir estas líneas Next Digital tenía en stock un trípode de 180 cm como el mío por 21 euros gastos de envío incluídos. Un auténtico chollo. Y en Gadget Infinity los tienes por 24, más pequeños, eso si.

3) El soporte para la sombrilla

El soporte para la sombrilla (no se si existe un mejor nombre en español) es la pieza que se fija a la punta del trípode, sosteniendo la sombrilla y a la que se engancha el flash.

Tiene muchos nombres, pero los he podido encontrar muy baratos buscando "Flash Shoe Umbrella Holder Swivel Light Stand Bracket". Tan baratos como que cuestan otros 6 euros.

4) La sombrilla translúcida

La última pieza para montar el flash en el trípode es la sombrilla. Se trata de una sombrilla blanca (translúcida) que permite disparar el flash hacia el objeto y actua a modo de ventana de luz, ampliando la fuente de luz a la vez que la difumina.

Se puede encontrar por tan solo 5 euros con los gastos de envío incluídos, y si te fijas bien, hay vendedores que venden la sombrilla junto con el soporte, con lo que puede que consigas un mayor ahorro.

5) El disparador inalámbrico

Podría haberme ahorrado este elemento para que me saliera más barato el kit, pero creo que es un complemento fundamental.

En su momento adquirí un juego de emisor y receptor PT-04, pero posteriormente ha salido una evolución, el CTR-301, que me parece que cuenta con varias mejoras en su diseño, aunque se necesita un pequeño adaptador para engancharlo al soporte de la sombrilla, ya que por defecto viene con una rosca de trípode.

El PT-04 se puede encontrar por apenas 13 euros y el CTR-301 se puede encontrar por menos de 18 euros en kit de receptor y disparador.

Así que, todo el equipo por tan solo 80 euros

Si no has hecho aún la suma, te ayudaré:

32 euros del flash, 21 del trípode, 6 del adaptador, 5 de la sombrilla y 13 del disparador remoto son exactamente 77 euros. Teniendo en cuenta que siempre que pago por PayPal me acaban subiendo un poco el tipo de cambio, seguro que se queda en los 80.

Parece increíble, ¿verdad? ¿A que al principio no te lo habías creído?

Enlaces Relacionados

  • Foto de portada: My set-up, de Marvin Kuo
  • Cómo Conseguí mi segundo Flash por tan solo 40 Euros
  • Las 11 Claves para Comprar en eBay a Precios Increíbles y Sin Correr Riesgos
  • Strobist: una Interesante Alternativa a la Iluminación de Estudio

Descargas Premium Relacionadas

Para ti si quieres ir más allá, aquí están los contenidos de la Zona Premium relacionados con este artículo...

Versión PDF Este Artículo en Versión PDF Con páginas a todo color y listo para guardar en tu disco duro


El histograma - Photography technique guides
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Visio Stencils for vSphere (VMware virtualization: products, resources, news and information)   [2237 views, last view 4 h, 42 min and 32 secs ago]
Introduction

 

In continuation to the Library VMware Icons and Diagrams posted on VIOPS recently several people have made requests for using these wonderful graphics for designing Visio documents. These are the same Graphics from the official VMware Branding Team.

 

20/March/08 - Small Icons now available for documentation - Small VMware Icons

 

Intended Audience

 

Virtualization professionals that need to present documents and designs.

 

Outline

 

The Stencils have been separated into groups

 

  1. ThinApp-Stencil- Objects for ThinApp

  2. Build your Own-Stencil - Stand-alone objectsto create your own diagrams

  3. VM-STencil - Objects that are related Virtual Machines

  4. VMware-Stencil - General Objects for VMware

  5. Products-Stencil - Diagrams and objects that are related to VMware products or technologies

 

Method

 

1. Download the Attached Files below.

2. Extract the Stencils from both files.

 

 

3. Open Visio and open the all the Stencils.

 

 

4. Use the Stencils to create a visio diagram of your infrastructure

 

Resources

 

  1. This doc on the web @ VMware Icons and Diagrams - Visio Stencils

  2. Original PowerPoint Presentation with Graphics - Library VMware Icons and Diagrams.

  3. Visio Stencils Bundle - 1 (zip file) for your use - Attached to this document.

  4. Small VMware Icons

 

Author

 

Stencils Created and sorted by Maish Saidel-Keesing

 

All Graphics are from - VMware Corporate Branding

 

VMware (NYSE: VMW) is the global leader in virtualization solutions from the desktop to the datacenter. Customers of all sizes rely on VMware to reduce capital and operating expenses, ensure business continuity, strengthen security and go green. With 2008 revenues of $1.9 billion, more than 130,000 customers and more than 22,000 partners, VMware is one of the fastest-growing public software companies. Headquartered in Palo Alto, California, VMware is majority-owned by EMC Corporation (NYSE: EMC). For more information, visit www.vmware.com.

 

Disclaimer

 

You use this proven practice at your discretion. VMware and the author do not guarantee any results from the use of this proven practice. This proven practice is provided on an as-is basis and is for demonstration purposes only.

 

These graphics have not been optimized for Visio. They are not vector-based and are not guaranteed to resize at best quality.



VMWare VIOPS - VMware virtualization: products, resources, news and information
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Daemon Tools Lite Dosn't Run W7 (Free CD/DVD Burning utilities)   [163 views, last view 4 h, 57 min and 46 secs ago]
languagevalueHi!

I've upgraded to Windows 7 and I'm trying to run the latest Version of Daemon Tools Lite, I've read all the infomation
on the forum and I've followed the instructions to the letter.

I've installed the SPTD 1.62 Drivers before installing Daemon Tools.

The error I get when I try to run daemon tools is this;

This program requires at least windows 2000 with sptd 1.60 or higher. Kernal debugger must be deactivated.typetext/htmlbasehttp://rss.daemon-tools.cc/dtcc/rsscache/external-cached.php?type=RSS2

Daemon Tools - Free CD/DVD Burning utilities
View original post|Add to del.icio.us|9 months ago | Share

      view feed content Bodegones (hasta los dientes) (40 blogs a seguir en 2008)   [185 views, last view 5 h, 21 min and 5 secs ago]
languagevalue

Llevaba tiempo queriendo traer por aquí los bodegones armados de Geliographic, pero se me habían quedado por ahí perdidos entre los favoritos en mis rss. De hoy no pasa…

Por otro lado, ya hemos comentado aquí en otras ocasiones el atractivo de las armas que llega, en ocasiones, al freakismo más llamativo.

(La pista, por suerte sin fecha de caducidad, sum1).

Artículos más o menos relacionados
  • 3 Mayo 2009 -- Vals con Bashir (3)
  • 15 Marzo 2009 -- Guantánamo visto por Christopher Sims (0)
  • 12 Enero 2009 -- Lazet! Palabras y arte contra la actual guerra en Gaza (3)
  • 6 Noviembre 2008 -- Ganadores de la X Bienal Internacional del Cartel en México (0)
  • 21 Octubre 2008 -- La memoria de la tierra : Exhumaciones de asesinados por la represión franquista (1)
typetext/htmlbasehttp://feeds.feedburner.com/inicios
[pinturas armas guerra ]
Malos tiempos para la lirica - 40 blogs a seguir en 2008
View original post|Add to del.icio.us|7 months ago | Share

      view feed content Simulador de jubilaciones: calcula tus prestaciones ante de jubilarte (Recursos para seguir la actualidad económica y los mercados financieros ( España))   [578 views, last view 5 h, 51 min and 53 secs ago]


El simulador de jubilaciones es una herramienta bastante útil que nos permite calcular las prestaciones que se recibirán al jubilarnos, valga la redundancia, en función de lo que se está aportando a la Seguridad Social y a los planes de pensión particulares.

Un simulador de este tipo puede ser muy beneficioso ya que nos puede ayudar a estimar y planificar los últimos años de nuestra vida laboral, así como la creación de algún plan de pensiones privado con el fin de conseguir un nivel de vida de nuestro gusto cuando estemos con estatus de jubilados.

Gracias a este simulador sobre todo seremos capaces de:

  • Conocer la aportación que debe realizar para obtener la prestación que desee a su jubilación.

  • Calcular el ahorro fiscal que obtendrá con su aportación.

  • Conocer el nivel de vida que tendrá a la jubilación, suma de la pensión de la Seguridad Social y su Plan de Pensiones.

  • Elegir el Plan de Pensiones que mejor se adapte a su perfil inversor.

La forma de uso de dicho simulador es muy sencilla y se divide en siete apartados muy dinámicos sobre los que podremos informar y en base al cual se constituye hoy en día el cálculo de la prestación final con la que contamos, pública y privada.

En primer lugar tendremos que rellenar nuestro datos personales: fecha de nacimiento, sexo, movilidad geográfica y lugar de residencia, acompañado de un segundo punto en donde indicaremos si poseemos algún tipo de discapacidad y en que grado. A continuación indicamos si tenemos ascendientes o descendientes por consanguinidad directa y la edad de cada uno ellos.

En el punto cuatro deberemos indicar todas las retribuciones económicas que hemos recibido a lo largo del año, indicando los cuatro tipos de retribuciones contempladas en la normativa actual: salario bruto, rentas del ahorro, actividades económicas y resto de rentas generales. Así como en el punto cinco todo lo referente a nuestra situación en la seguridad social.

Por último deberemos rellenar los apartados seis y siete en donde entra en juego las aportaciones a planes de pensiones privados, indicando la cantidad total aportada y el perfil de inversor que somos, dependiendo del riesgo al que hayamos sujeto estos planes.

El resultado, habiéndole dado al botón de calcular, es una página bastante entretenida a la vista ya que presenta la información con gráficas y datos muy concisos acerca de el nivel de ingresos total que recibiremos cuando nos jubilemos y la importancia en las mismas de la parte pública y la privada.

El ejemplo en la imagen es muy sencillo: nuestra cuantía al jubilarnos será un 105% la de nuestro sueldo medio durante las aportaciones a la Seguridad Social, un 95% proveniente de esta última y un 10 por ciento de nuestros fondos de pensiones privados. Además tenemos un botón de descarga en PDF en donde podremos guardar para ver de forma más tranquila el resultado de los cálculos y así estudiar, si nuestra jubilación ya está cerca, como conseguir una mejor rentabilidad.

En resumen, el simulador de jubilaciones nos puede ayudar a ser muy analíticos con todas las características específicas de nuestra aportaciones a la Seguridad Social y a las entidades financieras para conseguir un sueldo en nuestra jubilación digno de las necesidades y del trabajo que hemos realizado durante toda nuestra vida.

En Actibva | Simulador de jubilaciones

Miguel Lopez, editor de Pymes y Autónomos y El Blog Salmón



Actibva BBVA - Recursos para seguir la actualidad económica y los mercados financieros ( España)
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Los distintos tipos de tributos: impuestos, contribuciones y tasas (Recursos para seguir la actualidad económica y los mercados financieros ( España))   [629 views, last view 5 h, 57 min and 41 secs ago]

Todos pagamos tributos, incluso aquellos que no alcanzan el mínimo para tener que hacer la declaración a hacienda. Cuando somos pequeños y compramos cromos pagamos el IVA, cuando nos formamos tenemos que pagar tasas por la expedición de los títulos, cuando trabajamos y ganamos el IRPF. En esta entrada vamos a hablar sobre los distintos tipos de tributos que pagamos.

Un tributo no está definido por ley, aunque los distintos tipos de tributos (impuestos, tasas y contribuciones) si lo están definidas. No obstante podemos definir un tributo como prestaciones (algo que damos) patrimoniales (porque disminuyen nuestro patrimonio) obligatorias que debemos hacer a las entidades públicas. Los tributos surgen de la necesidad de financiar a las administraciones públicas, aunque en ocasiones también se persiguen otros fines. Con excepciones los tributos se pagan mediante prestaciones monetarias. Los tributos se pueden agrupar en tres categorías: impuestos, contribuciones y tasas.

Una figura importante antes de explicar lo que es un tributo es el hecho imponible. El hecho imponible es aquello (el hecho jurídico) que nos obliga a el pago del tributo según la normativa legal vigente. Por ejemplo para el IRPF será la obtención de renta o para el Impuesto de Bienes Inmuebles la posesión de un bien inmueble.

La Ley General Tributaria dice que los impuestos son tributos exigidos sin contraprestación cuyo hecho imponible está constituido por negocios, actos o hechos de naturaleza jurídica o económica que ponen de manifiesto la capacidad contributiva del sujeto pasivo como consecuencia de la posesión de un patrimonio, la circulación de bienes o la adquisición o gasto de la renta. Lo que viene a decir que los impuestos son pagos que hacemos porque demostramos que somos capaces de hacer el pago y financiar la administración pública.

La ley además define que no hay derecho a contraprestación, por lo que no podemos exigir nada (un bien o un servicio) a cambio de pagar impuestos. Por tanto no se tiene derecho a circular por una carretera, que nuestros hijos vayan a un colegio o utilizar el servicio de urgencias por pagar impuestos. La financiación de la administración y los servicios que presta son completamente independientes.

Los impuestos se pueden clasificar en directos (como el IRPF) e indirectos (como el IVA), en personales (porque el contribuyente paga por su capacidad global) y reales (el contribuyente paga por un hecho que demuestra su capacidad), en objetivos (no tienen en cuenta la capacidad del contribuyente) y subjetivos (la tienen en cuenta) y por último se pueden clasificar en periódicos (se pagan más de una vez en el tiempo) y en instantáneos (se pagan una vez por unos hechos).

El siguiente tipo de tributos son las contribuciones especiales. Según la ley general tributaria se trata de aquellos tributos cuyo hecho imponible consiste en la obtención por el sujeto pasivo de un beneficio o un aumento de valor de sus bienes por la realización de obras públicas o el establecimiento o ampliación de servicios públicos. Es decir, se trata de tributos (pagos a la administración) que hacemos porque hemos recibido una contraprestación, siendo esta la mayor diferencia que hay con los impuestos. Por ejemplo si se construye una obra pública como pueda ser una parada de metro que revalorice un terreno. Este tipo de contribuciones no ha de ser superior al coste del establecimiento o ampliación del servicio. Asimismo los ingresos recaudados han de dedicarse a sufragar los gastos de la obra o servicio que han hecho exigir la obra.

Por último tenemos las tasas, que la la semana pasada comentamos en mayor detalle son tributos que pagamos porque utilizamos para nuestro beneficio privado un bien público, porque la administración nos da un servicio o porque se realicen actividades en régimen de derecho público. También están los precios públicos, pero estos no son tributos ya que no obligatorios, sino que se trata de un pago por un bien o servicio prestado por la administración pública en el que también incurre el sector privado.

El estudio de los tributos no sólo es importante para aquellos interesados en sus finanzas personales, sino que también sirve para entender muchas de las decisiones que se toman desde el ente público ya que su fnanciación depende casi exclusivamente de lo que recauda con los tributos. Además entender el tipo de tributo que estamos pagando nos ayuda a la hora de saber el porqué se nos está cobrando y cuanto debe ser el pago.

Imagen | Paul Keleher, Flickr
En Actibva | Cómo cumplir con Hacienda sin pisar por sus oficinas, Preparar la declaración de la renta

Javier Navarro, editor de El Blog Salmón



Actibva BBVA - Recursos para seguir la actualidad económica y los mercados financieros ( España)
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Exploring hardware overlay support in Windows 7 (Video conversion software and DVD rippers)   [38 views, last view 6 h, 5 min and 35 secs ago]
languageenvalue

I finally got around to trying out the new hardware overlay support in Windows 7:
http://msdn.microsoft.com/en-us/library/dd797814(VS.85).aspx

Hardware overlays are a quirk of video hardware that have survived in spite of their lack of evolution. They're essentially a secondary display scan out path in the video chip and are intended for video display, so that a video in a window can use a more optimized display format instead of the rest of the desktop for better playback performance. The biggest advantages of a hardware overlay are hardware accelerated scaling and color conversion from YCbCr to RGB, formerly very expensive operations; in some cases, you also got primitive deinterlacing and some additional TV-out support. Unfortunately, they were often also buggy in drivers. Windows Vista appeared to be the end of the line for overlays, as they were not supported in desktop composition mode, but guess what... they're back in Windows 7. As it turns out, hardware overlays are still valuable for a couple of reasons, one being that you can flip them faster and asynchronously from the composited desktop (good for performance) and because you can't capture their image in a screen grab operation (good for the paranoid). And this time, they have a few improvements, too.

The way you get to overlays is a bit different in Windows 7. In older versions, they were a feature of DirectDraw, and that meant you basically couldn't do anything other than lock-and-load -- DirectDraw couldn't even do color conversion, other than what the hardware overlay itself supported. This time, they're hooked up to Direct3D, which makes them a lot more useful since you can process video through DXVA and shader hardware and push the result into the overlay. The color space is now better defined, as there are flags for whether RGB output is computer RGB (0-255) or studio RGB (16-235), and whether YCbCr output is Rec.601/709 or xvYcc. So far, so good -- time to try it!

Now, it's not easy to get VirtualDub talking to the new overlays yet, for two reasons: the existing overlay code uses DirectDraw, and the Direct3D path only supports D3D9, whereas you need Direct3D9Ex in order to use the overlays. Therefore, I ended up just writing a one-off application to test it. Well, having gotten overlays to work and tested them a bit, I have to say they're a bit underwhelming. The good news:

  • You create it with D3DSWAPEFFECT_OVERLAY, and have a couple of new Present() options. That's pretty painless. You can even make your implicit swap chain the overlay.
  • Any time the window is translucent, temporarily scaled, or tilted as a result of animation, the overlay goes away. This includes Flip 3D (Win+Tab). Not surprising, given that overlays are 2D screen-based entities and don't have 3D mapping support. What you get instead is the color key, which is usually a reasonable dark color, i.e. not obnoxious pink.
  • Direct3D chooses and paints the color key for you. That's good. However, you have to call Present() with D3DPRESENT_UPDATECOLORKEY in your WM_PAINT handler.

Now, the bad news:

  • About half of the documentation on overlays in the current August 2009 DirectX SDK is TBD. Fortunately, the meanings of the constants are pretty obvious if you've used DirectDraw overlays.
  • DXCapsViewer doesn't know about any of the overlay caps.
  • The debug runtime doesn't seem to have been updated for overlay errors, either.
  • The overlay doesn't necessarily support stretching, and the one on my video card didn't. That means you have to have a swap chain at least as large as the output size and then do a 1:1 subrect Present(), and make sure you don't blow up during window animation when you get minimized. Because reallocating the swap chain can be expensive, Microsoft recommends that you create one the size of the screen. Sigh. I suppose this isn't too bad, because half the time when the hardware vendors did stretching they did it wrong anyway.
  • The sample code in MSDN recommends that you set the D3DPRESENTFLAG_VIDEO bit... you know, the one that has no documentation as to what it does, does nothing on many systems, is rumored to do something neat on TV-out on some system, and might format the user's hard drive on another for all I know.
  • The video driver set the LIMITEDRGB caps bit, but the corresponding D3DPRESENTFLAG_OVERLAY_LIMITEDRGB didn't seem to do anything -- I could still see a difference between 0-15 vs. 16 and 236-255 vs. 235, and the overlay looked the same as a non-overlay screen even on TV-out. So if you're excited about finally having studio RGB output, sorry, you're still SOL. (WHQL certified my #$*&....)
  • It's nice that there is now well-specified YCbCr support. Unfortunately, they forgot to mention any YCbCr surface formats you could actually use. My video driver set all of the YCbCr caps bits, but none of the FOURCCs I tried worked, including AYUV, UYVY, YUY2, YV12, NV12, and everything else that was enumerated in the DirectDraw FOURCC list. This is made doubly difficult by the fact that you're creating a render target and have to be able to draw polygons on the target format, so it's unlikely that the goofier subsampled formats would actually work.
  • You can get weird errors if display cloning is enabled. The API is supposed to return D3DERR_NOTAVAILABLE if the overlay is occupied, but I got D3DERR_OUTOFVIDEOMEMORY instead. I'm pretty sure that two displays and one render target take up far less than 256MB of video memory.

Disclaimer: I used Windows 7 RC for testing, since I don't have RTM.

So, what do we have at this point? Well, you can create a non-stretched RGB overlay with regular 0-255 range. That means unless you are either in a situation where you are being hampered by a low desktop composition rate or you need to prevent your image from being grabbed, it's unlikely that the overlay will have any advantages over plain blitting to the desktop. And of course, you need to use Direct3D9Ex to access them, which is juuuust different enough from regular Direct3D9 to be annoying. The situation might get better over time, and it may just be my crappy video card... but I'll wait until I actually see improvement.

If anyone wants to experiment with WDDM 1.1 overlays, here's the code I used to test them: d3doverlay.cpp. It's obviously not production code, but I assume if you're trying to build it you have some familiarity with setting up a project and with D3D9.

typetext/htmlbasehttp://virtualdub.org/blog/pivot/entry.php?id=282
[Exploring hardware overlay support in Windows 7 ]
Virtualdub - Video conversion software and DVD rippers
View original post|Add to del.icio.us|10 months ago | Share

      view feed content entrevista a Maia Kling, artífice del armario de Patricia (Premios revelación web 2007 Yahoo)   [155 views, last view 6 h, 58 min and 38 secs ago]

¡Por fin lo desvelamos! ¿De dónde saca Patricia Conde su ropa? Del armario de Patricia. ¿Y quién es este usuario que últimamente se pasea por los pasillos de 11870.com guardándose las tiendas en las que encontrar la ropa y marcas que la presentadora lleva en Sé lo que hicisteis (SLQH)?. Detrás del armario de Patricia está Maia Kling, la autora del blog El Armario de Patricia, que, al igual que dolcecity nos ha elegido para ordenar y mostrar mejor su selección tiendas. Maia Kling tiene mucho que decir de moda, tiendas y de cómo visten los famosos en España. Pasen y lean:

Lo primero, ¿conoces a Patricia Conde?
No, no la conozco en persona, ni tampoco he tenido la oportunidad de cruzarme nunca con ella.

¿Por qué la elegiste?
La elegí porque pienso que es capaz de darle vida hasta a la prenda más sosa. Es sencilla pero a la vez tiene ese punto que se necesita para poder vestirse con un simple pantalón y una camiseta y estar perfecta.

¿Y quién se esconde detrás de Maia Kling? ¿Es un pseudónimo?
En realidad es un semipseudónimo. Mi verdadero nombre es María, aunque todo el mundo me llama Maia. Lo de Kling viene de la marca que usa de vez en cuando Patricia en SLQH? Cuando me surgió la idea de hacer el blog y estaba buscando un pseudónimo cibernético, me acordé de cual había sido la razón por la que empecé a ver el programa, que era un modelo de Kling, una lechera turquesa y marrón chocolate que me encantó. Es simplemente un pequeño ??homenaje? a cómo empezó toda esta historia.

¿Cómo surge entonces la idea de crear El armario de Patricia?
Bueno, al principio me dedicaba a fijarme en la marca que aparecía en los créditos del programa, y después la buscaba en Internet. En una de esas búsquedas, di con un foro en el que se hablaba de la ropa que usaba Patricia en el programa. Después de un tiempo leyendo el foro me di cuenta de que por lo que las chicas más preguntaban era por las imágenes del vestido de ese día y por la marca, y de que estaría bien que hubiese alguna página donde estuvieran recopilada toda esa información.
Lo que hago es anotar los créditos del día y después buscar la imagen de Patricia y la prenda en las webs de las marcas. En lo de las imágenes de Patricia, el blog de SLQH es una ayuda enorme, ya que el blog lo llevo yo sola, y la verdad es que se lleva bastante tiempo. De no ser por ellos, tendría que hacer yo las capturas desde misexta.tv o el canal de youtube de SLQH, y el blog tardaría siglos en actualizarse.

¿Cua?to tiempo llevas con tu blog? ¿Te esperabas un éxito así?
Empecé con el blog en Febrero de 2008, y desde entonces ya va por las 40.000 visitas. Al principio las visitas no subían mucho, pero un día uno de los chicos del blog de SLQH me propuso añadir un enlace de mi blog en el suyo, y a partir de ahí se notó muchísimo la diferencia. No me esperaba la repercusión que ha tenido el blog, yo sólo pretendía hacer una recopilación de los modelos de Patricia, y por lo visto, éso era lo que la gente echaba en falta en Internet.

¿Con qué frecuencia lo actualizas? ¿Ves alguna evolución desde que empezaste con tu blog?
Trato de actualizarlo a diario, o cada 2 ó 3 días, pero hay ocasiones en que no tengo tiempo y se me acumulan las imágenes. He ido cambiando el formato en el que pongo las imágenes, antes ponía una imagen en la que se veía sólo la parte superior del cuerpo, ahora pongo también una imagen de cuerpo entero en pequeño, para que se pueda ver todo el modelo. También dedico algún post que otro a eventos a los que acude Patricia, para que el blog esté dedicado a todo el armario de Patricia, no sólo a la ropa del programa.

¿Qué marcas despiertan más tu pasión?
Me gusta mucho BCBG, René Derhy, Kling, Maje, Alicia Rueda, Amaya Arzuaga, Bimba y Lola? pero no me las puedo permitir, así que sigo soñando. De todas éstas, donde vivo la única que he encontrado que no es demasiado cara es René Derhy, de la que tengo una chaqueta y un vestido. Kling tiene tienda online en su web, pero no me atrevo a comprar nada, no me fio de comprarme ropa sin probármela.

¿Gastas mucho en ropa?
Más que gastar mucho en mucha ropa, prefiero gastar más dinero en poca ropa, es decir, prefiero gastarme el dinero en alguna prenda más buena que tener por ejemplo, el mismo bolso en diez colores distintos.

¿Tu último capricho?
Mi último capricho aún no me lo he dado, va a ser un vestido precioso de René Derhy que he visto, se lo pediré a los Reyes?.

¿Y tu capricho más caprichoso? en moda?
Mi capricho más caprichoso es un vestido de punto que llevó Patricia el 26 de Septiembre de 2007. Estuve buscándolo mucho tiempo hasta que di con él. Ahora es mi vestido favorito.
No me había pasado algo parecido nunca, y por el bien de mi bolsillo, ¡rezo para que no me pase más!

¿Cómo encuentras los modelos que lleva Patricia luego en las tiendas? ¿Se pone en contacto la gente contigo para hacerte consultas?
En mi ciudad hay pocas oportunidades de encontrar los modelos de Patricia. Lo que hago es buscar en las webs de las marcas que aparecen en los créditos, y cuando encuentro alguna foto de la misma prenda que haya llevado Patricia la pongo al lado de su imagen.
Muchas personas me preguntan por alguna prenda que otra, o por dónde pueden adquirirlas, y yo trato de ayudarles en lo que puedo. También me comentan que debería hacerle llegar mi blog a la estilista de Patricia, para que me ayude con las marcas y eso? de hecho, sé que ella ha visto el blog y le ha gustado, pero no me atrevo a pedirle tanto.

¿De qué otros personajes te hubiera gustado hacer un blog de moda? ¿Cómo opinas que se visten los famosos en España?
Hay gente que me comenta que también podría hacer El armario de Berta (Berta Collado) y la verdad es que me lo estoy planteando. Me gusta mucho cómo la visten, es ropa del estilo de Patricia. Lo que no creo que haga es El armario de Pilar, no concuerda con mi estilo, aunque también hay que reconocer que hay veces que saca vestidos muy interesantes.
Aparte de las chicas de SLQH me gusta cómo viste Penélope Cruz; es una persona que acierta con la forma que se debe ir vestida en cada momento. Eugenia Silva y Martina Klein son otras de las famosas que creo que tienen mucho estilo. Pero la verdad es que hay de todo, no quisiera dar nombres, pero más de una vez pienso: ¿en qué estaría pensando esta chica cuando se miró en el espejo antes de salir de casa?

Hay muchos blogs de moda, qué es lo que más te gusta de ellos?
Suelo seguir bastantes, se puede aprender muchas cosas de los blogs de moda: saber cómo hay que vestirse en una situación determinada, saber lo que son unas victorias, un borsalino, unos zapatos oxford, un vestido babydoll?.
También otra de las cosas que más me gusta es ver que hay vida más allá de Inditex. Donde vivo no hay más tiendas aparte de éstas, y todo el mundo viste igual, está bien conocer otras marcas y otras formas de vestir.

Hemos visto además que tienes una actividad frenética en algunos foros en los que se comenta el vestuario de la gente de SLQH, ¿crees que es un fenómeno?
Quizá sí tiene algo de fenómeno. Desde que Patricia empezó a ponerse vestidos babydoll ese estilo se ha ido extendiendo, aunque quizá sea sólo casualidad. Las estilistas también tienen mucha culpa de esto.

¿Cómo conociste 11870.com y qué es lo que más te gusta de 11870.com? ¿Te gusta tener ordenadas las tiendas en donde se venden los modelos que viste Patricia Conde?
Di con 11870.com buscando qué era Japanese Closet (uno de los créditos que a veces aparecen en el programa), y descubrí gracias a esta página que es una tienda de Madrid. Me ha resultado una gran ayuda para el blog, porque gracias a 11870.com puedo dar respuesta a quien me pregunta por las direcciones de las tiendas de la ropa de Patricia. No he tenido tiempo de explorar la página a fondo, pero por lo que he ido viendo es una página muy interesante, porque permite a personas anónimas dar su opinión sobre comercios, restaurantes? y qué mejor que alguien que haya estado allí te hable de las características del sitio, de las ventajas o inconvenientes de tal tienda o tal otra?

Ya para terminar, ¿qué tiendas/marcas recomendarías a Patricia Conde?
A veces usa ropa de H&M, yo le recomiendo a su estilista que siga por ésa linea: Zara, Mango, Massimo Dutti? prendas un poco más económicas que los sufridos bolsillos de sus seguidoras nos podamos permitir. Aunque tengo entendido que son las firmas quienes prestan las prendas al programa como publicidad, que por otra parte también está bien, ya que esto es una oportunidad de conocer marcas que antes no conocía.


[entrevistas habitantes de 11870 ]
11870.com - Premios revelación web 2007 Yahoo
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Brain Dump of Real Time Web(RTW) and WebSocket (Conferencia Rails Hispana '07)   [115 views, last view 7 h, 13 min and 56 secs ago]

Since I started blogging about WebSocket, people have been kind enough to send me more information through comments, tweets, and emails. I am happy that everyone has been sending me all this cool information and I thought I would dump some of that information here. This below is my view of the world of the Real Time Web and WebSockets.

Aghh! They look all tangled up like spaghetti code! I've tried to untangle some of this and break it down into byte sized chunks. I've come up some common themes and lots of links. Hopefully this post will help you understand what kind of different technologies are out there.

  • First, the definition of RTW
  • The many ways to achieve RTW
  • The many implementations of WebSockets
  • Are WebSockets the silver bullet for RTW?
  • Summary
First, the definition of RTW

From Wikipedia,

The real-time web is a set of technologies and practices which enable users to receive information as soon as it is published by its authors, rather than requiring that they or their software check a source periodically for updates. It is fundamentally different from real-time computing since there is no knowing when, or if, a response will be received. The information types transmitted this way are often short messages, status updates, news alerts or links to longer documents. The content is often “soft” in that it is based on the social web - people’s opinions, attitudes, thoughts and interests - as opposed to hard news or facts.

So, according to Wikipedia, my “Real Time Activity monitor” is more for “Real-Time Computing”, as it was periodic update and the content is not “soft”. However, in this article, I would like to combine both “non periodic update” of Real Time Web(RTW going forward), and “periodic, very frequent update” of Real Time Computing aspect, as it shares similar problems. The keyword is “Push, Not Pull”. The current Web Paradigm is capable of pulling “non frequent update”, up until daily or hourly. However, when the update is in very short or unknown intervals, then clients end up hitting servers very heavily.

The many ways to achieve RTW

Comet

Comet is an umbrella term, which covers a number of techniques to achieve push-technology on the web.

In web development, Comet is a neologism to describe a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it. Comet is an umbrella term for multiple techniques for achieving this interaction. All these methods rely on features included by default in browsers, such as JavaScript, rather than on non-default plugins.

The most common approach to Comet, using XMLHttpRequest long polling is fine when the pushing interval is unknown, but begins to fall down when you have a known, frequent push interval.

In my my previous article I demonstrated an activity monitor using web sockets (Code). As a followup to that, Rob Righter cloned that app but used long polling instead. I suggest reading both the websockets code and the long polling code to understand how the techniques differ.

Regarding the lack of a Comet standard, there are several applications and frameworks which offer a Comet solution so that you can concentrate on writing your business logic, rather than implementing Comet from scratch. Jetty is an Java based HTTP server and Jetty Continuations is an early adopter to offer Comet solution. APE (Ajax Push Engine) also provides a complete comet solution which works with various javascript libraries.

Interestingly enough, both Jetty and APE now offer WebSocket, too.

  • Jetty introduces WebSocket support (reluctantly)
  • AJAX Push Engine : Native WebSocket support
XMPP

Unlike Comet, XMPP stands for Extensible Messaging and Presence Protocol and it is a standards based protocol.

The main feature is “Presence” which takes care of authentication, and shows whether participants are online or not. You have already seen examples of XMPP use on web via GTalk and Google Wave.

XMPP Standards Foundation also defined “Bidirectional-streams Over Synchronous HTTP”(BOSH) which can be used to transport XMPP over HTTP. There is a library called strophe where you can write XMPP client in both JavaScript and C for use in a wide variety of languages (Thanks to Luis Cipriani for all the info).

There is a screencast which explains the combination of the three.

  • DEVELOPER LUNCH: XMPP, BOSH, STROPHE AND THE “REAL TIME WEB”

According to the screencast, BOSH is a fancy name for long polling, so you could use WebSocket instead of BOSH. In fact, Kaazing Gateway already supports it.

I haven’t explored XMPP much yet, but Luis is visiting New Bamboo soon, so hopefully we can write another blog post about this. For now, here is my list of questions to XMPP and its use on Web. If you already know answers, please feel free to comment.

  • What’s data transfer mechanism over HTTP backend? Does it use long held HTTP request (like Comet), data framing (like Websockets), or continuous polling?
  • Authentication. Can I only use it for XMPP authentications like AIM and GTalk, or can I hook it up to other authentication, such as Twitter OAuth?
  • Wikipedia lists weakness of XMPP as “In-band binary data transfer is inefficient” and “Presence data overhead”, but what do they actually mean?
FlashSocket

Flash has supported socket programming for a long time. web-socket-js is actually an WebSocket browser side implementation on top of Flashsocket.

WebSockets

Yes, I have discussed WebSockets in the previous blog entires and I will discuss more in the following sections.

The many implementations of WebSockets.

I think the node.js evented approach goes very well with WebSockets, but does it mean that we should abandon our favourite server side language/framework? Not quite. Like Jetty and APE already support WebSocket, most concurrency orientated languages, libraries, and frameworks already have WebSocket support.

Here is how you write “Echo” example in a number of different languages/libraries/frameworks.

Erlang
  • “Comet is dead long live websockets” by Joe Armstrong
start() -> F = fun interact/2, spawn(fun() -> start(F, 0) end). interact(Browser, State) -> receive {browser, Browser, Str} -> Str1 = lists:reverse(Str), Browser ! {send, "out ! " ++ Str1}, interact(Browser, State); after 100 -> Browser ! {send, "clock ! tick " ++ integer_to_list(State)}, interact(Browser, State+1) end. Google Go
  • An example from Google Go source code
// A trivial example server is: // package main import ( "http" "io" "websocket" ) // echo back the websocket. func EchoServer(ws *websocket.Conn) { io.Copy(ws, ws); } func main() { http.Handle("/echo", websocket.Handler(EchoServer)); err := http.ListenAndServe(":12345", nil); if err != nil { panic("ListenAndServe: ", err.String()) } } Python pywebsocket
  • An example from pywebsocket
from mod_pywebsocket import msgutil _GOODBYE_MESSAGE = 'Goodbye' def web_socket_do_extra_handshake(request): pass # Always accept. def web_socket_transfer_data(request): while True: line = msgutil.receive_message(request) msgutil.send_message(request, line) if line == _GOODBYE_MESSAGE: return Python Tornado
  • Web Sockets in Tornado
class EchoWebSocket(tornado.websocket.WebSocketHandler): def open(self): self.receive_message(self.on_message) def on_message(self, message): self.write_message(u"You said: " + message) Ruby EventMachine
  • Ruby & WebSockets: TCP for the Browser
require 'em-websocket' EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws| ws.onopen { ws.send "Hello Client!"} ws.onmessage { |msg| ws.send "Pong: #{msg}" } ws.onclose { puts "WebSocket closed" } end Ruby Sunshowers
  • Sunshowers: Web Sockets for Ruby, Rack+Rainbows!
# A simple echo server example require "sunshowers" use Rack::ContentLength use Rack::ContentType run lambda { |env| req = Sunshowers::Request.new(env) if req.ws? req.ws_handshake! ws_io = req.ws_io ws_io.each do |record| ws_io.write_utf8(record) break if record == "Goodbye" end req.ws_quit! # Rainbows! should handle this quietly end [404, {}, []] } Node.js (I know of at least 3 different implementations. The code example is for node.websocket.js)
  • Node.JS and the WebSocket protocol
var Module = this.Module = function(){ }; Module.prototype.onData = function(data, connection){ if (data == 'start'){ this.interval = setInterval(function(){ connection.send(JSON.stringify(data)); }, 1000); } }; Module.prototype.onDisconnect = function(connection){ clearInterval(this.interval); }; Java Jetty
  • Jetty WebSocket Server
public class WebSocketChatServlet extends WebSocketServlet { private final Set _members = new CopyOnWriteArraySet(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException ,IOException { getServletContext().getNamedDispatcher("default").forward(request,response); } protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { return new ChatWebSocket(); } class ChatWebSocket implements WebSocket { Outbound _outbound; public void onConnect(Outbound outbound) { _outbound=outbound; _members.add(this); } public void onMessage(byte frame, byte[] data,int offset, int length) {} public void onMessage(byte frame, String data) { for (ChatWebSocket member : _members) { try { member._outbound.sendMessage(frame,data); } catch(IOException e) {Log.warn(e);} } } public void onDisconnect() { _members.remove(this); } } } PHP
  • There are phpwebsocket and phpwebsockets, but neither has an echo example. If you do understand php, can you read the source code and provide the echo sample?

It’s interesting to see so many ways to do the same thing. Which way did you like it? Is your favourite language listed here?

Are WebSockets the silver bullet for RTW?

I have advocated a lot about WebSockets, but let’s do a few reality checks before everybody jumps onto the WebSockets bandwagon.

NOTE: I will skip the adoption rate of WebSocket in browser, because there are not much I can add to the existing info.

Video and Audio use.

This area is still dominated by Flash technologies. Even though WebSockets can send binary data, you need something at client side to decode. The best that I can think of is to bridge between javascript and Flash, but I guess it’s better to learn Flash in that case.

Mobile use

As Ilya Grigorik mentioned in his blog, Websockets’ bi-directional push will be easier on the battery and much more efficient for bandwidth consumption. However, mobile networks tend to lose their connection or switch to different networks (eg: from 3G to wifi) frequently, so not sure how WebSockets works in real mobile scenario. Also, due to the nature of mobile phone mostly being standby mode, probably “Push notification” has bigger demand, and you may need to access devices’ native feature from various libraries like below.

  • Palm to Introduce Push Services
  • Rhomobile Announces Rhodes 1.2 with Support for Push Data on iPhone and BlackBerry
  • iPhone Push notification on Titanium
  • Apple Push Notification Service using & MYSQL
Any problems with the WebSockets protocol itself?

Greg Wilkins, who implemented WebSocket feature on Jetty, posted a blog article about problems of Websocket protocol and how to improve it (or even suggested alternative approach)

  • How to improve Websocket

Among his various arguments, I found the following two points very interesting.

Orderly Close

websocket has no concept of an idle connection, and thus an implementation will either keep connections open forever (DOS risk) or risk closing an in-use connection. Note also that the burden of handling disconnection and message retries falls to the application with websocket. Short of acknowledging every message is a significant overhead and thus not practicable as a solution for all.

Message Fragmentation

Another issue with HTTP/1.1 pipelining is that the time taken to transmit/receive/process one message in the pipeline can unreasonably delay the handling of subsequent messages. While websocket is not hampered in this regard by request response semantics, it still suffers from the issue that the sending of a large websocket message may unreasonably delay the transmission of other messages.

If you are going to bet on WebScokets for 2010, you might want to spend a little bit of time reading the above blog article, the WebSocket protocol draft, or the source code of any WebSocket supporting libraries.

Summary

After reading my yet another long blog post, did you get clear idea about RTW and WebSocket, or get confused?

Here are my takes after this brain dump.

  • There are Real Time Web and Real Time Computing. They are both push based technology, but the update frequency and content of data are different between them.
  • Comet (aka Ajax long polling), XMPP, FlashSocket, and WebSocket are currently available technology for Real Time Web. Each technology has pros and cons.
  • Many concurrency orientated languages/libraries/frameworks offer WebSocket solutions. Also some Comet based frameworks now offers WebSocket support as well.
  • WebSocket is NOT the silver bullet for all RTW scenarios.

The world of RTW and WebSockets is changing rapidly and new examples, blog posts, and libraries appear almost every day. Please let us know such new information as you find or create them.



Pablo A. Delgado - Conferencia Rails Hispana '07
View original post|Add to del.icio.us|8 months ago | Share

      view feed content Impossibile installare Daemon Tools (Free CD/DVD Burning utilities)   [105 views, last view 7 h, 19 min and 4 secs ago]
languagevalueCome da titolo, non riesco ad installare Daemon Tools sul mio notebook HP con Windows Seven 32 bit.

Il problema è questo: durante l'installazione, parte l'installazione del driver (???) SPTD, dopo la quale si riavvia il pc. Durante l'avvio però compare la terrificante (almeno per me) schermata BLU e parte windows in modalità ripristino, che ovviamente riporta il sistema a prima dell'installazione di Daemon Tools.

Poichè il mio pc aveva anche qualche altro problemino, ho pensato che formattando avrei risolto anche questo, e invece niente. Qualcuno sa aiutarmi?

P.S. Mentre scrivevo qui, ho lanciato di nuovo l'installer perché volevo capire qualcosa in più riguardo al famigerato SPTD ma ho interrotto l'operazione: ebbene questa volta l'installazione è andata a buon fine senza riavvii e ripristini strani, solo che quando lancio il programma, un messaggio di errore mi avvisa che "Questo programma richiede almeno Windows 2000 con SPTD 1.60 o superiori. Il debugger del Kernel deve essere disabilitato". Quindi effettivamente adesso il programma c'è ma non funziona... che faccio???typetext/htmlbasehttp://rss.daemon-tools.cc/dtcc/rsscache/external-cached.php?type=RSS2

Daemon Tools - Free CD/DVD Burning utilities
View original post|Add to del.icio.us|9 months ago | Share

      view feed content up and running with cassandra (Best Ruby on Rails Blogs )   [69 views, last view 7 h, 20 min and 18 secs ago]
languagevalue

Cassandra is a hybrid non-relational database in the same class as Google's BigTable. It is more featureful than a key/value store like Dynomite, but supports fewer query types than a document store like MongoDB.

Cassandra was started by Facebook and later transferred to the open-source community. It is an ideal runtime database for web-scale domains like social networks.

This post is both a tutorial and a "getting started" overview. You will learn about Cassandra's features, data model, API, and operational requirements—everything you need to know to deploy a Cassandra-backed service.

May 11, 2010: post updated for Cassandra gem 0.8 and Cassandra version 0.6.

features

There are a number of reasons to choose Cassandra for your website. Compared to other databases, three big features stand out:

  • Flexible schema: with Cassandra, like a document store, you don't have to decide what fields you need in your records ahead of time. You can add and remove arbitrary fields on the fly. This is an incredible productivity boost, especially in large deployments.
  • True scalability: Cassandra scales horizontally in the purest sense. To add more capacity to a cluster, turn on another machine. You don't have restart any processes, change your application queries, or manually relocate any data.
  • Multi-datacenter awareness: you can adjust your node layout to ensure that if one datacenter burns in a fire, an alternative datacenter will have at least one full copy of every record.

Some other features that help put Cassandra above the competition :

  • Range queries: unlike most key/value stores, you can query for ordered ranges of keys.
  • List datastructures: super columns add a 5th dimension to the hybrid model, turning columns into lists. This is very handy for things like per-user indexes.
  • Distributed writes: you can read and write any data to anywhere in the cluster at any time. There is never any single point of failure.
installation

You need a Unix system. If you are using Mac OS 10.5, all you need is Git. Otherwise, you need to install Java 1.6, Git 1.6, Ruby, and Rubygems in some reasonable way.

Start a terminal and run:

sudo gem install cassandra

If you are using Mac OS, you need to export the following environment variables:

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home" export PATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin:$PATH"

Now you can build and start a test server with cassandra_helper:

cassandra_helper cassandra

It runs!

live demo

The above script boots the server with a schema that we can interact with. Open another terminal window and start irb, the Ruby shell:

irb

In the irb prompt, require the library:

require 'rubygems' require 'cassandra' include SimpleUUID

Now instantiate a client object:

twitter = Cassandra.new('Twitter')

Let's insert a few things:

user = {'screen_name' => 'buttonscat'} twitter.insert(:Users, '5', user) tweet1 = {'text' => 'Nom nom nom nom nom.', 'user_id' => '5'} twitter.insert(:Statuses, '1', tweet1) tweet2 = {'text' => '@evan Zzzz....', 'user_id' => '5', 'reply_to_id' => '8'} twitter.insert(:Statuses, '2', tweet2)

Notice that the two status records do not have all the same columns. Let's go ahead and connect them to our user record:

twitter.insert(:UserRelationships, '5', {'user_timeline' => {UUID.new => '1'}}) twitter.insert(:UserRelationships, '5', {'user_timeline' => {UUID.new => '2'}})

The UUID.new call creates a collation key based on the current time; our tweet ids are stored in the values.

Now we can query our user's tweets:

timeline = twitter.get(:UserRelationships, '5', 'user_timeline', :reversed => true) timeline.map { |time, id| twitter.get(:Statuses, id, 'text') } # => ["@evan Zzzz....", "Nom nom nom nom nom."]

Two tweet bodies, returned in recency order—not bad at all. In a similar fashion, each time a user tweets, we could loop through their followers and insert the status key into their follower's home_timeline relationship, for handling general status delivery.

the data model

Cassandra is best thought of as a 4 or 5 dimensional hash. The usual way to refer to a piece of data is as follows: a keyspace, a column family, a key, an optional super column, and a column. At the end of that chain lies a single, lonely value.

Let's break down what these layers mean.

  • Keyspace (also confusingly called "table"): the outer-most level of organization. This is usually the name of the application. For example, 'Twitter' and 'Wordpress' are both good keyspaces. Keyspaces must be defined at startup in the storage-conf.xml file.

  • Column family: a slice of data corresponding to a particular key. Each column family is stored in a separate file on disk, so it can be useful to put frequently accessed data in one column family, and rarely accessed data in another. Some good column family names might be :Posts, :Users and :UserAudits. Column families must be defined at startup.

  • Key: the permanent name of the record. You can query over ranges of keys in a column family, like :start => '10050', :finish => '10070'—this is the only index Cassandra provides for free. Keys are defined on the fly.

After the column family level, the organization can diverge—this is a feature unique to Cassandra. You can choose either:

  • A column: this is a tuple with a name and a value. Good columns might be 'screen_name' => 'lisa4718' or 'Google' => 'http://google.com'.

    It is common to not specify a particular column name when requesting a key; the response will then be an ordered hash of all columns. For example, querying for (:Users, '174927') might return:

    {'name' => 'Lisa Jones', 'gender' => 'f', 'screen_name' => 'lisa4718'}

    In this case, name, gender, and screen_name are all column names. Columns are defined on the fly, and different records can have different sets of column names, even in the same keyspace and column family. This lets you use the column name itself as either structure or data. Columns can be stored in recency order, or alphabetical by name, and all columns keep a timestamp.

  • A super column: this is a named list. It contains standard columns, stored in recency order.

    Say Lisa Jones has bookmarks in several categories. Querying (:UserBookmarks, '174927') might return:

    {'work' => { 'Google' => 'http://google.com', 'IBM' => 'http://ibm.com'}, 'todo': {...}, 'cooking': {...}}

    Here, work, todo, and cooking are all super column names. They are defined on the fly, and there can be any number of them per row. :UserBookmarks is the name of the super column family. Super columns are stored in alphabetical order, with their sub columns physically adjacent on the disk.

Super columns and standard columns cannot be mixed at the same (4th) level of dimensionality. You must define at startup which column families contain standard columns, and which contain super columns with standard columns inside them.

Super columns are a great way to store one-to-many indexes to other records: make the sub column names TimeUUIDs (or whatever you'd like to use to sort the index), and have the values be the foreign key. We saw an example of this strategy in the demo, above.

If this is confusing, don't worry. We'll now look at two example schemas in depth.

twitter schema

Here is the schema definition we used for the demo, above. It is based on Eric Florenzano's Twissandra:

<Keyspace Name="Twitter"> <ColumnFamily CompareWith="UTF8Type" Name="Statuses" /> <ColumnFamily CompareWith="UTF8Type" Name="StatusAudits" /> <ColumnFamily CompareWith="UTF8Type" Name="StatusRelationships" CompareSubcolumnsWith="TimeUUIDType" ColumnType="Super" /> <ColumnFamily CompareWith="UTF8Type" Name="Users" /> <ColumnFamily CompareWith="UTF8Type" Name="UserRelationships" CompareSubcolumnsWith="TimeUUIDType" ColumnType="Super" /> </Keyspace>

What could be in StatusRelationships? Maybe a list of users who favorited the tweet? Having a super column family for both record types lets us index each direction of whatever many-to-many relationships we come up with.

Here's how the data is organized:

Cassandra lets you distribute the keys across the cluster either randomly, or in order, via the Partitioner option in the storage-conf.xml file.

For the Twitter application, if we were using the order-preserving partitioner, all recent statuses would be stored on the same node. This would cause hotspots. Instead, we should use the random partitioner.

Alternatively, we could preface the status keys with the user key, which has less temporal locality. If we used user_id:status_id as the status key, we could do range queries on the user fragment to get tweets-by-user, avoiding the need for a user_timeline super column.

multi-blog schema

Here's a another schema, suggested to me by Jonathan Ellis, the primary Cassandra maintainer. It's for a multi-tenancy blog platform:

<Keyspace Name="Multiblog"> <ColumnFamily CompareWith="TimeUUIDType" Name="Blogs" /> <ColumnFamily CompareWith="TimeUUIDType" Name="Comments"/> </Keyspace>

Imagine we have a blog named 'The Cutest Kittens'. We will insert a row when the first post is made as follows:

require 'rubygems' require 'cassandra' include SimpleUUID multiblog = Cassandra.new('Multiblog') multiblog.insert(:Blogs, 'The Cutest Kittens', { UUID.new => '{"title":"Say Hello to Buttons Cat","body":"Buttons is a cute cat."}' })

UUID.new generates a unique, sortable column name, and the JSON hash contains the post details. Let's insert another:

multiblog.insert(:Blogs, 'The Cutest Kittens', { UUID.new => '{"title":"Introducing Commie Cat","body":"Commie is also a cute cat"}' })

Now we can find the latest post with the following query:

post = multiblog.get(:Blogs, 'The Cutest Kittens', :reversed => true).to_a.first

On our website, we can build links based on the readable representation of the UUID:

guid = post.first.to_guid # => "b06e80b0-8c61-11de-8287-c1fa647fd821"

If the user clicks this string in a permalink, our app can find the post directly via:

multiblog.get(:Blogs, 'The Cutest Kittens', :start => UUID.new(guid), :count => 1)

For comments, we'll use the post UUID as the outermost key:

multiblog.insert(:Comments, guid, {UUID.new => 'I like this cat. - Evan'}) multiblog.insert(:Comments, guid, {UUID.new => 'I am cuter. - Buttons'})

Now we can get all comments (oldest first) for a post by calling:

multiblog.get(:Comments, guid)

We could paginate them by passing :start with a UUID. See this presentation to learn more about token-based pagination.

We have sidestepped two problems with this data model: we don't have to maintain separate indexes for any lookups, and the posts and comments are stored in separate files, where they don't cause as much write contention. Note that we didn't need to use any super columns, either.

storage layout and api comparison

The storage strategy for Cassandra's standard model is the same as BigTable's. Here's a comparison chart:

multi-fileper-fileintra-fileRelationalBigTableCassandra, standard modelCassandra, super column model
serverdatabasetable*primary keycolumn value
clustertablecolumn familykeycolumn namecolumn value
clusterkeyspacecolumn familykeycolumn namecolumn value

* With fixed column names.

Column families are stored in column-major order, which is why people call BigTable a column-oriented database. This is not the same as a column-oriented OLAP database like Sybase IQ—it depends on whether your data model considers keys to span column families or not.

In row-orientation, the column names are the structure, and you think of the column families as containing keys. This is the convention in relational databases.

In column-orientation, the column names are the data, and the column families are the structure. You think of the key as containing the column family, which is the convention in BigTable. (In Cassandra, super columns are also stored in column-major order—all the sub columns are together.)

In Cassandra's Ruby API, parameters are expressed in storage order, for clarity:

RelationalBigTableCassandra: standard modelCassandra: super column model
SELECT `column` FROM `database`.`table` WHERE `id` = key;
table.get(key, "column_family:column")
keyspace.get("column_family", key, "column")

Note that Cassandra's internal Thrift interface mimics BigTable in some ways, but this is being changed.

going to production

Cassandra is an alpha product and could, theoretically, lose your data. In particular, if you change the schema specified in the storage-conf.xml file, you must follow these instructions carefully, or corruption will occur (this is going to be fixed). Also, the on-disk storage format is subject to change, making upgrading a bit difficult.

The biggest deployment is at Facebook, where hundreds of terabytes of token indexes are kept in about a hundred Cassandra nodes. However, their use case allows the data to be rebuilt if something goes wrong. Currently there are no known deployments of non-transient data. Proceed carefully, keep a backup in an unrelated storage engine...and submit patches if things go wrong.

That aside, here is a guide for deploying a production cluster:

  • Hardware: get a handful of commodity Linux servers. 16GB memory is good; Cassandra likes a big filesystem buffer. You don't need RAID. If you put the commitlog file and the data files on separate physical disks, things will go faster. Don't use EC2 or friends without being aware that the virtualized I/O can be slow, especially on the small instances.

  • Configuration: in the storage-conf.xml schema file, set the replication factor to 3. List the IP address of one of the nodes as the seed. Set the listen address to the empty string, so the hosts will resolve their own IPs. Now, adjust the contents of cassandra.in.sh for your various paths and JVM options—for a 16GB node, set the JVM heap to 4GB.

  • Deployment: build a package of Cassandra itself and your configuration files, and deliver it to all your servers (I use Capistrano for this). Start the servers by setting CASSANDRA_INCLUDE in the environment to point to your cassandra.in.sh file, and run bin/cassandra. At this point, you should see join notices in the Cassandra logs:

    Cassandra starting up... Node 10.224.17.13:7001 has now joined. Node 10.224.17.14:7001 has now joined.

    Congratulations! You have a cluster. Don't forget to turn off debug logging in the log4j.properties file.

  • Visibility: you can get a little more information about your cluster via the tool bin/nodeprobe, included:

    $ bin/nodeprobe --host 10.224.17.13 ring Token(124007023942663924846758258675932114665) 3 10.224.17.13 |<--| Token(106858063638814585506848525974047690568) 3 10.224.17.19 | ^ Token(141130545721235451315477340120224986045) 3 10.224.17.14 |-->|

    Cassandra also exposes various statistics over JMX.

Note that your client machines (not servers!) must have accurate clocks for Cassandra to resolve write conflicts properly. Use NTP.

conclusion

There is a misperception that if someone advocates a non-relational database, they either don't understand SQL optimization, or they are generally a hater. This is not the case.

It is reasonable to seek a new tool for a new problem, and database problems have changed with the rise of web-scale distributed systems. This does not mean that SQL as a general-purpose runtime and reporting tool is going away. However, at web-scale, it is more flexible to separate the concerns. Runtime object lookups can be handled by a low-latency, strict, self-managed system like Cassandra. Asynchronous analytics and reporting can be handled by a high-latency, flexible, un-managed system like Hadoop. And in neither case does SQL lend itself to sharding.

I think that Cassandra is the most promising current implementation of a runtime distributed database, but much work remains to be done. We're beginning to use Cassandra at Twitter, and here's what I would like to happen real-soon-now:

  • Interface cleanup: the Thrift API for Cassandra is incomplete and inconsistent, which makes writing clients very irritating.
    Done!
  • Online migrations: restarting the cluster 3 times to add a column family is silly.
  • ActiveModel or DataMapper adapter: for interaction with business objects in Ruby.
    Done! Michael Koziarski on the Rails core team wrote an ActiveModel adapter.
  • Scala client: for interoperability with JVM middleware.

Go ahead and jump on any of those projects—it's a chance to get in on the ground floor.

Cassandra has excellent performance. There some benchmark results for version 0.5 at the end of the Yahoo performance study.

further resources
  • Cassandra wiki
  • Presentation by Avinash Lakshman about Cassandra: slides, video
  • The cassandra-user and cassandra-dev mailing lists
  • The #cassandra IRC channel on irc.freenode.net
  • Cassandra's bug tracker
  • Twitter's Ruby client: docs, source
typeapplication/xhtml+xmlbasehttp://feeds.feedburner.com/snax

snax - Best Ruby on Rails Blogs
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Sobre el origen de los metazoos (40 blogs a seguir en 2008)   [1142 views, last view 7 h, 20 min and 38 secs ago]

La secuenciación del genoma de Monosiga brevicollis, eucariota unicelular que no forma colonias, muestra que contiene genes para la adhesión y comunicación celular.

Conoflagelados. Los flagelos aparecen en verde, los tentáculos en rojo y su núcleo en azul. Foto: Nicole King lab, UC Berkeley.

La vida sobre la Tierra comenzó hace miles de millones de años. Algunos autores sostienen que incluso pudo surgir hace 4000 millones de años más o menos. Es decir, al poco de haberse formado el planeta. Si esto es cierto durante 3500 millones de años sólo hubo vida unicelular. La vida pluricelular: los artrópodos, los peces, los dinosaurios, nosotros… ocupan una franja temporal de sólo 500 millones de años. Los científicos que estudian la evolución, incluso los que sostienen que ésta se da sólo de modo progresivo y no a saltos, admiten que el paso de la vida unicelular a la pluricelular supuso un salto evolutivo. Para que haya organismos multicelulares deben de darse al menos dos cosas: un sistema que permita a las células unirse unas a otras y un sistema que permite a las células comunicarse con las vecinas. Ambos permiten al sistema en su conjunto organizarse en un organismo pluricelular.
No podemos retroceder en el tiempo para ver qué sucedió, pero todavía ahora, sobre este mundo, hay un rompecabezas hermoso que estudiar. Los organismos que lo pueblan llevan genes que se originaron en distintos momentos de la historia biológica. Algunos de estos organismos incluso han pervivido hasta nuestros días casi sin sufrir alteraciones desde los tiempos más remotos. La comparación de los genomas entre sí nos permite, si somos inteligentes, inferir los cambiaos evolutivos que acontecieron hace cientos de millones de años.
Ahora Nicole King, Daniel Rokhsar y sus colaboradores de la Universidad de Berkeley han secuenciado el genoma de un coanoflagelado denominado Monosiga brevicollis y lo han comparado con los genomas que conocemos de animales pluricelulares o metazoos.
Monosiga brevicollis es un microorganismo unicelular eucariota que no forma colonias y que vive formando parte del plancton marino, alimentándose de bacterias. El krill se alimenta en parte de él y a su vez el krill sirve de alimento a algunas especies de ballenas. Aparte de esto no se conocía mucho más de este microorganismo.
Los animales pluricelulares y los coanoflagelado comparten un ancestro común de hace 600 millones de años y puede que su estudio permita que aprendamos más sobre la historia de la vida sobre la Tierra y en concreto entender mejor el origen y evolución de los animales.
El análisis de su genoma ha proporcionado algunas sorpresas. Contiene muchos genes que en animales producen las proteínas esenciales en la comunicación intercelular y los necesarios para mantener físicamente unidas unas células con otras. Pero recordemos que estos microorganismos no forman colonias por lo tanto la función de estas proteínas en estos seres es un misterio.
En los animales pluricelulares unas proteínas denominadas cadeinas evolucionaron para unir unas células a otras, actuando como si fueran un pegamento que impidiera la disgregación del conjunto. A pesar de que Monosiga brevicollis no muestra signos de formar colonias, contiene 23 proteínas de este tipo, el mismo número que en la mosca de la fruta o que en el ratón.
Algunas de estas proteínas las han localizado cerca de la base del microorganismo, región que utiliza para sujetarse a las superficies, y alrededor de la región tentacular que utiliza para atrapar las bacterias que luego “ingiere”.
Quizás el antepasado común a estos seres y los animales (incluyéndonos a nosotros) usó estas proteínas de la misma manera para capturar presas y fijarse a las superficies, y luego los metazoos las adoptaron en una nueva función para unir unas células a otras.
Según los autores los conoflagelados son como una ventana abierta al pasado, al origen de animales y por tanto de los humanos, siendo el mejor camino para estudiar el ancestro común que no ha dejado huellas en el registro fósil.
Los conoflagelados tienen un tamaño de unas 10 micras, forma de ovoide, están dotados de un flagelo para la propulsión y un collar de tentáculos para capturar presas. Se parecen hasta cierto punto a las células que componen las esponjas marinas, que están entre los animales más antiguos conocidos. Hace 165 años se propuso a este organismo como el antepasado de todos animales pluricelulares.
Aunque del mismo tamaño que las levaduras eran mucho peor conocidos a nivel genético que éstas y por eso se propuso la secuenciación de su genoma. ?ste consta de unos 9200 genes, siendo del mismo tamaño que el de las diatomeas o los hongos, pero mucho menor que el de los metazoos. Como curiosidad el genoma contiene tantos intrones (regiones no codificantes de proteínas y algunas veces llamado “ADN basura”) en sus genes como los humanos tenemos en los nuestros, frecuentemente en las mismas localizaciones. Estos intrones deben de ser “eliminados” antes de que sus genes correspondientes sirvan como planos para la producción de proteínas y se han asociado con organismos complejos.
Este genoma, al igual que otros genes secuenciados recientemente y correspondientes a organismos supuestamente simples, muestra un grado de complejidad sorprendentemente alto. Así por ejemplo, muchos genes relacionados con el sistema nervioso han sido encontrados en organismos que carecen del mismo.
Los conoflagelados tienen cinco dominios de inmunoglobulinas a pesar de que no tienen sistema inmunitario, dominios de colágeno, integrina y cadeina a pesar que no tienen esqueleto o una matriz que mantenga a las células juntas, contiene proteínas tirosina quinasas que son clave en la comunicación celular aunque estos microorganismos no se comuniquen entre sí ni formen colonias.
Los investigadores pueden imaginar al ancestro común formado por células que se podían unir unas a otras y comunicarse entre sí. Aunque no saben qué genes estaban en ese ancestro común y qué genes son nuevos. Conoflagelados y humanos (y sus antepasados) han estado evolucionando durante el mismo tiempo y los primeros pueden haber adquirido genes nuevos durante este tiempo (los segundos obviamente sí). La comparación con otros genomas de conoflagelados que sí forman colonias y con los de otros seres puede aportar más luz sobre el problema.
Es de suponer que tengamos más sorpresas en el futuro.
Quizás responder a la típica pregunta sobre qué es el hombre sea tan fácil como decir que el ser humano es simplemente un conoflagelado un poco más evolucionado que los demás, pero no mucho más.

Fuentes y referencias:
Nota de prensa en la Universidad de Berkeley.
Resumen en Science.


[Genética ]
NeoFronteras - 40 blogs a seguir en 2008
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Sobre el origen de los metazoos (40 blogs a seguir en el 2009)   [1142 views, last view 7 h, 20 min and 38 secs ago]

La secuenciación del genoma de Monosiga brevicollis, eucariota unicelular que no forma colonias, muestra que contiene genes para la adhesión y comunicación celular.

Conoflagelados. Los flagelos aparecen en verde, los tentáculos en rojo y su núcleo en azul. Foto: Nicole King lab, UC Berkeley.

La vida sobre la Tierra comenzó hace miles de millones de años. Algunos autores sostienen que incluso pudo surgir hace 4000 millones de años más o menos. Es decir, al poco de haberse formado el planeta. Si esto es cierto durante 3500 millones de años sólo hubo vida unicelular. La vida pluricelular: los artrópodos, los peces, los dinosaurios, nosotros… ocupan una franja temporal de sólo 500 millones de años. Los científicos que estudian la evolución, incluso los que sostienen que ésta se da sólo de modo progresivo y no a saltos, admiten que el paso de la vida unicelular a la pluricelular supuso un salto evolutivo. Para que haya organismos multicelulares deben de darse al menos dos cosas: un sistema que permita a las células unirse unas a otras y un sistema que permite a las células comunicarse con las vecinas. Ambos permiten al sistema en su conjunto organizarse en un organismo pluricelular.
No podemos retroceder en el tiempo para ver qué sucedió, pero todavía ahora, sobre este mundo, hay un rompecabezas hermoso que estudiar. Los organismos que lo pueblan llevan genes que se originaron en distintos momentos de la historia biológica. Algunos de estos organismos incluso han pervivido hasta nuestros días casi sin sufrir alteraciones desde los tiempos más remotos. La comparación de los genomas entre sí nos permite, si somos inteligentes, inferir los cambiaos evolutivos que acontecieron hace cientos de millones de años.
Ahora Nicole King, Daniel Rokhsar y sus colaboradores de la Universidad de Berkeley han secuenciado el genoma de un coanoflagelado denominado Monosiga brevicollis y lo han comparado con los genomas que conocemos de animales pluricelulares o metazoos.
Monosiga brevicollis es un microorganismo unicelular eucariota que no forma colonias y que vive formando parte del plancton marino, alimentándose de bacterias. El krill se alimenta en parte de él y a su vez el krill sirve de alimento a algunas especies de ballenas. Aparte de esto no se conocía mucho más de este microorganismo.
Los animales pluricelulares y los coanoflagelado comparten un ancestro común de hace 600 millones de años y puede que su estudio permita que aprendamos más sobre la historia de la vida sobre la Tierra y en concreto entender mejor el origen y evolución de los animales.
El análisis de su genoma ha proporcionado algunas sorpresas. Contiene muchos genes que en animales producen las proteínas esenciales en la comunicación intercelular y los necesarios para mantener físicamente unidas unas células con otras. Pero recordemos que estos microorganismos no forman colonias por lo tanto la función de estas proteínas en estos seres es un misterio.
En los animales pluricelulares unas proteínas denominadas cadeinas evolucionaron para unir unas células a otras, actuando como si fueran un pegamento que impidiera la disgregación del conjunto. A pesar de que Monosiga brevicollis no muestra signos de formar colonias, contiene 23 proteínas de este tipo, el mismo número que en la mosca de la fruta o que en el ratón.
Algunas de estas proteínas las han localizado cerca de la base del microorganismo, región que utiliza para sujetarse a las superficies, y alrededor de la región tentacular que utiliza para atrapar las bacterias que luego “ingiere”.
Quizás el antepasado común a estos seres y los animales (incluyéndonos a nosotros) usó estas proteínas de la misma manera para capturar presas y fijarse a las superficies, y luego los metazoos las adoptaron en una nueva función para unir unas células a otras.
Según los autores los conoflagelados son como una ventana abierta al pasado, al origen de animales y por tanto de los humanos, siendo el mejor camino para estudiar el ancestro común que no ha dejado huellas en el registro fósil.
Los conoflagelados tienen un tamaño de unas 10 micras, forma de ovoide, están dotados de un flagelo para la propulsión y un collar de tentáculos para capturar presas. Se parecen hasta cierto punto a las células que componen las esponjas marinas, que están entre los animales más antiguos conocidos. Hace 165 años se propuso a este organismo como el antepasado de todos animales pluricelulares.
Aunque del mismo tamaño que las levaduras eran mucho peor conocidos a nivel genético que éstas y por eso se propuso la secuenciación de su genoma. ?ste consta de unos 9200 genes, siendo del mismo tamaño que el de las diatomeas o los hongos, pero mucho menor que el de los metazoos. Como curiosidad el genoma contiene tantos intrones (regiones no codificantes de proteínas y algunas veces llamado “ADN basura”) en sus genes como los humanos tenemos en los nuestros, frecuentemente en las mismas localizaciones. Estos intrones deben de ser “eliminados” antes de que sus genes correspondientes sirvan como planos para la producción de proteínas y se han asociado con organismos complejos.
Este genoma, al igual que otros genes secuenciados recientemente y correspondientes a organismos supuestamente simples, muestra un grado de complejidad sorprendentemente alto. Así por ejemplo, muchos genes relacionados con el sistema nervioso han sido encontrados en organismos que carecen del mismo.
Los conoflagelados tienen cinco dominios de inmunoglobulinas a pesar de que no tienen sistema inmunitario, dominios de colágeno, integrina y cadeina a pesar que no tienen esqueleto o una matriz que mantenga a las células juntas, contiene proteínas tirosina quinasas que son clave en la comunicación celular aunque estos microorganismos no se comuniquen entre sí ni formen colonias.
Los investigadores pueden imaginar al ancestro común formado por células que se podían unir unas a otras y comunicarse entre sí. Aunque no saben qué genes estaban en ese ancestro común y qué genes son nuevos. Conoflagelados y humanos (y sus antepasados) han estado evolucionando durante el mismo tiempo y los primeros pueden haber adquirido genes nuevos durante este tiempo (los segundos obviamente sí). La comparación con otros genomas de conoflagelados que sí forman colonias y con los de otros seres puede aportar más luz sobre el problema.
Es de suponer que tengamos más sorpresas en el futuro.
Quizás responder a la típica pregunta sobre qué es el hombre sea tan fácil como decir que el ser humano es simplemente un conoflagelado un poco más evolucionado que los demás, pero no mucho más.

Fuentes y referencias:
Nota de prensa en la Universidad de Berkeley.
Resumen en Science.


[Genética ]
NeoFronteras - 40 blogs a seguir en el 2009
View original post|Add to del.icio.us|more than one year ago | Share

      view feed content Canal de Historia gratis online (Premios revelación web 2007 Yahoo)   [1290 views, last view 7 h, 25 min and 14 secs ago]
languagetypetext/htmlvalue

Disfruta de los fantásticos documentales sobre historia online y gratis que tenemos preparados en nuestro nuevo Canal Historia. Un canal que abre una nueva ventana rigurosa, atractiva y entretenida a nuestra Historia más reciente.  Los hechos de mayor relevancia acontencidos y sus protagonistas tienen un espacio destacado en nuestra nueva parrila repleta de estrenos gratis.

Un canal temático donde aprender sobre los grandes invetores de la humanidad, las guerras destacadas a lo largo de la historia,  artistas, músicos o lugares emblemáticos.

Vive la historia con nosotros y disfruta de los mejores documentales online y gratis.

basehttp://blog.adnstream.tv/feed/
[Uncategorized ]
ADNStream - Premios revelación web 2007 Yahoo
View original post|Add to del.icio.us|more than one year ago | Share