Bitcoin Forum
December 11, 2024, 08:52:44 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 »
  Print  
Author Topic: The Ethereum Paradox  (Read 99900 times)
Momimaus
Hero Member
*****
Offline Offline

Activity: 767
Merit: 500

Never back down !!!


View Profile
February 19, 2016, 11:16:19 PM
 #261

Why should I respect a 24/7-troll?

You are trolling me and not allowing me work.

I provided that analysis as a service to the community and also to refine my own understanding. Consider my posts in this thread, my research activity.

Btw, check my post history today. It is not a post every 15 minutes. I don't even have a mobile device. How many messages per day do you think Vitalik and Vlad send. I don't communicate much other than here in the forum.

Get your facts straight.

Realitiy check: THAT IS NOT WORK !!!

The whole forum is full of troll post from you. The threads are hardly readable due to your walls of text.
And Vitalik ignores you, CFB makes fun of you.

And a while back I have seen you begging and begging skycoin to let you in their team. They didn´t, for good reasons.
Nobody takes you for real, so please stop posting.

CoinTracking.info - Your personal Profit / Loss Portfolio Monitor and Tax Tool for all Digital Coins
CoinTracking is analyzing all your trades and generates in real time tons of useful information such as the profit / loss of your trades, your balances, realized and unrealized gains, reports for tax declaration and many more. For Bitcoin and over 3000 altcoins, assets and commodities.
Get 10% discount for all packages or create your own affiliate link to get 20% for every sale.
Momimaus
Hero Member
*****
Offline Offline

Activity: 767
Merit: 500

Never back down !!!


View Profile
February 19, 2016, 11:24:33 PM
 #262

Lying won't help you nor any of your shitcoins.

Where are the lies, it´s all obviously and public at BCT.
And I didn´t mention any coins.

CoinTracking.info - Your personal Profit / Loss Portfolio Monitor and Tax Tool for all Digital Coins
CoinTracking is analyzing all your trades and generates in real time tons of useful information such as the profit / loss of your trades, your balances, realized and unrealized gains, reports for tax declaration and many more. For Bitcoin and over 3000 altcoins, assets and commodities.
Get 10% discount for all packages or create your own affiliate link to get 20% for every sale.
TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 19, 2016, 11:28:55 PM
Last edit: February 19, 2016, 11:47:37 PM by TPTB_need_war
 #263

Seems the ETH fanboys are offended by the truth.

Here we have an example of a temper tantrum by one of the ETH fanboys.

Congratulations. You talked to a guy and watched a video from another. Both are way smarter and way more successful than you. I hope you learned something, but I don´t think so. You are still delusional.

Congrats you've confirmed to those who a capable of understanding the technology, that you are incapable of understanding the technology.

You will learn to respect me in the future, when once again I am vindicated on every single point I made.

You think some young inexperienced kids can challenge a person who has been coding for 30+ years. Geez get off my lawn disrespectful imbecile.

Even Vlad admitted he was doing only math and not coding during his short career.



Why should I respect a 24/7-troll?

You are trolling me and not allowing me work.

I provided that analysis as a service to the community and also to refine my own understanding. Consider my posts in this thread, my research activity.

Btw, check my post history today. It is not a post every 15 minutes. I don't even have a mobile device. How many messages per day do you think Vitalik and Vlad send. I don't communicate much other than here in the forum.

Get your facts straight.



Lying won't help you nor any of your shitcoins.

Where are the lies, it´s all obviously[obvious] and public at BCT.

Indeed all your lies are obvious except perhaps to a blind idiot such as yourself and your shitcoins.

I will not reply to your retarded nonsense again. Piss in the wind and troll your shadow.

Bye loser.

(P3WNED)

Momimaus
Hero Member
*****
Offline Offline

Activity: 767
Merit: 500

Never back down !!!


View Profile
February 19, 2016, 11:31:11 PM
 #264


And you are just an arrogant troll without any success. Your predictions are shit. And nobody wants to hear your shit.
I hope "bye" means you are leaving BCT.

