Desktop app for Facebook Workplace for Mac and Windows

workplace_share

Facebook officially launched it’s Slack competitor in late 2016 targeting the corporate teams. It’s fairly new and frankly it has hardly any new features besides the regular facebook that helps your productivity like Slack or Microsoft Teams does.

But we thought to give FB Workplace a try and one fine day, we ditched Slack. Major reason for the decision was the competitive price point, and we knew the features part would be fulfilled by FB soon.

A minor problem besides the feature problems was that there was no app for facebook Workplace, which felt less productive by going to a browser and switching to the tab everytime there’s a message, or a need to message someone. So I thought to create a wrapper app for Mac OS which you can quick open like any other app, it nicely sits on your Dock, get notifications just like any other application, and very quick to reach at.

workplace-dock

fbwok

Facebook Workplace app docked in your Mac OS Dock

 

Note that it’s not an official app from Facebook. It’s simply a wrapper that helps to use it like a Slack app until Facebook comes with an official version.

Steps to use: Just unzip the file, and run the Workplace.app file. If you want to quickly access the app everyday from your spotlight / search, you can put the app in your /Applications folder

 

Download link: GitHub

Download size: 38.8mb

Make sure you allow apps download from places outside App store. You can follow a guide here.

 

Hope it helps.

If you do need a windows version, do comment below. I’ll make one and update the link here.

Creating Twitter application 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 thescreen_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 foundhere.

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,
        );
Hospy.co - Hospitals near you

Launching Hospy.co – Finding hospitals around 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

Its a day of excitement, and a back-pat

Elton Jain birthday - Vondro launch

Its my birthday today, and I launched Vondro eve 18:25hrs. Rigorous day of hard work, nervousness, and excitement. Working continuous since yesterday, sipped 8 table-full spoons of coffee to get the adrenaline and energy and to keep my eyes away from closing. Fixing last moment bugs and creating a whole new workaround for a  loophole I found day before yesterday. Took a short nap from 6.30am to 9.30am. And was back to work. No game no play, just nervousness in mind to finish all in due time before launch.
And its done. Its live.
Yeah there are lot of things remaining but those will be taken care later as they don’t interfere user experience yet at this stage.
Hoping it to get traction soon as we start inviting institutions to the platform.

Phew… A scribble post… After a long time though…

3 Mistakes Web Programmers Need to Stop Making

Web programmer developing web application

Sometimes as programmers, we forget that 99.9% of the population doesn’t care how a piece of text, a button, an image or a video ends up onscreen. Most people just care that it’s fast, easy to use and gives them the content they want. Otherwise, they get upset — and rightfully so. Here are three common mistakes we programmers make, and what we can do to fix them.

Web programming languages - AJAX, RAILS, PHP, MYSQL, JAVA, ASP.NET



1. Forgetting About Conventions


Ever since they started using the Internet, users have been trained how to interact with a website. Therefore, they often get frustrated when websites don’t meet their expectations. Here are some examples.

  • They hover over an object they think is clickable, but become confused when they see an arrow instead of a hand pointer.
  • They click on blue, underlined text, but find it’s not a link.
  • They click on the logo in the top left, believing it will return them to the homepage, only to find it takes them nowhere.

Web design doesn’t always meet our expectations. However, developers and designers should always maintain certain rules to avoid user confusion. Here are three.

Clickable Elements Should Have the Pointer on Rollover
Everything clickable should switch to the hand pointer when a user hovers over it. You can accomplish this using simple CSS. The code would look like this

div:hover { cursor: pointer; }

Style Links Appropriately
Links should look different than regular text, and should be underlined within a page’s main content. If you really want to stick with convention, make them blue — research found users engage most with blue links.

Make Logos Clickable
The logo in the header of your website should be clickable, and should take the user to the homepage. This is pretty simple: Just wrap your logo in a tag.


2. Creating Slowly-Loading Websites


Users hate slow websites. Studies have shown that 40% of users will abandon a website that takes more than three seconds to load. Here’s how to avoid common speed mistakes by new programmers.

