Bitcoin Forum
April 10, 2024, 06:03:55 AM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Obiwan: a little app showing live BTC-USD exchange rate  (Read 2255 times)
flatfly (OP)
Legendary
*
Offline Offline

Activity: 1078
Merit: 1011

760930


View Profile
March 01, 2012, 05:32:00 PM
Last edit: December 08, 2012, 04:55:19 PM by flatfly
 #1

I made this little goodie with a friend, and thought others might like it too..
it's free, very lightweight, and CAPSLOCK toggles the display.

.

Get it from: http://dre.tx0.org/.

The display is  BIG by design. I like it that way. But I've taken special care
in making the text look good.
1712729035
Hero Member
*
Offline Offline

Posts: 1712729035

View Profile Personal Message (Offline)

Ignore
1712729035
Reply with quote  #2

1712729035
Report to moderator
1712729035
Hero Member
*
Offline Offline

Posts: 1712729035

View Profile Personal Message (Offline)

Ignore
1712729035
Reply with quote  #2

1712729035
Report to moderator
1712729035
Hero Member
*
Offline Offline

Posts: 1712729035

View Profile Personal Message (Offline)

Ignore
1712729035
Reply with quote  #2

1712729035
Report to moderator
The network tries to produce one block per 10 minutes. It does this by automatically adjusting how difficult it is to produce blocks.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
jake262144
Full Member
***
Offline Offline

Activity: 210
Merit: 100


View Profile
March 01, 2012, 07:46:38 PM
 #2

Ummm... why exactly does the app have to download and re-create the whole MtGox homepage every 15 seconds?
We're talking of a 20 kB file here, that's just under 5 MB worth of unnecessary bandwidth and disk writes per hour or 1.7 GB per month assuming the PC is running 12/7.
That's sloppy engineering if I ever saw one and I'm sure MtGox doesn't think much of it either.
Surely, you could get away with much less data?

The only good thing I can say is that ObiWan didn't try to grab the honeypot wallet.dat I prepared Smiley

12btc.html:
Code:
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html itemscope itemtype="http://schema.org/Organization" class="ie ie6"> <![endif]-->
<!--[if IE 7 ]>    <html itemscope itemtype="http://schema.org/Organization" class="ie ie7"> <![endif]-->
<!--[if IE 8 ]>    <html itemscope itemtype="http://schema.org/Organization" class="ie ie8"> <![endif]-->
<!--[if IE 9 ]>    <html itemscope itemtype="http://schema.org/Organization" class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--><html itemscope itemtype="http://schema.org/Organization"><!--<![endif]-->
    <head>
    <title>Mt.Gox - Bitcoin Exchange </title>
    <meta http-equiv="content-type" value="text/html; charset=UTF-8"/>
    <meta name="title" content="Mt.Gox - Bitcoin Exchange " />
    <meta name="description" content="[color=#404040]bitcoins, bitcoin, buying bitcoin, alternative currency, decentralized currency, e-currency, tradehill, trade hill, cryptoxchange, online currency, money, bit coin, cryptocurrency, crypto-currency, bitcointalk, bitcoin talk, tibanne[/color]" />

    <link href="/favicon.ico" title="Icon" type="image/x-icon" rel="icon" />
    <link href="/favicon.ico" title="Icon" type="image/x-icon" rel="shortcut icon" />

    <meta name="author" content="Tibanne" />

    <meta name="Copyright" content="Copyright Tibanne 2011. All Rights Reserved." />

    <meta name="DC.title" content="Mt.Gox - Bitcoin Exchange " />
    <meta name="DC.subject" content="bitcoins, bitcoin, buying bitcoin, alternative currency, decentralized currency, e-currency, tradehill, trade hill, cryptoxchange, online currency, money, bit coin, cryptocurrency, crypto-currency, bitcointalk, bitcoin talk, tibanne" />
    <meta name="DC.creator" content="Tibanne" />
    <meta name="keywords" content="[color=#404040]bitcoins, bitcoin, buying bitcoin, alternative currency, decentralized currency, e-currency, tradehill, trade hill, cryptoxchange, online currency, money, bit coin, cryptocurrency, crypto-currency, bitcointalk, bitcoin talk, tibanne[/color]">

    <meta name="viewport" content="width=device-width, initial-scale=.9" />
    <meta name="robots" content="index, follow" />
    <meta name="format-detection" content="telephone=no">

    <link rel="shortcut icon" href="/favicon.ico" />
    <link rel="stylesheet" type="text/css" href="/_minify/7565f61930fb72787371a84b36c3983a94a23730.css">
    <!--[if IE]> <link rel="stylesheet" type="text/css" href="/_minify/e40142d5ef22630b5fb5255bd145672d365aa974.css"> <![endif]-->
    <!--[if lt IE 7 ]> <link rel="stylesheet" type="text/css" href="/_minify/c5c95c2c2dd9048c0f3249f73b6372e0dc17f514.css"> <![endif]-->
    <script type="text/javascript">
        var wsURL = 'https://socketio.mtgox.com/mtgox?Channel=ticker&Currency=USD&IdKey=';
        var isMarketOrder = false;
    </script>

    <script type="text/javascript" src="/_minify/80e708b3bd624b2b7ff8cb9f6ab3edcc50b78b54.js"></script>

    <!-- Update your html tag to include the itemscope and itemtype attributes -->
    <!-- html itemscope itemtype="http://schema.org/Organization" -->

    <!-- Add the following three tags inside head -->
    <meta itemprop="name" content="MtGox">
    <meta itemprop="description" content="[color=#404040]bitcoins, bitcoin, buying bitcoin, alternative currency, decentralized currency, e-currency, tradehill, trade hill, cryptoxchange, online currency, money, bit coin, cryptocurrency, crypto-currency, bitcointalk, bitcoin talk, tibanne[/color]">
          <meta itemprop="image" content="https://mtgox.com/img/mtgox_large.jpg">

    <script type="text/javascript">
