viernes, 31 de agosto de 2007

¿Tiene sentido usar nil?

En el último post, una de las preguntas que dejé pendiente era si bajo las condiciones de modelado comentadas tenía sentido utilizar "nil" (o "null" en otros lenguajes... aunque "nil" y "null" no son lo mismo[1]), si los objetos debían o no tener variables de instancia referenciando a "nil".
La realidad es que si aplicamos los principios que comenté en el post pasado, ningún objeto debería tener variables de instancia con "nil" (salvo por cuestiones implementativas como las que comento más abajo). Si al momento de crear objetos, a estos se le indica cuales son todos sus colaboradores internos, no debería existir ninguno de ellos referenciando a "nil".
Imaginense las ventajas que esto tiene! El objeto "nil" es uno de los más "dañinos" desde el punto de vista de "programación correcta o segura", puesto que su existencia implica que en algún momento se le deberá preguntar si es él (el famoso mensaje isNil o ==null en otros lenguajes), lo cual deriva en un ifTrue: (o if...) y por lo tanto en un posible foco de error y conflicto (error por olvidarse de hacer dicha pregunta, conflicto en el caso de la evolución del modelo, etc.)
Con esto no quiero decir que el objeto "nil" no debería existir o que no se lo debería utilizar, "nil" debe existir por lo que representa, "la nada", pero cuanto menos utilizado sea, mejor.
Siguiendo los consejos que publiqué en el post anterior, el uso de "nil" por lo tanto se disminuye al máximo y por ende también los errores que el uso del mismo induce.
El único motivo que encontré hasta ahora para utilizar "nil" como variable de instancia en un objeto, es para aquellas variables que "cachean" algún objeto y por lo tanto se pueden inicializar de manera lazy. Pero justamente por ser una cache o inicializarse de manera lazy, son colaboradores que solo debe conocer el objeto que los referencia y por lo tanto nunca otro objeto podrá pasarlo en el momento de la creación.
Por otro lado, les comento que en ambientes de objetos transaccionales como GemStone, tener variables que se inicialicen de manera lazy no es tan trivial puesto que al momento de comitiar una transacción se pueden generar conflictos de write-write. Por ejemplo, si desde dos transacciones distintas se le envía el mensaje que inicializa dicha variable al mismo objeto, aquella que commitee segunda tendrá el conflicto que comenté puesto que la primera ya habrá "escrito" dicha variable de instancia.

[1] "nil" en Smalltalk es un objeto, instancia de UndefinedObject y por lo tanto puede recibir mensajes y también se lo puede modificar. null en Java o .Net no es un objeto, es una construcción sintáctica y por lo tanto no posee la misma riqueza lingüística que "nil". ¿Qué significa "mayor riqueza lingüística?, les dejo un ejemplo para que lo deduzcan por su cuenta: (Este ejemplo fue una gran idea de Luciano!)
En un framework que usamos es necesario crear un diccionario cuyos valores pueden ser "nil" o no. Por ejemplo:
ClassXXX>>insertValuesFrom: aCuenta

^Dictionary new
at: 'sucursal' put: (aCuenta sucursal isNil ifTrue: [ nil ] ifFalse: [ aCuenta sucursal objectID ]);
at: 'calificacionCuenta'put: (aCuenta calificacion isNil ifTrue: [ nil ] ifFalse: [ aCuenta calificacion codigo ]);
...
yourself.
Como pueden ver, este framework no sigue los consejos que di en el post anterior y por ello es necesario verificar si 'sucursal' es "nil" para enviarle el mensaje #objectID en caso de no serlo. Lo mismo sucede con 'calificacion'.
Como podrán darse cuenta, escribir código de esta manera es error prone (propenso a error), tedioso, molesto, cansador, poco inspirador y poco divertido (se lleva todas las malas). La gran idea de Luciano fue darse cuenta que "nil" es un objeto y por lo tanto puede saber responder los mensaje #objectID y #codigo de tal manera que devuelvan self!. Por lo tanto implementando los siguientes métodos en UndefinedObject:
UndefinedObject>>objectID
^self

