Bitcoin Forum
April 25, 2024, 03:37:17 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 ... 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 [667] 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 ... 843 »
  Print  
Author Topic: OFFICIAL CGMINER mining software thread for linux/win/osx/mips/arm/r-pi 4.11.1  (Read 5805212 times)
This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic. (3 posts by 1+ user deleted.)
Polyatomic
Sr. Member
****
Offline Offline

Activity: 257
Merit: 250


View Profile
November 08, 2013, 08:55:49 PM
 #13321

Just a thought, have you tried running 30 in one instance of cgminer and the other 30 in a second instance?

60 USB Miners work 61 does not.  It doesn't matter how you split them up in multiple instances.  If I plug in 61 devices and start CGMiner it says no USB Devices found.  If I remove one then it takes off and starts mining.  So I seem to max out with 59 BE's in one instance and 1 Jalapeno in another.

Thanks,
Sam

os2sam: What operating system ?. There was a fella on irc talking to conman who is able to run 243 AMUs on one instance of cgminer.
1714016237
Hero Member
*
Offline Offline

Posts: 1714016237

View Profile Personal Message (Offline)

Ignore
1714016237
Reply with quote  #2

1714016237
Report to moderator
"I'm sure that in 20 years there will either be very large transaction volume or no volume." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714016237
Hero Member
*
Offline Offline

Posts: 1714016237

View Profile Personal Message (Offline)

Ignore
1714016237
Reply with quote  #2

1714016237
Report to moderator
dragon695
Full Member
***
Offline Offline

Activity: 449
Merit: 103


Decentralized Ascending Auctions on Blockchain


View Profile
November 08, 2013, 08:57:29 PM
 #13322

Scrypt and opencl support is being deprecated in the near future, and development for other coins is not going to happen, so sorry but there is no plan for improving support for other coins.
Might as well rename it assminer then.  Roll Eyes

Seriously, though, mining BTC is dead for most except those lucky enough to have lots of BTC already or lots of disposable income to waste on over-priced embedded junk. Oh well, guess that's my problem.

I don't see why you drop scrypt, but that's your choice. No point in donating now, I suppose.

iBid     ▐     Decentralized Auctions on Blockchain    (    About us    Telegram   )
▬▬▬▬▬▬▬▬▬▬▬▬▬             AN  AUCTION    ❱   All auctions start at     $0

[  ◥   Google Play      ◥   App Store  ]   ██ SIGN UP ██        with no minimum reserve
sharky112065
Sr. Member
****
Offline Offline

Activity: 383
Merit: 250



View Profile
November 08, 2013, 10:20:53 PM
 #13323

Scrypt and opencl support is being deprecated in the near future, and development for other coins is not going to happen, so sorry but there is no plan for improving support for other coins.
Might as well rename it assminer then.  Roll Eyes

Seriously, though, mining BTC is dead for most except those lucky enough to have lots of BTC already or lots of disposable income to waste on over-priced embedded junk. Oh well, guess that's my problem.

I don't see why you drop scrypt, but that's your choice. No point in donating now, I suppose.

"The needs of the many outweigh the needs of the few or the one."

He is not getting any substantial donations to maintain the scrypt code and GPU mining is pretty much dead.

It is the correct decision IMO.

Donations welcome: 12KaKtrK52iQjPdtsJq7fJ7smC32tXWbWr
dragon695
Full Member
***
Offline Offline

Activity: 449
Merit: 103


Decentralized Ascending Auctions on Blockchain


View Profile
November 08, 2013, 11:15:48 PM
 #13324

"The needs of the many outweigh the needs of the few or the one."

He is not getting any substantial donations to maintain the scrypt code and GPU mining is pretty much dead.

It is the correct decision IMO.
Are you seriously suggesting that nobody is mining altcoins? Just because GPU mining BTC isn't profitable doesn't mean shit. Hell, even with the drop in price, Litecoin mining can still net you a couple hundred a month with just two GPUs. Also, don't many ASIC miner rigs come with their own built-in mining software? Anyway, I highly doubt that maintaining and even tweaking scrypt support that is only a thousand lines of code is so arduous as to require substantial donations, but that is his choice. Someone will pick up the slack.

iBid     ▐     Decentralized Auctions on Blockchain    (    About us    Telegram   )
▬▬▬▬▬▬▬▬▬▬▬▬▬             AN  AUCTION    ❱   All auctions start at     $0