<!--
var _gaq = _gaq || [];
_gaq.push(['_setAccount', "UA-12152097-26"]);
_gaq.push(['_trackPageview']);
var track = track || false;
track = { ev: function() { var t = new Array(); for(i = 0; i < arguments.length; i++) t.push(arguments[i]); t.unshift("_trackEvent"); _gaq.push(t); if (this.parent) { t.shift(); this.parent.ev.apply(this.parent, t); } }, parent: track };
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();

// --></script>
</head>
    
    <body class="home">

        <script type="text/javascript" language="javascript">
            $(document).ready(function(){
                tb.carousel($('.testimonials .content'), {itemsPerPage:1, direction:'vertical', delay: 4, height:$('.testimonials .content').height()});
            });
        </script>
                
        <div id="blind">

    <div class="bigchart">
        <div id="bigchartHolder"></div>
    </div>

    <div class="handle ticker">
<div class="SupportHelpHolder"><a href="https://support.mtgox.com/forums" class="icons iconSupportHelp">Support</a></div>
<div id="dataHolder">
       <ul>
           <li id="smallChart"><a href="#" title="Click to see the chart!" id="handleBtn" class="icons iconGraph">Show chart</a></li>
           <li id="lastPrice">Last price:<span>$4.95980</span></li>
           <li id="highPrice">High:<span>$4.98421</span></li>
           <li id="lowPrice">Low:<span>$4.82129</span></li>
           <li id="volume">Volume:<span>38827 BTC</span></li>
           <li id="weightedAverage">Weighted Avg:<span>$4.92276</span></li>
       </ul>
</div>



<form id="currencySelect" method="GET" action="/index.html">
<select name="Currency">

<option value="USD" selected="selected">USD</option>

<option value="EUR">EUR</option>

<option value="JPY">JPY</option>

<option value="CAD">CAD</option>

<option value="GBP">GBP</option>

<option value="CHF">CHF</option>

<option value="RUB">RUB</option>

<option value="AUD">AUD</option>

<option value="SEK">SEK</option>

<option value="DKK">DKK</option>

<option value="HKD">HKD</option>

<option value="PLN">PLN</option>

<option value="CNY">CNY</option>

<option value="SGD">SGD</option>

<option value="THB">THB</option>