UndefinedObject>>codigo
^self
no es más necesario hacer los chequeos anteriores!. Transcribo lo que Luciano escribió:
"De esa manera el código del ejemplo anterior se puede escribir así, que es mucho más claro y se eliminan todos los isNil ifTrue:[] ifFalse:[] que entorpecen la lectura:"
ClassXXX>>insertValuesFrom: aCuenta

^Dictionary new
at: 'sucursal' put: aCuenta sucursal objectID;
at: 'calificacionCuenta' put: aCuenta calificacion codigo;
...
yourself
¿Se ve a simple vista no?... Esto es riqueza lingüística, es la posibilidad de modificar el lenguaje para cumplir con objetivos que no estaban pensados en primera instancia, es poder hacer evolucionar un lenguaje de la misma manera que evoluciona un lenguaje natural. De más está decir que con Java, .Net o C++, etc, esta solución no es factible puesto que "null" no es un objeto.
Se puede discutir si desde el punto de vista conceptual es correcto implementar estos mensajes en UndefinedObject... seguramente nuestra conclusión será que no, pero que ayuda, no perjudica y es muy práctico, no quedan dudas.
Así que, me saco el sombreo: Grande Lucho!

32 comentarios:

Claudio Acciaresi dijo...

Buenas, cómo va? Estuve leyendo el post, y me parece que un problema que
se puede producir al hacerlo de esta manera es que la cantidad de mensajes
implementados en UndefinedObject puede ser extremadamente grande...

Quizás se podría encontrar alguna superclase común a todos los objetos
que son utilizados por el framework, en la cual se puede implementar
el mensaje doesNotUnderstand: aMessage, dandole la semántica deseada...

Quizás estoy tirando fruta, pero bueno, al menos es un comentario!!!!!! :)

Anónimo dijo...

probando

Anónimo dijo...

Perdon, no se enviaba el comentario. Por eso el anterior que dice "probando".
No sería mejor tener un objeto sucursalNoExistente (por ejemplo) que sepa responder a esos mensajes con nil?
Saludos
Gabriel

minobuzo dijo...

Si bien se mejora el codigo usando el nil modificado, no se esta cambiando el sentido del nil? Al menos el sentido en Smalltalk. Objective-C no tenia el nil que devolvia nil a todo mensaje?(o mando fruta)
Me gusta mas la onda de la idea de Gabriel.

Hernan Wilkinson dijo...

Que tal Claudio, antes que nada gracias por el comentario.
Tenés razón que se está "bastardeando" UndefinedObject de esta manera. La solución que propones no funciona porque el que no entiene el mensaje es "nil", no una instancia que posee una superclase común en el framework.
En realidad, la mejor solución sería modelar la ausencia de sucursal o calificación. Por lo tanto, al instanciarse una Cuenta, si la misma no conoce o posee sucursal se iniciaría con este objeto que representa dicha situación y que sabe responder #objectID como es esperado.
El problema que hacer todo esto es muy engorroso en este framework, por lo tanto la solución de compromiso de Lucho es bien "pragmática"

Hernan Wilkinson dijo...

Que tal Gabriel. Si, tu solución es la que le propongo a Claudio. Según mi parecer sería la mejor solución, lo que sucede que implementarla con el framework y sistema del ejemplo no es tan rápido y sencillo como lo que propone Luciano.
Pero estoy de acuerdo con vos, sería una muy buena solución.

Hernan Wilkinson dijo...

Que tal minobuzo. Como decís en Objective-C el objeto "nil" implementa el comportamiento que se denomina "generic nil" que significa que siempre que le envíen un mensaje que no sabe responder se devuelve a sí mismo. Esto se puede hacer en Smalltalk (de hecho lo hemos hecho) pero se llega a la misma situación que le comentaba a Claudio, modificar el sistema para que en vez de usar "nil" use este nuevo objeto no es sencillo...
Estoy de acuerdo con vos que lo que propone Gabriel es la mejor solución.

Gaboto dijo...

Tampoco me voy a llevar el mérito de esa solución, creo que es una idea que nombraste en alguna de las clases del cuatrimestre pasado.
je.
Saludos.
Gabriel

Anónimo dijo...

