The Wright Brothers

DO NOT DELETE

Share This Book

Similar Titles

"She was becoming herself and daily casting aside that fictitious self which we assume like a garment with which to appear before the world." - Kate Chopin, The Awakening

The Wright Brothers

Author: David McCullough
Pages: 337
Category: Biography & Autobiography
Publisher: Simon & Schuster
Subject:
Country:
Publication Date: 2015
Finished? No
Signed? No
First Edition? No

Purchase this title at:

Description
The #1 New York Times bestseller from David McCullough, two-time winner of the Pulitzer Prize—the dramatic story-behind-the-story about the courageous brothers who taught the world how to fly—Wilbur and Orville Wright.

On a winter day in 1903, in the Outer Banks of North Carolina, two brothers—bicycle mechanics from Dayton, Ohio—changed history. But it would take the world some time to believe that the age of flight had begun, with the first powered machine carrying a pilot.

Orville and Wilbur Wright were men of exceptional courage and determination, and of far-ranging intellectual interests and ceaseless curiosity. When they worked together, no problem seemed to be insurmountable. Wilbur was unquestionably a genius. Orville had such mechanical ingenuity as few had ever seen. That they had no more than a public high school education and little money never stopped them in their mission to take to the air. Nothing did, not even the self-evident reality that every time they took off, they risked being killed.

In this “enjoyable, fast-paced tale” (The Economist), master historian David McCullough “shows as never before how two Ohio boys from a remarkable family taught the world to fly” (The Washington Post) and “captures the marvel of what the Wrights accomplished” (The Wall Street Journal). He draws on the extensive Wright family papers to profile not only the brothers but their sister, Katharine, without whom things might well have gone differently for them. Essential reading, this is “a story of timeless importance, told with uncommon empathy and fluency…about what might be the most astonishing feat mankind has ever accomplished…The Wright Brothers soars” (The New York Times Book Review).
Amazon Reviews
, , , , ,

Dev Diary: WPHealthTracker #1 – Unit Testing

 

 

So today begins work on my new WordPress plugin – WPHealthTracker. Why a health-related plugin you ask? Believe it or not, I at one point was in 300-level shape… complete with the airbrushed abs. Ok, so maybe I didn’t look that great, but I was running marathons and lifting about 5 days a week. That was before the mysterious chronic pain, and several subsequent years of doctor visits, a hip surgery, and muscle injections. But if there’s one thing I haven’t (completely) lost, it’s my grit, and I’m damn determined to fix my body and get back to a healthy life – and I’d like a web-based tool to help me do that.

Let’s start this journey with a little discussion about Unit Testing. From work on my other WordPress Plugin, WPBookList, I’ve come to realize that it’s almost impossible to make just one change, and then test every other function of your plugin. At some point the project just gets too large, and you’ve got to rely on something other than your coding discipline and attention-to-detail. Apparently, this is where Unit Testing can help.

Essentially, Unit Testing consists of simulating each function of your code to make sure it spits out the expected result. Yeah, it sounds like a lot of additional work, and admittedly, I’ve just begun writing WPHealthTracker with Unit Testing in mind, so ask me exactly how much additional work it really is in a couple months… my hope though is that it’ll save me a lot of hassle and headache in the long run, not to mention user frustration at the inevitability of something breaking or working differently each time an update is released… it’s like a game of coding Whack-A-Mole…

Getting Started…

First I installed PHPUnit – pretty much the standard for Unit Testing PHP. I opened a terminal window and typed:

php -r "copy('https://phar.phpunit.de/phpunit-6.5.8.phar', 'phpunit.phar');"

This grabbed the version of PHPUnit we want – apparently WordPress doesn’t play well with version 7 and up of PHPUnit, so I grabbed the last available version just before 7. This also has something to do with what version of PHP you’re running. You can specify which version of PHPUnit you’d like to download by simply changing the version number from 6.5.8 to whatever version you want. Here’s where all the versions of PHPUnit are listed.

Next type:

chmod +x phpunit.phar

to actually execute the downloaded file. After that, type

sudo mv phpunit.phar /usr/local/bin/phpunit

to move PHPUnit to where it needs to be to be accessed globally with the phpunit command. At this point, you should be able to simply type:

phpunit

in the terminal to see it’s options. Type:

phpunit --version