CoinTracking.info - Your personal Profit / Loss Portfolio Monitor and Tax Tool for all Digital Coins
CoinTracking is analyzing all your trades and generates in real time tons of useful information such as the profit / loss of your trades, your balances, realized and unrealized gains, reports for tax declaration and many more. For Bitcoin and over 3000 altcoins, assets and commodities.
Get 10% discount for all packages or create your own affiliate link to get 20% for every sale.
TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 02:35:49 AM
 #265

I am glancing at John's (VNL's) code now. I notice he likes to put the opening brace on the next line, which wastes vertical space (expert programmers like to maximize the LOC they can view without scrolling). And he places a redundant 'break;' after 'default;' but this is form of protecting against future human error code edits. This sort of unnecessary structuralization of code is meaningful to junior programmers who think it works some kind of magic.

He is not at all using functional programming and instead creating procedures (i.e. have side-effects) which is known to produce spaghetti code (brittle code).

He sure loves to waste vertical space and make it appear his code has more LOC than it does! 3 line comments for 3 words. Makes me think he gets confused quickly if code is dense.

Throwing exceptions puts the program in a state of indeterminism!

Quote from: myself
Catching an exception puts the program in a random state, because it is bypasses deterministic static typing of invariants. By definition of determinism, in every case where the is a determinstic state to bubble an exceptional condition to, i.e. to deterministically recover from an exceptional condition, this bubbling can be accomplished statically at compile-time. It is another way of saying that halting the program when it is in an non-deterministic state, is "given more eyeballs, all bugs are shallow".

The type of bugs that deterministically bubble coherently at compile-time, are those that are not semantic logic errors in the programmer's type design. Semantic logic errors means the program is by design in an incoherent, random state (that thus must be halted). Thus semantic logic errors that randomly trip on an exception, should be handled the same as bugs which deterministically bubble at compile-time and trip on an exception. Halting the program may be restarting the program from (i.e. rewinding to) a historic copy of coherent state, and/or reporting into a debugger.

There was a long fruitful discussion that illuminated the above concepts. Consider the following example, which asserts the invariants of the function (f) at compile-time, i.e. the function's invariants are statically typed and the throw (i.e. halt) is provably bubbled outside of the function at compile-time.

class NonZeroDiff
{
   a, b // also these might be declared to be read only outside the new() constructor
   new( a : Int, b : Int )
   {
      if (a – b == 0) throw "Unexpected inputs"
      this.a = a
      this.b = b
   }
}

function f( ab : NonZeroDiff )
{
   return (ab.a * ab.b) / (ab.a – ab.b)
}

result = f( new NonZeroDiff( 2, 1 ) )


Compare the above, to the following example, which asserts the invariants of the function (f) at run-time, i.e. the function's invariant type is dynamically typed. The inputs to the function (f) are statically typed Int, but the invariants a - b != 0 is not asserted by Int inputs, and instead the throw (i.e. halt) is inside the function at compile-time and can only bubble at run-time.

function f( a : Int, b : Int )
{
   // could instead be thrown by the / operator
   if (a – b == 0) throw "Unexpected inputs"
   return (a * b) / (a – b)
}

result = f( 2, 1 )


The fundamental conclusion is that in dynamic typing, the throw check is inside the function (f) being reused, and in static typing the check is outside the function, in the type of the invariants specified by the function’s type. Thus in the dynamic-typing case, the function inherently bind's its internal check in a futures contract to the universe of possible external code (because the external code is not forced by the compiler, to do a throw check itself), i.e. tries to in vain to define the limit of the external universe. Whereas, in the static-typing case, the external code is forced to check for itself, in order to comply with the compile-time checked invariants of the function.

Fuserleer
Legendary
*
Offline Offline

Activity: 1064
Merit: 1020



View Profile WWW
February 20, 2016, 02:54:15 AM
 #266