Resize Images Outside the Browser
New programmers will sometimes use a very large image, let’s say 600 pixels wide by 600 pixels tall, but will set the height and width so the image shrinks to the desired size. They use the following code.

There are two problems with this method: First, the full image still needs to load. Typically, bigger image files mean longer load times.

Second, shrinking an image using the height and width attributes can render a photo awkwardly, causing the browser to display a photo not nearly as clear as it would be were the image sized 200 x 200 pixels.

To fix these issues, resize and compress images in an editor like Photoshop or Gimp. Then code the image like we did above. Try to use a tool like Photoshop’s Save for Web & Devices to further shrink the file size.

Load JavaScript in the Footer
Many programmers unnecessarily load all the page’s JavaScript files in the head tag. This stalls the rest of the page load. In almost all cases, except for JavaScript critical to user interface navigation, it’s okay to load script in the footer. Then the rest of the page can load beforehand. Try this code.

Rest of the page:
<script type="text/javascript
" src="js/scripts.js%u201D></script>
</body>
</html>

Load CSS Externally
Sometimes new programmers load CSS on each individual page using inline styles or an internal stylesheet. For inline styles, code looks like this.

<p style="margin-top: 50px;">Hi Mom!</p>

And for an internal stylesheet, you’d most likely see this code in the head tag.

<style type="text/css">
p { margin-top: 50px; }
</style>

You should almost never use CSS in the page that holds your html. Store it externally using code like this.

<link rel="stylesheet" type="text/css" href="css/style.css" />

There are two advantages to loading CSS externally: First, the user’s computer will save the external stylesheet to be used on every page, instead of retrieving the same styles over and over. This greatly speeds up load time.
Second, using an external stylesheet is much easier to maintain. If you need to change the font size of your website’s paragraphs, you’re able change it in one place, without having to access each individual html file.
Learn more about good CSS practices at CSS Basics.


3. Not Accounting for Potential Backend Changes


Most programmers nowadays are using a content management system like WordPressJoomla or Drupal to build their websites. This is great because it gives website owners the ability to make changes and updates.

The problem is that a lot of developers only program for a website’s content at launch time. For example, at launch a developer may only create CSS styles for website headings 1, 2 and 3. What if two months after the website’s launch, the communications director decides to set some text to heading 6, since that’s an option in WordPress’s format? That decision would revert to the default styles of the browser since the developer never styled for it initially. Here is how to avoid this situation.

Include Styles for All the Common Tags
To make sure that the design of your website remains consistent with any backend formatting, programmers should include styles to handle the following html tags.

  • Body (<body>)
  • Heading 1, 2, 3, 4, 5, 6 (<h1>, <h2>, <h3>, <h4>, <h5>, <h6>)
  • Link (<a>)
  • Paragraph (<p>)
  • Address (<address>)
  • Preformatted (<pre>)
  • Strong (<strong>)
  • Unordered list (<ul>)
  • Ordered list (<ol>)
  • Quotes (<blockquote>)

It’s best to check the WYSIWYG that your website owners are using to make sure you have all the appropriate tags covered.

Basic styling isn’t the only opportunity for your website to break down. Also make sure to prepare for large image uploads and for copy/paste from Word. Although items like these can seem trivial, educating your website owners about how to add content can make all the difference.


You’re Smart, But It’s Hard To Remember Everything


The mistakes listed here have nothing to do with a developer’s intelligence. Like most jobs, things fall through the cracks, especially when you’re just getting started.

Do you agree with the items listed above? Are there any others we should have included?

Topic Courtesy – Mashable

"

New Study: How Online Marketing Drives Growth and Profitability in Professional Services Firms

Internet Marketing

Online marketing has its roots in consumer and product marketing, so it is not surprising that the professional services have been slower to embrace it. Today, many firms continue to believe that finding new clients is all about relationships and referrals. Well, a new study of online marketing for professional services firms is blowing that theory right out of the water.