<option value="NZD">NZD</option>

<option value="NOK">NOK</option>

</select>
</form>


    </div>

</div>
        
        <div class="wrapper">
            
            <header>
                <a href="/" title="Mt. Gox" class="icons" id="mtGoxLogo">Mt. Gox</a>
                
                 <form id="memberBlock" class="memberBlock" action="#" method="post">
        <span class="icons iconPeople"></span>
        <input type="text" id="username" name="username" value="" placeholder="Username" class="groupLeft popup" title="Security information" data-content="&lt;div class=&quot;safeBar&quot;&gt;
&lt;p&gt;&lt;b&gt;IMPORTANT:&lt;/b&gt; If you don't see a &lt;b&gt;green bar&lt;/b&gt; in your browser URL input like the image below, you might be on a phishing website! Always be very careful of that when you login.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;sslBarImg&quot; src=&quot;/img/ssl2_autohotkey.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;" />
        <input type="password" id="password" name="password" value="" placeholder="Password" class="groupMiddle" />
        <input type="submit" name="LOGIN" value="Login" class="onInput" />
        <div class="memberSignup">
            or <a href="/signup/">Sign up</a>
        </div>
    </form>
    <form id="memberBlockOTP" class="memberBlock hide" action="#" method="post" autocomplete="off">
        <!-- span class="icons iconPeople"></span -->
        <input type="hidden" name="auth" />