[  ◥   Google Play      ◥   App Store  ]   ██ SIGN UP ██        with no minimum reserve
-ck (OP)
Legendary
*
Offline Offline

Activity: 4088
Merit: 1631


Ruu \o/


View Profile WWW
November 08, 2013, 11:35:05 PM
 #13325

Someone will pick up the slack.
That would be fine by me. I write software either because I enjoy doing it, or I earn money for it, or both. I'm writing/maintaining cgminer because I believe in bitcoin and I like to earn bitcoin. I unashamedly wrote the scrypt support for a generous bitcoin fee a long time ago so it was purely for the payment. I have no interest in altcoins so someone else should be maintaining it. Just because others have an interest in altcoins doesn't mean that I have to.

Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
os2sam
Legendary
*
Offline Offline

Activity: 3578
Merit: 1090


Think for yourself


View Profile
November 09, 2013, 12:50:44 AM
 #13326

Just a thought, have you tried running 30 in one instance of cgminer and the other 30 in a second instance?

60 USB Miners work 61 does not.  It doesn't matter how you split them up in multiple instances.  If I plug in 61 devices and start CGMiner it says no USB Devices found.  If I remove one then it takes off and starts mining.  So I seem to max out with 59 BE's in one instance and 1 Jalapeno in another.

Thanks,
Sam

os2sam: What operating system ?. There was a fella on irc talking to conman who is able to run 243 AMUs on one instance of cgminer.

Win7 64 bit.

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
os2sam
Legendary
*
Offline Offline

Activity: 3578
Merit: 1090


Think for yourself


View Profile
November 09, 2013, 12:55:28 AM
 #13327

Seriously, though, mining BTC is dead

The price of Bitcoin reflects that too, right?

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
sharky112065
Sr. Member
****
Offline Offline

Activity: 383
Merit: 250



View Profile
November 09, 2013, 12:58:27 AM
 #13328

"The needs of the many outweigh the needs of the few or the one."

He is not getting any substantial donations to maintain the scrypt code and GPU mining is pretty much dead.

It is the correct decision IMO.
Are you seriously suggesting that nobody is mining altcoins? Just because GPU mining BTC isn't profitable doesn't mean shit. Hell, even with the drop in price, Litecoin mining can still net you a couple hundred a month with just two GPUs. Also, don't many ASIC miner rigs come with their own built-in mining software? Anyway, I highly doubt that maintaining and even tweaking scrypt support that is only a thousand lines of code is so arduous as to require substantial donations, but that is his choice. Someone will pick up the slack.

I did not say or suggest that "nobody is mining altcoins". GPU mining for Bitcoins is dead. If you still want to mine altcoions then do so by using an older version that works. As for your question about ASIC hardware coming with their own built-in software the answer is no. Most do not have built-in mining software, which you could have found out with a little reading here on the forum.

If you want changes to the code, use an older version and modify it yourself or maybe someone will pick it up and maintain a fork.

I'm guessing you have profited much more than you have donated. If that is the case, then you really don't have a leg to stand on here and your getting way more than you paid for.

Please continue on with your temper tantrum. It is most entertaining to read.

Donations welcome: 12KaKtrK52iQjPdtsJq7fJ7smC32tXWbWr
Notanon
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250



View Profile
November 09, 2013, 08:46:41 AM
 #13329

"The needs of the many outweigh the needs of the few or the one."

He is not getting any substantial donations to maintain the scrypt code and GPU mining is pretty much dead.

It is the correct decision IMO.
Are you seriously suggesting that nobody is mining altcoins? Just because GPU mining BTC isn't profitable doesn't mean shit. Hell, even with the drop in price, Litecoin mining can still net you a couple hundred a month with just two GPUs. Also, don't many ASIC miner rigs come with their own built-in mining software? Anyway, I highly doubt that maintaining and even tweaking scrypt support that is only a thousand lines of code is so arduous as to require substantial donations, but that is his choice. Someone will pick up the slack.

cbuchner1 has his own CUDAminer for nVidia cards at the moment, so it wouldn't be too much of stretch for someone else to do a dedicated miner for AMD cards that is more optimised for them rather than a catch-all program like cgminer. I also imagine once the Scrypt FPGA miners start being released soon, more attention might given to developing dedicated scrypt miners for them as well.