This study of 500 firms, supplemented by an expert panel of 20 top digital marketing authorities, uncovers dramatic evidence that could accelerate firms’ adoption of online marketing techniques. Below are seven key findings from the study, which our research team released last week:

1. Firms that generate at least 40% of their leads online grow 4X faster than firms that do not generate any online leads. This fact alone gives firms that embrace online lead generation a tremendous competitive advantage. But the old ways of generating business aren’t obsolete yet. The highest growth rates occur when there is a balance between online and offline leads (40-60% of leads from online sources).

2. Increasing online lead generation boosts profitability for the entire firm. Profitability doubles in firms that generate 60% or more of their leads online. So online lead generation accelerates both growth and profitability. As far as we have been able to determine, this is the first time that correlation has been documented in the professional services.

3. The effectiveness of online marketing is directly related to the level of usage. We asked the firms to rate 15 popular online marketing tools on two criteria: how much they used them and how effective they were. We found that firms that used the tools more frequently enjoyed better results. Obviously, you can’t dabble in online marketing techniques and expect solid results.

4. Search engine optimization (SEO) and content marketing are driving the success of professional services firms. In terms of overall effectiveness, SEO was rated the top technique by study participants and our panel of experts, followed closely by web analytics, blogging, usability testing and whitepapers.

This is a powerful combination, and it is well suited to the habits of professional services buyers. Professional services markets are typically very competitive, and the sales process is complex. As a result, buyers are actively seeking education and information. So sellers need a way to be found and distinguish themselves.

5. Social media for the professional services is dominated by LinkedIn and Twitter. These two tools are well established in many firms. YouTube and Facebook have potential, but today they lag well behind in rated effectiveness.

6. Online marketing is also useful in recruiting new employees. Recruiting top talent is an ongoing challenge for many professional services firms. After all, their people are their product. About 55% of firms report recruiting new hires online, while one in four firms hire 40% or more of their people that way. Digital recruiting is particularly strong in the government contracting and technology sectors.

7. Online marketing in the professional services is poised to take off. Consider this. Almost half (46%) of professional services firms have redesigned their website in the last year. For firms that fit our “high growth” profile, the figure is over 85%. In addition, two thirds of firms plan to increase their online marketing budget next year, while less than 1% plan to decrease it. And the average increase in online spending is a hefty 56%. Clearly, momentum is building.

So what does this all mean for professional services firms? I see three big implications.
First, if your firm is not generating new business or new hires from online sources, you are missing out on huge opportunities for growth and profit. Sticking with traditional marketing tactics is not going to be a sustainable strategy. While relationships and referrals remain important, they are — literally — only half of the picture.

Second, even if you are actively involved in online marketing, you have more to do. While there are no silver bullets, the study’s high growth firms and panel of experts revealed many opportunities for average firms to enhance their marketing effectiveness, including SEO, usability testing and webinars.

Third, if you are not aggressively investing in online marketing, you are falling behind. This situation will put you at a growing disadvantage as other firms increase their budgets and, in due course, enjoy greater profits and faster growth. As time passes, it will get more costly and difficult to catch up.

The good news is that it is not too late to get in the game. But the results of this study underscore the need to act quickly. The ROI is there. The model is proven. And the momentum is shifting.

Some cool experiments with youtube

Youtube.com, the world famous video sharing portal will become the ultimate entertainment experience in the future.
Though it is entertaining billions even now, the youtube team is working on few experiments which you can say could be future’s video browsing experience. You might have heard of Google Tv coming out and you can search web from your TV and enjoy. YouTube (by Google) is making excellent progress in enhancing your web entertainment experience, which will surely make you go crazy and lazy (you wouldn’t even need to touch your mouse for that).
Here are some sexy screenshots of the sexy experiments. Take a look.

What’s going on? Everything as an icon on your main page

  Search what you want. Browse what you want. (Without a mouse)

The channels, the trending, it’s just like your tv, but on youtube

An excellent video viewing experience, a new cool look and features