10 important commonly used online tools that might come in handy to run your startup

I personally feel that, being a startup founder is the best job in the world. But it’s one of the toughest jobs too. In your initial days, it is really important that you take every step carefully and precisely. You have to take care of your finances, multiple projects, marketing activities, product launches and market surveys etc. So, here’s a list of free online tools, that you can use to reduce or nullify your day to day administrative expenses and increase the productivity of work at your firm.

1. SCORE – Online Mentor for Your Business

As a start-up founder, one must always have a mentor, a veteran, to help you do the right thing. It is the suggested best practice for a startup founder. SCORE provides you this, wherein a mentor is assigned who helps you to create your business model, decide the marketing strategy, test the product idea etc. And all of this is just for free. Nothing can beat the advice of a real mentor but this is a good reference. 

2. Fiddle – Create free business models online

Once you have validated your idea through customer meetings, you have to create a business model for your idea. A business model, as you know, captures various aspects of your startup viz. customer segments, value propositions, delivery channels, key resources, cost and revenue streams etc. Fiddle is an online tool which allows you to create and share your business model easily. It allows you to add attachments and notes, which makes it easier for your peers to understand and contribute to your business model. 

3. PowToons – Best Way to Create Product Videos

It’s always a tough task to create product launch videos or company overview videos for free. Many times a start-up founder uses simple presentations to demonstrate the product. And it’s really unimpressive and dim. PowToons solves this problem by providing a very simple way to create promotional or introductory videos online. It provides you with templates which are easy to edit without a need to learn even a single bit about it.  And the video gets ready within few minutes.

4. SurveyMonkey – Best Way to Conduct Online Surveys

Many times you will need to conduct online surveys, just to test or improve your new product idea or to get feedback about your products and services. SurveyMonkey is an online tool which is perfectly made for it. It allows you to create your questionnaire with single selection and multi-selection answer choices. It also allows you to select the design for the survey. This tool provides various statistics about the survey. Its free up to first 100 responses, after that you can continue using the service by opting a suitable pricing plan.

5. Wave Apps – Online Accounting and Invoicing Solution

As a founder, you will have to manage different company accounts eg. sales, marketing etc. Moreover, you will be required to send invoices and bills to your customers. Wave apps provide an online accounting and invoicing solution. It provides features like invoice creation, bills creation, accounting etc. 

6. MailChimp – Boost your customer base by free email marketing

As a startup, it is good to have a mailing platform to maintain your customer mailing list and conduct email marketing campaigns. email marketing is one of the most prevalent marketing technique, it helps you to spread the word about the startup and latest developments. It has an ‘Entrepreneur’ package which allows you to send 12 000 mails to 2000 subscribers for free.

7. Basecamp – Manage Your Projects More Efficiently

If your startup is operating in a service business, then you might have to manage multiple client projects with multiple teams working on them. In such case, Basecamp is a very useful web based tool which can be used to help you operate different project simultaneously. 

8. Trello – Organize your day to day work

As a startup founder, you will always have to manage many things and projects simultaneously. You have to handle multiple teams throughout the day. Trello is an online tool that can help you to manage your work, synchronize team work, organize your day to day tasks etc.

9. Prezi – Create Impressive Company Presentations

Though Microsoft PowerPoint is a very nice tool for making company presentations, the world of presentations is undergoing a huge change. Do you want to take the first step? Want to improve? Prezi is a free online tool that allows you to create really nice presentations with zooming effects and a lot of other 3D designs and templates.

10. Dropbox – Free Cloud Storage

When working with different teams simultaneously, team members need to manage many documents, codes, databases simultaneously. Often you will be required to access one of the shared files. To avoid future confusions about the latest version of such artifacts, it is better to store them on cloud. This enables everyone to make changes to the correct file and update the file centrally. One of the best free solution to achieve this is Dropbox. It’s an online cloud storage tool that allows you to manage your data on cloud. Dropbox is available for mobiles too so that makes it more usable.

As always, you can never have a fixed numbered list of tools to solve your all pains. Here are few more, hope you will find them useful.

Zoho CRM -Online CRM software for managing your sales, marketing, customer support, and inventory in a single system.

GoToMeeting – Conduct meetings online

Docracy – An open collection of legal contracts and documents for your reference.

Feel free to make your additions to this list…

5 Common Server Setups For Your Web Application

Introduction

When deciding which server architecture to use for your environment, there are many factors to consider, such as performance, scalability, availability, reliability, cost, and ease of management.

Here is a list of commonly used server setups, with a short description of each, including pros and cons. Keep in mind that all of the concepts covered here can be used in various combinations with one another, and that every environment has different requirements, so there is no single, correct configuration.

 Google larry page sergey brin first server

1. Everything On One Server

The entire environment resides on a single server. For a typical web application, that would include the web server, application server, and database server. A common variation of this setup is a LAMP stack, which stands for Linux, Apache, MySQL, and PHP, on a single server.