Personally, I'm waiting on the development of a USB stick scrypt miner that I saw in another thread somewhere, so I don't have to run my PC 24/7 and could possibly delegate to my Raspberry Pi.
loshia
Legendary
*
Offline Offline

Activity: 1610
Merit: 1000


View Profile
November 09, 2013, 11:58:35 AM
 #13330

Hello

I do think that this piece of code can create dead locks we are waiting to be awaken pthread_cond_wait holding lock mutex_lock(stgd_lock);

      mutex_lock(stgd_lock);
      ts = __total_staged();

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         ts = __total_staged();
      }
      mutex_unlock(stgd_lock);


From the other side wake_gws needs same lock and so on and so on....Con please take a look at it when you can

static void wake_gws(void)
{
   mutex_lock(stgd_lock);
   pthread_cond_signal(&gws_cond);
   mutex_unlock(stgd_lock);
}

A quick fix might be

      mutex_lock(stgd_lock);
      ts = __total_staged();
                 mutex_unlock(stgd_lock);

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         mutex_lock(stgd_lock);
                        ts = __total_staged();
                        mutex_unlock(stgd_lock);

      }



Please help the Led Boy aka Bicknellski to make us a nice Christmas led tree and pay WASP membership fee here:
https://bitcointalk.org/index.php?topic=643999.msg7191563#msg7191563
And remember Bicknellski is not collecting money from community;D
-ck (OP)
Legendary
*
Offline Offline

Activity: 4088
Merit: 1631


Ruu \o/


View Profile WWW
November 09, 2013, 12:03:22 PM
 #13331

Hello

I do think that this piece of code can create dead locks we are waiting to be awaken pthread_cond_wait holding lock mutex_lock(stgd_lock);

      mutex_lock(stgd_lock);
      ts = __total_staged();

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         ts = __total_staged();
      }
      mutex_unlock(stgd_lock);


From the other side wake_gws needs same lock and so on and so on....Con please take a look at it when you can

static void wake_gws(void)
{
   mutex_lock(stgd_lock);
   pthread_cond_signal(&gws_cond);
   mutex_unlock(stgd_lock);
}

A quick fix might be

      mutex_lock(stgd_lock);
      ts = __total_staged();
                 mutex_unlock(stgd_lock);

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         mutex_lock(stgd_lock);
                        ts = __total_staged();
                        mutex_unlock(stgd_lock);

      }



I appreciate you looking over the code, however I guess you don't understand that pthread_cond_wait DROPS the mutex lock associated with it. You are supposed to called a pthread conditional wait holding a mutex lock and it picks up the lock again when the conditional or timeout is over.

Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
loshia
Legendary
*
Offline Offline

Activity: 1610
Merit: 1000


View Profile
November 09, 2013, 12:08:00 PM
 #13332

Yues i guess i do not understand the details but with latest git i am experiencing deadlocks

applog(LOG_WARNING, "Waiting for work to be available from pools.");
and everything is freezing

If i find out the reason i will let you know but something is not right

PS- Why did you disable Avalon lock lately - commit c3f13369961a7be6b19fe838ac4b5a7bc8592b16? If everything is ok the lock shall be ok also.

Anyway Thank you


Hello

I do think that this piece of code can create dead locks we are waiting to be awaken pthread_cond_wait holding lock mutex_lock(stgd_lock);

      mutex_lock(stgd_lock);
      ts = __total_staged();

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         ts = __total_staged();
      }
      mutex_unlock(stgd_lock);


From the other side wake_gws needs same lock and so on and so on....Con please take a look at it when you can

static void wake_gws(void)
{
   mutex_lock(stgd_lock);
   pthread_cond_signal(&gws_cond);
   mutex_unlock(stgd_lock);
}

A quick fix might be

      mutex_lock(stgd_lock);
      ts = __total_staged();
                 mutex_unlock(stgd_lock);

      if (!pool_localgen(cp) && !ts && !opt_fail_only)
         lagging = true;

      /* Wait until hash_pop tells us we need to create more work */
      if (ts > max_staged) {
         pthread_cond_wait(&gws_cond, stgd_lock);
         mutex_lock(stgd_lock);
                        ts = __total_staged();
                        mutex_unlock(stgd_lock);

      }



I appreciate you looking over the code, however I guess you don't understand that pthread_cond_wait DROPS the mutex lock associated with it. You are supposed to called a pthread conditional wait holding a mutex lock and it picks up the lock again when the conditional or timeout is over.

