My experience on my daily works... helping others ease each other

Tuesday, December 20, 2016

json_decode(file_get_contents("php://input") on https

When you try to run json_decode on https, it will throw errors due to null value. file_get_contents("php://input") will also return null.

Way to solve it and the most efficient are as follows

//get data from caller
$arrContextOptions=array(
 "ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);  
$your_data_array= json_decode(file_get_contents("php://input",false, stream_context_create($arrContextOptions)),true);

The code actually make it don't care what protocol you are using and set it to false (means no verifications). It normally happen when you are using self-signed or non-standard SSL certificates.

It is the most efficient and the fastest solutions.. but not the most practical :)

The best is -> use standard approved certificates :)
Share:

Wednesday, November 23, 2016

Running SQL Server on Linux

It has gone viral and loved by many after Microsoft declared their engagement with Linux after series of interaction... and much awaited of the possible potential running few Microsoft product running on Linux.

While waiting, lets give a try on SQL Server running on Fedora through virtual machine powered by Docker

Paul W. Frields and Langdon White share their views and step for this.
  1. https://fedoramagazine.org/run-sql-server-v-next-public-preview-fedora/
  2. https://fedoramagazine.org/sql-server-fedora-docker-container/
Share:

Monday, November 14, 2016

Setting up JDK on Oracle Linux without downloading package

I was setting up my server when there is a need to have the JDK install and found the following guideline is useful for those that don't want to download the package, unzip and then install... just run to command.. Below is the guideline published @ http://stackoverflow.com/questions/5104817/how-to-install-java-sdk-on-centos

The following command will return a list of all packages directly related to Java. They will be in the format of java-.
$ yum search java | grep 'java-'
If there are no available packages, then you may need to download a new repository to search through. I suggest taking a look at Dag Wieers' repo. After downloading it, try the above command again.
You will see at least one version of Java packages available for download. Depending on when you read this, the lastest available version may be different.
java-1.7.0-openjdk.x86_64
The above package alone will only install JRE. To also install javac and JDK, the following command will do the trick:
$ yum install java-1.7.0-openjdk*
These packages will be installing (as well as their dependencies):
java-1.7.0-openjdk.x86_64
java-1.7.0-openjdk-accessibility.x86_64
java-1.7.0-openjdk-demo.x86_64
java-1.7.0-openjdk-devel.x86_64
java-1.7.0-openjdk-headless.x86_64
java-1.7.0-openjdk-javadoc.noarch
java-1.7.0-openjdk-src.x86_64
Share:

Sunday, November 13, 2016

ActiveDS.DLL is missing or corrupt

I was updating my outlook when I got the message "ActiveDS.dll is missing" and my outlook keep on restarting. Reading many solutions through google search but it took me some time till I found the simplest solution at this site (which also listed many ways to solve the problem).

http://www.dllmissing.com/fix-missing-or-not-found-activeds.dll-errors-1886

but the most easier was -> just open your command prompt and run this command 'sfc /scannow' and it should do the rest.. and you will get to see the following process..


And is should be ok after that. Else, just follow the link and try all solutions there.
Share:

Sunday, September 18, 2016

Laravel Cheat Sheet

Artisanphp artisan --help OR -h
php artisan --quiet OR -q
php artisan --version OR -V
php artisan --no-interaction OR -n
php artisan --ansi
php artisan --no-ansi
php artisan --env
// -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debugphp artisan --verbose
php artisan changes
php artisan clear-compiled
php artisan down
php artisan dump-autoload
php artisan env
php artisan help
php artisan list
php artisan migrate
php artisan optimize
php artisan routes
php artisan serve
php artisan tinker
php artisan up
php artisan workbench
php artisan asset:publish [--bench[="vendor/package"]] [--path[="..."]] [package]
php artisan auth:reminders
php artisan cache:clear
php artisan command:make name [--command[="..."]] [--path[="..."]] [--namespace[="..."]]
php artisan config:publish
php artisan controller:make [--bench="vendor/package"]
php artisan db:seed [--class[="..."]] [--database[="..."]]
php artisan key:generate
php artisan migrate [--bench="vendor/package"] [--database[="..."]] [--path[="..."]] [--package[="..."]] [--pretend] [--seed]
php artisan migrate:install [--database[="..."]]
php artisan migrate:make name [--bench="vendor/package"] [--create] [--package[="..."]] [--path[="..."]] [--table[="..."]]
php artisan migrate:refresh [--database[="..."]] [--seed]
php artisan migrate:reset [--database[="..."]] [--pretend]
php artisan migrate:rollback [--database[="..."]] [--pretend]
php artisan queue:listen [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--timeout[="..."]] [connection]
php artisan queue:subscribe [--type[="..."]] queue url
php artisan queue:work [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--sleep] [connection]
php artisan session:table
php artisan view:publish [--path[="..."]] package