Esta muy interesante este tema.
A mi me quedo una duda con respecto a la solución de modelar la no existencia de, por ejemplo, una sucursal. Me pregunto: el objeto que representa la "noSucursal" ¿es instancia de qué clase? ¿puede ser una instancia de la clase Sucursal? o ¿Habría que crear una nueva clase "NoSucursal"?
Yo creo que lo mejor es que sea instancia de Sucursal, pero no estoy seguro.
Saludos!
Diego Campodónico

Hernan Wilkinson dijo...

QUe tal Diego!
lo mejor es usar un clase que represente la NoSucursal puesto que no vas a poder usar una instancia particular de Sucursal para representar la ausencia de sucursal por varios motivos. Uno se entiende conceptualmente y es el hecho de no poder representar la ausencia de algo con el concepto que representa la existencia de ese algo, entendés? Esto se ve prácticamente en la implementación porque la nosucursal tendrá mensajes que estarán implementados de distinta manera, no alcanza con que el objeto que representa la no sucursal tenga colaboradores internos distintos o especiales que aquellos que representan sucursales de verdad.

Anónimo dijo...

Hola Hernán, te hago una nueva consulta sobre este tema:
¿Como ves representar la situación de esta manera?
Una clase Sucursal que sea abstracta, y dos subclases de esta que sean SucursalConcreta y NoSucursal, de manera que una noSucursal sea polimorfica con una sucursalConcreta, pero con implementación diferente.
Gracias y saludos!
Diego Campodónico.

Anónimo dijo...