Please help the Led Boy aka Bicknellski to make us a nice Christmas led tree and pay WASP membership fee here:
https://bitcointalk.org/index.php?topic=643999.msg7191563#msg7191563
And remember Bicknellski is not collecting money from community;D
-ck (OP)
Legendary
*
Offline Offline

Activity: 4088
Merit: 1631


Ruu \o/


View Profile WWW
November 09, 2013, 12:11:22 PM
 #13333


PS- Why did you disable Avalon lock lately? If everything is ok the lock shall be ok also.
Everything was not okay with the avalon. There are recursive locks called in a different order from the async flush code and the avalon code. Recursive locks in a different order cause deadlocks.

If you are having deadlocks then perhaps you have a hardware driver with a similar problem. The one I have not been able to fully audit so far is the klondike driver which may be prone to the same problem.

Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
loshia
Legendary
*
Offline Offline

Activity: 1610
Merit: 1000


View Profile
November 09, 2013, 12:13:20 PM
 #13334


PS- Why did you disable Avalon lock lately? If everything is ok the lock shall be ok also.
Everything was not okay with the avalon. There are recursive locks called in a different order from the async flush code and the avalon code. Recursive locks in a different order cause deadlocks.

If you are having deadlocks then perhaps you have a hardware driver with a similar problem. The one I have not been able to fully audit so far is the klondike driver which may be prone to the same problem.

Thank you con!!!!

You do not mind to spam the thread now and then do you? I am finding bugs from time to times Smiley

I am joking..Thank you very much

Best

Please help the Led Boy aka Bicknellski to make us a nice Christmas led tree and pay WASP membership fee here:
https://bitcointalk.org/index.php?topic=643999.msg7191563#msg7191563
And remember Bicknellski is not collecting money from community;D
-ck (OP)
Legendary
*
Offline Offline

Activity: 4088
Merit: 1631


Ruu \o/


View Profile WWW
November 09, 2013, 12:18:12 PM
 #13335


PS- Why did you disable Avalon lock lately? If everything is ok the lock shall be ok also.
Everything was not okay with the avalon. There are recursive locks called in a different order from the async flush code and the avalon code. Recursive locks in a different order cause deadlocks.

If you are having deadlocks then perhaps you have a hardware driver with a similar problem. The one I have not been able to fully audit so far is the klondike driver which may be prone to the same problem.

Thank you con!!!!

You do not mind to spam the thread now and then do you? I am finding bugs from time to times Smiley

I am joking..Thank you very much
Absolutely do not mind at all. People auditing code is rare, and reporting meaningful bugs is the key to fixing them. What hardware do you have anyway, if you are having deadlock problems?

By the way, if you can reliably reproduce what appears to be a deadlock, make sure you have the absolute latest git, edit miner.h to enable LOCK_TRACKING
change line 765
Code:
#define LOCK_TRACKING 0
to
Code:
#define LOCK_TRACKING 1
and start cgminer logging the output and with the API enabled with for example the following extra options:
Code:
--api-listen --api-allow "W:127.0.0.1" 2>log.txt
and when you see a deadlock send the command to get a summary of the lock status with
Code:
java API lockstats
This should spew extra information into the logging file you generated called log.txt which will allow me to see how the deadlock was caused.


Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
loshia
Legendary
*
Offline Offline

Activity: 1610
Merit: 1000


View Profile
November 09, 2013, 12:23:11 PM
 #13336


PS- Why did you disable Avalon lock lately? If everything is ok the lock shall be ok also.
Everything was not okay with the avalon. There are recursive locks called in a different order from the async flush code and the avalon code. Recursive locks in a different order cause deadlocks.

If you are having deadlocks then perhaps you have a hardware driver with a similar problem. The one I have not been able to fully audit so far is the klondike driver which may be prone to the same problem.

Thank you con!!!!

You do not mind to spam the thread now and then do you? I am finding bugs from time to times Smiley

I am joking..Thank you very much
Absolutely do not mind at all. People auditing code is rare, and reporting meaningful bugs is the key to fixing them. What hardware do you have anyway, if you are having deadlock problems?

By the way, if you can reliably reproduce what appears to be a deadlock, make sure you have the absolute latest git, edit miner.h to enable LOCK_TRACKING
change line 765
Code:
#define LOCK_TRACKING 0
to
Code:
#define LOCK_TRACKING 1
and start cgminer logging the output and with the API enabled with for example the following extra options:
Code:
--api-listen --api-allow "W:127.0.0.1" 2>log.txt
and when you see a deadlock send the command to get a summary of the lock status with
Code:
java API lockstats
This should spew extra information into the logging file you generated called log.txt which will allow me to see how the deadlock was caused.