Composercomposer create-project laravel/laravel folder_name
composer install
composer update
composer dump-autoload [--optimize]
composer self-update


RoutingRoute::get('foo', function(){});Route::get('foo', 'ControllerName@function');Route::controller('foo', 'FooController');

Triggering ErrorsApp::abort(404);App::missing(function($exception){});throw new NotFoundHttpException;

Route ParametersRoute::get('foo/{bar}', function($bar){});Route::get('foo/{bar?}', function($bar = 'bar'){});

HTTP VerbsRoute::any('foo', function(){});Route::post('foo', function(){});Route::put('foo', function(){});Route::patch('foo', function(){});Route::delete('foo', function(){});// RESTful actionsRoute::resource('foo', 'FooController');

Secure RoutesRoute::get('foo', array('https', function(){}));

Route ConstraintsRoute::get('foo/{bar}', function($bar){})
->
where('bar', '[0-9]+');Route::get('foo/{bar}/{baz}', function($bar, $baz){})
->
where(array('bar' => '[0-9]+', 'baz' => '[A-Za-z]'))

Filters// Declare an auth filterRoute::filter('auth', function(){});// Register a class as a filterRoute::filter('foo', 'FooFilter');// Routes in this group are guarded by the 'auth' filterRoute::get('foo', array('before' => 'auth', function(){}));Route::group(array('before' => 'auth'), function(){});// Pattern filterRoute::when('foo/*', 'foo');// HTTP verb patternRoute::when('foo/*', 'foo', array('post'));

Named RoutesRoute::currentRouteName();Route::get('foo/bar', array('as' => 'foobar', function(){}));

Route Prefixing// This route group will carry the prefix 'foo'Route::group(array('prefix' => 'foo'), function(){})

Sub-Domain Routing// {sub} will be passed to the closureRoute::group(array('domain' => '{sub}.example.com'), function(){});URLsURL::full();URL::current();URL::previous();URL::to('foo/bar', $parameters, $secure);URL::action('FooController@method', $parameters, $absolute);URL::route('foo', $parameters, $absolute);URL::secure('foo/bar', $parameters);URL::asset('css/foo.css', $secure);URL::secureAsset('css/foo.css');URL::isValidUrl('http://example.com');URL::getRequest();URL::setRequest($request);URL::getGenerator();URL::setGenerator($generator);

EventsEvent::fire('foo.bar', array($bar));Event::listen('foo.bar', function($bar){});Event::listen('foo.*', function($bar){});Event::listen('foo.bar', 'FooHandler', 10);Event::listen('foo.bar', 'BarHandler', 5);Event::listen('foor.bar', function($event){ return false; });Event::queue('foo', array($bar));Event::flusher('foo', function($bar){});Event::flush('foo');Event::subscribe(new FooEventHandler);

DB$results = DB::select('select * from users where id = ?', array('value'));DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));DB::update('update users set votes = 100 where name = ?', array('John'));DB::delete('delete from users');DB::statement('drop table users');DB::listen(function($sql, $bindings, $time){ code_here() });DB::transaction(function(){ code_here() });

EloquentModel::create(array('key' => 'value'));Model::destroy(1);Model::all();Model::find(1);// Trigger an exceptionModel::findOrFail(1);Model::where('foo', '=', 'bar')->get();Model::where('foo', '=', 'bar')->first();// ExceptionModel::where('foo', '=', 'bar')->firstOrFail();Model::where('foo', '=', 'bar')->count();Model::where('foo', '=', 'bar')->delete();Model::whereRaw('foo = bar and cars = 2', array(20))->get();Model::on('connection-name')->find(1);Model::with('relation')->get();Model::all()->take(10);Model::all()->skip(10);