Use Case: Good for setting up an application quickly, as it is the simplest setup possible, but it offers little in the way of scalability and component isolation.

Everything On a Single Server

Pros:

  • Simple

Cons:

  • Application and database contend for the same server resources (CPU, Memory, I/O, etc.) which, aside from possible poor performance, can make it difficult to determine the source (application or database) of poor performance
  • Not readily horizontally scalable

2. Separate Database Server

The database management system (DBMS) can be separated from the rest of the environment to eliminate the resource contention between the application and the database, and to increase security by removing the database from the DMZ, or public internet.

Use Case: Good for setting up an application quickly, but keeps application and database from fighting over the same system resources.

Separate Database Server

Pros:

  • Application and database tiers do not contend for the same server resources (CPU, Memory, I/O, etc.)
  • You may vertically scale each tier separately, by adding more resources to whichever server needs increased capacity
  • Depending on your setup, it may increase security by removing your database from the DMZ

Cons:

  • Slightly more complex setup than single server
  • Performance issues can arise if the network connection between the two servers is high-latency (i.e. the servers are geographically distant from each other), or the bandwidth is too low for the amount of data being transferred

 

3. Load Balancer (Reverse Proxy)

Load balancers can be added to a server environment to improve performance and reliability by distributing the workload across multiple servers. If one of the servers that is load balanced fails, the other servers will handle the incoming traffic until the failed server becomes healthy again. It can also be used to serve multiple applications through the same domain and port, by using a layer 7 (application layer) reverse proxy.

Examples of software capable of reverse proxy load balancing: HAProxy, Nginx, and Varnish.

Use Case: Useful in an environment that requires scaling by adding more servers, also known as horizontal scaling.

Load Balancer

Pros:

  • Enables horizontal scaling, i.e. environment capacity can be scaled by adding more servers to it
  • Can protect against DDOS attacks by limiting client connections to a sensible amount and frequency

Cons:

  • The load balancer can become a performance bottleneck if it does not have enough resources, or if it is configured poorly
  • Can introduce complexities that require additional consideration, such as where to perform SSL termination and how to handle applications that require sticky sessions

 

4. HTTP Accelerator (Caching Reverse Proxy)

An HTTP accelerator, or caching HTTP reverse proxy, can be used to reduce the time it takes to serve content to a user through a variety of techniques. The main technique employed with an HTTP accelerator is caching responses from a web or application server in memory, so future requests for the same content can be served quickly, with less unnecessary interaction with the web or application servers.

Examples of software capable of HTTP acceleration: Varnish, Squid, Nginx.

Use Case: Useful in an environment with content-heavy dynamic web applications, or with many commonly accessed files.

HTTP Accelerator

Pros:

  • Increase site performance by reducing CPU load on web server, through caching and compression, thereby increasing user capacity
  • Can be used as a reverse proxy load balancer
  • Some caching software can protect against DDOS attacks

Cons:

  • Requires tuning to get best performance out of it
  • If the cache-hit rate is low, it could reduce performance

 

5. Master-Slave Database Replication

One way to improve performance of a database system that performs many reads compared to writes, such as a CMS, is to use master-slave database replication. Master-slave replication requires a master and one or more slave nodes. In this setup, all updates are sent to the master node and reads can be distributed across all nodes.

Use Case: Good for increasing the read performance for the database tier of an application.

Here is an example of a master-slave replication setup, with a single slave node:

Master-Slave Database Replication

Pros:

  • Improves database read performance by spreading reads across slaves
  • Can improve write performance by using master exclusively for updates (it spends no time serving read requests)

Cons:

  • The application accessing the database must have a mechanism to determine which database nodes it should send update and read requests to
  • Updates to slaves are asynchronous, so there is a chance that their contents could be out of date
  • If the master fails, no updates can be performed on the database until the issue is corrected
  • Does not have built-in failover in case of failure of master node

 

Example: Combining the Concepts

It is possible to load balance the caching servers, in addition to the application servers, and use database replication in a single environment. The purpose of combining these techniques is to reap the benefits of each without introducing too many issues or complexity. Here is an example diagram of what a server environment could look like:

Load Balancer, HTTP Accelerator, and Database Replication Combined

Let’s assume that the load balancer is configured to recognize static requests (like images, css, javascript, etc.) and send those requests directly to the caching servers, and send other requests to the application servers.

Here is a description of what would happen when a user sends a requests dynamic content:

  1. The user requests dynamic content from http://example.com/ (load balancer)
  2. The load balancer sends request to app-backend
  3. app-backend reads from the database and returns requested content to load balancer
  4. The load balancer returns requested data to the user

If the user requests static content:

  1. The load balancer checks cache-backend to see if the requested content is cached (cache-hit) or not (cache-miss)
  2. If cache-hit: return the requested content to the load balancer and jump to Step 7. If cache-miss: the cache server forwards the request to app-backend, through the load balancer
  3. The load balancer forwards the request through to app-backend
  4. app-backend reads from the database then returns requested content to the load balancer
  5. The load balancer forwards the response to cache-backend
  6. cache-backend caches the content then returns it to the load balancer
  7. The load balancer returns requested data to the user

