tag:blogger.com,1999:blog-45052907115275340142024-03-05T12:15:09.622-08:00Python Social CodingAnonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-4505290711527534014.post-72032885862647354242012-10-26T21:08:00.000-07:002012-10-26T21:08:02.991-07:00Little preview<div dir="ltr" style="text-align: left;" trbidi="on">
In the next few posts I'll show you multy-threaded script to search info in PasteBin and similar resources and save it to your hard drive. Also I'll show you how great python is: simple video player in hundred lines of code or little bit more. And I'll start open-source project on github in which you can participate and commit. It will be CCTV server and client written with Python and Gstreamer. </div>
Anonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.com0tag:blogger.com,1999:blog-4505290711527534014.post-6682650446604428202012-10-22T21:26:00.001-07:002012-10-22T21:31:51.938-07:00Pastebin Console ScriptSo, another one cool and simple script for today. I wrote very minimalistic script to post your files to <b>pastebin</b> right from console. I didn't want it to grow large so it can not identify file type. I hope it won't be hard for you to implement this feature. Also there are many options you can pass to script. You can pass only file you want to upload and mode: anonymous(actually it 'guest', but you can also implement anon mode, I'll show how to do it) or not.<br />
<a name='more'></a><br />
Script gets paste name from file name you pass. Also it gets the extension. It will help you to implement syntax detection. All available features you can see right here: <a href="http://pastebin.com/api" target="_blank">API page</a><br />
Let's start. First of all you should register at <a href="http://pastebin.com/" target="_blank">Paste Bin</a>. When you are done you'll see your unique developer API key on the <a href="http://pastebin.com/api" target="_blank">API page</a>. This key is your authority credential to Pastebin service. After this is done let's look at some other parameters.<br />
<br />
<!--StartFragment--><b><i>pastebin_vars = {<span style="color: #a64d79;">'api_dev_key'</span>: dev_key,</i></b><br />
<b><i> <span style="color: #a64d79;">'api_option'</span>: 'paste', <span style="color: #a64d79;">'api_paste_code'</span>: data,</i></b><br />
<b><i> <span style="color: #a64d79;">'api_user_key'</span>: user_key,</i></b><br />
<b><i> <span style="color: #a64d79;">'api_paste_name'</span>: paste_name}</i></b><!--EndFragment--><br />
<br />
These are parameters to send to the Pastebin.<br />
<b>api_dev_key</b> - this is your unique developer key.<br />
<b>api_option</b> - we will send data to the server, so this option tells server to paste our data<br />
<b>api_paste_data</b> - here is our paste. It will be read from file. I'll show it a bit later<br />
<b>api_user_key</b> - this parameter tells server to paste it as your text or as guest's<br />
<b>api_paste_name</b> - this parameter is our paste name<br />
There are also some more options. You can see it at <a href="http://pastebin.com/api" target="_blank">API page</a>. Now we are interested in paste_data, user_key and paste_name.<br />
Data. Here is some code to read it from file:<br />
<br />
<!--StartFragment--><b><i>f = open(sys.argv[1], 'r')</i></b><br />
<b><i>data = f.read()</i></b><!--EndFragment--><br />
<br />
Yup, that's all :) Two lines of code. You can make it more complicated and safe with <span style="color: blue;">try:</span> or <span style="color: blue;">with</span>.<br />
<br />
User key. The simplest way to get it is here: <a href="http://pastebin.com/api/api_user_key.html" target="_blank">Get User Key</a>.<br />
<br />
Paste name. We'll get it from file name. I chose regular expressions, my favorite technique - groups.<br />
Here is some code:<br />
<br />
<!--StartFragment--><b><i><span style="color: blue;">def</span> getName():</i></b><br />
<b><i> name = sys.argv[1]</i></b><br />
<b><i> m = re.match(r<span style="color: #a64d79;">"(?P<name>[\w\S]+)\.(?P<ext>\w+)"</span>, name)</i></b><br />
<b><i> name = m.group(1)</i></b><br />
<b><i> <span style="color: blue;">return</span> name<!--EndFragment--></i></b><br />
<b><i><br /></i></b>
<!--StartFragment--><span style="color: lime;"><b><i># PARAMS</i></b></span><br />
<b><i>dev_key = 'your dev key'</i></b><br />
<b><i>user_key = 'your user key'</i></b><br />
<b><i>paste_name = getName()</i></b><br />
<b><i>if len(sys.argv) == 3:</i></b><br />
<b><i> if sys.argv[2] == 'anon':</i></b><br />
<b><i> user_key = ''</i></b><br />
<span style="color: lime;"><b><i># PARAMS </i></b></span><br />
<br />
<br />
So you can see getName() function and assigning parameters. As you can see if you pass the anon parameter user_key will be passed as empty string, which means guest paste. And also you can catch sight of regular expression. It parses file name into name and extension, so in future you can easily add syntax detection. To make it work don't forget to <b>import sys and re modules</b>.<br />
Last but not the least:<br />
<br />
<!--StartFragment--><b><i>response = urllib.urlopen(<span style="color: #a64d79;">'http://pastebin.com/api/api_post.php'</span>,</i></b><br />
<b><i> urllib.urlencode(pastebin_vars))</i></b><br />
<b><i>url = response.read()</i></b><br />
<br />
These two lines post your file to pastebin and url variable contains your unique paste's url.<br />
That's all. Pretty easy though :)<br />
<b>P.S.</b> Anon mode... api_paste_private allows you to implement 3 mode of visibility:<br />
0 - Public<br />
1 - Unlisted<br />
2 - Private<br />
<br />
Full Script you can see here <span style="color: #6fa8dc;"><a href="https://gist.github.com/3936625" target="_blank">gist:github</a></span><br />
<b>P.P.S.</b> You can find there # print usage()<br />
I haven't written this function 'cause it is too easy, some print about how to use script<br />
<b><i>python pastebin.py myfile.txt anon</i></b> or <b><i>python pastebin.py myfile.txt</i></b>Anonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.com0tag:blogger.com,1999:blog-4505290711527534014.post-79324564229498777112012-10-22T18:40:00.002-07:002012-10-22T18:43:58.732-07:00Simple Twitter Bot<b id="internal-source-marker_0.23295020475052297" style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">So OK, after long interruption I'm here again and ready to show some cool stuff. I want to show you very minimalistic <strong>twitter bot</strong>, that can do few things. First, it can grab most popular hash tags, trends. Second, It can post the most popular trend of the day. First of all you need to create new <strong>twitter app</strong> here </span><a href="https://dev.twitter.com/apps/new" target="_blank"><span style="color: #1155cc; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Twitter Dev</span></a><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">.</span></b><br />
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjehB7ueQ_qLrr-g1ksvF50krysz6-nXOw3Kvn5i5ss3LhR_xGJUOvoWpwrRdmtnLcLJSI_yU2itUHj_756sdEK1Dm3gIV3wVIklYa_aosqWcUcwqvaTSsi-_4UvHua51jp_Pk303Rq0tmx/s1600/0_58f6e_e7481cf2_orig.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjehB7ueQ_qLrr-g1ksvF50krysz6-nXOw3Kvn5i5ss3LhR_xGJUOvoWpwrRdmtnLcLJSI_yU2itUHj_756sdEK1Dm3gIV3wVIklYa_aosqWcUcwqvaTSsi-_4UvHua51jp_Pk303Rq0tmx/s1600/0_58f6e_e7481cf2_orig.jpg" width="320" /></a></div>
<b><span style="font-family: Arial; font-weight: normal;"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></span><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Then go to <b>OAuth</b> settings and copy two fields "Consumer key" and "Consumer Secret". These keys you'll need to authorize your app for data exchange with <b>twitter</b>. After this go to Application type -> Access and choose "Read and Write". OK, after these steps you have registered app and it's credentials(keys). But it can not post tweets by itself. It will be twitting from your account, so you should authorize. You have 2 ways. First, go to "Your Access Token" and click "Create access token". You will see two long strings. Access token and Access Token Secret. Copy them and save with consumer keys. Second way is to run a script to get these tokens. We will use </span><span style="font-family: Arial; font-size: 15px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">tweepy</span><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"> library to work with <b>twitter</b>. It is rather simple and good library to work with. You can get it here </span><a href="http://code.google.com/p/tweepy/downloads/list" style="font-weight: normal;" target="_blank"><span style="color: #1155cc; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Tweepy @ google Code</span></a><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"> and here </span><a href="http://tweepy.github.com/" style="font-weight: normal;" target="_blank"><span style="color: #1155cc; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Tweepy @ GitHub</span></a><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">. Download, install and we can use it. Here is code example to get access tokens</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">import</span> tweepy, webbrowser</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">CONSUMER_KEY = 'paste your Consumer Key here'</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">CONSUMER_SECRET = 'paste your Consumer Secret here'</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">auth_url = auth.get_authorization_url()</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">webbrowser.open(auth_url)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">verifier = raw_input('PIN: ').strip()</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">auth.get_access_token(verifier)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: purple;">print</span> "ACCESS_KEY = '%s'" % auth.access_token.key</span></i></b><br />
<i><b><span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><span style="color: purple;">print</span> </span></span></b><b><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">"ACCESS_SECRET = '%s'" % auth.access_token.secret</span></b></i><b><span style="font-family: Arial; font-weight: normal;"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></span><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">You'll get your tokens. So, now we can start developing our app :)</span><br /><span style="font-family: Verdana; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">First of all lets write a function to authorize in twitter:</span><br /><span style="font-weight: normal;"><span style="font-family: Verdana; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">import</span> tweepy</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">def</span> initApi():</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> consumer_key = "" # your key</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> consumer_secret = "" # your secret key</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> access_key = "" # your token</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> access_secret = "" # your secret token</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> auth = tweepy.OAuthHandler(consumer_key, consumer_secret)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> auth.set_access_token(access_key, access_secret)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> <span style="color: blue;">return</span> tweepy.API(auth)</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> api = initApi()</span></i><br /><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Now we have API object. It gives us access to twitter api with easy and comfortable interface.</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><i> trends = api.trends_daily()['trends']</i></span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">So, according to </span><a href="http://code.google.com/p/tweepy/wiki/APIReference" style="font-weight: normal;" target="_blank"><span style="color: #1155cc; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">API Reference</span></a><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"> trends_daily function returns json object. It looks like this: <i>{Date: [list of query dicts like {query:"", name:"",..}, {...}], Date2:[{...}, {...}], ...and so on}.</i> We need to parse it to get tags. Here is simple function:</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">def</span> tags():</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> hourly_tags = []</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> for value <span style="color: blue;">in</span> trends.values():</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> for item <span style="color: blue;">in</span> value:</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> hourly_tags.append(item['name'])</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> <span style="color: blue;">return</span> hourly_tags</span></i><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">It returns 240 tags, 20 trending tags per last 24 hours. Pretty simple, isn't it?</span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Now we have all, we could ask. All we need is to count unique tags and sort them.</span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">First of all let's write sorting function. We'll then use it in our parsing function. We'll be sorting dictionary {tag:count} by count, or by value.</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">def</span> sbv(d, reverse=False):</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> <span style="color: blue;">return</span> sorted(d. iteritems(), key=itemgetter(1), reverse=True)</span></i><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">This sotrByValue function returns list of tuples (tag, count). It's time to use it in our parse function. For example, this function returns top 10 tweets:</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">def</span> getUniqueCounter():</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> tagList = getTags()</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> tagCount = [tagList.count(x) <span style="color: blue;">for</span> x <span style="color: blue;">in</span> tagList]</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> tagDict = <span style="color: purple;">dict</span>(<span style="color: purple;">zip</span>(tagList, tagCount))</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> topTen = <span style="color: purple;">dict</span>(<span style="color: yellow;">sbv</span>(tagDict)[:10])</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> <span style="color: blue;">return</span> topTen</span></i><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Or we can change </span><span style="font-family: Arial; font-size: 15px; font-style: italic; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">topTen = dict(sbv(tagDict)[:10]) </span><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">with </span><span style="font-family: Arial; font-size: 15px; font-style: italic; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">topTen = dict(sbv(tagDict)[:1]) </span><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">and get the most popular tweet.</span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Finally we need to post it.</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><i><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="color: blue;">try</span>:</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> tweet = "Top trend of the day: " + getUniqueCounter()</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> api.update_status(tweet)</span></i><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">This will work with top trend, not with top ten, you should remember, twitter status is 140 letters max.</span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br /><span style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span></b>Anonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.com0tag:blogger.com,1999:blog-4505290711527534014.post-26608640983578191762012-09-06T10:08:00.001-07:002012-09-06T10:08:41.071-07:00P.S.<div dir="ltr" style="text-align: left;" trbidi="on">
Some words about tools. I use <strong>Linux</strong> (<strong>Ubuntu</strong>) but most examples will work excellent on Windows or Mac machines without any problems. If any, leave a comment so I could fix it. I prefer <strong>scripting</strong> languages for simplicity, power and speed of development and prototyping. My favorite is <strong>Python</strong>, so bigger part of scripts in posts will be written in Python. But sometimes I'll post examples in Lua & Ruby. If I wouldn't but you want to see it, plz leave a comment. If you will need some additional libraries to run the script I'll provide all the links so you can install them.<br />
The first link you would better be familiar with is virtualenv - the utility that creates virtual environment for your scripts so that you won't harm your system libraries. <br />
<a href="http://www.virtualenv.org/en/latest/index.html">http://www.virtualenv.org/en/latest/index.html</a> </div>
Anonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.com0tag:blogger.com,1999:blog-4505290711527534014.post-2911084509913079052012-09-05T10:42:00.000-07:002012-10-26T21:10:03.683-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<h4>
So ok, let's make some magic :)</h4>
<br />
Today we spent more time in web then in real life. Blogging, micro-blogging, <strong>social</strong>-networking, liking, sharing and so on is great part of our everyday life. We don't write letters, we chat... we don't watch TV, we have YouTube... And in this blog I'll show you how to adjust <strong>social</strong> opportunities to your personal needs. Thanx.<br />
P.S. First series of posts will be about twitter. I like it the most.</div>
Anonymoushttp://www.blogger.com/profile/05496025455073199958noreply@blogger.com0