Soft DeleteModel::withTrashed()->where('cars', 2)->get();Model::withTrashed()->where('cars', 2)->restore();Model::where('cars', 2)->forceDelete();Model::onlyTrashed()->where('cars', 2)->get();

EventsModel::creating(function($model){});Model::created(function($model){});Model::updating(function($model){});Model::updated(function($model){});Model::saving(function($model){});Model::saved(function($model){});Model::deleting(function($model){});Model::deleted(function($model){});Model::observe(new FooObserver);

MailMail::send('email.view', $data, function($message){});Mail::send(array('html.view', 'text.view'), $data, $callback);Mail::queue('email.view', $data, function($message){});Mail::queueOn('queue-name', 'email.view', $data, $callback);Mail::later(5, 'email.view', $data, function($message){});// Write all email to logs instead of sendingMail::pretend();

QueuesQueue::push('SendMail', array('message' => $message));Queue::push('SendEmail@send', array('message' => $message));Queue::push(function($job) use $id {});
php artisan queue:listen
php artisan queue:listen connection
php artisan queue:listen --timeout=60
php artisan queue:work


LocalizationApp::setLocale('en');Lang::get('messages.welcome');Lang::get('messages.welcome', array('foo' => 'Bar'));Lang::has('messages.welcome');Lang::choice('messages.apples', 10);

FilesFile::exists('path');File::get('path');File::getRemote('path');File::getRequire('path');File::requireOnce('path');File::put('path', 'contents');File::append('path', 'data');File::delete('path');File::move('path', 'target');File::copy('path', 'target');File::extension('path');File::type('path');File::size('path');File::lastModified('path');File::isDirectory('directory');File::isWritable('path');File::isFile('file');// Find path names matching a given pattern.File::glob($patterns, $flag);// Get an array of all files in a directory.File::files('directory');// Get all of the files from the given directory (recursive).File::allFiles('directory');// Get all of the directories within a given directory.File::directories('directory');File::makeDirectory('path', $mode = 0777, $recursive = false);File::copyDirectory('directory', 'destination', $options = null);File::deleteDirectory('directory', $preserve = false);File::cleanDirectory('directory');

InputInput::get('key');// Default if the key is missingInput::get('key', 'default');Input::has('key');Input::all();// Only retrieve 'foo' and 'bar' when getting inputInput::only('foo', 'bar');// Disregard 'foo' when getting inputInput::except('foo');

Session Input (flash)// Flash input to the sessionInput::flash();Input::flashOnly('foo', 'bar');Input::flashExcept('foo', 'baz');Input::old('key','default_value');

Files// Use a file that's been uploadedInput::file('filename');// Determine if a file was uploadedInput::hasFile('filename');// Access file propertiesInput::file('name')->getRealPath();Input::file('name')->getClientOriginalName();Input::file('name')->getSize();Input::file('name')->getMimeType();// Move an uploaded fileInput::file('name')->move($destinationPath);// Move an uploaded fileInput::file('name')->move($destinationPath, $fileName);

CacheCache::put('key', 'value', $minutes);Cache::add('key', 'value', $minutes);Cache::forever('key', 'value');Cache::remember('key', $minutes, function(){ return 'value' });Cache::rememberForever('key', function(){ return 'value' });Cache::forget('key');Cache::has('key');Cache::get('key');Cache::get('key', 'default');Cache::get('key', function(){ return 'default'; });Cache::increment('key');Cache::increment('key', $amount);Cache::decrement('key');Cache::decrement('key', $amount);Cache::section('group')->put('key', $value);Cache::section('group')->get('key');Cache::section('group')->flush();

CookiesCookie::get('key');// Create a cookie that lasts for everCookie::forever('key', 'value');// Send a cookie with a response$response = Response::make('Hello World');
$response->withCookie(Cookie::make('name', 'value', $minutes));