This environment still has two single points of failure (load balancer and master database server), but it provides the all of the other reliability and performance benefits that were described in each section above.

Conclusion

Now that you are familiar with some basic server setups, you should have a good idea of what kind of setup you would use for your own application(s). If you are working on improving your own environment, remember that an iterative process is best to avoid introducing too many complexities too quickly.

Let us know of any setups you recommend or would like to learn more about in the comments below!

Tutorial courtesy: Digital Ocean

How to setup SSH on web server

How To Set Up SSH Keys

About SSH Keys

SSH keys provide a more secure way of logging into a virtual private server with SSH than using a password alone. While a password can eventually be cracked with a brute force attack, SSH keys are nearly impossible to decipher by brute force alone. Generating a key pair provides you with two long string of characters: a public and a private key. You can place the public key on any server, and then unlock it by connecting to it with a client that already has the private key. When the two match up, the system unlocks without the need for a password. You can increase security even more by protecting the private key with a passphrase.

Step One—Create the RSA Key Pair

The first step is to create the key pair on the client machine (there is a good chance that this will just be your computer):

ssh-keygen -t rsa

Step Two—Store the Keys and Passphrase

Once you have entered the Gen Key command, you will get a few more questions:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

You can press enter here, saving the file to the user home (in this case, my example user is called demo).

Enter passphrase (empty for no passphrase):

It’s up to you whether you want to use a passphrase. Entering a passphrase does have its benefits: the security of a key, no matter how encrypted, still depends on the fact that it is not visible to anyone else. Should a passphrase-protected private key fall into an unauthorized users possession, they will be unable to log in to its associated accounts until they figure out the passphrase, buying the hacked user some extra time. The only downside, of course, to having a passphrase, is then having to type it in each time you use the Key Pair.

The entire key generation process looks like this:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

The public key is now located in /home/demo/.ssh/id_rsa.pub The private key (identification) is now located in /home/demo/.ssh/id_rsa

Step Three—Copy the Public Key

Once the key pair is generated, it’s time to place the public key on the virtual server that we want to use.

You can copy the public key into the new machine’s authorized_keys file with the ssh-copy-id command. Make sure to replace the example username and IP address below.

ssh-copy-id user@123.45.56.78

Alternatively, you can paste in the keys using SSH:

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

No matter which command you chose, you should see something like:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password: 
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Now you can go ahead and log into user@12.34.56.78 and you will not be prompted for a password. However, if you set a passphrase, you will be asked to enter the passphrase at that time (and whenever else you log in in the future).

Optional Step Four—Disable the Password for Root Login

Once you have copied your SSH keys unto your server and ensured that you can log in with the SSH keys alone, you can go ahead and restrict the root login to only be permitted via SSH keys.

In order to do this, open up the SSH config file:

sudo nano /etc/ssh/sshd_config

Within that file, find the line that includes PermitRootLogin and modify it to ensure that users can only connect with their SSH key:

PermitRootLogin without-password

Put the changes into effect:

reload ssh

Tutorial courtesy: Digital Ocean

Canvas animation timeframe keyframe

9 Mind-Blowing Canvas Demos

The <canvas> element has been a revelation for the visual experts among our ranks.  Canvas provides the means for incredible and efficient animations with the added bonus of no Flash; these developers can flash their awesome JavaScript skills instead.  Here are nine unbelievable canvas demos that will make your jaw drop!

Hospy.co

1.  Zen Photon Garden

The Zen Photon Garden demo is the epitome of mind-blowing.  This epic canvas demo allows for drawing on the canvas with reactive light streams, allowing the user to see the end product of their new line will be.  Even better, this demo allows you to save and load output.

Canvas Demo

2.  Tear-able Cloth

The Tear-able Cloth demo has set the web alight over the past few months and for good reason.  This demo is the smoothest you’ll see and considering the task it accomplishes and the how little code is involved, it will take your breath away.  There’s more to it than simple pulling and physics — the animation and needing to account for pulling hard enough to elegantly animate a tear makes this demo even more amazing.  A perfect illustration of canvas’ capabilities.

2014-10-10 12_54_43-9 Mind-Blowing Canvas Demos

3.  Particles

It’s hard describe this demo outside of “ftw”.  This demo animates color, position, connection lines, and opacity, all the while animating smooth as a baby’s….it’s really smooth.  Marvel at this beast.

2014-10-10 12_55_45-9 Mind-Blowing Canvas Demos

4.  Motion Graphic Typeface

I wish I could describe how this effect is done but I can’t.  I see that each letter is comprised of different image data, but that’s about it.  What I can say is this animation is absolutely mind-blowing, as letters animate into place and the aspect at which you see the text depends on your mouse position.  Shocking.