I am glancing at John's (VNL's) code now. I notice he likes to put the opening brace on the next line, which wastes vertical space (expert programmers like to maximize the LOC they can view without scrolling). And he places a redundant 'break;' after 'default;' but this is form of protecting against future human error code edits. This sort of unnecessary structuralization of code is meaningful to junior programmers who think it works some kind of magic.

Ahh the good old brace debate.

Calling judgement on someones coding ability based on where they like to have the brace is quite ridiculous IMO.  I've come across it a few times in the past and I never understood the hang up about it, some people like it on the same line, some people like it on the next...it says nothing about ability.

For what it's worth I like them on the next line.  Are you now going to call me a "junior" programmer even though I have 20+ years of commercial experience on cutting edge tech?  Cheesy  If so, should I start to put them on the same line would you then consider me an expert?  Huh

TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 03:04:17 AM
 #267

Sigh the losers who have nothing better to do than make useless noise posts.  Roll Eyes

Since Fuserleer has a problem with his vision, I've increased the font size for him.

which wastes vertical space (expert programmers like to maximize the LOC they can view without scrolling). ... This sort of unnecessary structuralization of code is meaningful to junior programmers who think it works some kind of magic.

He sure loves to waste vertical space and make it appear his code has more LOC than it does! 3 line comments for 3 words. Makes me think he gets confused quickly if code is dense.