SessionsSession::get('key');Session::get('key', 'default');Session::get('key', function(){ return 'default'; });Session::put('key', 'value');Session::all();Session::has('key');Session::forget('key');Session::flush();Session::regenerate();Session::flash('key', 'value');Session::reflash();Session::keep(array('key1', 'key2'));

RequestsRequest::path();Request::is('foo/*');Request::url();Request::segment(1);Request::header('Content-Type');Request::server('PATH_INFO');Request::ajax();Request::secure();

Responsesreturn Response::make($contents);return Response::make($contents, 200);return Response::json(array('key' => 'value'));return Response::json(array('key' => 'value'))
->
setCallback(Input::get('callback'));return Response::download($filepath);return Response::download($filepath, $filename, $headers);// Create a response and modify a header value$response = Response::make($contents, 200);
$response->header('Content-Type', 'application/json');
return $response;// Attach a cookie to a responsereturn Response::make($content)
->withCookie(Cookie::make('key', 'value'));


Redirectsreturn Redirect::to('foo/bar');return Redirect::to('foo/bar')->with('key', 'value');return Redirect::to('foo/bar')->withInput(Input::get());return Redirect::to('foo/bar')->withInput(Input::except('password'));return Redirect::to('foo/bar')->withErrors($validator);return Redirect::back();return Redirect::route('foobar');return Redirect::route('foobar', array('value'));return Redirect::route('foobar', array('key' => 'value'));return Redirect::action('FooController@index');return Redirect::action('FooController@baz', array('value'));return Redirect::action('FooController@baz', array('key' => 'value'));// If intended redirect is not defined, defaults to foo/bar.return Redirect::intended('foo/bar');

IoCApp::bind('foo', function($app){ return new Foo; });App::make('foo');// If this class exists, it's returnedApp::make('FooBar');App::singleton('foo', function(){ return new Foo; });App::instance('foo', new Foo);App::bind('FooRepositoryInterface', 'BarRepository');App::register('FooServiceProvider');// Listen for object resolutionApp::resolving(function($object){});

SecurityPasswordsHash::make('secretpassword');Hash::check('secretpassword', $hashedPassword);Hash::needsRehash($hashedPassword);

Auth// Check if the user is logged inAuth::check();Auth::user();Auth::attempt(array('email' => $email, 'password' => $password));// Remember user loginAuth::attempt($credentials, true);// Log in for a single requestAuth::once($credentials);Auth::login(User::find(1));Auth::loginUsingId(1);Auth::logout();Auth::validate($credentials);Auth::basic('username');Auth::onceBasic();Password::remind($credentials, function($message, $user){});

EncryptionCrypt::encrypt('secretstring');Crypt::decrypt($encryptedString);Crypt::setMode('ctr');Crypt::setCipher($cipher);

ValidationValidator::make(
array('key' => 'Foo'),
array('key' => 'required|in:Foo')
);
Validator::extend('foo', function($attribute, $value, $params){});Validator::extend('foo', 'FooValidator@validate');Validator::resolver(function($translator, $data, $rules, $msgs)
{
return new FooValidator($translator, $data, $rules, $msgs);
});

Validation Rulesaccepted
active_url
after:YYYY-MM-DD
before:YYYY-MM-DD
alpha
alpha_dash
alpha_num
between:1,10
confirmed
date
date_format:YYYY-MM-DD
different:fieldname
email
exists:table,column
image
in:foo,bar,baz
not_in:foo,bar,baz
integer
numeric
ip
max:value
min:value
mimes:jpeg,png
regex:[0-9]
required
required_if:field,value
required_with:foo,bar,baz
required_without:foo,bar,baz
same:field
size:value
unique:table,column,except,idColumn
url


ViewsView::make('path/to/view');View::make('foo/bar')->with('key', 'value');View::make('foo/bar', array('key' => 'value'));View::exists('foo/bar');// Share a value across all viewsView::share('key', 'value');// Nesting viewsView::make('foo/bar')->nest('name', 'foo/baz', $data);// Register a view composerView::composer('viewname', function($view){});//Register multiple views to a composerView::composer(array('view1', 'view2'), function($view){});// Register a composer classView::composer('viewname', 'FooComposer');View::creator('viewname', function($view){});