Thank You!

I will do as suggested. I do have HEX16A. And i am playing with them for the moment

I will let you know if i find out what happens related to your code as long hex16 is not pushed to your git ...
Best

Please help the Led Boy aka Bicknellski to make us a nice Christmas led tree and pay WASP membership fee here:
https://bitcointalk.org/index.php?topic=643999.msg7191563#msg7191563
And remember Bicknellski is not collecting money from community;D
-ck (OP)
Legendary
*
Offline Offline

Activity: 4088
Merit: 1631


Ruu \o/


View Profile WWW
November 09, 2013, 12:24:25 PM
 #13337

I will do as suggested. I do have HEX16A. And i am playing with them for the moment

I will let you know if i find out what happens related to your code as long hex16 is not pushed to your git ...
Ah in that case, make sure your report your bug to the hex16 maintainer, not me since it's not cgminer code.

Developer/maintainer for cgminer, ckpool/ckproxy, and the -ck kernel
2% Fee Solo mining at solo.ckpool.org
-ck
loshia
Legendary
*
Offline Offline

Activity: 1610
Merit: 1000


View Profile
November 09, 2013, 02:48:12 PM
 #13338

I will do as suggested. I do have HEX16A. And i am playing with them for the moment

I will let you know if i find out what happens related to your code as long hex16 is not pushed to your git ...
Ah in that case, make sure your report your bug to the hex16 maintainer, not me since it's not cgminer code.
Con, I will try to filter out bugs and report the ones which are related to your code only

Please help the Led Boy aka Bicknellski to make us a nice Christmas led tree and pay WASP membership fee here:
https://bitcointalk.org/index.php?topic=643999.msg7191563#msg7191563
And remember Bicknellski is not collecting money from community;D
os2sam
Legendary
*
Offline Offline

Activity: 3578
Merit: 1090


Think for yourself


View Profile
November 09, 2013, 03:05:42 PM
 #13339

I have two block erupters that are producing about a Ths for me.  That would be great if weren't a Ths of Hardware errors.  I have seen others report very high hash rates for BE's but I don't remember what the consensus was.  Is this a BE, Hub or CGMiner issue?  Any insight would be appreciated.
Sam

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
ScaryHash
Hero Member
*****
Offline Offline

Activity: 529
Merit: 501


View Profile
November 09, 2013, 03:09:15 PM
 #13340

I have a USB driver question (not a complaint).

Have you changed any USB driver components between 3.6.4 and 3.7.2?

Because all of a sudden, I cannot for the life of me get CGminer 3.7.2 to work with my USB block erupters at all, while going thru Anker USB hubs (I have two hubs, none of them wants to work with CGminer 3.7.2).

If I reboot, and start up CGminer 3.6.4, same machine, different CGminers in different directories, 3.6.4 works fine.

I start up 3.7.2, no AMUs get recognized thru the hub. The only way they get recognized by CGminer 3.7.2 is if I plug them into the computer's usb ports directly.

The Anker hubs are USB 3.0 hubs, so it seems like there is some kind of issue when going from USB 2.0 to USB 3.0., either with CGminer or the Anker hubs.

This is a pure Linux Mint 14 machine, AMD processor, with the each version of CGminer compiled using --enable-icarus --enable-klondike --no-gpu --disable-opencl

I don't remember what the flags were for each compile (I think I have them written down somewhere), but the earlier version had a different set...I'm guessing that's important? (I think I loaded libtool, libncurses-dev yasm curl , for the 3.6.4 compilation, but not for the 3.7.2 compilation).

The 3.7.2 compile I just did

cd cgminer
chmod +x ./autogen.sh
./autogen.sh
./configure --enable-icarus --enable-klondike --no-gpu --disable-opencl
make

Version 3.6.4 used to also recognized Klondikes going thru the Anker hub, but it does not anymore under 3.7.2. Both icarus and klondikes work fine when plugged directly into the usb ports under 3.6.4.

Weird, isn't it?  Shocked

Any thoughts would be greatly appreciated. Thank you for all your work on this.



Pages: « 1 ... 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 [667] 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 ... 843 »
  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!