<label for="opt">Press your Yubikey for less than 1 second (or click login)</label>
        <input type="text" id="opt" name="otp" value="" placeholder="OTP" class="groupLeft popup" title="To new Yubikey users" data-content="If you haven't received your Yubikey yet, you can just press Enter at this step." />
        <input type="submit" name="OTPSUBMIT" value="Login" class="onInput" />
    </form>
                
            </header>
            
            <section class="topBlock">
                <h1>Trade with confidence on the world's largest Bitcoin exchange!</h1>
                
                <p>Mt.Gox is the world's most established Bitcoin exchange. You can quickly and securely trade bitcoins with other people around the world with your local currency!<br />
                    <br />
                    <small></small>
                </p>
                
                <ul class="buttons">
                    <li><a href="/signup/" class="button buttonGreen" title="Signup"><span>Sign up now</span></a></li>
                    
                </ul>
                
            </section>
            
            <div class="hpBody line">
                
                <div class="colLeft unit">
                    
                    <figure style="text-align: center;">
                        <img src="/img/quote.gif" border="0" alt="As of july 2011, Mt. Gox handles over 80% of all Bitcoin trade" />
                    </figure>
                    
                    <section class="line topLine">
                        <div class="unit size1of2">
                            <h5>&nbsp;<span class="icons secure"> </span>Secure</h5>
                            <p>
                                Mt.Gox is protected by <a href="http://www.prolexic.com/" target="_blank">Prolexic</a> and certified by <a href="http://www.verisign.com/" target="_blank">VeriSign</a>, which means all communications with our servers are encrypted with SSL technology.
                            </p>
                        </div>
                        <div class="lastUnit">
                            <h5>&nbsp;<span class="icons powerful"> </span>Reliable</h5>
                            <p>
                                We're always on. Buy and sell Bitcoin 24/7/365 with the world's most sophisticated trading platform.
                            </p>
                        </div>
                    </section>
                    
                    <section class="line">
                        <div class="unit size1of2">
                            <h5>&nbsp;<span class="icons easy"> </span>Easy</h5>
                            <p>
                                Buying and selling Bitcoin doesn't have to be complicated! Get trading in a few simple steps.
                            </p>
                        </div>
                        <div class="lastUnit">
                            <h5>&nbsp;<span class="icons safe"> </span>Global</h5>
                            <p>
                                The only multi-currency Bitcoin trading platform where you can trade with the entire world in your local currency.
                            </p>
                        </div>
                    </section>
                    
                    <section class="line topLine">
                        <p class="h2">
                            See where the world trades Bitcoin!
                        </p>
                        <ul class="buttons">
                   <li><a href="/signup/" class="button buttonGreen" title="Signup"><span>Sign up now</span></a></li>
                   
               </ul>
                    </section>
                    
                    <section class="line topLine">
                        <div class="unit size1of2">
                            <a href="http://mtgoxlive.com/mobile/" title="Mt. Gox in your pocket!"><img src="/img/home_phones.png" alt="Mobile" border="0" /></a>
                        </div>
                        <div class="lastUnit">
                            <h3 class="h1"><a href="http://mtgoxlive.com/mobile/" title="Mt. Gox in your pocket!">Mt. Gox in your pocket!</a></h3>
                        </div>
                    </section>
                    
                </div>
                
                <div class="colRight lastUnit">
                    
                    <div class="testimonials">
                        <h4>Mt.Gox is the best. But you shouldn't take our word for it:</h4>
                        <div class="content">
                            <blockquote>
                                <figure><img src="/common/img/icons/32x32/user_silhouette.png" alt="" width="45" height="45" /></figure>
                                <p>
                                   I highly recommend them [Mt.Gox] to anyone who wants to trade Bitcoins.
                                </p>
                                <span>Roger Ver - CEO, MemoryDealers.com</span>
                            </blockquote>
                            <blockquote>
                                <figure><img src="/common/img/icons/32x32/user_silhouette.png" alt="" width="45" height="45" /></figure>
                                <p>
                                    It isn't often these days that online service providers deliver this level of customer support. A truly commendable occurrence.
                                </p>
                                <span>Ben</span>
                            </blockquote>
                            <blockquote>
                                <figure><img src="/common/img/icons/32x32/user_silhouette.png" alt="" width="45" height="45" /></figure>
                                <p>
                                    The support team were very helpful, responded quickly and fully resolved the problem. 10/10. Thank you.
                                </p>
                                <span>David T.</span>
                            </blockquote>
                            <blockquote>
                                <figure><img src="/common/img/icons/32x32/user_silhouette.png" alt="" width="45" height="45" /></figure>
                                <p>
                                    They were wonderful. Despite the fact that I didn't message them back because the issue was resolved, they attempted to contact me multiple times just to make sure that I was okay.
                                </p>
                                <span>Anonymous </span>
                            </blockquote>
                        </div>
                        <div class="arrow"> </div>
                    </div>
                    
                    <section class="asSeenIn">
                        <h4 class="h2">As seen on...</h4>
                        <figure>
                            <a class="icons iconTWJ" title="The Wall Street Journal">The Wall Street Journal</a>
                            <a class="icons iconCNN" title="CNN">CNN</a>
                            <a class="icons iconWired" title="WIRED">WIRED</a>
                            <a class="icons iconTechcrunch" title="TechCrunch">TechCrunch</a>
                            <a class="icons iconTNYT" title="The New York Times">The New York Times</a>
                            <a class="icons iconEconomist" title="The Economist">The Economist</a>
                            <a class="icons iconTNY" title="The New Yorker">The New Yorker</a>
                            <a class="icons iconForbes" title="Forbes">Forbes</a>
                        </figure>
<!-- ul>
<li><a href="http://www.newyorker.com/reporting/2011/10/10/111010fa_fact_davis" target="_blank" title="The New Yorker">The New Yorker</a></li>
<li><a href="http://www.economist.com/node/18836780" target="_blank" title="The Economist">The Economist</a></li>
</ul -->
                    </section>
                    
                    <section class="newsFeed topLine">
                        <h4 class="h2">News Feed</h4>