Blade Templates@extends('layout.name')
@section('name')
// Begin a section@stop // End a section@show // End a section and then show it@yield('name') // Show a section name in a template@include('view.name')
@include('view.name', array('key' => 'value'));
@lang('messages.name')
@choice('messages.name', 1);
@if
@else
@elseif
@endif
@unless
@endunless
@for
@endfor
@foreach
@endforeach
@while
@endwhile
{{ $var }}
// Echo content{{{ $var }}} // Echo escaped content{{-- Blade Comment --}}

FormsForm::open(array('url' => 'foo/bar', 'method' => 'PUT'));Form::open(array('route' => 'foo.bar'));Form::open(array('route' => array('foo.bar', $parameter)));Form::open(array('action' => 'FooController@method'));Form::open(array('action' => array('FooController@method', $parameter)));Form::open(array('url' => 'foo/bar', 'files' => true));Form::token();Form::model($foo, array('route' => array('foo.bar', $foo->bar)));Form::close;

Form ElementsForm::label('id', 'Description');Form::label('id', 'Description', array('class' => 'foo'));Form::text('name');Form::text('name', $value);Form::textarea('name');Form::textarea('name', $value);Form::textarea('name', $value, array('class' => 'name'));Form::hidden('foo', $value);Form::password('password');Form::email('name', $value, array());Form::file('name', array());Form::checkbox('name', 'value');Form::radio('name', 'value');Form::select('name', array('key' => 'value'));Form::select('name', array('key' => 'value'), 'key');Form::submit('Submit!');


Form MacrosForm::macro('fooField', function()
{
return ''; });Form::fooField();

HTML BuilderHTML::macro('name', function(){});HTML::entities($value);HTML::decode($value);HTML::script($url, $attributes);HTML::style($url, $attributes);HTML::link($url, 'title', $attributes, $secure);HTML::secureLink($url, 'title', $attributes);HTML::linkAsset($url, 'title', $attributes, $secure);HTML::linkSecureAsset($url, 'title', $attributes);HTML::linkRoute($name, 'title', $parameters, $attributes);HTML::linkAction($action, 'title', $parameters, $attributes);HTML::mailto($email, 'title', $attributes);HTML::email($email);HTML::ol($list, $attributes);HTML::ul($list, $attributes);HTML::listing($type, $list, $attributes);HTML::listingElement($key, $type, $value);HTML::nestedListing($key, $type, $value);HTML::attributes($attributes);HTML::attributeElement($key, $value);HTML::obfuscate($value);

Strings// Transliterate a UTF-8 value to ASCIIStr::ascii($value)Str::camel($value)Str::contains($haystack, $needle)Str::endsWith($haystack, $needles)// Cap a string with a single instance of a given value.Str::finish($value, $cap)Str::is($pattern, $value)Str::length($value)Str::limit($value, $limit = 100, $end = '...')Str::lower($value)Str::words($value, $words = 100, $end = '...')Str::plural($value, $count = 2)// Generate a more truly "random" alpha-numeric string.Str::random($length = 16)// Generate a "random" alpha-numeric string.Str::quickRandom($length = 16)Str::upper($value)Str::title($value)Str::singular($value)Str::slug($title, $separator = '-')Str::snake($value, $delimiter = '_')Str::startsWith($haystack, $needles)// Convert a value to studly caps case.Str::studly($value)Str::macro($name, $macro)

HelpersArraysarray_add($array, 'key', 'value');
array_build($array,
function(){});
array_divide($array);
array_dot($array);
array_except($array, array('key'));
array_fetch($array, 'key');
array_first($array,
function($key, $value){}, $default);// Strips keys from the arrayarray_flatten($array);
array_forget($array, 'foo');
// Dot notationarray_forget($array, 'foo.bar');
array_get($array, 'foo', 'default');
array_get($array, 'foo.bar', 'default');
array_only($array, array('key'));
// Return array of key => valuesarray_pluck($array, 'key');// Return and remove 'key' from arrayarray_pull($array, 'key');
array_set($array, 'key', 'value');
// Dot notationarray_set($array, 'key.subkey', 'value');
array_sort($array,
function(){});// First element of an arrayhead($array);// Last element of an arraylast($array);