looking an eye to ed drugs? [url=http://www.cahv.org]buy viagra online [/url]and profit from outspoken shipping at http://www.cahv.org . another good place to [url=http://www.kiosknews.org]buy viagra online[/url] is www.kiosknews.org .

Anónimo dijo...

The French gourmet cheese Bleu d'Auvergne has a wonderful aroma, a rich taste; the saltiness increases with the incidence of veining. The overall flavor is piquant but not overly sharp. Bleu d'Auvergne started life as an imitation of Roquefort, using cow's milk in place of sheep's milk. Legend has it that a peasant, around 1845, decided to inject his cheese with a blue mold that he found growing on his left-over bread (the motto being, waste not, want not). And thus, the gourmet cheese Bleu d'Auvergne was born. This French gourmet blue cheese comes from the region of Auvergne and the cheese is made from milk of Salers and Aubrac cows. The rind is very thin and so the cheese is usually wrapped in foil. The cheese is rich and creamy with a pale yellow color and scattered holes and well-defined greenish-blue veining. We cut and wrap this cheese in wedge of 8 ounces and 1 pound.

buy fresh blue cheese

[url=http://riderx.info/members/buy_5F00_fresh_5F00_blue_5F00_cheese.aspx]buy fresh blue cheese[/url]

http://riderx.info/members/buy_5F00_fresh_5F00_blue_5F00_cheese.aspx

Anónimo dijo...

It's so easy to choose high quality [url=http://www.euroreplicawatches.com/]replica watches[/url] online: [url=http://www.euroreplicawatches.com/mens-swiss-watches-rolex/]Rolex replica[/url], [url=http://www.euroreplicawatches.com/mens-swiss-watches-breitling/]Breitling replica[/url], Chanel replica or any other watch from the widest variety of models and brands.

Anónimo dijo...

Now, escorts can be contacted right from the comfort zone of your home - thanks to the easily navigable, user-friendly websites that present all escort activities and services online for your access.
That's why they have been so successful and popular in the pleasure friendly crowd.
Payment for your girl can be done online instantly. So, you should not have any sort of issue regarding anything.
The services provided by Bijou escorts are top notch. New York escort service are also offered to various clients.Bijou available are top class escorts, and you will soon forget about normal things in life and enter the world of love and fantasy. You must remember that using personal escort service is not like using normal intimate service and these are not just simple girls that you are dealing with. These are highly trained and qualified escort personnel's that are there to rejuvenate you dull and boring life. You will be surprised to find out that some of these girls are very well educated.
[url=http://bijouescorts.com]New Jersey Escort[/url] In the last few years, the entire US industry has seen a drastic change - change that has represented more of growth. Girls who are hospitable and who have flair to serve people with the best fun services have been recruited by the New York escort agencies thus satiating every pleasure need of clients. With online presence of the New York agencies, it's been extremely easy for people like you to browse through the listed girls' profiles so as to find out which girl would be able to serve you better. When it comes to enjoying a session with a New York escort girl, a lot of things may come to your mind. Her physical beauty, area of specialization, capability of fulfilling fetishes, friendliness all may play a major role in letting you choose our girl accordingly. Most of the New York escorts agencies feature full information of girls' physical attributes, their hair color, sexual orientation, area of services and even of pricings. So, it's just a completely easy affair to know more about them on their website itself.

It's the quality of service offered by the New York escorts that have made New York one of the major escort hubs in the entire globe. All girls are very much educated and they know how to keep themselves clean and hygienic. If you have never used Hugo Boss once in your life yet, don't be surprised to smell it on their skins. They are really very much beauty and style conscious. That's the reason they have been able to mark such a big impression in the psyche of each and every escort fun lovers.
http://bijouescorts.com New York escorts are genuinely the best girlfriends for men seeking for pleasure. They are the abode of beauty and charm and satisfy men with their amazing sense of maturity. The top-quality escorts of New York are the finest and greatly enviable attractive girls who understand the need and desire of their customer. They are blessed with the most alluring bodies and with the superior set of soft skills; they can make anyone feel special.

Anónimo dijo...

Hi all,

it seems pretty cool here

i have some very strong opinions

looking forward to talking to you all. :)

[IMG]http://www.trueimagehost.com/1/m/47xFMd46ie7B/blank.gif[/IMG]

Anónimo dijo...

Shalom

I just wanted to say hi to everyone

Cheers!

[URL=http://www.vpnmaster.com][IMG]http://openvpn.net/archive/openvpn-users/2005-05/pngd55nFojmJX.png[/IMG][/URL]

Anónimo dijo...

Once upon a time air travel was a great deal simpler than it is today. You called one of a few airlines that flew from your airport, the agent would tell you what flights were available for a given time, and you booked the one you wanted. Airports were always bustling places, especially during the holidays, but as long as you gave yourself adequate time, the process was usually the same. You would check your bags, go through the x-ray machine, get your boarding pass, and wait patiently at the appropriate gate. Once you got on the plane you ate the snack or meal that came with your flight and watched a movie.

In recent years travel by plane has become significantly more complicated. There are so many different configurations for flights and types of fares. Dire economic circumstances have caused airlines to raise rates and charge extra fees for everything from baggage to blankets. There are complex rules about what you can and cannot carry in your luggage. It can be very difficult to determine whether you are getting the best deal or the best services when you buy an airline ticket. The internet makes the navigation of airlines, airports, and flight itineraries easier, but, even so, be prepared to do some research if you want to find a flight at the best price.

Here is something up front that might save you time and money right off the bat. If you are traveling within the United States mainland, always look at Southwest Airlines first. Southwest is almost always the best deal you will find. However, Southwest itineraries do not appear on the major travel websites, so always go directly to the airline's website for information. Plug in your travel plans, and you will get a list of all the flights that are available. Southwest typically charges more reasonable prices than other airlines, and there are no hidden fees. The price you see is the price you get although tax and the government fee that is attached to all flights does apply. For lower prices than you can probably get anywhere else look at the "web only" fares, but keep in mind that these fares are not refundable.

[url=http://cheapairtickets.qarri.com/]Useful tips for air tickets[/url]

Anónimo dijo...

In 1959 phentermine first received approval from the FDA as an appetite suppressing drug. Phentermine hydrochloride then became available in the early 1970s. It was previously sold as Fastin from King Pharmaceuticals for SmithKline Beecham, however in 1998 it was removed from the market. Medeva Pharmaceuticals sells the name brand of phentermine called Ionamin and Gate Pharmaceuticals sells it as Adipex-P. Phentermine is also currently sold as a generic. Since the drug was approved in 1959 there have been almost no clinical studies performed. The most recent study was in 1990 which combined phentermine with fenfluramine or dexfenfluramine and became known as Fen-Phen.[citation needed]
In 1997 after 24 cases of heart valve disease in Fen-Phen users, fenfluramine and dexfenfluramine were voluntarily taken off the market at the request of the FDA. Studies later proved that nearly 30% of people taking fenfluramine or dexfenfluramine had abnormal valve findings. The FDA did not ask manufacturers to remove phentermine from the market.
[url=http://www.buyphentermine1.com]cheap phentermine[/url] Phentermine is still available by itself in most countries, including the U.S. However, because it is similar to amphetamines, it is classified as a controlled substance in many countries (including Australia). Internationally, phentermine is a schedule IV drug under the Convention on Psychotropic Substances.[1] In the United States, it is classified as a Schedule IV controlled substance under the Controlled Substances Act.
Looking forward, Phentermine is being studied with another medication for obesity. The experimental appetite suppressant drug Qnexa is a mixture of Phentermine and Topiramate.
Phentermine, in doses clinically used, works on the hypothalamus portion of the brain to release norepinephrine, a neurotransmitter or chemical messenger that signals a fight-or-flight response, reducing hunger. Phentermine works outside the brain as well to release epinephrine or adrenaline causing fat cells to break down stored fat, but the principal basis of efficacy is hunger-reduction. At high doses, phentermine releases serotonin and dopamine as well, but such doses are never used in clinical medicine.
[url=http://www.google.com/search?hl=en&source=hp&q=www.buyphentermine1.com&aq=f&aqi=&aql=&oq=&gs_rfai=]google for www.buyphentermine1.com[/url]

Anónimo dijo...

In 1959 phentermine first received approval from the FDA as an appetite suppressing drug. Phentermine hydrochloride then became available in the early 1970s. It was previously sold as Fastin from King Pharmaceuticals for SmithKline Beecham, however in 1998 it was removed from the market. Medeva Pharmaceuticals sells the name brand of phentermine called Ionamin and Gate Pharmaceuticals sells it as Adipex-P. Phentermine is also currently sold as a generic. Since the drug was approved in 1959 there have been almost no clinical studies performed. The most recent study was in 1990 which combined phentermine with fenfluramine or dexfenfluramine and became known as Fen-Phen.[citation needed]
In 1997 after 24 cases of heart valve disease in Fen-Phen users, fenfluramine and dexfenfluramine were voluntarily taken off the market at the request of the FDA. Studies later proved that nearly 30% of people taking fenfluramine or dexfenfluramine had abnormal valve findings. The FDA did not ask manufacturers to remove phentermine from the market.
[url=http://www.buyphentermine1.com]buy phentermine online[/url] Phentermine is still available by itself in most countries, including the U.S. However, because it is similar to amphetamines, it is classified as a controlled substance in many countries (including Australia). Internationally, phentermine is a schedule IV drug under the Convention on Psychotropic Substances.[1] In the United States, it is classified as a Schedule IV controlled substance under the Controlled Substances Act.
Looking forward, Phentermine is being studied with another medication for obesity. The experimental appetite suppressant drug Qnexa is a mixture of Phentermine and Topiramate.
Phentermine, in doses clinically used, works on the hypothalamus portion of the brain to release norepinephrine, a neurotransmitter or chemical messenger that signals a fight-or-flight response, reducing hunger. Phentermine works outside the brain as well to release epinephrine or adrenaline causing fat cells to break down stored fat, but the principal basis of efficacy is hunger-reduction. At high doses, phentermine releases serotonin and dopamine as well, but such doses are never used in clinical medicine.
[url=http://www.google.com/search?hl=en&source=hp&q=www.buyphentermine1.com&aq=f&aqi=&aql=&oq=&gs_rfai=]google for www.buyphentermine1.com[/url]

Anónimo dijo...

In 1959 phentermine first received approval from the FDA as an appetite suppressing drug. Phentermine hydrochloride then became available in the early 1970s. It was previously sold as Fastin from King Pharmaceuticals for SmithKline Beecham, however in 1998 it was removed from the market. Medeva Pharmaceuticals sells the name brand of phentermine called Ionamin and Gate Pharmaceuticals sells it as Adipex-P. Phentermine is also currently sold as a generic. Since the drug was approved in 1959 there have been almost no clinical studies performed. The most recent study was in 1990 which combined phentermine with fenfluramine or dexfenfluramine and became known as Fen-Phen.[citation needed]
In 1997 after 24 cases of heart valve disease in Fen-Phen users, fenfluramine and dexfenfluramine were voluntarily taken off the market at the request of the FDA. Studies later proved that nearly 30% of people taking fenfluramine or dexfenfluramine had abnormal valve findings. The FDA did not ask manufacturers to remove phentermine from the market.
[url=http://www.buyphentermine1.com]cheap phentermine[/url] Phentermine is still available by itself in most countries, including the U.S. However, because it is similar to amphetamines, it is classified as a controlled substance in many countries (including Australia). Internationally, phentermine is a schedule IV drug under the Convention on Psychotropic Substances.[1] In the United States, it is classified as a Schedule IV controlled substance under the Controlled Substances Act.
Looking forward, Phentermine is being studied with another medication for obesity. The experimental appetite suppressant drug Qnexa is a mixture of Phentermine and Topiramate.
Phentermine, in doses clinically used, works on the hypothalamus portion of the brain to release norepinephrine, a neurotransmitter or chemical messenger that signals a fight-or-flight response, reducing hunger. Phentermine works outside the brain as well to release epinephrine or adrenaline causing fat cells to break down stored fat, but the principal basis of efficacy is hunger-reduction. At high doses, phentermine releases serotonin and dopamine as well, but such doses are never used in clinical medicine.
[url=http://www.google.com/search?hl=en&source=hp&q=www.buyphentermine1.com&aq=f&aqi=&aql=&oq=&gs_rfai=]google for www.buyphentermine1.com[/url]

Anónimo dijo...

check out the new free [url=http://www.casinolasvegass.com]online casino games[/url] at the all new www.casinolasvegass.com, the most trusted [url=http://www.casinolasvegass.com]online casinos[/url] on the web! enjoy our [url=http://www.casinolasvegass.com/download.html]free casino software download[/url] and win money.
you can also check other [url=http://sites.google.com/site/onlinecasinogames2010/]online casinos[/url] and [url=http://www.bayareacorkboard.com/]poker room[/url] at this [url=http://www.buy-cheap-computers.info/]casino[/url] sites with 100's of [url=http://www.place-a-bet.net/]free casino games[/url]. for new gamblers you can visit this [url=http://www.2010-world-cup.info]online casino[/url].

Anónimo dijo...

if you guys requisite to hedonistic [url=http://www.generic4you.com]viagra[/url] online you can do it at www.generic4you.com, the most trusted viagra dispensary immature of generic drugs.
you can learn drugs like [url=http://www.generic4you.com/Sildenafil_Citrate_Viagra-p2.html]viagra[/url], [url=http://www.generic4you.com/Tadalafil-p1.html]cialis[/url], [url=http://www.generic4you.com/VardenafilLevitra-p3.html]levitra[/url] and more at www.rxpillsmd.net, the pre-eminent [url=http://www.rxpillsmd.net]viagra[/url] inception on the web. well another great [url=http://www.i-buy-viagra.com]viagra[/url] pharmacy you can find at www.i-buy-viagra.com

Anónimo dijo...

You have to check http://www.EroticWebCams.net if you want to view the best erotic cams.

Anónimo dijo...

[url=http://bejepewa.t35.com/news_131.html]best casino cytech online[/url] [url=http://bejepewa.t35.com/news_18.html]aladdin casino las vegas[/url] [url=http://bejepewa.t35.com/news_241.html]interest rates on certificates of deposit[/url] [url=http://bejepewa.t35.com/news_602.html]internet casino gambling to play craps[/url] [url=http://bejepewa.t35.com/news_73.html]imperial palace and casino[/url]

Anónimo dijo...

[url=http://grou.ps/reductil] Buy reductil online
http://grou.ps/reductil
Buy reductil online

Anónimo dijo...

Infatuation casinos? check this new [url=http://www.realcazinoz.com]online casino[/url] director and fake online casino games like slots, blackjack, roulette, baccarat and more at www.realcazinoz.com .
you can also probe our new [url=http://freecasinogames2010.webs.com]casino[/url] direct at http://freecasinogames2010.webs.com and replace in true well distant !
another late-model [url=http://www.ttittancasino.com]casino spiele[/url] in the region of is www.ttittancasino.com , because german gamblers, retrieve not busy online casino bonus.

Anónimo dijo...

Finally, realize that all the various bookmakers have their own rules and policies regarding how they settle bets done through arbitrage sports betting when they have such irregular results. As with the advice on pricing, be sure to check the rules of the individual bookmakers before you place your bets.

The Parlay System is one of the most famous of betting systems that are commonly used in horse racing. Many have said that contrary to other sports betting systems, the Parlay System has a pyramiding effect on your profit which means your winnings are played on successive wagers.
[url=http://www.pulsebet.com]football bet[/url]
The changes that are going to be made to the Wire Act are quite simple. First and foremost the internet will be added to the list of wire communications that are prohibited. Of course the internet was not around in 1961 so it was not included in the first draft. In addition, penalties for breaking the Wire Act will increase from a maximum of two years in prison to five.

Nonetheless, the reality of the matter is this: if you don't have a Selection System that is sound in every respect, then you are just as badly off as if you had no Selection System at all! And even if you find a good tipster service, you must still exercise a great deal of caution in making your final selections and look carefully at their success rate for the specific type of tips they are offering. If you fail to do this, then you can be certain of one thing: you will lose all your money somewhere down the road!

Anónimo dijo...

Extremely funny video with a social message. Ghuggi must get a national award for his efforts.

[url=http://www.mydesizone.com/video/zy5-ryJTvZA/Ghuggi-de-barati-Gurpreet-Ghuggi.html]Ghuggi de barati - Gurpreet Ghuggi[/url]

Anónimo dijo...

3.) Every card poses the same chance or game odds of winning at a game of online bingo. Hence, if you play with more cards, you are increasing your game odds and winning chances.
[url=http://www.bingokisses.com]play bingo[/url] play bingo Another bingo system functions through the positions in the bingo card. Every bingo card has 24 numbers with a free spot in the middle. All 24 numbers have strategic positions in the bingo card while the remaining numbers occupy dead positions or squares. Probability of winning combinations occupying strategic positions is high. The dead squares come into force only in bingo combinations occurring in horizontal or vertical positions.
[url=http://www.bingokisses.com]bingos[/url]
With so many different casino and gaming sites on the Internet, it is difficult to know which ones are legitimate and which ones are not. After all, if you want to join the gaming community, you have to decide whether you want to play for money or for fun and prizes. If the former, it is more pertinent to find out what sites are legitimate since you do not want to invest cash into something that is not going to give you a return on your investment.
bingo online
What you have to do is, coordinate the numbers that are called out by the host with what you have on our sheet, aiming at filling up a pattern reading bingo. The pattern would be announced at the beginning of the game, so you have to be careful to know what pattern you are looking out for. The cards have the b-i-n-g-o letters on rows and numbers running as a column. A host would call out a letter-number combination, which you would have to mark on your sheet. For example if I-34 is called, you will have to look at the I column down to search for number 34. In case you have it, you place a market on it, and so on.

Anónimo dijo...

One of the factors that can influence the outcome of your program is that many bookmakers set maximum stake limits which can keep you from placing your full wager, so make sure that there in no max limit with any of the bookies that you are dealing with.
bet football | bet online sport betting
One key thing to remember when you are seeking out the best sports betting odds is that the best odds and the best sports bookmaker are not necessarily one and the same.
[url=http://www.pulsebet.com]betting football online[/url]
On the other hand if you were to lose then you would wager twice what your original bet was. According to proponents of the system, this strategy will eventually enable you to win the bets you place and when you win you would recover all your lost bets plus one unit profit against your initial wager.

And finally, in the first article in this series I mentioned being honest with yourself, because one of the biggest lies I have found that a tremendous number of Bettors are guilty of is denying to themselves how many times their Base Bank has been busted! If you too are guilty of this, please remember that until you face up to the truth with the determination to do something about it, you can't expect to turn the situation round in your favour.

Anónimo dijo...

Attraction casinos? scrutinize this young [url=http://www.realcazinoz.com]casino[/url] games. guide and wing it denigrate online casino games like slots, blackjack, roulette, baccarat and more at www.realcazinoz.com .
you can also go over our late [url=http://freecasinogames2010.webs.com]casino[/url] manage at http://freecasinogames2010.webs.com and be heir to in principal hard currency !
another late-model [url=http://www.ttittancasino.com]casino[/url] spiele in the region of is www.ttittancasino.com , because german gamblers, rise via freed online casino bonus.