Are you over 18 and want to see adult content?
More Annotations
![A complete backup of brushresearch.com](https://www.archivebay.com/archive2/bdd3d570-f151-47e2-91d5-9984d9b2414c.png)
A complete backup of brushresearch.com
Are you over 18 and want to see adult content?
![A complete backup of fuelinjectorclinic.com](https://www.archivebay.com/archive2/3976f262-0c67-48cc-98b9-5aa4d78ee127.png)
A complete backup of fuelinjectorclinic.com
Are you over 18 and want to see adult content?
![A complete backup of yesbet88baccarat.com](https://www.archivebay.com/archive2/ab049a83-f15b-46d9-98db-d1c25858c750.png)
A complete backup of yesbet88baccarat.com
Are you over 18 and want to see adult content?
![A complete backup of nilcenrietti.com.ar](https://www.archivebay.com/archive2/bf8dd86d-578b-4454-a0ba-6e719f1dd875.png)
A complete backup of nilcenrietti.com.ar
Are you over 18 and want to see adult content?
![A complete backup of yinkashonibarembe.com](https://www.archivebay.com/archive2/9c8d7c74-f582-4236-9aca-cd6d59d4d654.png)
A complete backup of yinkashonibarembe.com
Are you over 18 and want to see adult content?
Favourite Annotations
![A complete backup of unplandivino.net](https://www.archivebay.com/archive/a1ec5c68-ea51-4ecf-b776-70ade17a2ad7.png)
A complete backup of unplandivino.net
Are you over 18 and want to see adult content?
![A complete backup of variante-subiecte-examene.blogspot.com](https://www.archivebay.com/archive/b669a16d-ad6c-44e7-af1b-391343d7b046.png)
A complete backup of variante-subiecte-examene.blogspot.com
Are you over 18 and want to see adult content?
![A complete backup of gatewayblend.com](https://www.archivebay.com/archive/3a001924-5a46-4e9e-a09b-20fd19f70e91.png)
A complete backup of gatewayblend.com
Are you over 18 and want to see adult content?
![A complete backup of pratibhaba-bhagwanbharose.blogspot.com](https://www.archivebay.com/archive/a83e8aeb-faa1-4fe1-ae51-09e33c05f8c0.png)
A complete backup of pratibhaba-bhagwanbharose.blogspot.com
Are you over 18 and want to see adult content?
Text
ELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts videoELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts video ABOUT | ELASTICDOG.COM About Aaron Bull Schaefer. I’m a certifiable renaissance man, gentleman, and scholar. I have been working in the IT field since 2002 and am currently employed as a Senior Infrastructure Engineer at Beatport.I earned my Bachelor’s degree in Computer & Information Technology (specializing in Network Engineering) from Purdue University, graduating with highest distinction. ARCHIVES - ELASTICDOG.COM Archives Contemporary. Developing Ansible Playbooks for Arch Linux with Vagrant; Use sshuttle to Keep Safe on Insecure Wi-Fi; Shelf-MadeStanding Desk
ELASTICDOG.COM
← older articles; newer articles → Beginning Factor – Introduction. I’ve been involved in the Factor programming language community for about a year now, and am constantly amazed with how productive its contributors are. Large improvements to the language and its libraries are made on a weekly (if not daily) basis, and it’s finally starting to attract some much-deserved attentionBEGINNING FACTOR
A colon (:) is used to start the definition of a word.This is required and must have a space after it. Right after the opening colon is the name of your word, also required.; Following the name of your word is its stack effect declaration, which is a list of the word’s inputs and outputs separated by --and surrounded by parentheses. All words must have a stack effect declaration unless itBEGINNING FACTOR
Beginning Factor – Shufflers & Combinators. In the previous installment of Beginning Factor, we discussed some of the attributes of stack-based languages and the syntax for defining words in Factor. This time around, I’d like to introduce stack shufflers, quotations & combinators, and touch on some more basic data types and theirproperties.
FAKING MULTIPLE TEMPLATES IN WORDPRESS Faking Multiple Templates in WordPress. One of the things that surprised me when I first switched from Movable Type to WordPress was its lack of multiple templates. In MT you create numerous templates which allow you to change the look of different pages on your site (i.e., the homepage, archive pages, individual entries, etc.). If you want a list of your favorite links to appear on WP PLUGIN: OPTIMAL TITLE WP Plugin: Optimal Title. This plugin is now deprecatedsee Optimal Title Functionality Now in WordPress Core.. IMPORTANT!!! Due to recent XSS security issues fixed in WordPress 2.1.3, the code for Optimal Title also had to change in order to fix the vulnerabilities. It is recommended that ALL users of this plugin upgrade to version 3.0. Due to changes in how Optimal Title works, that should DESIGN BY FIRE CLEANUP Design by Fire Cleanup. Last week, Andrei Herasimchuk of Design by Fire announced a contest to see who could take his site’s current design and “clean it up, optimizing it for best semantic and structural architecture.” Having the final code judged by three industry bigwigs (Dave Shea, Dean Jackson, and Eric Meyer), Andrei is offering the winner their choice of any three Adobe products. NEW FLAT-PANEL DISPLAYS USING CERAMICS New Flat-Panel Displays using Ceramics. While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel HOWTO: HAVE MULTIPLE USERS SHARE AN ITUNES LIBRARY ON ONE ← previous article; next article → HOWTO: Have Multiple Users Share an iTunes Library on One Machine. I recently purchased a new MacBook (never having owned a Mac before), and have been reading up on keeping things secure.ELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts videoELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts video ABOUT | ELASTICDOG.COM About Aaron Bull Schaefer. I’m a certifiable renaissance man, gentleman, and scholar. I have been working in the IT field since 2002 and am currently employed as a Senior Infrastructure Engineer at Beatport.I earned my Bachelor’s degree in Computer & Information Technology (specializing in Network Engineering) from Purdue University, graduating with highest distinction. ARCHIVES - ELASTICDOG.COM Archives Contemporary. Developing Ansible Playbooks for Arch Linux with Vagrant; Use sshuttle to Keep Safe on Insecure Wi-Fi; Shelf-MadeStanding Desk
ELASTICDOG.COM
← older articles; newer articles → Beginning Factor – Introduction. I’ve been involved in the Factor programming language community for about a year now, and am constantly amazed with how productive its contributors are. Large improvements to the language and its libraries are made on a weekly (if not daily) basis, and it’s finally starting to attract some much-deserved attentionBEGINNING FACTOR
A colon (:) is used to start the definition of a word.This is required and must have a space after it. Right after the opening colon is the name of your word, also required.; Following the name of your word is its stack effect declaration, which is a list of the word’s inputs and outputs separated by --and surrounded by parentheses. All words must have a stack effect declaration unless itBEGINNING FACTOR
Beginning Factor – Shufflers & Combinators. In the previous installment of Beginning Factor, we discussed some of the attributes of stack-based languages and the syntax for defining words in Factor. This time around, I’d like to introduce stack shufflers, quotations & combinators, and touch on some more basic data types and theirproperties.
FAKING MULTIPLE TEMPLATES IN WORDPRESS Faking Multiple Templates in WordPress. One of the things that surprised me when I first switched from Movable Type to WordPress was its lack of multiple templates. In MT you create numerous templates which allow you to change the look of different pages on your site (i.e., the homepage, archive pages, individual entries, etc.). If you want a list of your favorite links to appear on WP PLUGIN: OPTIMAL TITLE WP Plugin: Optimal Title. This plugin is now deprecatedsee Optimal Title Functionality Now in WordPress Core.. IMPORTANT!!! Due to recent XSS security issues fixed in WordPress 2.1.3, the code for Optimal Title also had to change in order to fix the vulnerabilities. It is recommended that ALL users of this plugin upgrade to version 3.0. Due to changes in how Optimal Title works, that should DESIGN BY FIRE CLEANUP Design by Fire Cleanup. Last week, Andrei Herasimchuk of Design by Fire announced a contest to see who could take his site’s current design and “clean it up, optimizing it for best semantic and structural architecture.” Having the final code judged by three industry bigwigs (Dave Shea, Dean Jackson, and Eric Meyer), Andrei is offering the winner their choice of any three Adobe products. NEW FLAT-PANEL DISPLAYS USING CERAMICS New Flat-Panel Displays using Ceramics. While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel HOWTO: HAVE MULTIPLE USERS SHARE AN ITUNES LIBRARY ON ONE ← previous article; next article → HOWTO: Have Multiple Users Share an iTunes Library on One Machine. I recently purchased a new MacBook (never having owned a Mac before), and have been reading up on keeping things secure.ELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts videoELASTICDOG.COM
The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most people are used to. Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you won’t need to install any additional build software. PROJECTS | ELASTICDOG.COM Projects. Here are a few projects that I’ve been involved with in one form or another over the years. Click a banner below to see moredetails
ABOUT | ELASTICDOG.COMSEE MORE ON ELASTICDOG.COMELASTICDOG.COM
The way to go about this is a group of words called “stack shufflers”. Much like the name implies, stack shufflers are merely words that change the order (or number) of the items on the top of the stack. It is said that shuffle words “control the flow of data between words that perform actions.”.DESIGN BY FIRE
Fanning the flames (or: the latest comments made on DxF) KevinMichael Hamm on Will code for software:. Wow! I know that my own coding is somewhere between Apple IIe and the old Commode (not to be confused with the vaunted Commodore64, which was a dandy machine I never owned) and I’m really looking forward to seeing the results. MAGNETIC-BASED VERSUS FLASH-BASED STORAGE Magnetic data is not very reliable after a year or so, while flash-based data will usually last quite a bit longer. Flash-based memory also has a limited number of erase cycles, after which, whatever data is stored on that segment will not change. This can actually help in an investigation if you can trick the hardware controller into thinking PORTING A POKER HAND EVALUATOR FROM C TO FACTOR A minor change I made here was to establish a RANK_STR constant to make it easier to develop ways to parse and print card representations later (see the section on printing below for the C equivalent). That said, card-rank-prime in the Factor version has the same purpose as the primes array in the C version, but it performs the lookup for you.ELASTICDOG.COM
Optimal Title is a WordPress plugin that mirrors the function of wp_title() exactly, but moves the position of the 'separator' to after the title rather than before. This allows you to have your blog name tacked on to the end of the page title instead of having it appear first. Having your page information appear before your blog name in the title is advantageous because it provides moreELASTICDOG.COM
← older articles; newer articles → Current Status of the Code Viewer WordPress Plugin. This site has been neglected for a long time, and that negligence has carried over to the development of the Code Viewer WordPress plugin as well. While I’ve been away, Code Viewer has been picked up/enhanced by a few other developers — namely AJ and Håkan Carlström — and has gained many newELASTICDOG.COM
← older articles; newer articles → New Flat-Panel Displays using Ceramics This article has been retired and will no longer be updated. Caveat emptor! While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel that converts video ABOUT | ELASTICDOG.COM About Aaron Bull Schaefer. I’m a certifiable renaissance man, gentleman, and scholar. I have been working in the IT field since 2002 and am currently employed as a Senior Infrastructure Engineer at Beatport.I earned my Bachelor’s degree in Computer & Information Technology (specializing in Network Engineering) from Purdue University, graduating with highest distinction. ARCHIVES - ELASTICDOG.COM Archives Contemporary. Developing Ansible Playbooks for Arch Linux with Vagrant; Use sshuttle to Keep Safe on Insecure Wi-Fi; Shelf-MadeStanding Desk
ELASTICDOG.COM
← older articles; newer articles → Beginning Factor – Introduction. I’ve been involved in the Factor programming language community for about a year now, and am constantly amazed with how productive its contributors are. Large improvements to the language and its libraries are made on a weekly (if not daily) basis, and it’s finally starting to attract some much-deserved attentionBEGINNING FACTOR
A colon (:) is used to start the definition of a word.This is required and must have a space after it. Right after the opening colon is the name of your word, also required.; Following the name of your word is its stack effect declaration, which is a list of the word’s inputs and outputs separated by --and surrounded by parentheses. All words must have a stack effect declaration unless itBEGINNING FACTOR
Beginning Factor – Shufflers & Combinators. In the previous installment of Beginning Factor, we discussed some of the attributes of stack-based languages and the syntax for defining words in Factor. This time around, I’d like to introduce stack shufflers, quotations & combinators, and touch on some more basic data types and theirproperties.
FAKING MULTIPLE TEMPLATES IN WORDPRESS Faking Multiple Templates in WordPress. One of the things that surprised me when I first switched from Movable Type to WordPress was its lack of multiple templates. In MT you create numerous templates which allow you to change the look of different pages on your site (i.e., the homepage, archive pages, individual entries, etc.). If you want a list of your favorite links to appear on WP PLUGIN: OPTIMAL TITLE WP Plugin: Optimal Title. This plugin is now deprecatedsee Optimal Title Functionality Now in WordPress Core.. IMPORTANT!!! Due to recent XSS security issues fixed in WordPress 2.1.3, the code for Optimal Title also had to change in order to fix the vulnerabilities. It is recommended that ALL users of this plugin upgrade to version 3.0. Due to changes in how Optimal Title works, that should DESIGN BY FIRE CLEANUP Design by Fire Cleanup. Last week, Andrei Herasimchuk of Design by Fire announced a contest to see who could take his site’s current design and “clean it up, optimizing it for best semantic and structural architecture.” Having the final code judged by three industry bigwigs (Dave Shea, Dean Jackson, and Eric Meyer), Andrei is offering the winner their choice of any three Adobe products. NEW FLAT-PANEL DISPLAYS USING CERAMICS New Flat-Panel Displays using Ceramics. While waiting for my tax refund, I’ve been checking out flat panel TVs and I ran across this article on a new ceramic flat panel technology in Popular Science: “Researcher Steve Yando has invented a ceramic panel HOWTO: HAVE MULTIPLE USERS SHARE AN ITUNES LIBRARY ON ONE ← previous article; next article → HOWTO: Have Multiple Users Share an iTunes Library on One Machine. I recently purchased a new MacBook (never having owned a Mac before), and have been reading up on keeping things secure.ELASTICDOG.COM
…THE BALLYHOO OF AARON BULL SCHAEFER SURVEY MY INFLUENCE OR PERUSE MY RELICS ------------------------- * ← older articles DEVELOPING ANSIBLE PLAYBOOKS FOR ARCH LINUX WITH VAGRANT I’m a big fan of automated configuration management software, and an even bigger fan of utilizing Vagrant for developing configuration modules/cookbooks/states/playbooks/whatever in a fast and easily reproducible environment. I previously created Puppet Sandbox for just this purpose, but have more recently taken an interest in using Ansible for configuration andorchestration.
I also have a long history of working with Arch Linux , and wanted to develop Ansible playbooks specifically for managing Arch machines. Vagrant supports automatically provisioning machines via Ansibleout of the
box, but there were still a couple of hurdles to get over: * Up-to-date Vagrant base boxes for Arch are hard to find. * Arch Linux doesn’t have Python 2 installed by default, which is a dependency for Ansible.PACKER ARCH
To solve the first problem, I decided to create a generic Arch Linux base box myself. In the not too distant past, the way to do that in a repeatable fashion was Veewee , but the project has gotten progressively more complicated to set up and use. Lucky for me, there’s a new kid on the block for creating machine images named Packer , built and maintained by the author of Vagrant, Mitchell Hashimoto. To make a long story short, I wrote Packer Arch , which is a bare bones Packer template and installation script that can be used to quickly generate Vagrant base boxes for Arch Linux. My goal with the box was to be as minimal as possible, and to roughly duplicate what you’d get when purchasing an Arch Linux VPS from a provider like DigitalOcean . Starting from that point, I wanted to configure everything else via Ansible. BOOTSTRAPPING THE VIRTUAL MACHINE Solving the Python 2 problem was a little trickier. Ansible itself provided a possible solution with their raw module, but Vagrant’s
provisioning integration with Ansible requires Python 2 to be on the base box _before_ you can run any playbooks. It’s the classic “chicken or the egg” problem. Since utilizing Ansible for configuration _as well as_ orchestration tasks was desirable, but would require having a proper setup outside of Vagrant anyway, I just decided to ignore Vagrant’s provisioner altogether. Instead, I wrote a short script to handle the one-time tasks so I could interact with the VM using Ansible in the exact same fashion as I would any other server.PREPARATION
The prerequisites for running the bootstrap script include assigning a known IP address to the machine via the Vagrantfile:
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "arch" config.vm.network :private_network, ip: "192.168.111.222"end
…recording that same IP in an inventory file named hosts for Ansibleto reference:
192.168.111.222
…and finally pointing Ansible to the correct Python binary by creating a group_vars/all file containing:---
# Variables listed here are applicable to all host groups. ansible_python_interpreter: /usr/bin/python2THE SCRIPT
On top of installing Python 2, I have the bootstrap script handle a few other items for convenience: * Create my user account and grant it full sudo privileges. * Add my SSH public keys to the newly created account. * Download a current package mirrorlist based on my geography. The user management steps are handled by running the tasks tagged “_bootstrap_” from my regular master playbook, and the mirrorlist is downloaded and then transferred to the machine via the copy module.
Without further ado, here’s the bootstrap script: #!/usr/bin/env bash export ANSIBLE_HOSTS="${PWD}/hosts" export ANSIBLE_HOST_KEY_CHECKING='False'vagrant up
ansible vagrant -m raw -a 'pacman -Sy --noconfirm python2' --user=vagrant --private-key="${HOME}/.vagrant.d/insecure_private_key" --sudo ansible-playbook site.yml --tags=bootstrap --user=vagrant --private-key="${HOME}/.vagrant.d/insecure_private_key" --sudoCOUNTRY='US'
URL="https://www.archlinux.org/mirrorlist/?country=${COUNTRY}&protocol=http&ip_version=4&use_mirror_status=on" if /usr/bin/curl --silent --fail --output mirrorlist "${URL}"; thencase $OSTYPE in
darwin*)
/usr/bin/sed -i '' 's/#Server/Server/g' mirrorlist;;
linux*)
/usr/bin/sed -i 's/#Server/Server/g' mirrorlist;;
esac
ansible vagrant -m copy -a 'src=mirrorlist dest=/etc/pacman.d/mirrorlist owner=root group=root mode=0644 backup=yes' --user=vagrant --private-key="${HOME}/.vagrant.d/insecure_private_key" --sudorm mirrorlist
fi
echo "export ANSIBLE_HOSTS=${PWD}/hosts" echo 'export ANSIBLE_HOST_KEY_CHECKING=False'echo
Once the script runs, I paste the environment variable export lines that it echos into my shell. This makes Ansible purposefully ignore SSH host key checking; since the VM is transient, we don’t need to permanently store its key. ACHIEVEMENT UNLOCKED! From there on out, all of the Ansible modules work as expected and no longer require connecting as the vagrant user: $ ansible vagrant -m ping 192.168.111.222 | success >> {"changed": false,
"ping": "pong"
}
To give you an idea of the actual playbooks I’m using with this setup, take a look at my Monarch project, and in particular, the _users.yml_ file under the common role. As always, let me know if you need any help putting all of the pieces together. ------------------------- USE SSHUTTLE TO KEEP SAFE ON INSECURE WI-FI If you’ve ever used an insecure Wi-Fi connection in a public place (think coffee shop, airport, etc.), your personal information could be at risk. Anyone on the local network could potentially be monitoring your traffic and they could even hijack your sessions to control accounts that you’ve logged into. Every week I meet up with some friends to work on personal projects, and the venue only offers an open wireless connection with no encryption. To mitigate the risk of leaking personal information, I’ve tried a handful of strategies and eventually settled on using sshuttle.
WHAT IS SSHUTTLE?
The sshuttle utility is part transparent proxy, part Virtual Private Network (VPN), and part SSH. It solves a lot of common problems with encrypting your traffic, and it does so in a very efficient way. There’s no need for a complicated pre-existing infrastructure. All you need is Python 2.x, and a remote machine you can SSH to that also has Python installed. You don’t even have to be an administrator on the remote machine. The project’s READMEhas a lot
more information on its theory, design, and alternate uses.PREVIOUS METHOD
As an aside, I had previously relied on creating a SOCKS proxy with SSH, and then tunneling my web traffic through it… $ ssh -fqND 1080 example.com But, you have to adjust your machine’s proxy configuration settings each time you set up the tunnel, and then tear it all down when you’re done. This method WILL NOT force absolutely all traffic over the tunnel, as things like DNS lookups and a lot of command-line tools will just ignore the proxy. You’re also encapsulating TCP-over-TCP, which can cause performance problems. I briefly messed with the Sidestep projectto automate these
setup/teardown steps on OS X, but ran across repeated authentication issues and wasn’t overly impressed with its developer. Overall, I needed a more elegant solution.INSTALLATION
I wanted to use sshuttle on OS X Lion, and even though it’s primarily a command-line utility, it also comes with a graphical user interface wrapper that will sit in the menu bar. If you just want the command-line script and already use Homebrew , brew install sshuttle is the way to go. If you don’t use Homebrew and/or want the GUI, I’ve gotyour back…
BUILDING SSHUTTLE FROM SOURCE Unfortunately, pre-compiled binaries are not made available for every release, and documentation for building sshuttle is non-existent. The project uses a build system called ‘redo’ instead of the more-customary ‘make’, so the process is a bit different than what most peopleare used to.
Luckily, the sshuttle repository includes a shell script named ‘do’, which is a simplified version of redo, so you _won’t need to_ install any additional build software. The only real dependencies are Python and two Python modules to generate the man page (feel free to use pip install instead of easy_install, ifyou prefer):
$ easy_install markdown BeautifulSoup Once you’ve installed those two modules, you’re all set tobuild…
_NOTE: You may have to adjust paths or permissions slightly depending on your machine’s setup._ $ mkdir -p /usr/local/libexec $ git clone git://github.com/apenwarr/sshuttle.git /usr/local/libexec/sshuttle $ cd /usr/local/libexec/sshuttle/$ ./do all
Once sshuttle is built, we just make symlinks so the binary and man page are in the proper places: $ ln -s /usr/local/libexec/sshuttle/sshuttle /usr/local/bin $ mkdir -p /usr/local/share/man/man8 $ ln -s /usr/local/libexec/sshuttle/Documentation/sshuttle.8 /usr/local/share/man/man8 For the GUI app, we need to create an _alias_ instead a symlink,because Spotlight
will not index symlinks. Yes, you could just copy _Sshuttle VPN.app_ directly into _/Applications_, but then you’d have to remember to copy it every time you update/rebuild sshuttle. Without getting too technical, aliases are a lot like symlinks but they use extra metadata called “resource forks” to follow a file (even when it’s moved) rather then blindly pointing to a path. More importantly, Spotlight WILL index them. There’s no way to create an alias from the command line, so you have to use Finder: * Open Finder and press COMMAND-SHIFT-G to open the “Go to the folder:” dialog box. * Type /usr/local/libexec/sshuttle/ui-macos in the box and click theGO button.
* Click and hold _Sshuttle VPN.app_, then while holding down both the COMMAND and OPTION keys, drag the app over to _Applications_ on the left and release the mouse button.CONFIGURATION
Due to some sysctl changes in OS X Lion, you will have to reboot your machine after you run sshuttle for the first time. An adjustment to the net.inet.ip.scopedroute kernel flag needs to be made, and it can no longer be done during runtime. This is required so forwarding rules will be honored by the firewall. Everything should be handled automatically by sshuttle, but if your curious to see the change, you can display the boot kernel flags and current settings with the following commands: $ defaults read /Library/Preferences/SystemConfiguration/com.apple.Boot{
"Kernel Flags" = "";}
$ sysctl -a | grep scopedroute net.inet.ip.scopedroute: 1 net.inet6.ip6.scopedroute: 1 After you run sshuttle for the first time and then reboot the machine, you can confirm the updated status: $ defaults read /Library/Preferences/SystemConfiguration/com.apple.Boot{
"Kernel Flags" = "net.inet.ip.scopedroute=0";}
$ sysctl -a | grep scopedroute kern.bootargs: net.inet.ip.scopedroute=0 net.inet.ip.scopedroute: 0 net.inet6.ip6.scopedroute: 1USAGE
Finally we can get down to actually using sshuttle! It’s flexible enough to do fancier things, but for our particular use case, we just need to forward all traffic over the tunnel. The basic command to achieve our goal looks like this: $ sshuttle --dns -r example.com 0/0 _NOTE: Sshuttle will honor your ~/.ssh/config connection settings, but you can also manually specify a different username/port, ifnecessary:_
$ sshuttle --dns -r username@example.com:2222 0/0 Run that, and all of your traffic (_including_ DNS requests) will be transparently proxied through an SSH connection to _example.com_. You can verify this by browsing to https://ifconfig.me. To stop forwarding traffic, just press Ctrl-c back in the terminal. We can do a bit better though by forking the process into the background so we don’t tie up our terminal session. These are the aliases I use to make setting up and tearing down the tunnel easier: alias tunnel='sshuttle --dns --daemon --pidfile=/tmp/sshuttle.pid --remote=example.com 0/0' alias tunnelx=' && kill $(cat /tmp/sshuttle.pid) && echo "Disconnected."' The _Sshuttle VPN.app_ GUI is pretty self-explanatory, just make sure to enable the _Send DNS requests through this server_ checkbox, and select _Send all traffic through this server_ for the “Networkroutes:” option.
KNOWN BUGS
You may see a bunch of “WARNING: CLOSED CHANNEL …” messages when running sshuttle (either on STDOUT or in your system.log), but these warnings are safe to ignore. The developer knows about the issue and is thinking of the best way to suppress/eliminate the condition. Also, prior to version 0.60 of sshuttle, there was a bug in the GUIapplication
when disconnecting tunnels, where the controlling terminal would disappear before firewall rules could cleaned up. This would leave the network in an odd state and all DNS lookups would fail. It should be fixed now, but if you experience networking trouble after disconnecting a sshuttle tunnel, you can see the current firewallrules using:
$ sudo ipfw list
…and you can manually flush out those rules to fix connectivity byrunning:
$ sudo ipfw -f flush Be aware though, THIS WILL FLUSH OUT ALL RULES, not just the rules set by sshuttle, so it may have unintended consequences. If you’re unsure, you can always reboot the machine to get connectivity back tonormal.
UPDATE SSHUTTLE
Since our installation of sshuttle is managed via git, updating to the latest version is pretty straightforward: $ cd /usr/local/libexec/sshuttle$ git pull
$ ./do all
CONCLUSION
Admittedly, sshuttle takes a bit more work than other solutions to get up and running, but the security it provides gives me peace of mind when forced to use insecure Wi-Fi networks. If you have any issues, there is an active mailing list for the project, or you can always send me a note and I’ll see what I can doto help.
------------------------- SHELF-MADE STANDING DESK Since I started working from home, I’ve found that I spend even more time sitting at my desk than I did when I worked at the office. I’ve never had great posture and started noticing that my back and shoulders were pretty achy by the end of the day. Once I got to that point, it was harder to stay focused on work and I was becoming noticeably fatigued. I started researching alternative workspaces, and found ideas ranging from sitting on an exercise ball to walking on a treadmill desk. Having sat on exercise balls before, I knew that I would quickly regress back to slouching; and the idea of working on a treadmill seemed too impractical. I needed something in between…A STANDING DESK
There seems to be a surge of people converting to standing desks recently, and there’s no shortage of personal stories and information on why they can be beneficial. Some very nice commercially-made standing desks are available, but not knowing if I’d actually like using one, I didn’t want to make a big up-frontinvestment.
MY OLD DESK
For reference, my old desk was simply a cubicle desk surface that had been reclaimed from a dumpster. I always liked the amount of horizontal space it provided, and it was extremely solid, but notcompletely ideal.
MY NEW DESK
I decided to convert a cheap shelving unit into a standing desk as a way to test the waters. At 48"W x 24"D x 72"H, this $80 rack from Lowes was pretty ideal, and I figured that after a month if I didn’t like it, the shelf could always be used in my garage. I tried to follow OSHA guidelines as closely as possible when setting up the height of each shelf. The bottom shelf is about 7" above the ground to give my feet ample space below the rack; the upper shelf was placed so the top of the displays are right about eye-level; and the middle shelf was placed just below my elbow height for the keyboard and mouse. I used the extra shelf (which would have been on the very top) as a keyboard “tray” by cutting some notches in the corners to create a ledge that sticks out about six inches in the front. Some friends pointed out that MDF could potentially contain Formaldehyde in the resin used to bind it together, and that prolonged contact might cause skin irritation. To prevent this, I wrapped the front part of the keyboard tray in faux leather contact paper. It looks nice, and prevents my wrists from getting itchy. Here’s how everything came together… So my hands always stay at the proper height, I use Synergy to control both my Linux desktop and my MacBook Pro laptop with the same keyboard and mouse. The medical community points out that staying in one position for too long (whether that’s sitting OR standing) can be bad for you, so there’s also a futon in my office where I can switch to using my laptop with a Logitech Comfort Lapdesk.
Eventually, I may order a tall stool, so the option to sit at the desk will also be available; although, I do plan on standing for the majority of the time.ACCESSORIES
To make the standing desk more ergonomic, I purchased a fewaccessories:
* A Rain Design mStand laptop stand to bring my MacBook Pro’s display up to the properheight
* A Kensington SoleMate Plus adjustable footrest to help facilitate shifting my weight throughout the day * A 16" Zilotek LED strip light to help eliminate shadows and illuminiate the shelf with the keyboard and mouse Here’s an idea of roughly how the keyboard tray looks without the LED strip light installed; and if you mouse over the image, you’ll see what it looks like with the LED lights turned on…CONCLUSIONS
My first full day of standing was January 19th, 2011, and so far, I really love the desk. The first week was definitely a little rough, with my feet and back becoming sore by the end of the day, but it’s getting better. I’ve read that it takes a couple of weeks to fully adjust, so after I’ve given the desk a bit more time, I’ll post another update. At this point, I’m optimistic that it will be a permanent change to my home office setup.UPDATE
It has been almost 8 months since I started using the standing desk, and I don’t think I could go back. My posture has noticeably improved, and I quickly got over the initial soreness. I stand up about 85–90% of the time, and sit down with my lapboard for the rest (mostly later in the day). I’ve only made a few changes to my setupso far:
* I switched to an Kenesis Freestyle ergonomic keyboard to help improve wrist positioning and limit overreaching when using the mouse * I added an Imprint anti-fatigue floor mat to make standing more comfortable (even though my office is carpeted) * I added an Apple Magic Trackpad near my mouse pad so I wouldn’t need to reach to the upper level of the desk to perform multi-touch gestures It’s safe to say that I enjoy utilizing a standing desk, and even though my shelving unit was originally purchased as an inexpensive way to get my feet wet, it has worked out better than expected. For now, it gets the job done and I don’t see the need to purchase a more expensive standing desk. The only other planned improvements I have would be, to finally cut off the extra portion of each of the metal support rails that stick out from the top, and to build small side shelves that could support a pair of KRK Rokit 5 studio monitors.
Once I’ve done those things, I’ll post an updated photo of how itlooks.
Since posting this original article, I’ve inspired a handful of friends to try out standing desks, and all of them have stuck with it. If you’ve been on the fence about trying a standing desk, I can easily say that it’s worth the effort to give it a shot. I’d love to hear from you if you end up taking the plunge!UPDATE2
Well, I finished all of my planned improvements and here are the updated pics…ignore the dust and messy cabling :-) I found the shelves as a kit from Knape & Vogt for ~$20 each, but had to purchase some additional hardware (bolts, washers, and locking nuts) since they were originally designed for mounting with wood screws. The shelves can supposedly support up to 50 pounds each; they are stable, but I wouldn’t be comfortable adding much more than the current 15 pounds on them. Cutting the metal support rails and trimming the shelf mounts to fit took a fair bit of time, a steady hand, and a Dremel. If you try it, the one thing I’ll say is to definitely wear safety glasses! Anyway, I think I’m finally done tweaking things for a bit, but am incredibly happy with the results. Go forth and stand! * ← older articles -------------------------* Home
* About
* Projects
* Archives
Copyright © 2003–2013 Aaron Bull Schaefer — All Rights Reserved.Details
Copyright © 2024 ArchiveBay.com. All rights reserved. Terms of Use | Privacy Policy | DMCA | 2021 | Feedback | Advertising | RSS 2.0