Pathsapp_path();
public_path();
// App root pathbase_path();
storage_path();


Stringscamel_case($value);
class_basename($class);
// Escape a stringe('');
starts_with('Foo bar.', 'Foo');
ends_with('Foo bar.', 'bar.');
snake_case('fooBar');
str_contains('Hello foo bar.', 'foo');
// Result: foo/bar/str_finish('foo/bar', '/');
str_is('foo*', 'foobar');
str_plural('car');
str_random(25);
str_singular('cars');
// Result: FooBarstudly_case('foo_bar');
trans('foo.bar');
trans_choice('foo.bar', $count);


URLs and Linksaction('FooController@method', $parameters);
link_to('foo/bar', $title, $attributes, $secure);
link_to_asset('img/foo.jpg', $title, $attributes, $secure);
link_to_route('route.name', $title, $parameters, $attributes);
link_to_action('FooController@method', $title, $params, $attrs);
// HTML Linkasset('img/photo.jpg', $title, $attributes);// HTTPS linksecure_asset('img/photo.jpg', $title, $attributes);
secure_url('path', $parameters);
route($route, $parameters, $absolute = true);
url('path', $parameters = array(), $secure = null);


Miscellaneouscsrf_token();
dd($value);
value(
function(){ return 'bar'; });
with(new Foo)->chainedMethod();


Google Docs Document Source :https://docs.google.com/document/d/1NeCLL4fOgAmm4pYHIcBeWgCSCem5pqnGcwD_j4sNZyc/edit?usp=sharing  
Share:

Wednesday, June 15, 2016

Learning Git the simple way

I have not use any Git since starting my journey as a software engineer. I've been using Sourcesafe, SourceTree, etc... but using Git is not one of it. However, I was required to use it now. Learning something that is not friendly to window user is damn difficult. Especially when it is an open source of which you need to do lots of things before it becomes easy. 

After looking for a while, I found a simple way to understand Git. Here it is for you to understand it too.
  1. git - the simple guide
  2. A Visual Git Reference
Share:

Sunday, June 5, 2016

Software disrupting the traditional