<ul><li><a href="https://mtgox.com/press_release_20120221.html" target="_blank">Mt.Gox's February 21st, Downtime Explanation</a></li><li><a href="https://support.mtgox.com/entries/20986081-important-notice-alleged-bitscapler-user-data-leak" target="_blank">[Important Notice] Alleged Bitscapler user data leak.</a></li><li><a href="https://mtgox.com/press_release_20120215.html" target="_blank">Over 1,500 Yubikeys shipped worldwide (and counting)!</a></li><li><a href="https://mtgox.com/press_release_20120201.html" target="_blank">Mt.Gox overview: January 2012 / Transparency</a></li><li><a href="https://mtgox.com/press_release_20111219.html" target="_blank">Trading with Mt.Gox has never been cheaper!</a></li><li><a href="https://mtgox.com/press_release_2011_12_01" target="_blank">Press Release - Mt.Gox: Reloaded</a></li><li><a href="https://mtgox.com/fee-schedule/" target="_blank">Mt.Gox Lowers Trade Fees, New Volume Discounts</a></li><li><a href="https://support.mtgox.com/entries/20395323-mt-gox-now-verified-by-verisign/" target="_blank">Mt.Gox (K.K Tibanne): Now Verified by VeriSign</a></li><li><a href="https://support.mtgox.com/entries/20402621-ongoing-phising-attacks-on-mt-gox-users" target="_blank">Ongoing Phishing Attacks on Mt.Gox Users</a></li><li><a href="https://yubikey.mtgox.com/" target="_blank">Get your Yubikey now (be sure to log in)</a><br /></li></ul><br />

                    </section>
                </div>
            </div>
            
            <footer>
    <nav class="line">
        <ul class="unit size2of5 line"><h4>Quick Links</h4>
            <li class="size1of2 unit"><a href="/trade" title="Trade">Trade</a></li>
            <li class="size1of2 unit"><a href="/api" title="Trade API">Trade API</a></li>
            <!-- li class="size1of2 unit"><a href="/merchant" title="Merchant integration">Merchant integration</a></li -->
            <li class="size1of2 unit"><a href="https://support.mtgox.com/" title="Support">Support</a></li>
            <li class="size1of2 unit"><a href="/fee-schedule" title="Fee Schedule">Fee Schedule</a></li>
            <li class="size1of2 unit"><a href="/forms/verification" title="Get verified">Get verified</a></li>
            <li class="size1of2 unit"><a href="https://support.mtgox.com/forums/20105883-faq " title="FAQ">FAQ</a></li>
            <li class="size1of2 unit"><a href="/privacy_policy" title="Privacy Policy">Privacy Policy</a></li>
            <li class="size1of2 unit"><a href="/terms_of_service" title="Terms of Use">Terms of Use</a></li>
        </ul>

        <ul class="unit size1of5 line"><h4>Our Company</h4>
            <li class="size1of2 unit"><a href="/about-us" title="About Us">About Us</a></li>
            <li class="size1of2 unit"><a href="/contact-us" title="Contact Us">Contact Us</a></li>
        </ul>

        <div class="unit size1of5">
            <ul class="line"><h4>Apps And Social</h4>
                <li class="unit"><figure>&nbsp;<a href="/mobile" class="icons iconAndroid" title="Mt. Gox Android application">Mt. Gox Android application</a></figure></li>
                <li class="unit">&nbsp;<a href="http://www.facebook.com/MtGox" class="icons iconFb">Facebook</a></li>
                <li class="lastUnit"><a class="g-plusone" href="https://plus.google.com/100448119000434100275" target="_blank"></a></li>
            </ul>
        </div>



<div class="size1of5 lastUnit">
<div title="Click to Verify - This site chose VeriSign Trust Seal to promote trust online with consumers." style="background-image: url(/img/baby_harp_seal.gif);background-repeat:no-repeat;background-position:0 7px;"><script type="text/javascript" src="https://seal.verisign.com/getseal?host_name=mtgox.com&amp;size=L&amp;use_flash=NO&amp;use_transparent=YES&amp;lang=en"></script>
<a href="http://www.verisign.com/verisign-trust-seal" target="_blank"  style="color:#000000; text-decoration:none; font:bold 7px verdana,sans-serif; letter-spacing:.5px; text-align:center; margin:0px; padding:0px;"></a>
</div>
</div>
    </nav>

    <span class="copyright">
        &nbsp;<span href="/" class="icons logoFooter">Mt. Gox</span> &copy; 2010 - 2011 Tibanne Co. Ltd. (Japan)
        |
        

<a href="/index.html?Locale=en_US" class="currency flags" style="background-image: url(https://mtgox.com/common/img/flags/us.png);">&nbsp;</a>&nbsp;