2014-10-10 12_56_37-9 Mind-Blowing Canvas Demosasd

5.  Motion Graphic Typeface II

As if the first wasn’t impressive enough, the second MGT demo is one worthy of a Pulitzer Prize. I’d give up my second, third, and eighth-born to be this clever.  Not only does the text animate but there’s an incredible colored blur that’s part of the animation.  This demo is truly a sight to behold.

2014-10-10 12_54_43-9 Mind-Blowing Canvas Demos

6.  Gestures + Reveal.JS

Now only did this demo blow my mind, but it also blew my CPU.  This exercise uses your device’s camera and microphone to move a cube of data based on gestures.  If you have a MacBook Pro, you shouldn’t die before trying this out.  Start the demo and flail your arms about — you’ll se the demo content move about and then start believing in spirits.

7.  Free Rider 2

You can’t cover the awesomeness of canvas without including at least one game.  Canvas is arguably the future of HTML5 gaming, as Firefox OS will soon demonstrate.  This brilliant but simple bike game shows that canvas is ready for prime time!

Canvas Demo

8.  30,000 Particles

The 30k Particles demo incorporates some really awesome stuff:  circular shapes (radius), animated exploding and returning particles, and mouse listeners to allow the user to control the explosions.  An excellent example of interactivity and logic.

9.  HTML5 Video Destruction

I must pay homage to one of the first truly eye-catching canvas demos I saw — an explodable canvas video.  You click the video and pieces explode, yet the video keeps playing its segment/position during the explosion while it returns to its original position.  An inspiring demo to to all of us.

Canvas Demo

PHP Twitter Application tutorial

Creating Twitter Apps in PHP

In this post we will look into accessing Twitter REST API in PHP. This can be useful if you need to post Tweets from your PHP application or anaylze, search Tweets. In the following examples we will use the twitter-api-php PHP wrapper for Twitter v1.1 API. Although there are a few wrappers around, this one I like for its simplicity.

Installation

If you use composer, here’s what you need to add to your composer.json file to have TwitterAPIExchange.php (Twitter PHP wrapper) automatically imported into your vendor’s folder:

{
    "require": {
        "j7mbo/twitter-api-php": "dev-master"
    }
}

You’ll then need to run ‘composer install’.

If you don’t use composer, just download the zip from git and include TwitterAPIExchange.php in your application path.

Registering your Twitter app

Before writing any code, you will first need to create a Twitter app and register it onhttps://apps.twitter.com/. You will be greeted with the following screen. (The following screenshot shows you an existing app. If this is your first app than the page will be blank).

twitter-app-1

Click on the ‘Create New App’ button and enter the required details in the fields provided. Leave the ‘Callback URL’ field blank for now. Once the app is created, click on the app name and note down the various access and security tokens, we will be needing these later. Change your Access Level to ‘Read and Write’. ‘Read Only’ access does not allow you to update, add or delete Tweets. If your purpose is to only read tweet data, it is safer to set the Access Level to ‘Read Only’.

Note that you will need to regenerate the access tokens if you change the Access Levels anytime and modify the same in your PHP code.

twitter-app-2

Accessing the Twitter API from PHP

Now that you have created and registered a Twitter app, we can now use PHP to acccess the API. First include the ‘TwitterAPIExchange.php’ class and set various security tokens collected earlier.

require_once('TwitterAPIExchange.php');
 