FUTURE PREDICTIONS:
In 1998, Kodak had 170,000 employees and sold 85% of all photo paper worldwide. Within just a few years, their business model disappeared and they went bankrupt. What happened to Kodak will happen in a lot of industries in the next 10 years - and most people don't see it coming. Did you think in 1998 that 3 years later you would never take pictures on paper film again? Yet digital cameras were invented in 1975. The first ones only had 10,000 pixels, but followed Moore's law. So as with all exponential technologies, it was a disappointment for a long time, before it became way superior and got mainstream in only a few short years. It will now happen with Artificial Intelligence, health, autonomous and electric cars, education, 3D printing, agriculture and jobs. Welcome to the 4th Industrial Revolution. Welcome to the Exponential Age.
Software will disrupt most traditional industries in the next 5-10 years.
Uber is just a software tool, they don't own any cars, and are now the biggest taxi company in the world. Airbnb is now the biggest hotel company in the world, although they don't own any properties.
Artificial Intelligence: Computers become exponentially better in understanding the world. This year, a computer beat the best Go player in the world, 10 years earlier than expected. In the US, young lawyers already don't get jobs. Because of IBM Watson, you can get legal advice (so far for more or less basic stuff) within seconds, with 90% accuracy compared with 70% accuracy when done by humans. So if you study law, stop immediately. There will be 90% fewer lawyers in the future, only specialists will remain. Watson already helps nurses diagnosing cancer, 4 time more accurate than human nurses. Facebook now has a pattern recognition software that can recognize faces better than humans. By 2030, computers will become more intelligent than humans.
Autonomous Cars: In 2018 the first self-driving cars will appear for the public. Around 2020, the complete industry will start to be disrupted. You don't want to own a car anymore. You will call a car with your phone, it will show up at your location and drive you to your destination. You will not need to park it, you only pay for the driven distance and can be productive while driving. Our kids will never get a driver's license and will never own a car. It will change the cities, because we will need 90-95% fewer cars for that. We can transform former parking space into parks. 1.2 million people die each year in car accidents worldwide. We now have one accident every 100,000 km, with autonomous driving that will drop to one accident in 10 million km. That will save a million lives each year.
Most car companies may become bankrupt. Traditional car companies try the evolutionary approach and just build a better car, while tech companies (Tesla, Apple, Google) will do the revolutionary approach and build a computer on wheels. I spoke to a lot of engineers from Volkswagen and Audi; they are completely terrified of Tesla.
Insurance Companies will have massive trouble because without accidents, the insurance will become 100x cheaper. Their car insurance business model will disappear.
Real estate will change. Because if you can work while you commute, people will move further away to live in a more beautiful neighborhood.
Electric cars won’t become mainstream until 2020. Cities will be less noisy because all cars will run on electric. Electricity will become incredibly cheap and clean: Solar production has been on an exponential curve for 30 years, but you can only now see the impact. Last year, more solar energy was installed worldwide than fossil. The price for solar will drop so much that all coal companies will be out of business by 2025.
With cheap electricity comes cheap and abundant water. Desalination now only needs 2kWh per cubic meter. We don't have scarce water in most places, we only have scarce drinking water. Imagine what will be possible if anyone can have as much clean water as he wants, for nearly no cost.
Health: There will be companies that will build a medical device (called the "Tricorder" from Star Trek) that works with your phone, which takes your retina scan, your blood sample and you breathe into it. It then analyses 54 biomarkers that will identify nearly any disease. It will be cheap, so in a few years everyone on this planet will have access to world class medicine, nearly for free.
3D printing: The price of the cheapest 3D printer came down from $18,000 to $400 within 10 years. In the same time, it became 100 times faster. All major shoe companies started 3D printing shoes. Spare airplane parts are already 3D printed in remote airports. The space station now has a printer that eliminates the need for the large number of spare parts they used to have in the past.
At the end of this year, new smart phones will have 3D scanning possibilities. You can then 3D scan your feet and print your perfect shoe at home. In China, they already 3D printed a complete 6-storey office building. By 2027, 10% of everything that's being produced will be 3D printed.
Business Opportunities: If you think of a niche you want to go in, ask yourself: "in the future, do you think we will have that?" and if the answer is yes, how can you make that happen sooner? If it doesn't work with your phone, forget the idea. And any idea designed for success in the 20th century is doomed in to failure in the 21st century.
Work: 70-80% of jobs will disappear in the next 20 years. There will be a lot of new jobs, but it is not clear if there will be enough new jobs in such a small time.
Agriculture: There will be a $100 agricultural robot in the future. Farmers in 3rd world countries can then become managers of their field instead of working all days on their fields. Agroponics will need much less water. The first Petri dish produced veal is now available and will be cheaper than cow-produced veal in 2018. Right now, 30% of all agricultural surfaces is used for cows. Imagine if we don't need that space anymore. There are several startups that will bring insect protein to the market shortly. It contains more protein than meat. It will be labeled as "alternative protein source" (because most people still reject the idea of eating insects).
There is an app called "moodies" which can already tell in which mood you are. Until 2020 there will be apps that can tell by your facial expressions if you are lying. Imagine a political debate where it's being displayed when they are telling the truth and when not.
Bitcoin will become mainstream this year and might even become the default reserve currency.
Longevity: Right now, the average life span increases by 3 months per year. Four years ago, the life span used to be 79 years, now it's 80 years. The increase itself is increasing and by 2036, there will be more than one year increase per year. So we all might live for a long long time, probably way more than 100.
Education: The cheapest smart phones are already at $10 in Africa and Asia. Until 2020, 70% of all humans will own a smart phone. That means, everyone has the same access to world class education.
Robert M. Goldman MD, PhD, DO, FAASP
www.DrBobGoldman.com
World Chairman-International Medical Commission
Co-Founder & Chairman of the Board-A4M
Founder & Chairman-International Sports Hall of Fame
Co-Founder & Chairman-World Academy of Anti-Aging Medicine
President Emeritus-National Academy of Sports Medicine (NASM)
Chairman-U.S. Sports Academy’s Board of Visitors
Share:

About Me

Somewhere, Selangor, Malaysia
An IT by profession, a beginner in photography

Blog Archive

Blogger templates