And Fuseleer conveniently ignored the main point (presumably because he doesn't understand it):

He is not at all using functional programming and instead creating procedures (i.e. have side-effects) which is known to produce spaghetti code (brittle code).

Throwing exceptions puts the program in a state of indeterminism!

Quote from: myself
Catching an exception puts the program in a random state, because...

Fuserleer as far as I know, you can only program in Java and that is all. So I presume you have very little knowledge of functional programming and other concepts such as Type theory, High-kinded types, functional polymorphism, etc..


Edit: Fuserleer why were you banned?

Fuserleer
Legendary
*
Offline Offline

Activity: 1064
Merit: 1020



View Profile WWW
February 20, 2016, 03:11:03 AM
 #268

Sigh the losers who have nothing better to do than make useless noise posts.  Roll Eyes

Since Fuserleer has a problem with his vision, I've increased the font size for him.

which wastes vertical space (expert programmers like to maximize the LOC they can view without scrolling). ... This sort of unnecessary structuralization of code is meaningful to junior programmers who think it works some kind of magic.

He sure loves to waste vertical space and make it appear his code has more LOC than it does! 3 line comments for 3 words. Makes me think he gets confused quickly if code is dense.

Expert programmers that like braces on the next line use MOAR screens Smiley



Fuserleer as far as I know, you can only program in Java and that is all. So I presume you have very little knowledge of functional programming and other concepts such as Type theory, High-kinded types, functional polymorphism, etc..

lmao! It's these sweeping statements of assumption from you that really make me chuckle....yeah, sure, I only know Java [/sarcasm]

Fuserleer
Legendary
*
Offline Offline

Activity: 1064
Merit: 1020



View Profile WWW
February 20, 2016, 03:16:36 AM
 #269

Edit: Fuserleer why were you banned?

https://bitcointalk.org/index.php?topic=419529.0

Old news buddy.

TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 03:17:37 AM
 #270

Expert programmers that like braces on the next line use MOAR screens Smiley

Turning your head is as wasteful/distracting as scrolling. Multiple screens are for testing and meta information, not for the code typically. If you were expert, you'd know this.

Fuserleer as far as I know, you can only program in Java and that is all. So I presume you have very little knowledge of functional programming and other concepts such as Type theory, High-kinded types, functional polymorphism, etc..

lmao! It's these sweeping statements of assumption from you that really make me chuckle....yeah, sure, I only know Java [/sarcasm]

So let's hear you display some knowledge of functional polymorphism? Explain ML functors? What is a type class and why are there no inductive types in Haskell?

Etc..

Fuserleer
Legendary
*
Offline Offline

Activity: 1064
Merit: 1020



View Profile WWW
February 20, 2016, 03:21:52 AM
 #271

Expert programmers that like braces on the next line use MOAR screens Smiley

Turning your head is as wasteful/distracting as scrolling. Multiple screens are for testing and meta information, not for the code typically. If you were expert, you'd know this.

Fuserleer as far as I know, you can only program in Java and that is all. So I presume you have very little knowledge of functional programming and other concepts such as Type theory, High-kinded types, functional polymorphism, etc..

lmao! It's these sweeping statements of assumption from you that really make me chuckle....yeah, sure, I only know Java [/sarcasm]

So let's hear you display some knowledge of functional polymorphism? Explain ML functors? What is a type class and why are there no inductive types in Haskell?

Etc..

Why? So we can get in an argument at 3am, I don't think so, I've got stuff to do, you've got coding to do (apparently).

I wanted to present my opinion on the "brace debate" that I've come across many times, I have, I'm done Smiley

BTW: MOAR screens was supposed to be a joke.....

TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 03:24:30 AM
 #272

Okay fine.

I am warning all fuckers, I am tired of BS attacks on me. I will P3WN anyone who attacks me and hasn't done their homework. Please at least make your attacks interesting and challenging for me.

Fuserleer
Legendary
*
Offline Offline

Activity: 1064
Merit: 1020



View Profile WWW
February 20, 2016, 03:31:59 AM
 #273

Okay fine.

I am warning all fuckers, I am tired of BS attacks on me. I will P3WN anyone who attacks me and hasn't done their homework. Please at least make your attacks interesting and challenging for me.

FTR I wasn't attacking you in any manner.  I was simply pointing out the absurdity of "the brace debate" when its used as a means to gauge someones abilities as a developer.

What the code does and its architectural structure, not how its formatted, should be the only real metric used to gauge abilities surely?

Anyway, happy coding (or whatever you are doing next).

Momimaus
Hero Member
*****
Offline Offline

Activity: 767
Merit: 500

Never back down !!!


View Profile
February 20, 2016, 09:37:22 AM
 #274

Okay fine.

I am warning all fuckers, I am tired of BS attacks on me. I will P3WN anyone who attacks me and hasn't done their homework. Please at least make your attacks interesting and challenging for me.

And the blabla goes on and on and on and on and............................................................................ ....................

CoinTracking.info - Your personal Profit / Loss Portfolio Monitor and Tax Tool for all Digital Coins
CoinTracking is analyzing all your trades and generates in real time tons of useful information such as the profit / loss of your trades, your balances, realized and unrealized gains, reports for tax declaration and many more. For Bitcoin and over 3000 altcoins, assets and commodities.
Get 10% discount for all packages or create your own affiliate link to get 20% for every sale.
andulolika
Legendary
*
Offline Offline

Activity: 2352
Merit: 1048



View Profile
February 20, 2016, 10:24:45 AM
 #275

Okay fine.

I am warning all fuckers, I am tired of BS attacks on me. I will P3WN anyone who attacks me and hasn't done their homework. Please at least make your attacks interesting and challenging for me.

And the blabla goes on and on and on and on and............................................................................ ....................
We can see that, since i first saw TPTB (not that long ago) i realised he is everywhere, it doesnt look like he is going anywhere Smiley.

🔥 🔥 🔥  Satochip - Secure the future  🔥 🔥 🔥
⭐️ Hardware wallet on a smartcard | Affordable and easy to use | Open source and community driven | BTC, LTC, BCH (SLP tokens), ETH (ERC-20 tokens)... ⭐️
──WebsiteShop  |  Bitcointalk  |  Twitter  |  Telegram  |  Github──
TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 12:12:57 PM
Last edit: February 20, 2016, 12:41:01 PM by TPTB_need_war
 #276

Retarded egos versus rationality...

It seems what ever design you contemplate employing a fee can always be gamed by an attacker so that he pays no cost.

The attacker can make his own DE and receive the fees. So then he attacks the other DEs (which are honest) 100% of the time but doesn't attack his own DE (or attacks he own less frequently) thus all users migrate to his DE. Thus he is losing much less in attack fees than he is gaining from fees.


Since more than one attacker can do this to each other, no one will use DE.
P.S. I knew that there would be a leak in fees that would maintain my conclusion that DE is fundamentally impossible. Sorry when I come to these sort of generative essence conclusions they stick.

By this logic no cryptocoin would exist.
Instead of all out war all the time, maybe some sort of truce would be made? Why would everyone running a DE want to spend all that time attacking the other DE's just to get attacked back and then nobody's works. Seems like MAD.

I notice your attack scenarios are getting more and more convoluted as now the attacker needs to run a DE themselves to make it even a potential issue. So things are improving. It also might be possible to make it so the attacker wont be able to get their fee back, but no script for that yet.

However, you must have missed my post where it is possible to identify the attacker. It would be after the fact, but that allows a reputation system to be created and as long as people are careful about filling orders from newbies, there wont be much problems.

James

P.S. Using your logic, no central exchange would exist as they would all be Ddosing each other all the time. You dont need to pay exchange fees to Ddos an website.

DDoS is not an analogy to jamming. Remember the party that goes first in your protocol locks up his funds (e.g. UXTO) for the period of the timeout refund (which is orders-of-magnitude greater delay than processing a DDoS packet and the attackers delay is asymmetrically orders-of-magnitude smaller) while waiting for the counter party to reciprocate. In bandwidth DDoS, the attacker must have enough bots to saturate the bandwidth of the victim, which is a significant resource. In malformed requests DDoS, the cost to the victim of verifying needs to the symmetric to the cost of the attacker to sign the request. I wrote a white paper about how DDoS can be ameliorated with proper design in the crypto currency setting. Please make sure you understand the relevance of the word 'asymmetry' of costs for the attacker versus the victim w.r.t. DoS.

Seems that running a DE in your original fee-based scheme (which I allege is broken) is quite simple as it only involves offering a payto address.

Sorry to be a pain, but really you should thank those who do peer review and help you from wasting your time. I'd really appreciate a more cordial and rational response. Getting irrationally upset at those who try to help you, is what the retards over in the Altcoin Discussion forum do, and I know you are too mature and do not possess that behavior. Please remember in the past when you made similar arguments about why proof-of-stake was not attackable, which ended up being wrong as evidenced by the current top-down governance of Nxt and Bitshares. Those of us who take the time to analyze and point out egregious flaws do it because we want correct solutions, not because we are haters. If those we help, hate back on us, the entire discussion forums descends into stupid noise. Please even if you have vested interests, still try to remain fair and rational. This is a scientific discussion, and let's not conflate it with other matters such as any investment you've already made in DE. I can't do my work in a rational, scientific way if I have to worry about each person's ego and vested interests that I might offend by writing rationally.

I didn't see where you could identify the attacker in your protocol without incurring any possibility of bailing out and jamming. Perhaps you can explain that more succinctly (without all the cut & choose employing Bitcoin op codes since I don't comprehend Bitcoin op codes thus I can't understand the cut & choose in the way you guys have explained it thus far, although I think I understand the concept which is to probabilistically reveal the preimage).

Any way, I was thinking about this more because I know you are invested in DE and I really want to help you find a solution. Of course I don't feel good about the situation where you are invested and it is fundamentally flawed. It is not like I get some great joy in finding flaws. I get great joy in finding solutions that don't have flaws. I can't help it that there is so much flawed work being done in the crypto currency realm. It is the nature of the beast, because crypto logic is complex and there are a lot hair-brained ideas being promulgated. For example, Blockstream's side-chains reduce the security to the weakest chain due to chain reorganizations and the fact that proof-of-work is probabilistic and thus never final (e.g. lie in wait long-con attack). Blockstream is even investing so much effort to push Segregated Witness which enables them to version the block chain with soft forks, thus it looks like a trojan horse so they can get the changes they want to enable this broken concept of side-chains. Speak these rational truths and many people get pissed off and posts get removed by the moderator.

Any way, I think I have thought of a solution for DE.

The key is to identify the attacker immediately so that all decentralized parties can apply my upthread blocking "Coin Days Destroyed" suggestion. The "Coin Days Destroyed" becomes the reference point that is signed by the owner of the resource, which thus apparently escapes from my generative essence conceptualization of the problem set.

So change to the protocol is the provider of the hash sends to the trade's counter party to sign it (hashed with the other party's UXTO address) so the counter party's UXTO can be identified. Then the hash provider (the potential jamming victim) posts this information in a timed refundable transaction to the block chain (spending to the payee contingent on releasing the hash). If the attacker never posts the reciprocal transaction on the other block chain, this enables anyone to identify that attacker and apply the Coin Days Destroyed filtering that I proposed upthread.

