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.

Advertisements

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,
        );
Childhood

Oh my childhood, could dream more than I do today

Ristair Corporation, Mau Creations, Ensigma Incorporation, Fonix Inc., and Deliti Education, and few more, were the ventures I wanted to build. Some in competition with Google’s search engine, some with an art and creativeness within, some with logic and business, some with Electronic components, and some with education-for-all in mind. So many dreams. One small kid.
But this is India. Your school teaches you no more than the age old textbooks; rather – chapters are skipped even from those textbooks based on time left for the exam. That’s the Indian education.
You learn no thing about real application of the education, what industry is, what world is, what people in US currently are working on, and what Indians are still doing. What we learnt? What everyone did in the past.
Science? Yeah, we did that too. We did a lot of theory. But we never made water, even if its as simple as H2O.
Sports? Eh? What’s that? We don’t study in an International school, so we probably have never heard that (just to point). Indoor yearly one small indoor basketball match (yeah, just stand below the basket and pour the ball).

In short, even with dreams, and goals, and talent, you really can’t make it up because you “actually” don’t know how do you utilize what you posses, and all you have is responsibilities of an Indian culture, family.

And I’m here today, as a normal employee (yet). But ofcourse, I’m not loosing hope. I’ll be back soon (Hopes), and with a bang.

An era of Carl zeiss phones

There were those days when mobile was still new for us. When mobile was still an excitement for us, a new and growing technology, a better medium of communication, and a lot of things that it could do.
And there was the camera when it was introduced in a mobile phone, everyone went crazy about it. You know more had to carry your rucksack sized backpacks with the camera and battery and everything else to cover and care them, because cameras weren’t any cheap accessories back then, nor are they today. And so having them in a portable “mobile” mobile phone, was just crazy, and awesome.
With time, there were many a phones with cameras, and then it was more about the camera then the mobile phone. As I say –

A phone memory is actually useless if it can’t store good memories.

And then happened Carl Zeiss. Making good memories. (Ofcourse not as good as today but it was a big and royal deal back in those days). When we went shopping for a good mobile phone, we used to breathe the device in an out, ie. from specs to looks. And once we have a device or two selected, we see – IF IT HAD A CARL ZEISS.

I liked to do things properly, even as a kid

An old note I found today for implementing a secured period subscription  functionality in one of my softwares

An old note I found today for implementing a secured period subscription functionality in one of my software

I was always like that. And still I’m, the same. I just don’t like to do things improperly. Eeven if there’s something random, I like to plan it, understand it, and do it nicely. Such that it looks good, works good, and is strong enough to even handle some surrounding issues that can be scoped in.

Like in this image above, it’s one of the pseudo code I wrote for myself, to plan and implement a robust and secured subscription functionality in one of my software product – OptiManager.
Subscription functionality might sound simple – periodic, but what if it is misused? if it isn’t implemented properly, people might end up hacking it easily and using copies of it freely. Specially in a case where you can’t handle every customer sitting on a desktop some miles away from you. Plus, desktop software always had this security problem, and all the extra troubles because you couldn’t access them remotely, like in web applications.

 

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

Futurama in 3D is absolutely stunning

This is amazing!

TECHCHURIAN

Futurama in 3D, Animation, Computer Animation, Illustration by Alexey Zakharov

Whoa. Artist Alexy Zakharov re-imagined the world of Futurama in 3D and transformed the cartoon into a complete stunner. It makes me want to watch a movie version of Futurama set in this world right now. Hell, it makes me want to cryogenically freeze myself so I can live in this world when I wake up.

Using 3ds Max, Nuke, Photoshop and After Effects, Zakharov was able to create a ‘test shot’ to see what his Futurama would look like. It’s so awesome. Here it is in full:



View original post