to verify the version of PHPUnit you just installed.

Installing WP-CLI (WordPress Command-Line-Interface)

Next you’ll need to install the WordPress Command-Line-Interface (WP-CLI). No worries though, same three steps as with PHPUnit essentially. First type:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

to get the file, then

chmod +x wp-cli.phar

to install, and

sudo mv wp-cli.phar /usr/local/bin/wp

to move.

Setting Up WordPress & Plugin Files

Now we’ll move on to setting up our WordPress install and Plugin files for Unit Testing. Change Directory to the root of your local WordPress install. For example, since the root of my WordPress install is a directory called ‘local’, I typed:

cd /Users/JakeEvans/Desktop/mamp_wordpress_doc_root/local

Now type

wp scaffold plugin-tests my-testing-pulgin

being sure to replace ‘my-testing-plugin’ with the name of the plugin you want to set up unit testing for. For example, I typed:

wp scaffold plugin-tests wphealthtracker

This command will set up the correct file structure within your plugin for Unit Testing. Next, CD into your plugin’s root directory. I typed:

cd wp-content/plugins/wphealthtracker

to get there. Now we’ll run the actual install script with this command (but wait, don’t run it yet – you’ll need to replace several things with your own info!):

bin/install-wp-tests.sh wordpress_test root 'password' localhost latest

