<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>From This Day - blog</title>
  <id>tag:blog.ayoy.net,2010:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://blog.ayoy.net/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blog.ayoy.net/" rel="alternate" type="text/html"/>
  <updated>2010-08-01T14:39:06Z</updated>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2010-08-01:3000</id>
    <published>2010-08-01T14:37:00Z</published>
    <updated>2010-08-01T14:37:00Z</updated>
    <category term="Qt"/>
    <category term="oauth"/>
    <category term="qoauth"/>
    <category term="qt"/>
    <category term="windows"/>
    <link href="http://blog.ayoy.net/2010/8/1/qoauth-1-0-1-needs-love-on-windows" rel="alternate" type="text/html"/>
    <title>QOAuth 1.0.1 - needs love on Windows</title>
<content type="html">
            &lt;p&gt;Hey there, QOAuth 1.0.1 is out. Here&#8217;s the changelog:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;new &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; (refer to the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; docs for more info): 
	&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;QOAuth::Interface::networkAccessManager()&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;QOAuth::Interface::setNetworkAccessManager()&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;QOAuth::Interface::ignoreSslErrors()&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;QOAuth::Interface::setIgnoreSslErrors()&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;added missing export statements to some global functions, &lt;/li&gt;
		&lt;li&gt;Percent encode consumer secret and token secret for the Signature Base String signing key [#8],&lt;/li&gt;
		&lt;li&gt;Parse for request content when sending &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; [#10],&lt;/li&gt;
		&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; docs and examples fixes [#9],&lt;/li&gt;
		&lt;li&gt;temporarily removed &lt;code&gt;QOAuth::DELETE&lt;/code&gt; from &lt;code&gt;QOAuth::HttpMethod&lt;/code&gt; enum on Windows [#4],&lt;/li&gt;
		&lt;li&gt;buildsystem fixes &#8211; install under &lt;code&gt;/usr/lib64&lt;/code&gt; on 64-bit Unix-like systems and fix headers installation path in &lt;code&gt;oauth.prf&lt;/code&gt;.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;There is a room for future improvements, but I&#8217;m in terrible lack of free time (or time that I can spend on developing QOAuth), so I can&#8217;t promise anything at the moment. If there&#8217;s anyone that can help me with QOAuth, I&#8217;d be extremely happy to share the work.&lt;/p&gt;


	&lt;p&gt;Also, I&#8217;m not going to maintain QOAuth on Windows anymore. Sorry for that, but I have no Windows box and having to care about Windows stuff with no Windows machine around makes my life even more miserable&#8230; Again, I&#8217;d greatly appreciate a Windows maintainer for QOAuth. If you happen to use the library on Windows, and you find it more or less useful, please consider contacting me (d at ayoy dot net) regarding handling QOAuth releases for Windows.&lt;/p&gt;


	&lt;p&gt;Thanks a lot :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-11-02:1811</id>
    <published>2009-11-02T21:57:00Z</published>
    <updated>2009-11-02T21:57:00Z</updated>
    <category term="qTwitter"/>
    <category term="mentions"/>
    <category term="plugins"/>
    <category term="qt"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/11/2/qtwitter-0-10-0-no-idea" rel="alternate" type="text/html"/>
    <title>qTwitter 0.10.0: no idea</title>
<content type="html">
            &lt;p&gt;Don&#8217;t know what to write here, let&#8217;s be brief and concrete this time. qTwitter 0.10.0 is out. It brings some new handy functionalities, like:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;mentions timeline (no shit! should be there half a year ago :P) that is merged together with the friends timeline,&lt;/li&gt;
		&lt;li&gt;automatic tagging thingy &#8211; it converts your selected words into #hashtags and it&#8217;s smart enough not to touch URLs and &lt;a href=&quot;http://status.net&quot;&gt;StatusNet&lt;/a&gt; !groups,&lt;/li&gt;
		&lt;li&gt;improved &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; shortening &#8211; now shortening all the urls in a status at one go, plus comes with a customizable shortcut,&lt;/li&gt;
		&lt;li&gt;notifications fixed to notify about new statuses &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;AND NOT&lt;/span&gt;&lt;/strong&gt; unread ones,&lt;/li&gt;
		&lt;li&gt;fixes in parsing URLs in statuses (kudos to &lt;a href=&quot;http://identi.ca/stephanbeyer&quot;&gt;Stephan Beyer&lt;/a&gt;).&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Plus some code clean-ups, build system fixes, and so on. I provided some initial plugin interface, but I don&#8217;t really want to talk about it in public yet, as it&#8217;s immature, not ready and you won&#8217;t do too much with it at the moment ;) but it allowed me to write two extensions already, and they seem to be working fine so far.&lt;/p&gt;


	&lt;p&gt;So, qTwitter is here. Precisely, &lt;a href=&quot;http://qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;here&lt;/a&gt;. Happy twitting!&lt;/p&gt;


	&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;BTW&lt;/span&gt;. qTwitter 0.9.2 and QOAuth 1.0 stable in Gentoo Portage since a while ago :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-10-01:1695</id>
    <published>2009-10-01T20:49:00Z</published>
    <updated>2009-10-01T20:49:00Z</updated>
    <category term="qTwitter"/>
    <category term="oauth"/>
    <category term="plasma"/>
    <category term="qt"/>
    <category term="ssl"/>
    <link href="http://blog.ayoy.net/2009/10/1/qtwitter-0-9-2-via-0-9-1-let-s-go-stealth" rel="alternate" type="text/html"/>
    <title>qTwitter 0.9.2 (via 0.9.1): let's go stealth</title>
<content type="html">
            &lt;p&gt;Few weeks ago I was about to start working on qTwitter 1.0-like but then I got a bit busy with life and I ended up bugfixing 0.9.0 release. And that was even better idea. I received some complaints (still not too much &#8211; this surprised me a bit) about qTwitter crashing after an update. That&#8217;s because I wanted very much to provide seamless config file conversion between versions. In theory it should work, but there were a few gotchas, causing a real mess from time to time.&lt;/p&gt;


	&lt;p&gt;Starting from 0.9.1, all the accounts settings from &lt;/p&gt;


Then I thought about some small but nice improvements here and there. And in addition I received several requests for providing more flexibility to various features. All in all, starting from 0.9.1 you get:
	&lt;ul&gt;
	&lt;li&gt;configurable tray icon visibility (always vs. when minimized),&lt;/li&gt;
		&lt;li&gt;configurable close button behavior (hiding vs. closing),&lt;/li&gt;
		&lt;li&gt;dock icon in &lt;span class=&quot;caps&quot;&gt;OS X&lt;/span&gt;&#8212;comes together with the unnecessary menu bar, but still it&#8217;s better to have qTwitter available under ⌘+Tab,&lt;/li&gt;
		&lt;li&gt;in &lt;span class=&quot;caps&quot;&gt;KDE 4&lt;/span&gt;.3 notifications displayed using Plasma visual notifications engine,&lt;/li&gt;
		&lt;li&gt;on &lt;span class=&quot;caps&quot;&gt;X11&lt;/span&gt;-compatible platforms only one instance of the application can be created,&lt;/li&gt;
		&lt;li&gt;Norwegian translation (by Egil Hanger, the guy that also suggested some changes &#8211; thanks!).&lt;/li&gt;
	&lt;/ul&gt;


And in 0.9.2, which came exactly the next day after 0.9.1:
	&lt;ul&gt;
	&lt;li&gt;all connections to Twitter and Identi.ca use &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; encryption,&lt;/li&gt;
		&lt;li&gt;Norwegian translation is complete (I failed on updating the file for 0.9.1),&lt;/li&gt;
		&lt;li&gt;when you remove all Identi.ca accounts, the Identi.ca &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; doesn&#8217;t disappear making Identi.ca unusable.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;And one &lt;strong&gt;important&lt;/strong&gt; thing: the support for basic authentication for Twitter was discontinued in qTwitter 0.9.1. Now it relies on OAuth (and &lt;a href=&quot;http://wiki.github.com/ayoy/qoauth&quot;&gt;QOAuth&lt;/a&gt;) and I hope I&#8217;m not making a mistake. OAuth is here from July, it seems to be working fine now, there were no complaints about it and I&#8217;m quite happy with it. Let&#8217;s hope things don&#8217;t get broken now :)&lt;/p&gt;


	&lt;p&gt;Download qTwitter 0.9.2 &lt;a href=&quot;http://www.qt-apps.org/content/show.php?content=99087&quot;&gt;qt-apps.org&lt;/a&gt; if you didn&#8217;t do it yet, or get the source from &lt;a href=&quot;http://github.com/ayoy/qtwitter&quot;&gt;github&lt;/a&gt;. Enjoy!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-09-13:1455</id>
    <published>2009-09-13T10:57:00Z</published>
    <updated>2009-09-13T10:57:00Z</updated>
    <category term="qTwitter"/>
    <category term="identica"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/9/13/qtwitter-at-identi-ca" rel="alternate" type="text/html"/>
    <title>!qtwitter at Identi.ca</title>
<content type="html">
            &lt;p&gt;Okay, I guess the time to benefit from the whole &lt;a href=&quot;http://identi.ca&quot;&gt;Identi.ca&#8217;s&lt;/a&gt; goodness has come also for me. I created a group for qTwitter users, info, news and anouncements. Also wishes, complaints, and whatever you like. So join &lt;a href=&quot;http://identi.ca/groups/qtwitter&quot;&gt;!qtwitter&lt;/a&gt; now and be the first to receive updates on your social networking client :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-09-11:1431</id>
    <published>2009-09-11T17:51:00Z</published>
    <updated>2009-09-11T17:51:00Z</updated>
    <category term="qTwitter"/>
    <category term="laconica"/>
    <category term="qt"/>
    <category term="qtwitter"/>
    <category term="statusnet"/>
    <link href="http://blog.ayoy.net/2009/9/11/qtwitter-0-9-0-all-hail-statusnet" rel="alternate" type="text/html"/>
    <title>qTwitter 0.9.0: all hail StatusNet</title>
<content type="html">
            &lt;p&gt;New qTwitter is here. This time it was (again) about rewriting some significant part of code, all of this in order to give support for &lt;a href=&quot;http://status.net&quot;&gt;StatusNet&lt;/a&gt; (former laconica) based services other than &lt;a href=&quot;http://identi.ca&quot;&gt;Identi.ca&lt;/a&gt;. So now every &lt;a href=&quot;http://army.twit.tv&quot;&gt;TwitArmy&lt;/a&gt;, &lt;a href=&quot;http://brainbird.co.cc&quot;&gt;BrainBird&lt;/a&gt;, &lt;a href=&quot;http://mozillaca.com&quot;&gt;Mozillaca&lt;/a&gt; and what not is working with qTwitter, with the functionality dependent on version of StatusNet software they use (it&#8217;s not always the newest one like in Identi.ca).&lt;/p&gt;


The changelog for 0.9.0 release is as follows:
	&lt;ul&gt;
	&lt;li&gt;left/right arrow key goes to next/prev unread status (by &lt;a href=&quot;http://identi.ca/stephanbeyer&quot;&gt;Stephan Beyer&lt;/a&gt;),&lt;/li&gt;
		&lt;li&gt;status author&#8217;s display mode made customizable (name, nick or name+nick),&lt;/li&gt;
		&lt;li&gt;added parsing StatusNet groups (!sth),&lt;/li&gt;
		&lt;li&gt;fixed unwanted &#8216;new statuses&#8217; on the bottom of the list (#63),&lt;/li&gt;
		&lt;li&gt;applied system palette to status edit field (#61),&lt;/li&gt;
		&lt;li&gt;added (&lt;strong&gt;awesome!&lt;/strong&gt;) Czech translation (by &lt;a href=&quot;http://twitter.com/dragonjake&quot;&gt;DragonJake&lt;/a&gt; &#8211; #62),&lt;/li&gt;
		&lt;li&gt;added b.oooom.net &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; shortening (by &lt;a href=&quot;http://twitter.com/dubkat&quot;&gt;dubkat&lt;/a&gt; &#8211; #57),&lt;/li&gt;
		&lt;li&gt;improved storing data between sessions,&lt;/li&gt;
		&lt;li&gt;improvements in Twitter &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; library,&lt;/li&gt;
		&lt;li&gt;numerous minor UI, performance, architectural and build system fixes.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Also, the automatic check for updates module seems to display the above changelog for 0.8.3 users, and encourage them to visit &lt;a href=&quot;http://qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;qt-apps.org&lt;/a&gt; to get the new version. Enjoy! :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-08-09:1038</id>
    <published>2009-08-09T10:26:00Z</published>
    <updated>2009-08-09T10:26:00Z</updated>
    <category term="qTwitter"/>
    <category term="qt"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/8/9/qtwitter-0-8-3-for-saving-resources" rel="alternate" type="text/html"/>
    <title>qTwitter 0.8.3: for saving resources</title>
<content type="html">
            &lt;p&gt;Just a note here, since &lt;a href=&quot;http://github.com/ayoy/qoauth&quot;&gt;QOAuth&lt;/a&gt; was updated to 1.0 and its &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; changed almost completely, there was a need to change how it&#8217;s used inside qTwitter. By the way I fixed an issue with &lt;code&gt;sysmacros.h&lt;/code&gt; (&lt;a href=&quot;http://ayoy.lighthouseapp.com/projects/27230/tickets/56-conflict-with-sysmacrosh-on-gentoo-linux&quot;&gt;#56&lt;/a&gt;) that might have occurred on some configurations, and also fixed the statuses updating when closing settings dialog. Settings dialog now triggers lists refresh only when the accounts were changed. It worked some versions ago, but then stopped with changes I&#8217;ve been applying over time, and I was reluctant (namely, too lazy :P) to fix it.&lt;/p&gt;


	&lt;p&gt;I&#8217;d really like it to be the last release before 0.9, so that I could now concentrate on messing with the code to extend functionality, and not having to constantly update qTwitter in order to follow changes in Twitter&#8217;s OAuth authorization (like it was for 0.8.1 and 0.8.2). qTwitter 0.8.3 is &lt;a href=&quot;http://qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;here&lt;/a&gt; and, as I said, requires QOAuth 1.0 from &lt;a href=&quot;http://qt-apps.org/content/show.php/QOAuth?content=107420&quot;&gt;here&lt;/a&gt;. Hopefully my packages work :P&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-08-09:1037</id>
    <published>2009-08-09T09:36:00Z</published>
    <updated>2009-08-09T09:36:00Z</updated>
    <category term="Qt"/>
    <category term="oauth"/>
    <category term="qoauth"/>
    <category term="qt"/>
    <link href="http://blog.ayoy.net/2009/8/9/qoauth-1-0-released" rel="alternate" type="text/html"/>
    <title>QOAuth 1.0 released</title>
<content type="html">
            &lt;p&gt;Lastly I improved some things in the QOAuth library, also did small code refactoring and provided new functionality. All in all, I&#8217;m pretty much able to call the new version 1.0 and say that it&#8217;s mostly feature complete. Here&#8217;s exactly what I did:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Added support for &lt;span class=&quot;caps&quot;&gt;RSA&lt;/span&gt;-SHA1 signing algorithm, also working with passphrase-protected private &lt;span class=&quot;caps&quot;&gt;RSA&lt;/span&gt; keys. Passphrase is passed as a &lt;code&gt;QCA::SecureArray&lt;/code&gt;, so it won&#8217;t be cached on disk or left in memory after quitting the application.&lt;/li&gt;
		&lt;li&gt;Added initial support for &lt;span class=&quot;caps&quot;&gt;PLAINTEXT&lt;/span&gt; authorization. It seems to be working, however it may fail with untrusted &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; connections. I didn&#8217;t find a service that takes &lt;span class=&quot;caps&quot;&gt;PLAINTEXT&lt;/span&gt; into use, only tested it with a test server which communicates over &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; (unencrypted). But still, if anybody uses &lt;span class=&quot;caps&quot;&gt;PLAINTEXT&lt;/span&gt; authorization and provides untrusted server to handle it, it kinda sucks&#8230;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;inlineParameters()&lt;/code&gt; extended by the parameter specifying parsing method &#8211; now it&#8217;s usable for both &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; requests,&lt;/li&gt;
		&lt;li&gt;Introduced the QOAuth namespace, with &lt;code&gt;QOAuth::Interface&lt;/code&gt; class holding the core
  functionality.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The detailed documentation (together with simple usage examples) resides &lt;a href=&quot;http://files.ayoy.net/qoauth/1.0/doc&quot;&gt;here&lt;/a&gt;. The library was tested with a test server at &lt;a href=&quot;http://term.ie/oauth/example&quot;&gt;http://term.ie/oauth/example&lt;/a&gt; and appears to be working. The test set is distributed alongside the library. I also use QOAuth for communication with Twitter &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; in &lt;a href=&quot;http://qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;qTwitter&lt;/a&gt; and find &lt;span class=&quot;caps&quot;&gt;HMAC&lt;/span&gt;-SHA1 signing working properly.&lt;/p&gt;


	&lt;p&gt;The source code repository for QOAuth is hosted on &lt;a href=&quot;http://github.com/ayoy/qoauth&quot;&gt;GitHub&lt;/a&gt;. The framework for MacOS X as well as packages for several Linux distros are available from &lt;a href=&quot;http://qt-apps.org/content/show.php/QOAuth?content=107420&quot;&gt;qt-apps.org&lt;/a&gt;. Gentoo users do &lt;code&gt;emerge qoauth&lt;/code&gt; :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-07-31:932</id>
    <published>2009-07-31T10:45:00Z</published>
    <updated>2009-07-31T10:45:00Z</updated>
    <category term="qTwitter"/>
    <category term="oauth"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/7/31/qtwitter-0-8-2-twitter-s-oauth-improving" rel="alternate" type="text/html"/>
    <title>qTwitter 0.8.2: Twitter's OAuth improving constantly</title>
<content type="html">
            &lt;p&gt;Just a small note here &#8211; Twitter guys are messing around their OAuth authorization flow and they improved something that broke the current qTwitter. The problem was (and, well, remained) quite mysterious, because URLs produced by qTwitter to access user&#8217;s data worked e.g. with curl and didn&#8217;t work with qTwitter itself. This was solved by switching to another authorization method from provided by OAuth.&lt;/p&gt;


	&lt;p&gt;By the way, the Identi.ca support was enhanced by the ability to disfavor statuses. This was recently introduced in laconi.ca. Also the annoying bug with recognizing status as &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; link in some situations was fixed.&lt;/p&gt;


	&lt;p&gt;qTwitter 0.8.2 is available from &lt;a href=&quot;http://qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;qt-apps.org&lt;/a&gt; :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-07-16:815</id>
    <published>2009-07-16T06:00:00Z</published>
    <updated>2009-07-16T06:00:00Z</updated>
    <category term="qTwitter"/>
    <category term="authorization"/>
    <category term="oauth"/>
    <category term="pin"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/7/16/qtwitter-0-8-1-unconstraining-stuff" rel="alternate" type="text/html"/>
    <title>qTwitter 0.8.1: unconstraining stuff</title>
<content type="html">
            &lt;p&gt;From what I see and hear, the OAuth support  seems to be working fine in qTwitter. But then the day has come when Twitter changed their OAuth &lt;span class=&quot;caps&quot;&gt;PIN&lt;/span&gt; length &#8211; that one entered in application to confirm its authorization for the account. Since I was pretty sure that this is not likely to change (at least not without a notice), I put tight restrictions on the input field for the &lt;span class=&quot;caps&quot;&gt;PIN&lt;/span&gt; number in qTwitter 0.8.0. And now, when the &lt;span class=&quot;caps&quot;&gt;PIN&lt;/span&gt; is 7, and not 6 digits long, there&#8217;s actually no way to authorize the application. To follow Twitter&#8217;s changes, I allowed putting more than 6 digits to the &lt;span class=&quot;caps&quot;&gt;PIN&lt;/span&gt; input field. Grab your own qTwitter 0.8.1 from &lt;a href=&quot;http://www.qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;the place&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-07-13:813</id>
    <published>2009-07-13T19:00:00Z</published>
    <updated>2009-07-13T19:00:00Z</updated>
    <category term="qTwitter"/>
    <category term="oauth"/>
    <category term="qoauth"/>
    <category term="qt"/>
    <link href="http://blog.ayoy.net/2009/7/13/qtwitter-0-8-0-powered-by-oauth" rel="alternate" type="text/html"/>
    <title>qTwitter 0.8.0: powered by OAuth</title>
<content type="html">
            &lt;p&gt;Here comes the new, fresh qTwitter! As Twitter is slowly switching from basic authorization scheme towards &lt;a href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt;, the client applications should follow the change. The support for OAuth was the main milestone for qTwitter 0.8.0, and here it goes. It&#8217;s basing on the &lt;a href=&quot;http://wiki.github.com/ayoy/qoauth&quot;&gt;QOAuth&lt;/a&gt; library, which uses &lt;a href=&quot;http://delta.affinix.com/qca/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;QCA&lt;/span&gt;&lt;/a&gt; and stuff and introduces, uh, dependencies, but in the same time it ensures far higher security for Twitter accounts.&lt;/p&gt;


	&lt;p&gt;What does it mean for the user? You&#8217;re not going to be asked to give your Twitter password inside qTwitter. Moreover, qTwitter won&#8217;t ever know your password and store it anywhere. Instead it will be given a unique token, which combined with it&#8217;s own token issued by Twitter (and with some other info like the current time and a totally random text string) will be used to request your account&#8217;s data from Twitter. How will qTwitter get the key? It will open a browser with a special Twitter login page, where you would be able to authorize it to access your data. Cutey, isn&#8217;t it?&lt;/p&gt;


Apart from this big thing, other smaller features have been added. This time I put some effort into finishing what was started some time ago and abandoned for some unknown reason (was it my laziness? hm&#8230;). Anyway, here&#8217;s what comes with the new qTwitter:
	&lt;ul&gt;
	&lt;li&gt;automatic (or not &#8211; it&#8217;s fully confgurable) checking for available updates,&lt;/li&gt;
		&lt;li&gt;storing statuses lists together with their read/unread states between sessions,&lt;/li&gt;
		&lt;li&gt;improved look and feel, meant by revisiting themes, colors, sizes, layouts, fonts, ...&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The public timeline support was dropped, because it &#8220;was decided&#8221; that it&#8217;s not the most wanted feature on Earth. And since it was making some additional mess inside the code, I was just purely happy to remove it. Thanks :)&lt;/p&gt;


	&lt;p&gt;As for new contributions, this time Thúlio Costa came up with support for &lt;a href=&quot;http://migre.me&quot;&gt;migre.me&lt;/a&gt; URL shortening service, and Faster provided Italian translation. Thanks a lot guys!&lt;/p&gt;


	&lt;p&gt;qTwitter 0.8.0 is available from &lt;a href=&quot;http://www.qt-apps.org/content/show.php?content=99087&quot;&gt;qt-apps.org&lt;/a&gt; (no shit, Sherlock&#8230;), but hah! It&#8217;s not so trivial this time. As I mentioned, OAuth support, although done by me, is an external package, and both Debian/Ubuntu and Fedora will ask for &lt;code&gt;libqoauth&lt;/code&gt; before allowing you to install &lt;code&gt;qtwitter&lt;/code&gt;. Then the QOAuth library is available from&#8230; &lt;a href=&quot;http://www.qt-apps.org/content/show.php/QOAuth?content=107420&quot;&gt;qt-apps.org&lt;/a&gt;. Thank you qt-apps.org, you rock!&lt;/p&gt;


	&lt;p&gt;I tried to do my best at packaging and it seems to be working, but don&#8217;t hesitate to contact me in case of any troubles.&lt;/p&gt;


	&lt;p&gt;And finally, note that the OAuth authorization is now a preferred scheme for qTwitter, although for those of you that insist on using basic authorization (or not pulling in more dependencies than Qt itself, or whatever) a possibility of compiling qTwitter without OAuth support is given. To do this, get the sources (e.g. from the above-mentioned Qt applications portal or &lt;a href=&quot;http://github.com/ayoy/qtwitter&quot;&gt;GitHub&lt;/a&gt;), and comment out a define in &lt;code&gt;qtwitter.pri&lt;/code&gt;:&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line-numbers&quot;&gt;  1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;DEFINES += OAUTH &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;comment out to disable OAuth&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;That&#8217;s it. Enjoy qTwitter!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-06-24:799</id>
    <published>2009-06-24T05:00:00Z</published>
    <updated>2009-06-24T05:00:00Z</updated>
    <category term="Qt"/>
    <category term="c++"/>
    <category term="library"/>
    <category term="network"/>
    <category term="oauth"/>
    <category term="qoauth"/>
    <category term="qt"/>
    <link href="http://blog.ayoy.net/2009/6/24/oauth" rel="alternate" type="text/html"/>
    <title>Bringing easy OAuth to Qt</title>
<summary type="html">&lt;p&gt;Lastly I spent some time looking for a decent OAuth support for C++. I found that &lt;a href=&quot;http://liboauth.sourceforge.net&quot;&gt;the only available libary&lt;/a&gt; (which is actually a pure C code), surely does what I expect, but provides pretty complicated &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; making it inconvenient to use. And I&#8217;m kind of a lazy guy (oh who&#8217;s not :-) ) and I&#8217;m getting scared with just thinking of writing tens of lines of code to complete just a single OAuth request. Plus, instead of endlessly converting from &lt;code&gt;QString&lt;/code&gt; and &lt;code&gt;QByteArray&lt;/code&gt; to &lt;code&gt;char*&lt;/code&gt; I&#8217;d prefer to have some friendly, Qt-compatible way to deal with the whole OAuth thing. That&#8217;s how the idea of QOAuth came up.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Lastly I spent some time looking for a decent OAuth support for C++. I found that &lt;a href=&quot;http://liboauth.sourceforge.net&quot;&gt;the only available libary&lt;/a&gt; (which is actually a pure C code), surely does what I expect, but provides pretty complicated &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; making it inconvenient to use. And I&#8217;m kind of a lazy guy (oh who&#8217;s not :-) ) and I&#8217;m getting scared with just thinking of writing tens of lines of code to complete just a single OAuth request. Plus, instead of endlessly converting from &lt;code&gt;QString&lt;/code&gt; and &lt;code&gt;QByteArray&lt;/code&gt; to &lt;code&gt;char*&lt;/code&gt; I&#8217;d prefer to have some friendly, Qt-compatible way to deal with the whole OAuth thing. That&#8217;s how the idea of QOAuth came up.&lt;/p&gt;
&lt;h2&gt;What is QOAuth?&lt;/h2&gt;


QOAuth is an attempt to support interaction with OAuth-powered network services in a Qt way, i.e. simply, clearly and efficiently. It gives the application developer no more than 4 methods, namely:
	&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;requestToken()&lt;/code&gt; &#8211; to obtain an unauthorized Request Token,&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;accessToken()&lt;/code&gt; &#8211; to exchange Request Token for the Access Token,&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;createParametersString()&lt;/code&gt; &#8211; to construct a request according to OAuth authorization scheme.&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;inlineParameters()&lt;/code&gt; &#8211; provided for convenience, to create a query string from given parameters.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;First two methods serve application authorization purposes, whilst the other two are used for accessing Protected Resources (all funny names by &lt;a href=&quot;http://oauth.net/core/1.0&quot;&gt;OAuth Core 1.0 Specification&lt;/a&gt; &#8211; but don&#8217;t go there if you&#8217;re not familiar with OAuth, you better start &lt;a href=&quot;http://www.hueniverse.com/hueniverse/2007/10/beginners-guide.html&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;QOAuth internally makes use of &lt;a href=&quot;http://delta.affinix.com/qca&quot;&gt;&lt;span class=&quot;caps&quot;&gt;QCA&lt;/span&gt;&lt;/a&gt; (Qt Cryptographic Architecture), thus depends on it. It&#8217;s also known to send and process network requests, so apart from QtCore it will need QtNetwork module to work.&lt;/p&gt;


	&lt;h2&gt;OAuth authorization with QOAuth&lt;/h2&gt;


	&lt;p&gt;As I mentioned, the point in QOAuth is to be user-friendly, yet powerful. See the code example of obtaining a Request Token form the Service Provider:&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line-numbers&quot;&gt;  1&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  2&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  3&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  4&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  5&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  6&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  7&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  8&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  9&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 10&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 11&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 12&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 13&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 14&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 15&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 16&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 17&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 18&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 19&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 20&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;&lt;span class=&quot;Support&quot;&gt;QByteArray&lt;/span&gt; token;
&lt;span class=&quot;Support&quot;&gt;QByteArray&lt;/span&gt; tokenSecret;

QOAuth qoauth = &lt;span class=&quot;Keyword&quot;&gt;new&lt;/span&gt; QOAuth;
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; set the consumer key and secret&lt;/span&gt;
qoauth-&amp;gt;setConsumerKey( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;75b3d557c9268c49cfdf041a&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );
qoauth-&amp;gt;setConsumerSecret( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;fd12803fbf0760d34cd2ceb9955199ce&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; set a timeout for requests (in msecs)&lt;/span&gt;
qoauth-&amp;gt;setRequestTimeout( &lt;span class=&quot;Constant&quot;&gt;10000&lt;/span&gt; );

&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; send a request for an unauthorized token&lt;/span&gt;
QOAuth::ParamMap reply =
    qoauth-&amp;gt;requestToken( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;http://example.com/request_token&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
                          QOAuth::GET, QOAuth::HMAC_SHA1 );

&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; if no error occurred, read the received token and token secret&lt;/span&gt;
&lt;span class=&quot;Keyword&quot;&gt;if&lt;/span&gt; ( qoauth-&amp;gt;error() == QOAuth::NoError ) {
  token = reply.value( QOAuth::ParamToken );
  tokenSecret = reply.value( QOAuth::ParamTokenSecret );
}
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;The &lt;code&gt;QOAuth::ParamMap&lt;/code&gt; is a typedef for &lt;code&gt;QMultiMap&amp;lt;QByteArray,QByteArray&amp;gt;&lt;/code&gt;. Everything else should be clear. Similarly, one can request the Access Token (after the previous authorization of the Request Token by User):&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line-numbers&quot;&gt;  1&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  2&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  3&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  4&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  5&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  6&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  7&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  8&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  9&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 10&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 11&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 12&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 13&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 14&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 15&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 16&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; if necessary, create a map of additional arguments required by the Service Provider&lt;/span&gt;
QOAuth::ParamMap otherArgs;
otherArgs.insert( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;misc_arg1&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;value1&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );
otherArgs.insert( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;misc_arg2&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;value2&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );

&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; send a request to exchange Request Token for an Access Token&lt;/span&gt;
QOAuth::ParamMap reply =
    qoauth-&amp;gt;accessToken( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;http://example.com/access_token&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, QOAuth::POST, token,
                         tokenSecret, QOAuth::HMAC_SHA1, otherArgs );

&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; if no error occurred, read the Access Token (and other arguments, if applicable)&lt;/span&gt;
&lt;span class=&quot;Keyword&quot;&gt;if&lt;/span&gt; ( qoauth-&amp;gt;error() == QOAuth::NoError ) {
  token = reply.value( QOAuth::ParamToken );
  tokenSecret = reply.value( QOAuth::ParamTokenSecret );
  otherInfo = reply.value( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;misc_arg3&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );
}
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;This step ends the OAuth authorization procedure, providing User&#8217;s authorized Access Token to be used when requesting further data from server.&lt;/p&gt;


	&lt;h2&gt;Creating OAuth requests&lt;/h2&gt;


	&lt;p&gt;Once authorized, the client application is allowed to access User&#8217;s data, each time authenticating itself with User&#8217;s Access Token. However, each and every request still has to be signed and encrypted according to OAuth rules. The third method provided by QOAuth library does all the dirty work of signing and encrypting the so called &lt;a href=&quot;http://oauth.net/core/1.0/#anchor14&quot;&gt;Signature Base String&lt;/a&gt;. All you need to do is provide the request parameters. Let&#8217;s say that you ask for an image named &lt;code&gt;flower_48.png&lt;/code&gt;, of the small size:&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line-numbers&quot;&gt;  1&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  2&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  3&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  4&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  5&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  6&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  7&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  8&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt;  9&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 10&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 11&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 12&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 13&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 14&lt;/span&gt;
&lt;span class=&quot;line-numbers&quot;&gt; 15&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;&lt;span class=&quot;Support&quot;&gt;QByteArray&lt;/span&gt; url( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;http://example.com/get_photo&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; create a request parameters map&lt;/span&gt;
QOAuth::ParamMap map;
map.insert( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;file&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;flower_48.jpg&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );
map.insert( &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;size&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;small&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; );

&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; construct the parameters string&lt;/span&gt;
&lt;span class=&quot;Support&quot;&gt;QByteArray&lt;/span&gt; content =
    qoauth-&amp;gt;createParametersString( requestUrl, QOAuth::GET, QOAuth::HMAC_SHA1,
                                    token, tokenSecret, map,
                                    QOAuth::ParseForInlineQuery );
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; append parameters string to the URL&lt;/span&gt;
url.append( content );
QNetworkRequest request( &lt;span class=&quot;Support&quot;&gt;QUrl&lt;/span&gt;( url ) );
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;//&lt;/span&gt; etc...&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;Just send this request, and receive the photo. Doesn&#8217;t seem too complicated, does it? If you like it, you may be interested in &lt;a href=&quot;http://files.ayoy.net/qoauth/doc&quot;&gt;much more detailed documentation&lt;/a&gt;. Note that this is very preliminary version of the library, and so far it supports only &lt;span class=&quot;caps&quot;&gt;HMAC&lt;/span&gt;-SHA1 encryption and may have some problems with &lt;span class=&quot;caps&quot;&gt;GET&lt;/span&gt; requests containing percent-encoded data. But it copes well with &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; requests, even those with non-ASCII data. After all, it&#8217;s mainly &lt;span class=&quot;caps&quot;&gt;POST&lt;/span&gt; that is used for transferring wierd data :) Anyway, the work has started just a few days ago, and there&#8217;s still a looooot to do.&lt;/p&gt;


	&lt;h2&gt;Where I can get it?&lt;/h2&gt;


	&lt;p&gt;QOAuth&#8217;s code is hosted at &lt;a href=&quot;http://github.com/ayoy/qoauth&quot;&gt;GitHub&lt;/a&gt;. After &lt;code&gt;qmake&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt; and &lt;code&gt;make install&lt;/code&gt;, all you have to do to get QOAuth working, is to append one line to your project file:&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;CONFIG += oauth
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;and then include this header in your source:&lt;/p&gt;


	&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;&lt;span class=&quot;CCCPreprocessorLine&quot;&gt;#&lt;span class=&quot;CCCPreprocessorDirective&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;lt;&lt;/span&gt;QtOAuth&lt;span class=&quot;String&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;


	&lt;p&gt;Some binaries will be available soon from &lt;a href=&quot;http://www.qt-apps.org/content/show.php/QOAuth?content=107420&quot;&gt;qt-apps.org&lt;/a&gt;. All the bugs and issues can be reported at QOAuth&#8217;s &lt;a href=&quot;http://ayoy.lighthouseapp.com/projects/32547-qoauth/tickets?q=all&quot;&gt;Lighthouseapp&lt;/a&gt; bug tracking system.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-06-13:797</id>
    <published>2009-06-13T14:27:00Z</published>
    <updated>2009-06-13T14:27:00Z</updated>
    <category term="qTwitter"/>
    <category term="digg"/>
    <category term="qtwitter"/>
    <category term="twitapocalypse"/>
    <link href="http://blog.ayoy.net/2009/6/13/qtwitter-0-7-1-the-twitapocalypse-is-outta-here" rel="alternate" type="text/html"/>
    <title>qTwitter 0.7.1: The Twitapocalypse is outta here</title>
<content type="html">
            &lt;p&gt;Ok, I must admit that I forgot about the whole thing, so called &lt;a href=&quot;http://blog.internetnews.com/skerner/2009/06/will-twitter-end-today-with-th.html&quot;&gt;Twitapocalypse&lt;/a&gt;. According to what was predicted before and happened a few hours ago, qTwitter 0.7.0 is not updating timelines correctly. A small patch fixed this unwelcome behavior and it was instantly applied, making qTwitter 0.7.1. So please update your app to the newest version that deals with huge IDs of Twitter statuses. Get it, as you always do, from &lt;a href=&quot;http://www.qt-apps.org/content/show.php?content=99087&quot;&gt;qt-apps.org&lt;/a&gt;. Apart from the fix, in 0.7.1 release you&#8217;ll get support for &lt;a href=&quot;http://digg.com&quot;&gt;digg.com&lt;/a&gt; URL shortening service and some look and feel corrections concerning the user info popup dialogs. Happy tweeting :)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-06-09:793</id>
    <published>2009-06-09T16:25:00Z</published>
    <updated>2009-06-09T16:25:00Z</updated>
    <category term="qTwitter"/>
    <category term="identi.ca"/>
    <category term="qt"/>
    <category term="qtwitter"/>
    <link href="http://blog.ayoy.net/2009/6/9/qtwitter-0-7-0-hello-identi-ca" rel="alternate" type="text/html"/>
    <title>qTwitter 0.7.0: Hello, Identi.ca!</title>
<content type="html">
            &lt;p&gt;The time has come (or I just couldn&#8217;t wait any more) to give out fresh new qTwitter app. After 1.5 months of sleepless nights (btw: curse you, Finnish summer :P) I&#8217;m happy to &lt;strong&gt;welcome &lt;a href=&quot;http://identi.ca&quot;&gt;Identi.ca&lt;/a&gt;&lt;/strong&gt; onboard. Apart from support for getting updates from and posting new ones to Identi.ca, additional missing features were provided, such as:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;favoring and disfavoring statuses,&lt;/li&gt;
	&lt;li&gt;sending, replying and deleting direct messages.&lt;/li&gt;
	&lt;li&gt;user info popups,&lt;/li&gt;
	&lt;li&gt;recognizing hashtags.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;User interface was significantly improved &#8212; three context-sensitive icons now allow for quick performing the most common actions on tweets and messages. The accounts settings page was revisited, compacted and made usable. Of course still no one will know that Ctrl+J shortens links :P Oh, by the way &#8212; &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; shortening support was extended by 3 additional services, including my favorite &lt;a href=&quot;http://➡.ws&quot;&gt;tiny➡s&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Speaking of &#8220;computers&#8221;, the newest release needed a huge amount of code to be reorganized to provide better user experience of switching between currently displayed accounts. This allowed also to avoid some very uncool memory leaks. Another significant, but smaller amount of code was added in order to get Identi.ca working &#8212; &lt;a href=&quot;http://laconi.ca/trac/wiki/TwitterCompatibleAPI&quot;&gt;laconi.ca&#8217;s Twitter-compatible &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/a&gt; is being used and the support is well integrated inside libtwitterapi in order for others to be able to make use of it.&lt;/p&gt;
&lt;p&gt;And from here I must give giant thanks to everyone involved in development, i.e. &lt;a href=&quot;mailto:wiorka@gmail.com&quot;&gt;wiorka&lt;/a&gt; and &lt;a href=&quot;http://wijet.pl&quot;&gt;wijet&lt;/a&gt;, and &lt;a href=&quot;http://flavio.castelli.name&quot;&gt;Flavio&lt;/a&gt; which made an effort to give qTwitter a decent look and feel on Maemo platorm. Thanks goes also to all translators, especially to &lt;a href=&quot;mailto:marciopanto@gmail.com&quot;&gt;Márcio Moraes&lt;/a&gt; and &lt;a href=&quot;fausto17@gmail.com&quot;&gt;Alvaro Ortiz&lt;/a&gt; for fresh new Portuguese and Spanish translations.&lt;/p&gt;
&lt;p&gt;Get your own qTwitter now from usual places &#8212; &lt;a href=&quot;http://www.qt-apps.org/content/show.php/qTwitter?content=99087&quot;&gt;qt-apps.org&lt;/a&gt; for packages, &lt;a href=&quot;http://github.com/ayoy/qtwitter/tree/master&quot;&gt;github.com&lt;/a&gt; for sources. Enjoy!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-05-10:788</id>
    <published>2009-05-10T19:41:00Z</published>
    <updated>2009-05-10T19:41:00Z</updated>
    <category term="Qt"/>
    <category term="deployment"/>
    <category term="framework"/>
    <category term="mac"/>
    <category term="perl"/>
    <category term="qt"/>
    <link href="http://blog.ayoy.net/2009/5/10/deploying-qt-based-frameworks-made-simple" rel="alternate" type="text/html"/>
    <title>Deploying Qt-based frameworks made simple</title>
<content type="html">
            &lt;p&gt;Last time when I was deploying a Qt application on MacOS X I spent several hours struggling with &lt;code&gt;otool&lt;/code&gt; and &lt;code&gt;install_name_tool&lt;/code&gt; to make my app see all the bundled Qt frameworks and plugins. Then I found out that there is a dedicated tool for it, called &lt;a href=&quot;http://labs.trolltech.com/blogs/2007/08/23/deploying-mac-applications-without-the-hassle&quot;&gt;&lt;code&gt;macdeployqt&lt;/code&gt;&lt;/a&gt; and, what is more, it&#8217;s nothing new. To be honest, it&#8217;s so well known that it is currently shipped together with Qt. Shame on me.&lt;/p&gt;
&lt;p&gt;Great then, &lt;code&gt;macdeployqt&lt;/code&gt; reduces the deployment work to one line in terminal, and time thereof to several seconds :) However, my application, apart from Qt frameworks uses other custom, self-made frameworks that depend on Qt. It seems that &lt;code&gt;macdeployqt&lt;/code&gt; doesn&#8217;t support deploying frameworks, as it searches for application binary located in &lt;code&gt;&amp;lt;bundle_name&amp;gt;/Contents/MacOS&lt;/code&gt;, which simply doesn&#8217;t exist in a framework bundle. So I created a simple script, called &lt;code&gt;frameworkdeployqt.pl&lt;/code&gt; that does the dirty work of deploying frameworks written in Qt. The basic concept is:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;you want to deploy a Qt application on MacOS X,&lt;/li&gt;
	&lt;li&gt;your application uses custom/self-made/third-party frameworks written in Qt,&lt;/li&gt;
	&lt;li&gt;all the frameworks are going to be located in &lt;code&gt;&amp;lt;bundle_name&amp;gt;/Contents/Frameworks&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then you deploy the application in two simple steps:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;run &lt;code&gt;macdeployqt&lt;/code&gt; to copy needed Qt frameworks to the application bundle and adjust its internal framework references,&lt;/li&gt;
	&lt;li&gt;run &lt;code&gt;frameworkdeployqt.pl&lt;/code&gt; to make your custom frameworks use Qt frameworks bundled with your application. You&#8217;ll of course need perl, but it comes out of the box with MacOS X.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The script looks for non-Qt frameworks inside the bundle given as an argument (namely, it searches &lt;code&gt;&amp;lt;bundle_name&amp;gt;/Contents/Frameworks&lt;/code&gt; for frameworks other than &lt;code&gt;Qt*&lt;/code&gt;) and then replaces their references to Qt frameworks so that they point to the ones that &lt;code&gt;macdeployqt&lt;/code&gt; have just copied to the bundle. For now it&#8217;s a bit dumb, i.e. it doesn&#8217;t check the existence of Qt frameworks, so if your custom framework uses other Qt modules than the application (or &lt;code&gt;macdeployqt&lt;/code&gt; somehow failed to copy them), you&#8217;ll have to copy them manually to the bundle.&lt;/p&gt;
&lt;p&gt;Other drawback is that you can&#8217;t create a dmg image directly using &lt;code&gt;macdeployqt&lt;/code&gt;, but anyway, if you happen to need &lt;code&gt;frameworkdeployqt.pl&lt;/code&gt;, that dmg would have been useless for you.&lt;/p&gt;
&lt;p&gt;The script is available from &lt;a href=&quot;http://gist.github.com/109674&quot;&gt;GitHub&lt;/a&gt;. Enjoy!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.ayoy.net/">
    <author>
      <name>ayoy</name>
    </author>
    <id>tag:blog.ayoy.net,2009-05-01:769</id>
    <published>2009-05-01T12:42:00Z</published>
    <updated>2009-05-01T12:42:00Z</updated>
    <category term="qTwitter"/>
    <category term="ebuild"/>
    <category term="gentoo"/>
    <category term="portage"/>
    <category term="qt"/>
    <link href="http://blog.ayoy.net/2009/5/1/qtwitter-enters-gentoo-portage" rel="alternate" type="text/html"/>
    <title>net-im/qtwitter enters Gentoo Portage</title>
<content type="html">
            &lt;p&gt;I&#8217;m incredibly proud to announce that as of April 30th, as stated &lt;a href=&quot;http://packages.gentoo.org/package/net-im/qtwitter&quot;&gt;here&lt;/a&gt;, qTwitter oficially becomes a part of the main &lt;a href=&quot;http://gentoo.org&quot;&gt;Gentoo &lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt;/Linux&lt;/a&gt; Portage tree. So from now on, installing qTwitter in Gentoo is as simple as typing:&lt;/p&gt;
&lt;p&gt;&lt;table class=&quot;jazzy&quot;&gt;&lt;tr&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sunburst&quot;&gt;$ emerge qtwitter
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;For those who prefer to have the most fresh version, a live ebuild is still available in layman&#8217;s &lt;a href=&quot;http://github.com/gentoo-qt/qting-edge/tree/master&quot;&gt;qting-edge&lt;/a&gt; overlay.&lt;/p&gt;
&lt;p&gt;Huge thanks to &lt;a href=&quot;mailto:hwoarang@gentoo.org&quot;&gt;Markos Chandras&lt;/a&gt; from &lt;a href=&quot;http://www.gentoo.org/proj/en/desktop/kde/index.xml&quot;&gt;Gentoo &lt;span class=&quot;caps&quot;&gt;KDE&lt;/span&gt; team&lt;/a&gt; for testing qTwitter on Gentoo and committing it to the main Portage tree.&lt;/p&gt;
          </content>  </entry>
</feed>
