<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>codeseekah</title>
	<atom:link href="http://codeseekah.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeseekah.com</link>
	<description>Code, sweet, code!</description>
	<lastBuildDate>Sun, 24 Mar 2013 09:10:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>My very own standing desk</title>
		<link>http://codeseekah.com/2013/03/24/my-very-own-standing-desk/</link>
		<comments>http://codeseekah.com/2013/03/24/my-very-own-standing-desk/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 09:09:56 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[health]]></category>
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1427</guid>
		<description><![CDATA[Today I finally got my custom-made standing desk installed. It&#8217;s a 2-in-1 actually, with surfaces for both standing and sitting modes. It&#8217;s quite compact, occupies far less space than my older workspaces. But enough talk, here are some pictures instead: I&#8217;ll post an update in a week or so with how it feels to work [...]]]></description>
				<content:encoded><![CDATA[<p>Today I finally got my custom-made standing desk installed. It&#8217;s a 2-in-1 actually, with surfaces for both standing and sitting modes. It&#8217;s quite compact, occupies far less space than my older workspaces. But enough talk, here are some pictures instead:</p>
<a href="http://codeseekah.com/2013/03/24/my-very-own-standing-desk/#gallery-1427-1-slideshow">Click to view slideshow.</a>
<p>I&#8217;ll post an update in a week or so with how it feels to work upright. Haven&#8217;t had the chance to wrap my head around the experience in such little time, but I feel that my typing speed and accuracy have increased a bit. And a sense of utter freedom of movement &#8211; I can now kick, punch (both the air and the wall around the desk) and stretch anytime and even jog in place while I wait for compilation, downloads/uploads, chat responses, etc. or simply pause to think.</p>
<p>Have you tried using a standing desk? What benefits did you discover?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2013/03/24/my-very-own-standing-desk/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bulk Reports and Digests for Gravity Forms</title>
		<link>http://codeseekah.com/2013/03/21/bulk-reports-and-digests-for-gravity-forms/</link>
		<comments>http://codeseekah.com/2013/03/21/bulk-reports-and-digests-for-gravity-forms/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 12:22:32 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[gravity forms]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1418</guid>
		<description><![CDATA[I have written yet another Gravity Forms plugin/addon. This time the plugin was to generate bulk reports for form entries, digests of sorts. Based on a set schedule (which can be altered using the cron_schedules filter), this addon will aggregate all new form entries it hasn&#8217;t seen yet (including very old ones) and send them [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://codeseekah.com/2013/03/21/bulk-reports-and-digests-for-gravity-forms"><img src="http://codeseekah.com/wp-content/uploads/2013/03/gravity-forms-digest-notifications.png" alt="Bulk Reports and Digests for Gravity Forms" width="669" height="264" class="size-full wp-image-1419" /></a></p>
<p>I have written <a href="http://codeseekah.com/2012/05/31/conditional-notifications-plugin-for-gravity-forms/">yet</a> <a href="https://github.com/soulseekah/Gravity-Forms-Saved-Forms-Addon">another</a> Gravity Forms plugin/addon. This time the plugin was to generate bulk reports for form entries, digests of sorts. Based on a set schedule (which can be altered using the <a href="http://codex.wordpress.org/Function_Reference/wp_get_schedules"><code>cron_schedules</code></a> filter), this addon will aggregate all new form entries it hasn&#8217;t seen yet (including very old ones) and send them out to predefined e-mail addresses.</p>
<p>The whole thing works best with regular single-shot notifications turned off, probably.</p>
<p><strong>Download it from <a href="https://github.com/soulseekah/Gravity-Forms-Saved-Forms-Addon">github</a> now</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2013/03/21/bulk-reports-and-digests-for-gravity-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A new, much better home for my code</title>
		<link>http://codeseekah.com/2013/03/18/a-new-much-better-home-for-my-code/</link>
		<comments>http://codeseekah.com/2013/03/18/a-new-much-better-home-for-my-code/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 05:11:03 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[linode]]></category>
		<category><![CDATA[vps]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1410</guid>
		<description><![CDATA[I have been having trouble with my former low-end VPS provider after two years of quite stable service. They decided to move data centers, and my OpenVZ box ended up being corrupted during the move. I have been looking to move for quite a while now. First of all I started using Arch Linux a [...]]]></description>
				<content:encoded><![CDATA[<p>I have been having trouble with my former low-end VPS provider after two years of quite stable service. They decided to move data centers, and my OpenVZ box ended up being corrupted during the move. I have been looking to move for quite a while now. First of all I started using <a href="https://www.archlinux.org/">Arch Linux</a> a while ago, and have been enjoying effortless rolling updates and upgrades every day. My former server was running Ubuntu 10.04 for 2 years, and due to fear of breaking it during updates (yes, it happens more often than one might think) I was stuck with some pretty old libraries, and although I managed to compile PHP and ngnix every six months or so to stay up to date, other newer packages required newer libraries, which in turn required a new kernel, etc.</p>
<p>So I was looking for a VPS provider with Arch images. Amazon AWS is quite expensive, although Arch Linux AMI images are available from <a href="http://www.uplinklabs.net/projects/arch-linux-on-ec2/">Uplink Labs</a>. But besides that, I&#8217;ve also been looking to switch to XEN virtualization, to have guaranteed memory, the power of swap and other advantages over OpenVZ and Virtuozzo offered by many companies.</p>
<p>After having tried out several alternatives on the low-end market, it&#8217;s been nothing but headaches, for the past month. So I decided to go for a safe, proven and mainstream provider &#8211; <a href="http://www.linode.com/?r=d22e77927f5471d854ec397503e3350560a93bdb">Linode</a>. Fit my criteria of carrying Arch images (<a href="http://www.linode.com/about/">1.8% of deployments are Arch</a> on Linode), XEN virtualization, quite low-end and budget-friendly, 2TB of data transfer, and promised effortless upgrades. The only downside was their lack of support for PayPal payments (very probably justified). So I had to get a prepaid virtual card.</p>
<p>So, as of a couple of days ago, the new home for my dozen of sites, and repositories is a blazingly fast XEN Arch Linux box at <a href="http://www.linode.com/?r=d22e77927f5471d854ec397503e3350560a93bdb">Linode</a>. I&#8217;m quite sure I wont&#8217; be disappointed.</p>
<p>What have you tried? What do you use now?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2013/03/18/a-new-much-better-home-for-my-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resigning Tampered Android APKs</title>
		<link>http://codeseekah.com/2013/03/13/resigning-tampered-android-apks/</link>
		<comments>http://codeseekah.com/2013/03/13/resigning-tampered-android-apks/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 10:28:05 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[baksmali]]></category>
		<category><![CDATA[jarsign]]></category>
		<category><![CDATA[keytool]]></category>
		<category><![CDATA[smali]]></category>
		<category><![CDATA[zipalign]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1403</guid>
		<description><![CDATA[After tampering with a signed apk using tools like smali/baksmali or even apktool here are the steps to rebuild and resign the Android application (from application root): keytool -genkeypair -alias androiddebugkey -dname 'CN=Android Debug,O=Android,C=US' -keystore /tmp/debug.keystore -keyalg RSA -validity 10000 generate a valid Android debug keypair (Signing in Debug Mode) with password &#8216;android&#8217; for both [...]]]></description>
				<content:encoded><![CDATA[<p>After tampering with a signed apk using tools like <a href="https://code.google.com/p/smali/">smali/baksmali</a> or even <a href="https://code.google.com/p/android-apktool/">apktool</a> here are the steps to rebuild and resign the Android application (from application root):</p>
<p><code>keytool -genkeypair -alias androiddebugkey -dname 'CN=Android Debug,O=Android,C=US' -keystore /tmp/debug.keystore -keyalg RSA -validity 10000</code> generate a valid Android debug keypair (<a href="http://developer.android.com/tools/publishing/app-signing.html#debugmode">Signing in Debug Mode</a>) with password &#8216;android&#8217; for both the keystore and the keys</p>
<p><code>rm -rf META-INF</code> if such exists</p>
<p><code>zip -9 -r out-unaligned.apk .</code> to zip things up</p>
<p><code>jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore /tmp/debug.keystore out-unaligned.apk androiddebugkey</code> sign it</p>
<p><code>zipalign 4 out-unaligned.apk out.apk</code> align it</p>
<p><code>keytool -printcert -jarfile out.apk</code> check it</p>
<p><code>adb install -s out.apk</code> install it (you may need to uninstall a previous version of the application in case of certificate errors</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2013/03/13/resigning-tampered-android-apks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tail -f &#124; event</title>
		<link>http://codeseekah.com/2013/02/04/tail-f-event/</link>
		<comments>http://codeseekah.com/2013/02/04/tail-f-event/#comments</comments>
		<pubDate>Mon, 04 Feb 2013 01:14:32 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[tail]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1392</guid>
		<description><![CDATA[Monitoring log files for specific keywords and firing off an event turns out to be quite simple to accomplish in bash with a `while` loop. #!/bin/bash tail -f $1 &#124; while read line; do line=`echo -n "$line" &#124; grep -i "$2"` if [ -n "$line" ]; then # mate-notify-send -t 0 "$2 has been logged" [...]]]></description>
				<content:encoded><![CDATA[<p>Monitoring log files for specific keywords and firing off an event turns out to be quite simple to accomplish in bash with a `while` loop.</p>
<pre>
#!/bin/bash

tail -f $1 | while read line; do
    line=`echo -n "$line" | grep -i "$2"`
    if [ -n "$line" ]; then
        # mate-notify-send -t 0 "$2 has been logged"
        echo "$2 has been logged" | mail -s ...
    fi
done
</pre>
<p>Something I&#8217;ve been using quite a bit lately expecting keywords to show up in various local and remote logs (<code>ssh ... "tail -f ..."</code>). What log event monitoring tools do you use?</p>
<p>Also, since this is the second time I decided to share a bash snippet quickie and have received some improvement feedback on my <a href="http://codeseekah.com/2012/11/09/monitor-directory-for-changes/">first one</a> I&#8217;ve created yet another &#8220;bash-utils&#8221; <a href="https://github.com/soulseekah/bash-utils">repository</a>. Feel free to chime in.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2013/02/04/tail-f-event/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Monitor Directory for Changes</title>
		<link>http://codeseekah.com/2012/11/09/monitor-directory-for-changes/</link>
		<comments>http://codeseekah.com/2012/11/09/monitor-directory-for-changes/#comments</comments>
		<pubDate>Fri, 09 Nov 2012 08:09:03 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cli]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1381</guid>
		<description><![CDATA[Here&#8217;s a simple script that I setup for my development WSGI server to reload itself once changes in source code are detected: #!/bin/bash while true; do A=`find $1 -printf '%t' &#124; md5sum`; sleep 1 B=`find $1 -printf '%t' &#124; md5sum`; if [ "$A" != "$B" ]; then echo "Detected change, doing: $2" eval $2 fi [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a simple script that I setup for my development WSGI server to reload itself once changes in source code are detected:</p>
<pre>
#!/bin/bash

while true; do
    A=`find $1 -printf '%t' | md5sum`;
    sleep 1
    B=`find $1 -printf '%t' | md5sum`;
    if [ "$A" != "$B" ]; then
        echo "Detected change, doing: $2"
        eval $2
    fi
done
</pre>
<p>It&#8217;s very simple (a poor-man&#8217;s replacement for <a href="http://linux.die.net/man/7/inotify">inotify</a>) and doesn&#8217;t do anything complicated. Usage <code>./monitor.sh application "my-reload-services.sh"</code>. You can filter out unwanted stuff like maybe <em>*.swp</em> files by referring to the <code>man find</code> pages.</p>
<p>What do you use to monitor for changes? How can the above script be improved?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2012/11/09/monitor-directory-for-changes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dubugging Flask applications under uWSGI</title>
		<link>http://codeseekah.com/2012/10/28/dubugging-flask-applications-under-uwsgi/</link>
		<comments>http://codeseekah.com/2012/10/28/dubugging-flask-applications-under-uwsgi/#comments</comments>
		<pubDate>Sun, 28 Oct 2012 15:44:54 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[flask]]></category>
		<category><![CDATA[uswgi]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1373</guid>
		<description><![CDATA[Flask comes with a fantastic debug mode available with the built-in server, but is advertised as unusable under uWSGI, due to some forking limitations, which I couldn&#8217;t understand. There is a way that allows you to spawn the development debug mode in Flask (and Werkzeug) regardless of what everyone around seems to say. Before the [...]]]></description>
				<content:encoded><![CDATA[<p>Flask comes with a fantastic <a href="http://flask.pocoo.org/docs/quickstart/#debug-mode">debug mode</a> available with the built-in server, but is advertised as unusable under uWSGI, due to some forking limitations, which I couldn&#8217;t understand. There is a way that allows you to spawn the development debug mode in Flask (and Werkzeug) regardless of what everyone around seems to say.</p>
<p>Before the <code>if __name__ == '__main__':</code> part of your application, i.e. at the very end, you have to wrap a <code>werkzeug.debug.DebuggedApplication</code> <a href="http://flask.pocoo.org/docs/quickstart/#hooking-in-wsgi-middlewares">middleware</a> around your <code>app</code> object.</p>
<pre>
if ( app.debug ):
    from werkzeug.debug import DebuggedApplication
    app.wsgi_app = DebuggedApplication( app.wsgi_app, True )
</pre>
<p>That&#8217;s it. Simple as that! Debug your Flask application from the browser, without using the built-in development server. <strong>Don&#8217;t forget</strong> to switch off debugging in production, as the console offers <strong>arbitrary code execution</strong>.</p>
<p>For everything else there&#8217;s <a href="http://winpdb.org/docs/embedded-debugging/">Winpdb</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2012/10/28/dubugging-flask-applications-under-uwsgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up Flask with nginx</title>
		<link>http://codeseekah.com/2012/10/28/setting-up-flask-with-nginx/</link>
		<comments>http://codeseekah.com/2012/10/28/setting-up-flask-with-nginx/#comments</comments>
		<pubDate>Sun, 28 Oct 2012 05:00:59 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[flask]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[uwsgi]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1365</guid>
		<description><![CDATA[I&#8217;ve decided to implement one of my next projects in Python. I picked Flask as my HTTP framework for its lightweight and unbinding design. It pretty much allows you to do everything at a low level, should you want to. And I do; I always prefer a low-level approach, without the bulkiness, APIs, configuration files, [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve decided to implement one of my next projects in Python. I picked <a href="http://flask.pocoo.org/">Flask</a> as my HTTP framework for its lightweight and unbinding design. It pretty much allows you to do everything at a low level, should you want to. And I do; I always prefer a low-level approach, without the bulkiness, APIs, configuration files, etc.</p>
<p>In any case, since my webserver of choice has long been <a href="http://nginx.org/">nginx</a> (built-in servers don&#8217;t impress me too much), having it serve Flask applications in a robust, reliable way was required. The <a href="http://flask.pocoo.org/docs/deploying/uwsgi/#configuring-nginx">instructions</a> to marry nginx and Flask via uWSGI are quite clear. I compiled the <a href="http://projects.unbit.it/uwsgi/">uwsgi</a> application container, read the <a href="http://projects.unbit.it/uwsgi/wiki/Doc">docs</a> and came up with the following startup command:</p>
<pre>
sudo uwsgi -s /tmp/uwsgi.application.sock --chdir /path/to/application -w application:app --uid "www-data" --gid "www-data" --touch-reload . --daemonize /var/log/uwsgi.log
</pre>
<p>The above is a development setting and will probably be very different in production. Since Flask doesn&#8217;t force any convention upon you, I picked the following project layout for now:</p>
<pre>
.
|-- application
|   |-- application.py
|   |-- models
|   |-- routes.py
|   `-- views
`-- static
    |-- favicon.ico
    |-- js
    |   `-- script.js
    `-- robots.txt
</pre>
<p>All Python code is in the <code>application</code> directory, where <code>uwsgi</code> runs it. Static files are a directory above that, and will be served as from there and not pollute the source tree. I could have kept the static directory under application just as well, but I&#8217;ll keep it outside for now. Here&#8217;s what I came up for my <nginx configuration to make it all work:</p>
<pre>
server {

    listen 80;
    server_name application.lo www.application.lo;

    root /path/to/application.lo/application;

    try_files /../static/$uri @application;

    location @application {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.application.sock;
    }

}
</pre>
<p>This is quite suitable for now. Any recommendations?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2012/10/28/setting-up-flask-with-nginx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android shell tricks: ps</title>
		<link>http://codeseekah.com/2012/10/21/android-shell-tricks-ps/</link>
		<comments>http://codeseekah.com/2012/10/21/android-shell-tricks-ps/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 17:03:28 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[adb]]></category>
		<category><![CDATA[android shell tricks]]></category>
		<category><![CDATA[ps]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1347</guid>
		<description><![CDATA[If you ever played around with the adb shell you may have found that the ps utility, which lists process lists, is not as verbose as you would expect it to be. And, to make things worse, there&#8217;s no inline help or man entries. Here&#8217;s the ps utility usage line: ps -t -x -P -p [...]]]></description>
				<content:encoded><![CDATA[<p>If you ever played around with the <code>adb shell</code> you may have found that the <code>ps</code> utility, which lists process lists, is not as verbose as you would expect it to be. And, to make things worse, there&#8217;s no inline help or <code>man</code> entries. Here&#8217;s the <code>ps</code> utility usage line: <code>ps -t -x -P -p -c [pid|name]</code>.</p>
<p><img src="http://codeseekah.com/wp-content/uploads/2012/10/android_shell_tricks_ps.png" alt="Android shell tricks: ps" title="Android shell tricks: ps" width="892" height="93" class="alignnone size-full wp-image-1352" /></p>
<ul>
<li><code>-t</code> show threads, comes up with threads in the list</li>
<li><code>-x</code> shows time, user time and system time in seconds</li>
<li><code>-P</code> show scheduling policy, either <code>bg</code> or <code>fg</code> are common, but also <code>un</code> and <code>er</code> for failures to get policy</li>
<li><code>-p</code> show priorities, <a href="http://en.wikipedia.org/wiki/Nice_(Unix)">niceness</a> level</li>
<li><code>-c</code> show CPU (may not be available prior to Android 4.x) involved</code>
<li><code>[pid]</code> filter by PID if numeric, or...</li>
<li><code>[name]</code> ...filter by process name</li>
</ul>
<p>Android's core toolbox (shell utilities) are more primitive than the ones you may be used to. Notice how each argument needs to be separated and you can't just <code>-txPc</code> it all, the command line argument parser is non-complex.</p>
<p>It's a pity how command line arguments are not shown. If you need something that's not available by the stock <code>ps</code> shell utility, try <a href="http://archive09.linux.com/feature/126718">manually combing through</a> the <code>/proc</code> directory. For the command line one would do <code>cat /proc/&lt;pid&gt;/cmdline</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2012/10/21/android-shell-tricks-ps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Post Images of Your Credit Card Online</title>
		<link>http://codeseekah.com/2012/09/20/dont-post-images-of-your-credit-card-online/</link>
		<comments>http://codeseekah.com/2012/09/20/dont-post-images-of-your-credit-card-online/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 21:46:00 +0000</pubDate>
		<dc:creator>soulseekah</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[fraud]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://codeseekah.com/?p=1338</guid>
		<description><![CDATA[Yes, people actually do that and an account I&#8217;ve been following @NeedADebitCard aggregates credit card photos on Twitter. Not all images are relevant but many are. Credit card fraud is a serious issue as is, with all our connectivity to the World Wide Web and technology that allows us to be &#8220;social&#8221; that makes many [...]]]></description>
				<content:encoded><![CDATA[<p>Yes, people actually do that and an account I&#8217;ve been following <a href="https://twitter.com/NeedADebitCard">@NeedADebitCard</a> aggregates credit card photos on Twitter. Not all images are relevant but many are. Credit card fraud is a serious issue as is, with all our connectivity to the World Wide Web and technology that allows us to be &#8220;social&#8221; that makes many people act irresponsibly, aggravates this.</p>
<p><a href="http://codeseekah.com/wp-content/uploads/2012/09/cc.png"><img src="http://codeseekah.com/wp-content/uploads/2012/09/cc-300x300.png" alt="Credit card" title="Credit card" width="300" height="300" class="alignleft size-medium wp-image-1339" /></a>And some people actually think there&#8217;s nothing bad in posting parts of the card. Yet, the same people have no understanding of which parts are safe to display and which are not. General rule &#8211; don&#8217;t show your credit card at all, especially online for the general public to view. I have wiped out the critical information in my version of the image as to stop the propagation of this nonsense. The cardholder pasted the image in the clear. Size is taken from the original.</p>
<p>This was a recent image shared via Instagram and Twitter. The person&#8217;s peers left 20+ &#8220;aww&#8221;-type comments, and nobody pointed out that it might have been a bad idea. A sane person on Twitter did so, and the cardholder responded with confidence that it was not a problem since not all the information is available. Now, see, what you get when you don&#8217;t understand the technology you use every day? </p>
<p>The cardholder&#8217;s screenname contained her name, so the missing name on the left side is not missing any more. The first four digits are a BIN, a <a href="http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29">Bank Identification Number</a> (or IIN, Issuer Identification Number). We know the issuer &#8211; Capital One, it&#8217;s a MasterCard Platinum. Quick search through the many BIN lists available online yielded the first 6 digits of the card &#8211; 517805, with the last two digits to confirm a match, plus upon closer inspection you can see digits two and three of the BIN in black under the silver numbers, a 7 and an 8 (look under the finger on the left).</p>
<p>After pointing out the bits of &#8220;concealed&#8221; information that I&#8217;ve managed to find out in under 5 minutes, the cardholder took down the image.</p>
<p>Quite excellent. Even if say the last 4 digits were somehow concealed, <a href="http://en.wikipedia.org/wiki/Luhn_algorithm">Luhn&#8217;s Algorithm</a> would decrease the search space quite a bit, leaving a handful of valid numbers (probably, whoever does the math gets some kudos). We&#8217;re missing the CVV, but we have the rest &#8211; issue and expiry date, photo of the card, photo of the person, and a whole bunch of other photos of the person online (identity fraud anyone?). And the CVV part is not an issue in many CNP (card-not-present) points of sale.</p>
<p>Is posting images of your credit card online bad? Without doubt. And teach your children to be highly responsible when using modern technology, and think twice, no matter how confident they are.</p>
<p>Be safe.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeseekah.com/2012/09/20/dont-post-images-of-your-credit-card-online/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