Note this eliminates the need for any fee. But I assume you can find some justification for a fee, such as perhaps keeping your source code for the DE app closed source and/or offering a centralized fee structure for matching orders, limit orders, etc.. You won't be able to steal funds, which afaik is the most significant advantage of DE over CE.

TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 12:50:16 PM
 #277

FTR I wasn't attacking you in any manner.  I was simply pointing out the absurdity of "the brace debate" when its used as a means to gauge someones abilities as a developer.

Cripes did you forget I already explained to you why it is indicative of a non-expert!

What the code does and its architectural structure, not how its formatted, should be the only real metric used to gauge abilities surely?

Did you forget I also pointed one of his architectural flaws in that he is writing procedures instead of functions.

You are not convincing me that you have the high level of comprehension necessary to be an effective expert.

stoat
Sr. Member
****
Offline Offline

Activity: 686
Merit: 270


FREEDOM RESERVE


View Profile WWW
February 20, 2016, 12:55:23 PM
 #278

Oh dear.  More walls of text.  I want to know what the ethereum paradox is.  Can someone explain it in 6 lines or less please?

FREEDOMRESERVEFree currency for the British Isles
Visit our website for more info

<-- Click here!
FREEDOMRESERVE By the People and for the People
TPTB_need_war
Sr. Member
****
Offline Offline