You’ll want to replace the word root with your MySQL database username, and the ‘password’ with your MySQL database password. You can find these two bits of info in your wp-config.php file, or on the MAMP WebStart page (the link for mine happens to be http://localhost:8888/MAMP/?language=English).

You may also need to change the localhost to 127.0.0.1. Check out the MySQL Hostname in your wp-config.php file (should be something like: define(‘DB_HOST’, ‘localhost’); ) and use the value specified there. If it’s already specified as localhost and you aren’t having any success with the bin/install-wp-tests.sh command from above, then in wp-config.php, change this line: define(‘DB_HOST’, ‘localhost’); to define(‘DB_HOST’, ‘127.0.0.1);, and modify the command from above like so:

bin/install-wp-tests.sh wordpress_test root ‘root’ 127.0.0.1 latest

If this still isn’t working for you, you may need to append a port number. Open that MAMP WebStart page, and look for the section that lists your MySQL info. There should be a ‘Port’ row with the correct number. Modify the DB_HOST constant in wp-config.php like so (being sure to replace the ‘8889’ with your own port number!):

define('DB_HOST', '127.0.0.1:8889');

and modify the install command like so (again, being sure to replace the ‘8889’ with your own port number!):

bin/install-wp-tests.sh wordpress_test root ‘password’ 127.0.0.1:8889 latest

In the end, I had to change my DB_HOST constant in wp-config.php to define(‘DB_HOST’, ‘127.0.0.1:8889’);, and my install command to “bin/install-wp-tests.sh wordpress_test root ‘root’ 127.0.0.1:8889 latest” (yes, yes, I know I was using the default MySQL username and password of ‘root’ and ‘root’… like all of your passwords are unique and un-guessable!)

Once the install is complete, simply type:

phpunit

to run the default, out-of-the-box test that is located in the tests/test-sample.php file. If everything worked out, you should see a green-highlighted message saying something like: OK (1 tests, 1 assertions).

Now For Actual Unit Testing…

The actual Unit Tests themselves currently reside in the tests/test-sample.php – go ahead and open that file up and take a look – there’s not too much going on as of right now, just a class named SampleTest that extends the WP_UnitTestCase class (the class that does all the magic), and one function providing a test that will always pass.

Here’s the thing to learn from this file: see the

$this->assertTrue

line? So PHPUnit has these things called Assertions (which apparently is a concept common to all Unit Testing). There are quite a few different types (check ’em all out here), but basically, they’re tests that generally take a couple arguments and compare them to see if they satisfy that particular Assertion. The Assertion used here is the assertTrue() Assertion, which actually only takes one argument. If that argument evaluates to true, then this Assertion will pass, resulting in that green-highlighted bit of text you saw earlier. Another example would be the assertEquals() Assertion, which takes two arguments, and will pass if both arguments are equal to each other. A third example would be the assertGreaterThanOrEqual() Assertion, which again takes two arguments, and if the first argument is greater than or equal to the second argument, the Assertion passes.

Create Your Own Unit Tests

Now it’s time to create your own test file. In the test directory (where the tests/test-sample.php file is), create a new file called test-yourpluginname, replacing ‘yourpluginname’ with the name of your plugin. For example, I created a file in the tests directory called ‘tests-wphealthtracker.php’.

Here’s the basic version of how my ‘tests-wphealthtracker.php’ currently looks (after just a few hours of playing around with creating Unit Tests):

class WP_Meta_VerifyTest extends WP_UnitTestCase
{

    public function setUp()
    {
        parent::setUp();

        // Get class instance of the WPHealthTracker_General_Functions in wphealthtracker-functions.php file
        $this->functions_file_class_instance = new WPHealthTracker_General_Functions();

        // Switch doc root to the root dir of wphealthtracker
        $_SERVER['DOCUMENT_ROOT'] = WPHEALTHTRACKER_ROOT_DIR;

    }

    public function tearDown() 
    {
        // Switch doc root back to what it was
        unset($_SERVER['DOCUMENT_ROOT']);
    }

    // For testing the function that adds the admin menu entry
    public function test_wphealthtracker_jre_admin_menu()
    {
        $expected = 'toplevel_page_WPHealthTracker-Options';
        $this->assertEquals( $expected,  $this->functions_file_class_instance->wphealthtracker_jre_admin_menu());
    }

...more functions and stuff...

}

As you can see, I created a class named WP_Meta_VerifyTest, extending the WP_UnitTestCase class just like the test-sample.php file did. Both the setUp() and tearDown() functions are functions that PHPUnit calls automatically, but you can include them and add your own code as well if there are things you need to either set up, or undo, before beginning tests and after tests are complete.

I currently have one file in WPHealthTracker right now that holds several functions I want to Unit Test. In that file I’ve created a class called WPHealthTracker_General_Functions(). All of the functions I’m Unit Testing are methods of the WPHealthTracker_General_Functions class. In the setUp() function, I’ve instantiated an instance of the WPHealthTracker_General_Functions class, so that I can reference these member functions for testing. Generally speaking, in each Unit Test function, I’ll be passing two things to my Assertions for evaluation; the expected value that the member function of class WPHealthTracker_General_Functions should return (generated by my own code within each Unit Test function – think of it as a mock-up of the expected result of running that function), and the second thing I’ll pass will be a call to the member function itself, to get the actual, real-life result of the function. If the two values match or otherwise satisfy the Assertion, then the test passes!

A Simple, Real-Life Test Example

Let’s take a look at one of my tests – first we’ll look at the function in WPHealthTracker we’re wanting to test:

//Function to add the admin menu entry
public function wphealthtracker_jre_admin_menu() {
    $hook_suffix = add_menu_page( 'WPHealthTracker Options', 'Health Tracker', 'manage_options', 'WPHealthTracker-Options', array($this, 'wphealthtracker_jre_admin_page_function'), WPHEALTHTRACKER_ROOT_IMG_URL.'wphealthtrackerdashboardicon.png', 6 );
    return $hook_suffix;
}

and now we’ll check out the Unit Test function for wphealthtracker_jre_admin_menu():

// For testing the function that adds the admin menu entry
public function test_wphealthtracker_jre_admin_menu()
{
    $expected = 'toplevel_page_WPHealthTracker-Options';
    $this->assertEquals( $expected, $this->functions_file_class_instance->wphealthtracker_jre_admin_menu());
}

test_wphealthtracker_jre_admin_menu() is a Unit Test function that will check to see if the creation of the Admin Menu entry for WPHealthTracker went as expected. The first line of this function is what I’m expecting wphealthtracker_jre_admin_menu() to return – the variable $hook_suffix should contain the string ‘toplevel_page_WPHealthTracker-Options’. I know for a fact that’s what wphealthtracker_jre_admin_menu() returns, so in the test_wphealthtracker_jre_admin_menu() function, I create a variable called $expected with the value of ‘toplevel_page_WPHealthTracker-Options’. I then pass that $expected variable to my Assertion, which in this case is assertEquals(). The second argument passed to assertEquals() is a call to the actual function wphealthtracker_jre_admin_menu(), via our class instantiation we created in the setUp() function. Now I jump back to my Terminal, make sure I’m in the root directory of my plugin, and type:

phpunit

Instead of running test-sample.php, PHPUnit will run test-wphealthtracker.php. It’ll run through that setUp() function, and then run our test_wphealthtracker_jre_admin_menu() Unit Test function. As I passed an actual function call to $this->assertEquals() as the second argument, the actual wphealthtracker_jre_admin_menu() function in WPHealthTracker is run, and it’s output is returned. If that output matches the $expected variable, then the test passes.

Wrapping Things Up

This is the most basic of basic Unit Tests, but you can see how this could be useful in a large project – simply write your Unit Tests for each function in your plugin, and before you release an update just run phpunit, making sure all of your tests pass and no new bugs and/or possible issues were introduced as a result of recent changes.

Unit Testing also has the benefit of making you write better code – I’ve already had to completely re-write several of my functions to make them ‘Unit Testable’ – which basically means I’ve had to reduce the number of branching conditionals and different routes through individuals functions I may have had, to try and arrive at just one or two possible outputs for each function. Sometimes to accomplish this I’ve had to break a single function up into two or three completely new functions, which results in three smaller, easier-to-follow, easier-to-predict functions.

Anyway, that should be enough to get you started – check back in a couple months for how my thoughts on Unit Testing have changed since this post!

The Legend of Zelda: Breath of the Wild

DO NOT DELETE

Share This Game

Similar Titles

"EA Sports. It's in the game. " - EA Sports games

The Legend of Zelda: Breath of the Wild

Initial Release Date: 03-03-2017
Genre(s): Adventure, Role-playing (RPG)
Series: The Legend of Zelda
Publisher: Nintendo of Europe, Nintendo of America, Nintendo
Developer: Nintendo EPD
Avg. Critic Rating: 97.76
IGDB Link: Click Here
Finished? Yes
Platform(s): Nintendo Switch, Wii U
Alternative Names: ゼルダの伝説 ブレス オブ ザ ワイルド, TLoZ BotW

Purchase this title at:

Description
Step into a world of discovery, exploration and adventure in The Legend of Zelda: Breath of the Wild, a boundary-breaking new game in the acclaimed series. Travel across fields, through forests and to mountain peaks as you discover what has become of the ruined kingdom of Hyrule in this stunning open-air adventure.
Screenshots & Images
News Feed

SteamWorld Dig

DO NOT DELETE

Share This Game

Similar Titles

"You have died of dysentery " - Oregon Trail

SteamWorld Dig

Initial Release Date: 08-07-2013
Genre(s): Indie, Adventure, Platform
Series: SteamWorld
Publisher:
Developer: Image & Form
Avg. Critic Rating: 84
IGDB Link: Click Here
Finished? Yes
Platform(s): Nintendo Switch, Nintendo 3DS, Linux, Xbox One, PlayStation 4, PlayStation Vita, Wii U, Mac, PC (Microsoft Windows), PlayStation Network
Alternative Names:

Purchase this title at:

Description
SteamWorld Dig is 2D a platform game that revolves around mining for resources and ores. The objective of the game is to investigate the mines underneath the old Western town Tumbleton in order to unearth the secrets lurking below. The player controls Rusty who is equipped with a pickaxe but the player is given options to upgrade the tools used for digging as progression is made in the game. Besides health, the player also needs coal for light, and water for special abilities. SteamWorld Dig has platform elements in that the player runs, jumps and encounter foes, but the main objective is mining. That means that the player builds – or rather deconstructs – the game world and creates platforms that way. The player collects resources and other hidden resources which can be brought back to the surface and exchanged for cash. When the player progress in the game new abilities are unlocked. Each playthrough, the mines are randomized, making items and treasure appear in different locations. If the player gets stuck there is a self destruct function, but the players can also buy ladders in the store at the surface to get out of tricky situations. When progressing deeper down in the cave, the player encounters various enemies with different attack patterns and weak spots. The game features multiple worlds, each with a completely different environment. Dying results in a reparation penalty fee, and the player respawns back on the surface. All the loot that has been accumulated when the player dies can be picked up again.
Screenshots & Images
News Feed

Gears of War 4

DO NOT DELETE

Share This Game

Similar Titles

"You spoony bard! " - Final Fantasy II

Gears of War 4

Initial Release Date: 10-11-2016
Genre(s): Shooter
Series: Gears of War
Publisher: Microsoft Studios
Developer: The Coalition
Avg. Critic Rating: 83.08
IGDB Link: Click Here
Finished? Yes
Platform(s): Xbox One, PC (Microsoft Windows)
Alternative Names: GoW 4, Gears 4

Purchase this title at:

Description
A new saga begins for one of the most acclaimed video game franchises in history. After narrowly escaping an attack on their village, JD Fenix and his friends, Kait and Del, must rescue the ones they love and discover the source of a monstrous new enemy.
Screenshots & Images
News Feed

Super Mario Odyssey

DO NOT DELETE

Share This Game

Similar Titles

"No Gods or Kings. Only man. " - Bioshock

Super Mario Odyssey

Initial Release Date: 10-27-2017
Genre(s): Adventure, Platform
Series: Super Mario
Publisher: Nintendo of Europe, Nintendo of America, Nintendo
Developer: Nintendo EPD
Avg. Critic Rating: 97.06
IGDB Link: Click Here
Finished? Yes
Platform(s): Nintendo Switch
Alternative Names:

Purchase this title at:

Description
The game has Mario leaving the Mushroom Kingdom to reach an unknown open world-like setting, like Super Mario 64 and Super Mario Sunshine.
Screenshots & Images
News Feed

Oxenfree

DO NOT DELETE

Share This Game

Similar Titles

"Im-a-Wario! Im-a gonna win! " - Mario Kart 64

Oxenfree

Initial Release Date: 01-15-2016
Genre(s): Indie, Adventure, Role-playing (RPG)
Series:
Publisher: Night School Studio
Developer: Night School Studio
Avg. Critic Rating: 78.56
IGDB Link: Click Here
Finished? Yes
Platform(s): Nintendo Switch, Linux, Xbox One, PlayStation 4, Mac, SteamOS, iOS, PC (Microsoft Windows), PlayStation Network
Alternative Names:

Purchase this title at:

Description
Oxenfree is a supernatural adventure game. Rites of passage and Senior year traditions set the stage for a group of friends sneaking off to Edwards Island, an old military outpost with no phone service. Players will take on the role of Alex as she brings her new stepbrother Jonas to an overnight party gone horribly wrong. Inspired by classic cult films like Stand by Me and Poltergeist, Oxenfree is an adventure that pulls from the past but looks to the present. “It’s a coming of age story where players control how their hero comes of age,” says Sean Krankel, co-founder of Night School. “We’re drawing on the fond and mortifying aspects of being in your late teens, and setting it against a dangerous and ghostly backdrop.”
Screenshots & Images
News Feed
Whoops! No News Items are available for this Title!
Videos
Amazon Reviews

Final Fantasy VII

DO NOT DELETE

Share This Game

Similar Titles

"Nobody in this industry knows what they're doing - we just have a gut assumption. " - Cliff Bleszinsky

Final Fantasy VII

Initial Release Date: 01-31-1997
Genre(s): Adventure, Role-playing (RPG)
Series: Final Fantasy VII
Publisher: Square Enix, Eidos Interactive, SCEE, SCEA, Square
Developer: Square
Avg. Critic Rating: 85
IGDB Link: Click Here
Finished? Yes
Platform(s): PlayStation 4, PlayStation, iOS, PC (Microsoft Windows), PlayStation Network
Alternative Names: Final Fantasy 7 International, Final Fantasy VII International, Final Fantasy 7, FF VII, FFVII, FF7, Финальная Фантазия 7, 最終幻想VII, ファイナルファンタジーVII

Purchase this title at:

Description
Set in a dystopian world, Final Fantasy VII's story centers on mercenary Cloud Strife who joins with several others to stop the megacorporation Shinra, which is draining the life of the planet to use as an energy source. As the story progresses, the situation escalates and Cloud and his allies face Sephiroth, the game's main antagonist.
Screenshots & Images
News Feed
, , , , ,

Changing Demographics

A little Armchair-Statisticallizing goin' on here…

hi

So I'm not entirely sure what prompted this, but I think I've stumbled across something interesting (admittedly, I know very little about this subject). There's this idea that historically, America has been this diverse "Melting Pot" of different cultures (at least, this idea persists among the White majority – I wonder how other American groups view this idea?), but something made me ask myself, “If this is true, why does it feel like we have more racial tension and animosity than ever before? Why is there such a vigorous Immigration debate right now?" Maybe it's because we've never actually been a ‘Melting Pot.’ Looking at the data, America has always been far-and-away culturally ruled by one group of people, which is a takeaway that, on an individual level, isn't something that probably shocks too many of us.

hi

For The First Time…

The point I’m trying to make is that I think it's only now, for the first time in American History, that we're approaching the very real possibility of the only American Majority that has ever existed (White people, specifically the older White male), no longer being the majority, or at least having their cultural influence and significance reduced considerably, which is probably the more important point to make. This feels like another "Transition Point" similar to other aspects in our society we’re seeing, such as rapidly-changing technology, employment arrangements, and socio-economic statuses. In an attempt to back this idea up with data (compiled from https://en.wikipedia.org/…/Historical_racial_and_ethnic_dem…), I created the image below. Notice the historically significant change in the percentage of the White population from years 1970-1980 – a drop of 4.6%.

hi

Never before has there been anywhere near that large of a drop in the percentage of American’s White population. The drop from 1990-2000 is even larger. It’ll be interesting to see what the 2020 census reveals.

hi

We Can All Agree…

Now I think we can all agree that if there’s one thing humans as a whole hate, it’s change. People go to ridiculous lengths to avoid, or completely deny, that anything in their neat little packaged-up world is changing, especially if that change is felt to be negative. Like I’ve written about before, people simply want to feel safe, comfortable, accepted, and included in all aspects of their lives – financially, emotionally, socially, culturally. If this holds true, then it makes sense that there should be increased racial tensions at a time when our society and culture is changing to include more sources of diversity than ever before.

Slavery may have become outlawed on-the-books, but, aside from desegregation, never before have the majority of Americans had to face such a cultural shift in their own daily lives – from the media they consume (piped straight into their homes and smartphones), to the racial and ethnic makeup of their coworkers, to the “Political Correctness” one adheres to in polite society, no matter how much they WANT to “cut through all the politically-correct bullshit.” Even if this change is more “felt” by people, and isn’t really backed up by data, that “feeling” is really all that matters. It’s as if we’ve “talked the talk” about racism, tolerance, and inclusiveness, but we’re now being asked, more and more in our own daily lives, to “walk the walk.” 

People are at heart emotional beings, who do not instinctively jump to cold logic and reason when assessing their opinions and viewpoints on nearly any subject

hi

Shifting Demographics, Shifting Economics…

There’s a reason there’s so much conversation about how massively successful the new “Black Panther” movie has become – perhaps it’s because there is finally enough of an increase in the size of the Minority the movie features (or enough of a decrease of the Majority) to significantly sway the box-office numbers, proving that movies of this kind, that feature a predominately Black cast, are not only financially feasible, but are potentially untapped goldmines. This hints at another mainstay of our culture, for better or for worse – eventually, our society succumbs to changes that reflect the direction the money is flowing in (which is why some businesses' recent reluctance to donate to the NRA or stop the sale of some types of firearms and their accessories is important – but that’s another issue).

Anyway, bottom line seems to be this: the demographics of America are changing, or at least the perspective is that they’re changing, like never before, highlighting more differences and inequities throughout our culture that are becoming harder to ignore. It’s important for us all to remember that change is hard, and people are especially vulnerable to feeling as if they’re under personal attack when certain things in their neat, comfortable, packaged-up lives are modified in some way. Again, we all want the same things – to feel safe, comfortable, accepted, and included in all aspects of our lives – financially, emotionally, socially, culturally. Some groups feel they still have a long fight ahead of them to achieve these things. Other groups feel as if these things are in danger of being taken away from them. It doesn’t have to be a zero-sum game. Also, become comfortable with change!

,

Things I Wish You Understood About Good Science

hi

Yep… Earth is definitely not a big round ball floating in space…

1 There are "Scientists" out there that are really, really bad at practicing good Science. Then there are those that are really, really bad at explaining it to the general public. Just like any other subject or area of study or anything else that has anything to do with humans, there are those that give their career field and subject matter a bad name. Creating a "bad name" for Science is doubly-dangerous, as it's already a pretty misunderstood thing.

2 Science and God (or some other concept of a "Higher Intelligence" or "Creator") could possibly co-exist; there’s nothing in any good Science book that says, “Here is proof God doesn’t exist.” Then again, there’s nothing in any good Science book that says, “Here’s definitive proof that God does exist” either. In and of itself, Science doesn't inherently have anything to say about God or religion one way or another. When asked if Science disproves the existence of God, a good Scientist will respond by saying, "Well, we don't currently have any Scientific evidence for the existence of God, but that doesn't mean God doesn't exist – it simply means we don't have any Scientific evidence." There's even some waaaayyy-out-there theoretical science-fictiony kinda scientific theories, based in cutting-edge, barely-understood theoretical physics that purports to explain how some sort of universal consciousness could exist… not to mention the theories that we're actually living in one gigantic simulation (and usually, simulations have creators). All of this is to say that we've been colossally, monumentally wrong before – a good Scientist should have the most open of minds.

3 Good Science is a “practice,” one that changes over the years as we humans observe and learn more about the physical, natural world and it's inhabitants (also, this is one of the reasons medicine is called a "practice.") The majority of Scientists used to believe that Cholera, Chlamydia, and the Plague were caused by “Bad Air” (called the Miasmatic Theory of Disease) that would drift into town at night and strike those who slept with their windows open. Then we learned about germs. The point is, good scientists will admit there are gaps in our scientific knowledge, and that as we learn more, our theories and understanding of this universe we live in will change, grow, adapt. That being said, there are certain areas of Science that we’ve studied, learned about, and observed for so, so, so long, and that we've gathered so much information on, that they’re pretty much fact – such as the world being round. But if tomorrow, someone said, “Wait a minute, due to a unique feature in the human brain, human eyeballs, and the human sense of balance, the viewpoint that the world is round is actually an illusion – we’ve all been fooled,” good scientists would be forced to take another look at the issue. Pretty unlikely in this case though.

4 Believe it or not, Scientists are actually individual humans, subject to the same weaknesses, biases, and agendas as all other humans. There are plenty of bad Scientists out there who cling to a belief in something, regardless of the proof, simply because they don’t want to be wrong. Good Scientists will admit when their theories don’t pan out, learn from and incorporate new information, and will then keep trying to understand how something really works or functions with their updated knowledge at hand.

5 Good Scientists use a “recipe” to practice good science. You can also call it an "algorithm" or The Scientific Method – they're all synonyms for a methodical, step-by-step process, and nothing more, so don't let these terms intimidate you. Scientists start with an idea – say, that the world is round. Then they ask themselves, “Yeah, but how can I actually figure out if the world is round?” They think a little more, and suddenly it occurs to them, “Well, I suppose if the world is round, then if I just jumped in an airplane and flew in a straight line, eventually I’d end up right back where I started, right?” So they do just that, and lo-and-behold, after a long flight in a straight line in their own personal airplane, they ended right back up where they started. Now here’s the most important part of the recipe – they tell their straight-line flight story to someone else, say someone living in China, ask that person to do the same exact thing, and then compare their experiences. If the Chinese straight-line flight ended up right back where it started, then so far so good – this idea that the world is round sounds even more likely to be true. If that first scientists then had 10,000 more people from various parts of the world repeat the same exact steps (get in an airplane, fly in a straight line) and all 10,000 ended up back where they started, then the Scientist has just gathered 10,000 individual pieces of evidence that support his idea – that the world is round. Let’s now suppose that all 10,000 of those individuals either were never heard from again, or only a handful returned, reporting that they reached the end of the earth – a point where the waters of the oceans ended in one infinitely-deep waterfall – and turned around to come back home. If the scientist is a good scientist, he’ll think to himself, “Ok, maybe my original idea isn’t correct, or maybe I need to try and find a different way to discover if I’m right or wrong, something other than flying in a straight line.” He then devises another method of figuring out if the world is round (say, flying really, really high above it and seeing if it looks like a ball, or a flat piece of paper), has others repeat the same method, and compares results. This story illustrates the fundamental way science, good science, is supposed to work – come up with an idea, come up with a way to test if that idea is correct, and have as many other people repeat your exact steps and compare results. Take those results, learn from them, repeat the process. That’s it. It’s not fool-proof, and it is subject to human error and human ego, but it’s one of the best ways we’ve ever discovered to learn about ourselves, our environment, and our universe.