$settings = array(
    'oauth_access_token' => "YOUR_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

For this example we will be using the ‘https://api.twitter.com/1.1/statuses/user_timeline.json‘ resource url. This returns a collection of the most recent Tweets posted by the user indicated by the screen_name or user_id parameters. This particular method is one of the dozens of various methods available to access and modify Twitter data; others can be found here.

A complete GET request method is shown below. Here we are requesting the recent 3 tweets for the user ‘johndoe123’.

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name=johndoe123&count=3';

Once we specify the request methods and fields, we can call Twitter.

$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();

The complete code is shown below.

<?php
 
require_once('TwitterAPIExchange.php');
 
$settings = array(
    'oauth_access_token' => "YOUR_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
 
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name=johndoe123&count=3';
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();
 
print_r($response);

Executing the above code will return the recent 3 tweets for the given user in JSON format. You can specify the number of tweets to return using the ‘count parameter. The maximum that can be returned is 200.

$getfield = '?screen_name=johndoe123&count=3';

Note that all GET fields for this method are optional. Not specifying any GET parameters will return 20 recent tweets for the current user, i.e the user with the given access tokens. You can query without the GET parameters as shown below.

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->buildOauth($url, $requestMethod)
                    ->performRequest();
 
print_r($response);

Also, the response is returned in JSON, so will need to decode the JSON first before working further.

$tweets = json_decode($response);
print_r($tweets);

The tweet is stored in the ‘text’ field of the response, so we can enumerate all returned tweets with the following. Various other fields can be accessed in similiar manner.

$tweets = json_decode($response);
 
foreach($tweets as $tweet)
{
    echo $tweet->text . PHP_EOL;
}

Posting a new Tweet

Posting a new Tweet can be done with the following code, which uses a POST method instead of a GET. The initial code remains the same.

<?php
 
$url = "https://api.twitter.com/1.1/statuses/update.json";
 
$requestMethod = 'POST'; 
 
$postfields = array(
    'status' => 'Testing Twitter app'
);
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->buildOauth($url, $requestMethod)
                   ->setPostfields($postfields)
                   ->performRequest();
 
print_r($response);

There are additoinal parameter you can use, the details for which are given here.

Searching for Tweets

Searching for Tweets based on a query is as easy as the above examples. Here in the following example we query for the ‘laravel’ keyword and ask o return 10 statuses.

$url = "https://api.twitter.com/1.1/search/tweets.json";
 
$requestMethod = "GET";
 
$getfield = '?q=laravel&count=10';
 
$twitter = new TwitterAPIExchange($settings);
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();
 
$tweets = json_decode($response);
 
foreach($tweets->statuses as $tweet)
{
    echo $tweet->text . PHP_EOL;
}

API rate limits

One important point to consider when creating your app is of rate limiting. Twitter limits the rate at which you query using their API. For example search will be rate limited at 180 queries per 15 minute window. More information can be found here.

Important Note

If the above examples do not work you will have to make a small change in ‘TwitterAPIExchange.php’. The curl processing part (around line 192) requires the line ‘CURLOPT_SSL_VERIFYPEER => false,’ to be added. So the curl part in the file should read the following.

        $options = array( 
            CURLOPT_HTTPHEADER => $header,
            CURLOPT_HEADER => false,
            CURLOPT_URL => $this->url,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT => 10,
        );

 

Windows 10, #Windows10 conference

Everything You Need To Know About The New Windows 10 from Microsoft

As expected Microsoft MSFT -0.17% has formally announced the new version of Windows. As no-one expected it will be called ‘Windows 10’ not Windows 9. Why? Because Microsoft claims it represents such a significant leap over Windows 8 that calling it Windows 9 would not do it justice.

I can hear your groans now, but in Microsoft’s defence Windows 10 has some major (and long awaited) improvements. Here are the highlights:

One OS To Rule Them All

Architecturally the biggest news is that Windows 10 is being designed to run across all device form factors. That means desktops, laptops, tablets, phablets and smartphones.

“Windows 10 will run on the broadest amount of devices. A tailored experience for each device,” said Terry Myerson, Microsoft Executive VP of Operating Systems. “There will be one way to write a universal application, one store, one way for apps to be discovered purchased and updated across all of these devices.”

Microsoft didn’t break down when we might see a Windows 10 smartphone and how that would impact/absorb Windows Phone (or even elaborate on the future for Windows Phone) but it does offer to clear insight into Microsoft’s long term road map.

Update: Microsoft has now confirmed ‘Windows 10′ will also be the next major version of Windows Phone. What devices get the upgrade and how Microsoft will handle it remains to be seen. 

Windows 10 Start Menu

The Start Menu Is Back

The cat has been out the bag for some time, but Microsoft has finally confirmed the Start Menu will return. The leaks were spot on and it will combine both aspects of the classic Windows 7 start menu with apps from the Metro/Modern UI. Searching within the Start Menu will now perform a web search as well.

Crucially its layout can be customised so apps can be removed or resized and the flexibility and personalisation potential of the Start Menu should win back fans disillusioned about its removal in Windows 8.

Windows 10 use on a tablet

Better Touch/Keyboard And Mouse Integration

Microsoft has taken criticism seriously about the jarring nature of moving between touch and the keyboard and mouse elements of Windows 8.

Microsoft is calling the new approach ‘Continuum’ and it is an umbrella term for a better merger between to different input methods. Continuum will be able to automatically switch between modes by detecting on how users interact with their device. It also carries over to design aspects like the new Start Menu, windowed apps within the desktop and so forth.

“We’re trying to be thoughtful about a UI that goes across all devices,” explained Joe Belfiore, Corporate Vice President of the Operating Systems Group at Microsoft.

He admits Continuum remains a work in progress with refinements to things like the Charms Bar (yes it is still there) set to be an ongoing process through the life of the public beta and right up to release (more on that later).

Windows 10 Virtual Desktops

Virtual Desktops

Another leaked feature Microsoft confirmed today was virtual desktops. Microsoft didn’t give the feature an official name at this stage, but it works much like the long used multiple desktops on Linux and Exposé on Mac OS X.

The view can be triggered with a new ‘task view’ button which both allows users to launch a new virtual desktop and jump between them. Interestingly the taskbar can be customised to look different/relevant to each desktop allowing a simple leap from work to home modes, for example.

Microsoft said all open programs in the virtual desktops will continue to run in the background, which makes for some interesting memory management challenges but also greatly increases the potential productivity of Windows as well as de-cluttering the desktop space.

Pricing / Availability

It has been much speculated that Windows 10 may be given away free to upgraders or involve a nominal fee, but Microsoft revealed no information about this in either the presentation or Q&A afterwards.

What we did learn is a technical preview of Windows 10 will be made available to users later this week (Microsoft is stressing it is only for advanced users and developers at this stage) and that an official release would not follow until ‘later in 2015’. This suggests the OS is not as far along as many expected and Microsoft is keen to develop it in conjunction with user feedback.

Windows 10 Start Menu search

What Will Still Don’t Know: A Lot

Perhaps what is almost as interesting as what was revealed about Windows 10 is what Microsoft kept to itself.

In addition to no news on pricing, Microsoft also didn’t touch on performance (install size and minimum hardware requirements), Cortana integration (the voice assistant in Windows Phone 8.1), give a solid release time frame or go into any detail on how Windows 10 will handle scaling on high resolution screens – crucial given 4k monitors and super high resolution laptops are quickly gaining momentum.

On the flip side what we did see is a more open Microsoft. A company, perhaps shaken by the decidedly mixed reaction to Windows 8 (however fair or unfair), that is now keen to try and mix the best aspects of Windows 7 and Windows 8 into a more user friendly experience. This means releasing early builds, issuing rapid fire updates and developing in conjunction with ongoing user feedback.

Windows 10 Product Family (image credit: Microsoft)

Is choosing the ‘Windows 10’ moniker a step too far though? “It’s a name that resonated best with what we’ll deliver,” explained Myerson.

Many would argue the struggles of Windows Phone and Windows 8 have put Microsoft into a terminal decline, but tonight’s announcement – while thin on details – suggests there is still life in the old dog yet.

Windows product family, windows 10 launch

Microsoft’s next OS is Windows 10, will ship later in 2015

Instead of announcing the next version of its iconic operating system in front of a massive crowd of thousands, Microsoft chose an intimate venue with 50 or so reporters to launch the new Windows, which it’s calling Windows 10. The company looks at the new number (yes, it skipped a number) as an indication of the direction it’s taking with the OS; Microsoft says it’ll be “the most comprehensive platform ever,” featuring a full range of products that’ll be placed under the Windows 10 umbrella as part of “one tailored experience.” That means it will support everything from the “Internet of Things” to enterprise servers. Microsoft’s Joe Belfiore showed off an early beta version of the new Windows on stage, which looks very much like the leaked screenshots we saw not too long ago; Belfiore says that they wanted to bring the familiarity of Windows 7 and combine it with the functionality of Windows 8.

Windows 10 new Start screen

Windows 10 will run across an incredibly broad set of devices – from the Internet of Things, to servers in enterprise datacenters worldwide. Some of these devices have 4 inch screens – some have 80 inch screens – and some don’t have screens at all. Some of these devices you hold in your hand, others are ten feet away. Some of these devices you primarily use touch/pen, others mouse/keyboard, others controller/gesture – and some devices can switch between input types.

When you put all that together, the end result looks a lot like Windows 7. That’s intentional. Microsoft’s Joe Belfiore pointed to the millions of customers still using Windows 7, and said the company wants to make their transition to Windows 10 much more comfortable than the unfamiliar leap to Windows 8 two years ago. “We want all these Windows 7 users to have the sentiment that yesterday they were driving a first-generation Prius, and now with Windows 10 it’s like a Tesla.”

“Windows 10 will deliver the right experience on the right device at the right time,” said Microsoft’s Terry Myerson. “Windows 10 will run on the broadest types of devices ever.” You can expect a unique user interface depending on what you’re running Windows on; images shown at the event line up with leaks that have surfaced in recent weeks. It’s basically a combination of Windows 7 and 8 that borrows design elements from each of Microsoft’s two most recent operating systems.


The new Windows 10 start menu.

The “Metro” start screen and Microsoft’s traditional Start Menu have been combined; no longer is the screen one huge grid of tiles for desktop users. “The tiles and icons that are shown are a blend of classic apps and new universal apps,” Belfiore said. But Live Tiles are still here and can be resized to a user’s preference. More than anything else, Microsoft is working to make everything feel way more cohesive. “In Windows 8 when users launched a modern app, it sort of had a different environment,” Belfiore said. “We don’t want that duality. We want users on PCs with mice and keyboards to have their familiar UI.”

There’s a new universal search in the start menu that pulls in results from the web, and Microsoft is also talking up its “task view,” which helps users master Windows’ multitasking features. It looks fairly similar to Expose in OS X and allows users to set up different desktops for work, home, and other usage scenarios, switching apps between them at will. Up to four apps can now be snapped on screen, which also should ramp up Windows 10’s multitasking power. Microsoft outright admitted this isn’t entirely an earth-shattering addition. But it is intended to speed up your productivity across the entire operating system. “It illustrates for Windows we have to address a breadth of users,” Belfiore said, moving on to show a big improvement to the command prompt: it now supports paste.


Windows 10’s Task View.

But Microsoft isn’t abandoning touch input. Belfiore said the Charms bar from Windows 8 has been carried over to Windows 10 with improvements of its own. “We want to support those Windows 8 users who have touch machines and getting a lot of benefit out of them.” For convertible devices like the Lenovo Yoga 2 Pro, Microsoft is adding a new Continuum mode that aims to make the frequent switch between tablet mode and laptop mode more seamless. “What you get is a device that operates with the simplicity of a tablet, but morphs itself back to the familiar PC experience,” said Belfiore.

Microsoft will launch a Windows 10 “Insider Program” beginning tomorrow, which will give its most enthusiastic and vocal users a chance to try out and help shape the new OS before the general public gets it. Windows 10 will launch to consumers everywhere in late 2015. And today was only the beginning; Microsoft says it will unveil much more about the new consumer features of Windows 10 early next year.

Youtube Vimeo on click play pause api javascript

Play and Pause Buttons for YouTube and Vimeo Videos (via Their APIs)

Sometimes you just need to start a video playing by some user interaction on the page other than clicking right on that video itself. Perhaps a “Play Video” button of your own creation lives on your page and you want to start that video when that button is clicked. That’s JavaScript territory. And if that video is a YouTube or Vimeo video, we’ll need to make use of the APIs they provide. No problem.

For these examples, we’ll assume you’ve already picked out a video and you’re going to put it on the page in an

Tutorial source: CSS-Tricks

For YouTube

1. Make sure the iframe src URL has ?enablejsapi=1 at the end

Like this:

<iframe src="//www.youtube.com/embed/FKWwdQu6_ok?enablejsapi=1" frameborder="0" allowfullscreen id="video"></iframe>

I also put an id attribute on the iframe so it will be easy and fast to target with JavaScript.

2. Load the YouTube Player API

You could just link to it in a <script>, but all their documentation shows loading it async style, which is always good for third-party scripts, so let’s do that:

// Inject YouTube API script
var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

3. Create a global function called onYouTubePlayerAPIReady

This is the callback function that the YouTube API will call when it’s ready. It needs to be named this.

function onYouTubePlayerAPIReady() {

}

It’s likely you have some structure to your JavaScript on your page, so generally I’d recommend just having this function call another function that is inside your organizational system and get going on the right track right away. But for this tutorial, let’s just keep it soup-y.

4. Create the Player object

This is the object that has the ability to control that video. We’ll create it using the id attribute on that iframe in our HTML.

var player;

function onYouTubePlayerAPIReady() {
  // create the global player from the specific iframe (#video)
  player = new YT.Player('video', {
    events: {
      // call this function when player is ready to use
      'onReady': onPlayerReady
    }
  });
}

Another callback!

5. Create the “player ready” callback and bind events

We named this function when we created the player object. It will automatically be passed the event object, in which event.target is the player, but since we already have a global for it let’s just use that.

Here we bind a simple click event to an element on the page with the id #play-button (whatever custom button you want) and call the player object’s playVideo method.

function onPlayerReady(event) {
  
  // bind events
  var playButton = document.getElementById("play-button");
  playButton.addEventListener("click", function() {
    player.playVideo();
  });
  
  var pauseButton = document.getElementById("pause-button");
  pauseButton.addEventListener("click", function() {
    player.pauseVideo();
  });
  
}

All Together Now

And that’ll do it! Here’s a demo:

I used a little SVG templating in there for the buttons just for fun.

For Vimeo

1. Make sure the iframe src URL has ?api=1 at the end

<iframe src="//player.vimeo.com/video/80312270?api=1" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen id="video"></iframe>

I also put an id attribute on the iframe so it will be easy and fast to target with JavaScript.

2. Load the “froogaloop” JS library

The Vimeo player API actually works by sending commands through postMessage right to the iframe. You don’t need the froogaloop library to do that, but postMessage has some inherent complexities that this library (by Vimeo themselves) makes way easier. Plus it’s only 1.8kb so I’d recommend it.

<script src="froogaloop.min.js"></script>

3. Create the player object

var iframe = document.getElementById('video');

// $f == Froogaloop
var player = $f(iframe);

We target the iframe by the id attribute we added. Then we create the player using the special froogaloop $f.

4. Bind events

All we have to do now is call methods on that player object to play and pause the video, so let’s call them when our play and pause buttons are clicked.

var playButton = document.getElementById("play-button");
playButton.addEventListener("click", function() {
  player.api("play");
});

var pauseButton = document.getElementById("pause-button");
pauseButton.addEventListener("click", function() {
  player.api("pause");
});

All Together Now

That’ll do it for Vimeo. Here’s a demo:


You can do much more with the APIs for both of these services. It can be pretty fun, just dive in!

Nginx, ubuntu, linux, apache, php, mysql

How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 12.04

About Lemp

LEMP stack is a group of open source software to get web servers up and running. The acronym stands for Linux, nginx (pronounced Engine x), MySQL, and PHP. Since the server is already running Ubuntu, the linux part is taken care of. Here is how to install the rest.

Tutorial source – Digital Ocean

Setup

The steps in this tutorial require the user to have root privileges. You can see how to set that up in the Initial Server Setup Tutorial in steps 3 and 4.

Step One—Update Apt-Get

Throughout this tutorial we will be using apt-get as an installer for all the server programs. On May 8th, 2012, a serious php vulnerability was discovered, and it is important that we download all of the latest patched software to protect the virtual private server.

Let’s do a thorough update.

sudo apt-get update

Step Two—Install MySQL

MySQL is a powerful database management system used for organizing and retrieving data

To install MySQL, open terminal and type in these commands:

sudo apt-get install mysql-server php5-mysql

During the installation, MySQL will ask you to set a root password. If you miss the chance to set the password while the program is installing, it is very easy to set the password later from within the MySQL shell.

Once you have installed MySQL, we should activate it with this command:

sudo mysql_install_db

Finish up by running the MySQL set up script:

sudo /usr/bin/mysql_secure_installation

The prompt will ask you for your current root password.

Type it in.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Then the prompt will ask you if you want to change the root password. Go ahead and choose N and move on to the next steps.

It’s easiest just to say Yes to all the options. At the end, MySQL will reload and implement the new changes.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y                                            
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

Once you’re done with that you can finish up by installing PHP.

Step Three—Install nginx

Once MySQL is all set up, we can move on to installing nginx on the VPS.

echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nginx-stable.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
sudo apt-get update
sudo apt-get install nginx

nginx does not start on its own. To get nginx running, type:

sudo service nginx start

You can confirm that nginx has installed an your web server by directing your browser to your IP address.

You can run the following command to reveal your VPS’s IP address.

ifconfig eth0 | grep inet | awk '{ print $2 }'

Step Four—Install PHP

To install PHP-FPM, open terminal and type in these commands. We will configure the details of nginx and php details in the next step:

sudo apt-get install php5-fpm

Step Five—Configure php

We need to make one small change in the php configuration.Open up php.ini:

 sudo nano /etc/php5/fpm/php.ini

Find the line, cgi.fix_pathinfo=1, and change the 1 to 0.

cgi.fix_pathinfo=0

If this number is kept as 1, the php interpreter will do its best to process the file that is as near to the requested file as possible. This is a possible security risk. If this number is set to 0, conversely, the interpreter will only process the exact file path—a much safer alternative. Save and Exit. We need to make another small change in the php5-fpm configuration.Open up http://www.conf:

 sudo nano /etc/php5/fpm/pool.d/www.conf

Find the line, listen = 127.0.0.1:9000, and change the 127.0.0.1:9000 to /var/run/php5-fpm.sock.

listen = /var/run/php5-fpm.sock

Save and Exit.

Restart php-fpm:

sudo service php5-fpm restart

Step Six—Configure nginx

Open up the default virtual host file.

sudo nano /etc/nginx/sites-available/default

The configuration should include the changes below (the details of the changes are under the config information):

UPDATE: Newer Ubuntu versions create a directory called ‘html’ instead of ‘www’ by default. If /usr/share/nginx/www does not exist, it’s probably called html. Make sure you update your configuration appropriately.

 [...]
server {
        listen   80;
     

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        server_name example.com;

        location / {
                try_files $uri $uri/ /index.html;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }

        # pass the PHP scripts to FastCGI server listening on the php-fpm socket
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                
        }

}
[...]

Here are the details of the changes:

  • Add index.php to the index line.
  • Change the server_name from local host to your domain name or IP address (replace the example.com in the configuration)
  • Change the correct lines in “location ~ \.php$ {“ section

Save and Exit

Step Seven—Create a php Info Page

We can quickly see all of the details of the new php configuration.

To set this up, first create a new file:

sudo nano /usr/share/nginx/www/info.php

Add in the following line:

<?php
phpinfo();
?>

Then Save and Exit.

Restart nginx

sudo service nginx restart

You can see the nginx and php-fpm configuration details by visiting http://youripaddress/info.php

Your LEMP stack is now set up and configured on your virtual private server.

Launching Hospy.co – Finding hospitals around you

Melted Soup

Hospy.co - Hospitals near you Hospy.co – Hospitals near you

Hospy.co launched, 29th July 2014, 11:54am, Mumbai, India.

Launched hospy while on bed rest since past 5 days. Some injections, some medicines, some bland-patient food, but finally bit stress free. It is Eid today, a good festival for islamic community. Celebrating by self, on the bed, 3 claps, some cheers (with coconut water).

Thanks everyone (I donno who) for all the support. Hope to give good time to Hospy along with other projects I’m working on. or atleast find a passionate team member / Business developer.

Hospy Logo Red

Elton

View original post