<a href="/index.html?Locale=pl_PL" class="currency flags" style="background-image: url(https://mtgox.com/common/img/flags/pl.png);">&nbsp;</a>&nbsp;


    </span>
</footer>

<script type="text/javascript" src="https://socketio.mtgox.com/socket.io/socket.io.js"></script>
            
        </div>
    </body>
    
</html>
flatfly (OP)
Legendary
*
Offline Offline

Activity: 1078
Merit: 1011

760930


View Profile
March 01, 2012, 08:49:29 PM
Last edit: December 08, 2012, 04:56:13 PM by flatfly
 #3

OK,

I've just released a version that addresses this issue. It still updates every 15 seconds but now only downloads the relevant data
using the MtGox API (approximately 180 bytes per refresh vs 20k previously, about 100 times less!)

And it still doesn't grab wallet.dat files lying around Smiley

See top post for the download page.
jake262144
Full Member
***
Offline Offline

Activity: 210
Merit: 100


View Profile
March 01, 2012, 09:02:56 PM
 #4

Great, thanks.

How about a version capable of a "single" mode where it downloads the data, displays it for a couple of seconds and exits?
That would allow ObiWan to be launched via the extra keys of various "multimedia" keyboard layouts.
Just add a commandline parameter for that.

Also, I'd prefer to dedicate tilde (~) rather than CapsLock to display the exchange rate.

Other than that, I do like the app.
flatfly (OP)
Legendary
*
Offline Offline

Activity: 1078
Merit: 1011

760930


View Profile
March 02, 2012, 10:48:25 AM
Last edit: March 02, 2012, 04:46:28 PM by flatfly
 #5

I'm glad you like it.

I will start adding some features once I have confirmed that all major issues have been ironed out in the current version (shouldn't take that long for such a little app).

And of course, friendly donations do help me prioritize feature requests Wink

Thanks for your feedback.
flatfly (OP)
Legendary
*
Offline Offline

Activity: 1078
Merit: 1011

760930


View Profile
March 04, 2012, 03:39:27 PM
Last edit: March 05, 2012, 03:48:35 PM by flatfly
 #6

Hi,

For those interested, I have just released a EUR edition (beta), you can get it from here:
 http://dre.tx0.org/obiwan_eur.exe




-- If you like it, thanks for any donations.  These would encourage me to continue developing cool apps and widgets. My address is: 1B9WJSZ92Y5VNP2k5HowRjgL3nSunDciba
marked
Full Member
***
Offline Offline

Activity: 168
Merit: 100



View Profile
March 04, 2012, 06:55:51 PM
 #7

why not have a command line option to poll for the currency ticker you want, and make it so that you can run several of them at the same time.
ie.,

> type currency.txt
USD
GBP
AUD
> for /f %l in (currency.txt) do "obiwan -%l"

would pop up 3 obiwan windows with the relevant currency ticker.

Also it would be good if there was the ask and bid in smaller text top and bottom of the ticker.


 
marked
BlueCorp
Newbie
*
Offline Offline

Activity: 42
Merit: 0



View Profile
March 05, 2012, 05:33:04 AM
 #8

Also could you make a Android Widget for this, since I don't use a computer
marked
Full Member
***
Offline Offline

Activity: 168
Merit: 100



View Profile
March 05, 2012, 11:36:03 AM
 #9

Also could you make a Android Widget for this, since I don't use a computer

Bitcoin Prices   shows every price on every exchange imaginable
Bitcoin Widget
Bitcoin Alert

MTGOX Mobile

marked

BlueCorp
Newbie
*
Offline Offline

Activity: 42
Merit: 0



View Profile
March 05, 2012, 05:33:32 PM
 #10

Also could you make a Android Widget for this, since I don't use a computer

Bitcoin Prices   shows every price on every exchange imaginable
Bitcoin Widget
Bitcoin Alert

MTGOX Mobile

marked



Thanks again, didn't know there was Apps already released
starsoccer9
Legendary
*
Offline Offline

Activity: 1630
Merit: 1000



View Profile
March 22, 2013, 10:52:48 AM
 #11

hey, love the app and all but it seems to have broken. it just shows the price as 0.0000
Pages: [1]
  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!