Activity: 420
Merit: 262


View Profile
February 20, 2016, 01:03:11 PM
Last edit: February 25, 2016, 01:48:09 AM by TPTB_need_war
 #279

Oh dear.  More walls of text.  I want to know what the ethereum paradox is.  Can someone explain it in 6 lines or less please?


0x8d1b4e41652eacec5715dc5c4833f6b713573de6 If you agree with me, please support a friend of mine in need.

Readers see the games these retarded ETH shills play. stoat pretends he didn't already read this yesterday:

(1) What you need to know is that Ethereum as it is currently designed can't scale just as Bitcoin can't scale, but the level of scaling which the current Ethereum can do is much less than even Bitcoin's current limitation because verification/validation of Serpent scripts takes more resources than verification/validation of ECDSA signatures.

(2) For both Bitcoin and Ethereum, this is not just an issue of block size limitation. The issue is that in order to scale, the mining becomes more centralized. I think you will should note that Bitcoin and all other major coins are entirely centralized already and on the precipice of failure (all of them! study my links!).

(3) Thus Ethereum proposed Casper which is a design that attempts to use sharding (a.k.a. partitions) to improve scaling decentralized. But I explained in this thread, that can't work. To reduce electricity consumption, Ethereum also proposed PoS-like consensus-by-betting with forfeitable deposits. PoS has known failure modes that violate Nash equilibrium.

(4) So the point of all this is that Ethereum and all the rest of the crypto coins have not yet solved the fundamental issue of decentralized consensus.

Expect the shills to bury this post in more noise as they desperately try to sell you some bag holding shitcoins.

stoat
Sr. Member
****
Offline Offline

Activity: 686
Merit: 270


FREEDOM RESERVE


View Profile WWW
February 20, 2016, 01:07:17 PM
 #280

Alright cool.   I believe these problems are solvable.


Next question:  do you think you're the smartest person in the world and know everything?

FREEDOMRESERVEFree currency for the British Isles
Visit our website for more info

<-- Click here!
FREEDOMRESERVE By the People and for the People
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!