<?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/"
	>

<channel>
	<title>HASANEN.COM</title>
	<atom:link href="http://www.hasanen.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.hasanen.com</link>
	<description>Me &#38; Linux</description>
	<pubDate>Mon, 02 Aug 2010 07:41:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting Huawei EC-121 to work on Ubuntu 8.10</title>
		<link>http://www.hasanen.com/?p=25</link>
		<comments>http://www.hasanen.com/?p=25#comments</comments>
		<pubDate>Thu, 11 Dec 2008 18:39:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Iraq]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[computers]]></category>

		<category><![CDATA[CDMA]]></category>

		<category><![CDATA[Omnnea]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=25</guid>
		<description><![CDATA[<br/>

Recently I bought Huawei EC-121 modem from Omnnea (Iraqi CDMA operator) with monthly subscription , it works fine on Windows but when I plugged it in Ubuntu 8.10 NetworkManager didn't detect anything....however, dmesg showed 3 modems detected by the kernel ttyUSB0...ttyUSB2...if it takes long time to detect the modems just try to rmmod usb-storage to [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/omnnea.png" alt="" /></p>
<p>Recently I bought Huawei EC-121 modem from Omnnea (Iraqi CDMA operator) with monthly subscription , it works fine on Windows but when I plugged it in Ubuntu 8.10 NetworkManager didn&#8217;t detect anything&#8230;.however, dmesg showed 3 modems detected by the kernel ttyUSB0&#8230;ttyUSB2&#8230;if it takes long time to detect the modems just try to <em><span><span style="font-style: normal;">rmmod usb-storage</span></span></em> to ignore the embedded CD-Drive emulator.</p>
<p><span id="more-25"></span></p>
<p>Getting this thing to work under Linux wasn&#8217;t hard at all  , prepare your <em>wvdial</em> configuration :</p>
<p><span style="font-family: courier new,courier;">sudo gedit /etc/wvdial</span></p>
<p><span style="font-family: Liberation Serif,serif;">replace the contents of the file with the fo</span></p>
<p style="margin-bottom: 0in;">
<p style="color: #ffffff; background-color: #a59fa7; margin-bottom: 0in;"><strong style="background-color: #544f50;">[Dialer Defaults]<br />
Init1 = ATZ<br />
Init2 = ATQ0 M1 L1 X3 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0<br />
Modem Type = Analog Modem<br />
ISDN = 0<br />
Abort On No Dialtone = False<br />
New PPPD = yes<br />
Phone = #777<br />
Modem = /dev/ttyUSB0<br />
Username = omnnea<br />
Password = omnnea</strong></p>
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><span style="font-family: Liberation Serif,serif;">Now try to connect using wvdial :</span></p>
<p style="margin-bottom: 0in;"><strong><span style="font-family: courier new,courier; color: #ffffff; background-color: #8e8f8f;">sudo wvdial</span></strong></p>
<p style="margin-bottom: 0in;"><span style="font-family: Liberation Serif,serif;">you will get something like this : </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">WvDial: Internet dialer version 1.60 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Cannot get information for serial port. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Initializing modem. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Sending: ATX3 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">ATX3 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">OK </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Sending: ATQ0 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">ATQ0 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">OK </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Modem initialized. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Sending: ATM1L3DT#777 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Waiting for carrier. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">ATM1L3DT#777 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">CONNECT 153600 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Carrier detected.  Waiting for prompt. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">~[7f]}#@!}!} } }=}!}$}%\}&#8221;}&amp;} } } } }#}%B#}%}%}&amp;.|&amp;p}&#8217;}&#8221;}(}&#8221;qW~ </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">PPP negotiation detected. </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Starting pppd at Thu Dec 11 14:10:23 2008 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Pid of pppd: 6515 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">Using interface ppp0 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">local  IP address 10.10.6.148 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">remote IP address 192.168.2.2 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">primary   DNS address 192.168.1.1 </span></p>
<p style="margin-bottom: 0in;"><span style="font-family: courier new,courier;">secondary DNS address 4.2.2.5 </span></p>
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><span style="font-family: Liberation Serif,serif;">For some reason <em>wvdial</em> doesn&#8217;t change the DNS name servers so you have to do it manually :</span></p>
<p style="margin-bottom: 0in;">
<p style="margin-bottom: 0in;"><strong><span style="font-family: courier new,courier; color: #ffffff; background-color: #8e8f8f;">sudo gedit /etc/resolv.conf</span></strong></p>
<p style="margin-bottom: 0in;"><span style="font-family: Liberation Serif,serif;">and add the following name servers :</span></p>
<p style="margin-bottom: 0in;"><strong><span style="font-family: courier new,courier;">nameserver 192.168.1.1</span></strong></p>
<p style="margin-bottom: 0in;"><strong><span style="font-family: courier new,courier;">nameserver 4.2.2.5</span></strong></p>
<p style="margin-bottom: 0in;">
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>10 Ultimate Rules for Effective System Administration</title>
		<link>http://www.hasanen.com/?p=19</link>
		<comments>http://www.hasanen.com/?p=19#comments</comments>
		<pubDate>Mon, 04 Aug 2008 20:31:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[computers]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=19</guid>
		<description><![CDATA[<br/>This article has been taken from:
http://www.cyberciti.biz/tips/10-ultimate-rules-for-effective-system-administration.html
The following 10 items are guidelines more than rules, that I have learned over the years doing intensive work on the IT infrastructure. These guidelines are mostly common sense and can be helpful for anybody who administers an IT system, including Linux/Windows Administrator, Network Administrator and DBA.


1. Keep it simple.
In [...]]]></description>
			<content:encoded><![CDATA[<br/><p style="text-align: left;"><span style="font-family: symbol;">This article has been taken from:</span></p>
<p style="text-align: left;"><span style="font-family: symbol;"><a href="http://www.cyberciti.biz/tips/10-ultimate-rules-for-effective-system-administration.html" target="_blank">http://www.cyberciti.biz/tips/10-ultimate-rules-for-effective-system-administration.html</a></span></p>
<p style="font-size: 12px; background-color: #003333;">The following 10 items are guidelines more than rules, that I have learned over the years doing intensive work on the IT infrastructure. These guidelines are mostly common sense and can be helpful for anybody who administers an IT system, including Linux/Windows Administrator, Network Administrator and DBA.</p>
<h2><span id="more-19"></span></h2>
<h2><strong>1. Keep it simple.</strong></h2>
<p>In technology environment, keeping things simple takes lot more effort and maturity than keeping it complex. As an administrator, when it comes to implementing a particular functionality or solving a problem, there are always several options available. It is best to learn all the available options, including the complex ones to understand how it works. However while implementing, try to keep it as simple as possible. The option you choose should be simple and have the following characteristics:</p>
<ul>
<li>Easy to maintain in a long run</li>
<li>Does not add additional over head to the system</li>
<li>Solves the primary business/technical problem</li>
</ul>
<p>Whenever you are in a dilemma of whether to choose a bleeding edge technology or proven technology that has been around for a while, always go with the proven technology for production implementation.</p>
<h2><strong>2. Backup regularly</strong></h2>
<p>Is both your personal laptop and servers at work, getting backed up regularly? If not, stop everything you are doing now and implement a backup solution on those systems immediately. Seriously! Start planning for your backup right now. Everybody knows that backing up data on a regular basis is critical. Only those who got burnt out on few occasions without having a backup, really understands the importance of having a reliable backup solution. Don&#8217;t learn the importance of backup after loosing your critical data.</p>
<p>It is only a matter of time, when you&#8217;ll be in a situation where a system crashed, data got deleted accidentally or laptop with critical data is lost. Spend quality time and implement a reliable backup solution for both your personal laptop and servers at work.</p>
<h2><strong>3. Test your backup regularly</strong></h2>
<p>I could&#8217;ve combined this as part of rule#2. But, I strongly believe testing the backup deserves special attention. I have seen on several occasions, where administrators thinks they have a valid backup, only to find out during disaster, they couldn&#8217;t restore from the backup successfully. A backup solution without testing it on a ongoing basis is only as good as not having the backup. Just having faith in the backup that it will work is not good enough. You should have a process to test your production backup every month. You&#8217;ll have a peaceful sleep at night just by implementing rule#2 and #3.</p>
<h2><strong>4. Proactive Monitoring</strong></h2>
<p>Are you always working in a fire fighting mode? Is your users calling you to indicate that a system is down or having problem? Experienced administrators knows that they should spend majority of their time implementing solutions to avoid problems, instead of fixing the problems after it happens. Make sure to implement a strong monitoring solution that will monitor and alert you about a problem before it happens. You should never be solving the same issue more than once. Following two points will help you to achieve the proactive monitoring.</p>
<p>Sit and identify all the equipments, services and applications that needs to be monitored through out the enterprise. Define an acceptable warning and critical levels for those systems. Define who should be notified and how often they should be notified and the method of notification. Once you have these identified, spend time implementing a monitoring system.</p>
<p>Despite proactive monitoring, there will be times when you&#8217;ll be putting out a fire. Once you put off the fire, the first question you should ask yourself: How I could&#8217;ve avoided this issue from happening? Once you have the answer for that, make sure to implement an appropriate monitoring solution to prevent this particular incident from happening in the future.</p>
<h2><strong>5. Document Everything</strong></h2>
<p>You should document everything that you perform on the system. This is not a pleasant topic for administrators, as most of us hate to write documentation. An experienced administrators knows that documenting the environment and his work is key for his success and growth. I&#8217;m not talking about spending several hours creating a huge document with all fancy formatting.</p>
<p>Anytime you implement a solution or fix a problem, just scribble down the high level steps that was performed in a text file. You can simply copy/paste the commands you&#8217;ve executed along with one line description. This in itself is a huge step towards documentation for most administrators who are not used to documenting their work.</p>
<p>Following are some of the primary reasons for documenting every technical activity performed by administrators:</p>
<ul>
<li>Don&#8217;t learn the same topic twice. When you implement something new, you have spend enough time learning the technology and understanding the steps to implement it on your specific environment. During this process, write down all the steps and refer to those steps the next time you want to perform the same task on a different server.</li>
<li>There will be situations when you want to delegate tasks to others. For e.g. when you are going on vacation or when you want to delegate a particular routine task to a junior administrator who is eager to learn. If you had the practice of consistently documenting everything, you can simply pass those text file documentation to the other administrator.</li>
<li>Sharing your knowledge with others is one of the efficient ways to grow your knowledge. So, document everything and share with others.</li>
<li>Don&#8217;t waste the valuable RAM space on your brain by remembering everything. Instead off-load some of the items from your brain&#8217;s RAM to a simple text file and use your brain&#8217;s RAM to explore new technology.</li>
</ul>
<h2><strong>6. Plan and Execute it well.</strong></h2>
<p>When you are implementing a solution, have a clear plan on what you will do next and when. You should be Project Manager for your own tasks and projects. I.e Analyze all the potential risks involved in implementing a solution. Make sure to give sufficient time to test a particular solution. Come up with a clear test plan and get your users involved in testing process. On your next assignment, try the following and see the benefits for yourself. This forces you to think about all the possible scenarios even before you start the project.</p>
<ul>
<li>Write down the objective of your project. I.e What is the problem you are trying to solve. What is your success criteria on this project/task?</li>
<li>List down all the tasks required to complete this particular activity and assign appropriate dates for it.</li>
<li>Even when nobody is requesting you to complete a project by certain date, hold yourself responsible by putting a completion date for your project/task.</li>
</ul>
<p>When you really get this implemented on the projected date, give yourself a pat on the back and enjoy your accomplishment. Planning and executing projects well on a consistent basis could potentially become one of a huge motivation factor for administrators to start taking up bigger and complex technology projects.</p>
<h2><strong>7. Use Command Line more than GUI</strong></h2>
<p>Use the command line as much as possible. Whether you are configuring a VLAN on a switch or setting up LDAP/NIS authentication on a Linux server, always use the command line instead of GUI. Following are the advantages of using command line.</p>
<ul>
<li>You can do things very quickly on command line.</li>
<li>GUI prevents you from understanding and learning the functionality happening behind the scenes.<br />
Repetitive things can be automated easily using command line.</li>
<li>Your brain will have fun and Thank you for it.</li>
</ul>
<h2><strong>8. Automate repetitive tasks</strong></h2>
<p>If you perform a task more than once, you should find a way to automate it. It may be very tempting to do the repetitive tasks manually, as can complete the task quickly and know the exact steps to perform the task. But, avoid this temptation and spend some extra effort in automating the task, which will free-up your mind from thinking about that routine tasks. Once you&#8217;ve automated the tasks, you can use your time effectively in learning other new fun stuff.</p>
<h2><strong>9. Support your users and developers</strong></h2>
<p>Administrators are technically very sophisticated and sometimes get frustrated with end-users who don&#8217;t understand technology. But, keep in mind that you have your job mainly because they don&#8217;t understand technology and need your expertise. When user reports an issue that is totally not related to the system and mainly because of user-error, be nice to the person and explain in a non-technical term about why this is not a system issue.</p>
<p>Sometimes developers may deploy something on the server causing some undesirable results. Don&#8217;t get mad on them and blame the problem on the developer. Instead, help the developer to identify the root cause of the problem, by providing sufficient data from the system to narrow down the problem.</p>
<h2><strong>10. Keep learning and have fun.</strong></h2>
<p>If you have mastered the skill on how to do all the above 9 items effectively, you&#8217;ll have more free time on your hand. Keep learning all the times. Anytime someone reports an issue, be curious and treat it as an opportunity to learn something new. Once in a while step aside your computer and spend quality time with your family. On top of all, have fun and enjoy doing the system administration activities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
		<item>
		<title>MPlayer unable to play rmvb files</title>
		<link>http://www.hasanen.com/?p=17</link>
		<comments>http://www.hasanen.com/?p=17#comments</comments>
		<pubDate>Mon, 05 May 2008 10:33:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[computers]]></category>

		<category><![CDATA[Codecs]]></category>

		<category><![CDATA[MPlayer]]></category>

		<category><![CDATA[RMVB]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=17</guid>
		<description><![CDATA[<br/>This is a problem I noticed when I moved from SuSE 10.3 to Ubuntu.

This fix is easy , just link /usr/lib/win32 to /usr/lib/codecs

sudo ln -s /usr/lib/win32 /usr/lib/codecs]]></description>
			<content:encoded><![CDATA[<br/><p>This is a problem I noticed when I moved from SuSE 10.3 to Ubuntu.</p>
<p>This fix is easy , just link /usr/lib/win32 to /usr/lib/codecs</p>
<p>sudo ln -s /usr/lib/win32 /usr/lib/codecs</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
		<item>
		<title>How to recognise good programmers ?</title>
		<link>http://www.hasanen.com/?p=9</link>
		<comments>http://www.hasanen.com/?p=9#comments</comments>
		<pubDate>Sun, 06 Apr 2008 10:57:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[computers]]></category>

		<category><![CDATA[IT]]></category>

		<category><![CDATA[programmering]]></category>

		<category><![CDATA[programmers]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=9</guid>
		<description><![CDATA[<br/>How do you recognise good programmers if you’re a business guy?

It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number [...]]]></description>
			<content:encoded><![CDATA[<br/><p>How do you recognise good programmers if you’re a business guy?</p>
<p>It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone’s a great programmer.</p>
<p>I consider myself to be a pretty good programmer. At the same time, I’ve spent a fair amount of time on the business side of the fence, filtering technical CVs for projects, interviewing people, etc. Thanks to this, I think I have a bit of experience in recognising good programmers, and I want to share it in this article, in the hope that it may help other “business guys” to recognise good programmers. And, who knows, perhaps some programmers who have the potential to be good but haven’t really exploited this can also read this and realise what they need to do to become good (although, as I’ll argue, that’s definitely not accessible to all programmers!).</p>
<p>In his article The 18 mistakes that kill startups, Paul Graham makes the following point:<br />
<span id="more-9"></span><br />
“… what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. That’s actually much harder than it sounds—almost impossibly hard in fact—because business guys can’t tell which are the good programmers. They don’t even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.</p>
<p>In practice what happens is that the business guys choose people they think are good programmers (it says here on his resume that he’s a Microsoft Certified Developer) but who aren’t. Then they’re mystified to find that their startup lumbers along like a World War II bomber while their competitors scream past like jet fighters. This kind of startup is in the same position as a big company, but without the advantages.</p>
<p>So how do you pick good programmers if you’re not a programmer? I don’t think there’s an answer. I was about to say you’d have to find a good programmer to help you hire people. But if you can’t recognize good programmers, how would you even do that?”</p>
<p>I disagree with Mr Graham on this one. I think there are a number of very strong indicators of a “good programmer” (and, conversely, strong indicators of a “not-so-good programmer”) that even a business guy can recognise. I’ll summarise some key indicators and counter-indicators in a list at the end of the article.</p>
<p><span style="color: #ffff00;"><strong>#1 : Passion</strong></span></p>
<p>In my corporate experience, I met a kind of technical guy I’d never met before: the career programmer. This is a person who’s doing IT because they think it’s a good career. They don’t do any programming in their spare time. They’re shocked when they find out I have a LAN and 3 computers at home. They just do it at work. They don’t learn new stuff unless sent on a training program (or motivated by the need to get a job that requires that technology). They do “programming” as a day job. They don’t really want to talk about it outside of work. When they do, they talk with a distinctive lack of enthusiasm. Basically, they lack passion.</p>
<p>I believe that good developers are always passionate about programming. Good developers would do some programming even if they weren’t being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what they’re working on (but while clearly believing, sincerely, that what they’re talking about is really worth talking about). Some people might see that as maladapted social skills (which it is), but if you want to recognise a good developer, this passion for what they’re doing at the expense of social smoothness is a very strong indicator. Can you get this guy to excitedly chat up a technology that he’s using, for a whole half hour, without losing steam? Then you might be onto a winner.</p>
<p><span style="color: #ffff00;"><strong>#2 : Self-teaching and love of learning</strong></span></p>
<p>Programming is the ultimate moving target. Not a year goes by without some new technology robbing an old, established standard blind and changing half the development universe. This is not to say that all good programmers pick up these changes and ride the bleeding edge. However, there’s a class of programmers that will never, ever pick up a new technology unless forced to, because they don’t like learning new stuff. These programmers will typically have learnt programming at university, and expect to get by on whatever skills they picked up there, plus whatever courses their company is willing to send them on.</p>
<p>If you’re thinking of hiring someone as a programmer, and he ever utters the words “I can work with that, just send me on a training course for a week and I’ll be good at it”, don’t hire that guy. A good programmer doesn’t need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.</p>
<p><span style="color: #ffff00;"><strong>#3 : Intelligence</strong></span></p>
<p>Some business people assume that lack of social tact and lack of intelligence are the same. Actually, intelligence has several facets, and emotional/social intelligence is only one of them. Good programmers aren’t dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The cliché of the programmer who’s incapable of having a conversation is just that - a cliché. I’ve been to a few meetings of the London Ruby User Group and I can say that with only a very few exceptions, most people there are smart, talkative, sociable, have varied interests, etc. You wouldn’t look at them chattering away in the pub and think “what a bunch of geeks!” - at least until you approach a group and realise they’re talking about the best way to design a RESTful application with a heavy UI frontend.</p>
<p>This doesn’t mean that they’ll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, you’ll be able to have as great a conversation with them as you would with the most “socially enabled” people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).</p>
<p>Don’t ever hire a dumb person thinking they’re a good developer. They’re not. If you can’t have a great conversation with them in a relaxed social context, they’re very likely not a good programmer. On the other hand, anyone who’s clearly very smart at the very least has a strong potential to be a good or great programmer.</p>
<p><span style="color: #ffff00;"><strong>#4 : Hidden experience</strong></span></p>
<p>This is correlated with the “Passion” point, but it is such a strong indicator that I’d like to emphasise it with its own point.</p>
<p>I started programming when I was about 9, on a Commodore 64. I then migrated onto the PC, did some Pascal. When I was 14 I wrote a raycasting engine in C and Assembler, spent a large amount of time playing with cool graphic effects that you could get your computer to do by messing directly with the video card. This was what I call my “coccoon stage”. When I entered that stage, I was a mediocre programmer, and lacked the confidence to do anything really complicated. When I finished it, I had gained that confidence. I knew that I could code pretty much anything so long as I put my mind to it.</p>
<p>Has that ever appeared on my CV? Nope.</p>
<p>I strongly believe that most good programmers will have a hidden iceberg or two like this that doesn’t appear on their CV or profile. Something they think isn’t really relevant, because it’s not “proper experience”, but which actually represents an awesome accomplishment. A good question to ask a potential “good programmer” in an interview would be “can you tell me about a personal project - even or especially one that’s completely irrelevant - that you did in your spare time, and that’s not on your CV?” If they can’t (unless their CV is 20 pages long), they’re probably not a good programmer. Even a programmer with an exhaustive CV will have some significant projects that are missing from there.</p>
<p><span style="color: #ffff00;"><strong>#5 : Variety of technologies</strong></span></p>
<p>This one’s pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a “good programmer”, it’s inevitable that any “good programmer” over the age of 22 will be fluent in a dozen different technologies. They can’t help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So they’ll do it all the time, and accumulate a portfolio of things they’ve “played around with”. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.</p>
<p>That “unrelated” bit is the subtle twist. Every half-decent java programmer will be able to list a set of technologies like “Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting”, etc.. But those are all part of the same technology stack, all directly related to each other. This is possibly hard to recognise for non-programmers, but it is possible to tell whether their technology stack is varied by talking to them about it, and asking them how the different technologies they know relate to each other. Over-specialisation in a single technology stack is an indicator of a not-so-good programmer.</p>
<p>Finally, if some of those technologies are at the bleeding edge, that’s a good positive indicator. For instance, today (November 2007), knowledge of Merb, Flex, RSpec, HAML, UJS, and many others… Please note that these are fairly closely related technologies, so in a couple of years, someone who knows all these will be equivalent to someone familiar with the Java stack listed in the previous paragraph.</p>
<p>Update: As a clarification to this point, there’s in fact two indicators here: variety and bleeding edge. Those are separate indicators. A good variety of technologies across a period of time is a positive indicator, whether or not the technologies are bleeding edge. And bleeding edge technologies are a positive indicator, whether or not there’s a variety of them.</p>
<p><span style="color: #ffff00;"><strong>#6 : Formal qualifications</strong></span></p>
<p>This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications don’t mean squat when you’re trying to recognise a good programmer. Many good programmers will have a degree in Computer Science. Many won’t. Certifications, like MCSE or SCJP or the like, don’t mean anything either. These are designed to be accessible and desirable to all. The only thing they indicate is a certain level of knowledge of a technology. They’re safeguards that allow technology recruitment people in large corporations to know “ok, this guy knows java, he’s got a certification to prove it” without having to interview them.</p>
<p>If you’re hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really don’t tell you very much about whether the programmer is good. Similarly, disregard age. Some programmers are awesome at 18. Others are awesome at 40. You can’t base your decisions about programmer quality on age (though you might decide to hire people around a certain age to have a better fit in the company; please do note that age discrimination is illegal in most countries!).</p>
<p>As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didn’t do any programming before university, and all his experience starts when she got her first job, she’s probably not a good programmer.<br />
Disclaimer</p>
<p>None of the indicators above or below are sure-fire indicators. You will find great programmers who break some of those moulds. However, my view is, you’ll rarely find a great programmer that breaks all of them. Similarly, you may find poor programmers that meet (or appear to meet) some of these criteria. But I do strongly believe that the more of these criteria a programmer meets, the more likely they are to be one of those elusive “good programmers” that, as a business guy, you need to partner with.<br />
The criteria in bullets</p>
<p>So, in summary, here are some indicators and counter-indicators that should help you recognise a good programmer.</p>
<p>Positive indicators:</p>
<p>* Passionate about technology<br />
* Programs as a hobby<br />
* Will talk your ear off on a technical subject if encouraged<br />
* Significant (and often numerous) personal side-projects over the years<br />
* Learns new technologies on his/her own<br />
* Opinionated about which technologies are better for various usages<br />
* Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”<br />
* Clearly smart, can have great conversations on a variety of topics<br />
* Started programming long before university/work<br />
* Has some hidden “icebergs”, large personal projects under the CV radar<br />
* Knowledge of a large variety of unrelated technologies (may not be on CV)</p>
<p>Negative indicators:</p>
<p>* Programming is a day job<br />
* Don’t really want to “talk shop”, even when encouraged to<br />
* Learns new technologies in company-sponsored courses<br />
* Happy to work with whatever technology you’ve picked, “all technologies are good”<br />
* Doesn’t seem too smart<br />
* Started programming at university<br />
* All programming experience is on the CV<br />
* Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it</p>
<p>Thanks for reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=9</wfw:commentRss>
		</item>
		<item>
		<title>9 Characteristics of Free Software Users</title>
		<link>http://www.hasanen.com/?p=8</link>
		<comments>http://www.hasanen.com/?p=8#comments</comments>
		<pubDate>Sun, 06 Apr 2008 10:45:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=8</guid>
		<description><![CDATA[<br/>

by Bruce Byfield

Operating systems come with cultures as much as codebases. I was forcibly reminded of this fact over the holidays when several family members and neighbors press-ganged me into troubleshooting their Windows computers. Although none of us had any formal computer training, and I know almost nothing about Windows, I was able to solve [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/opensource.png" alt="" width="110" height="94" /></p>
<p>by <span style="font-family: verdana,helvetica,arial;"><a href="http://itmanagement.earthweb.com/feedback.php/http://itmanagement.earthweb.com/osrc/article.php/3720506">Bruce Byfield</a></span></p>
<p>Operating systems come with cultures as much as codebases. I was forcibly reminded of this fact over the holidays when several family members and neighbors press-ganged me into troubleshooting their Windows computers. Although none of us had any formal computer training, and I know almost nothing about Windows, I was able to solve problems that baffled the others &#8212; not because of any technical brilliance, but because the free software culture in which I spend my days made me better able to cope.</p>
<p><span id="more-8"></span><br />
The origins of these cultures are more or less obvious. Windows and other proprietary software are the products of a commercial software market. In this culture, information flows mainly in one direction &#8212; from the manufacturer &#8212; and companies&#8217; obsession with so-called intellectual property and vendor lock-in encourages them to force users into the role of unquestioning consumers.</p>
<p>By contrast, free software culture has two sources. The first is the Unix culture that Eric Raymond describes in The Art of Unix Programming, with its emphasis on excellence. The second is the Free Software Definition&#8217;s four freedoms.</p>
<p>True, end-users are unlikely to be interested themselves in the freedoms to study or improve the program. But the availability of these freedoms for developers conditions everybody&#8217;s expectations. Moreover, the freedoms to run and redistribute programs relieve everyone of some of the more unwelcome aspects of proprietary culture. At any rate, together these sources create a more active, more demanding set of users than is found in proprietary software.<br />
Unsurprisingly, these differences in origins lead to entirely different sets of expectations. Exceptions do occur, of course, and, the more expertise users have, the less pronounced the differences are. Moreover, free software like FireFox and OpenOffice.org are becoming more commonplace on proprietary platforms. And, similarly proprietary culture is seeping into free software as it becomes big business.</p>
<p>Still, for the most part, you can expect free software users to differ from proprietary in a number of fundamental ways. Furthermore, whether you are aware of these differences can have considerable impact in your success when marketing or developing software.</p>
<p><strong>1) Free software users expect open licenses and no activation methods</strong></p>
<p>Proprietary vendors like Adobe and Xara who have experimented with GNU/Linux versions of the software usually conclude that free software users will not buy commercial software. However, as companies such as Mandriva and Red Hat have proved, such conclusions are more of a failure to conceive of alternative business methods than an observation of reality. If nothing else, business users will often buy commercially in order to have the comfort of a traditional relationship with a vendor.</p>
<p>However, given any sort of chance, free software users do reject proprietary licenses or activation methods that restrict their freedom to copy and redistribute software. Some may endure proprietary licenses if comparable functionality is unavailable elsewhere. Others may accept a proprietary license for non-essential software like games. But, at the first sign of an alternative, they will abandon a proprietary product. And many, of course, will not even accept these temporary compromises.</p>
<p>If you want to sell to the free software community, forget about making money on the software and see what services you can develop around the software. Or do you think it&#8217;s an accident that file-sharing and free culture have roots in the free software community?</p>
<p><strong>2) Free software users expect regular upgrades and patches</strong></p>
<p>Free operating systems are set up for instant gratification. You want a piece of software? Switch to the root account, and in five minutes you have it installed and ready to use without rebooting.</p>
<p>This daily functionality results in the same high expectations for upgrades and patches. In free software, upgrades and patches are not a once yearly event complete with beta versions and release candidates. They are closer to a daily occurrence. Project maintainers take this responsibility so seriously that many have been known to take personal time from work in order to get a bug or security patch out as quickly as possible.</p>
<p><strong>3) Free software users expect to work the way they choose</strong></p>
<p>Switching from Windows to GNU/Linux, the first thing that users are likely to notice is how many customization options are available just for the look and the operation of the desktop. If anything, they are likely to feel that too many options are available. Often, they cannot imagine ever wanting half the options.</p>
<p>These options are a direct result of the sense of control that free software encourages in its users. Not only do they expect to use menus, toolbars or keyboard shortcuts as their preference dictates, but they expect to control the color, widgets and even placement of desktop features easily and efficiently. If they cross the other way, going from GNU/Linux to Windows, they are apt to feel restricted, that they are being forced to do things the way that the developers want them to do, rather than consulting only their own preferences.</p>
<p><strong>4) Free software users want control of their own systems</strong></p>
<p>For a free software user, one of the most irksome aspects of Windows XP or Vista is that you are constantly being nagged by pop-ups. The system itself notifies you about available upgrades, possible security risks, and the current state of your system. And it&#8217;s not unusual for your manufacturer&#8217;s software to have its own messages as well as Java and several other programs. Meanwhile, the operating system and one or two other basic pieces of software are phoning home, and lockdown technologies are policing your computing. Sometimes, it seems like your work is being interrupted every 30 seconds or so.</p>
<p>Desktops in free software operating systems are starting to have notifications, but, so far, they are for the entire system. Even more importantly, they can be turned off. Experienced GNU/Linux or FreeBSD users know that routine system events belong in log files, where they can be read at leisure.</p>
<p>As for lockdown or surveillance technologies, forget it. Many free software users are suspicious of comparatively benign automatic survey tools like the Debian Popularity Contest or Smolt, let alone something that takes control from their hands.</p>
<p><strong>5) Free software users explore</strong></p>
<p>I was able to solve two of the Windows problems I faced over the holidays in a matter of moments. One was simply a case of plugging the monitor into the dedicated video card instead of the onboard on the mother board. The other was solved by using a file manager instead of the dedicated tools that came with the new hardware. Asked why they didn&#8217;t look around for solutions, those I was helping hemmed and hawed, but eventually they more or less admitted that they were afraid to try.</p>
<p>To me, these reactions epitomize the learned helplessness that proprietary software usually encourages. With only a limited number of tools visible from the desktop &#8212; many buried several dialogs down &#8212; and most of those tools giving no indication of how they achieve their results &#8212; the average Windows user has little incentive to learn how to administer their systems.</p>
<p>However, on free software systems, exploration is easy. Most configuration, for instance, is done using plain text files that you can view from your file manager. And since exploration leads to quick and effective results, the users of free operating systems are encouraged to explore and soon grow to expect the ability to do so. Place them on a Windows system, and they&#8217;ll probably complain that they are isolated from the system as effectively as if they were trying to type wearing mittens.</p>
<p><strong>6) Free software users expect to help themselves</strong></p>
<p>Free software users have no objection to help files. If anything, they love them. To the traditional Unix man pages, they have info pages at the command line, and online help on the desktop. But they are far less likely than proprietary users to expect formal technical support. Instead, what they expect are the means to help themselves &#8212; not only help files, but easily accessible configuration files (preferable in human-readable plain text), and mail forums and IRC channels where they can consult each other. A Do-it-yourself philosophy runs deep in almost every free software user. The longer they have been using it, the deeper it runs.</p>
<p><strong>7) Free software users don&#8217;t fear the command line</strong></p>
<p>To Windows users, the command line is a fearful place. And no wonder, considering its awkwardness and limitations; a new one was one of the features promised for Vista and dropped. But the command line is much more friendly in free operating systems than in Windows, and many users soon become comfortable with it.</p>
<p>In almost every case, a typed command has more options and power than its graphical equivalent in free software. Users will gladly use the graphical interface, but, when its limitation is reached, many still happily drop down into the command line. Partly, it&#8217;s a geek macho thing, but a large part of the habit is sheer practicality. Unless interface designers manage to offer the same functionality as the command line, that&#8217;s not going to change &#8212; and, frankly, not many are trying to do so.</p>
<p><strong> <img src='http://www.hasanen.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Free software users learn software categories, not programs</strong></p>
<p>Blocked from easily learning about their operating system, consumers of proprietary software operate as if casting magic spells &#8212; ritual recipes that, if used exactly right, will give them the desired results. Added to the fact that proprietary software can be expensive, they tend to become familiar with one office suite, and one web browser and mail reader. As a result, switching software can be traumatic to them.</p>
<p>By contrast, free software users come to have both the system knowledge and the software selection to experiment. They may settle on one piece of software in each category, but only after experimenting with all the possibilities. Should they need a feature that their choice lacks, they&#8217;ll find a temporary or permanent replacement, trusting that other features they need will be in both programs. Far more than proprietary users, their loyalty is provisional, and dependent on quality and selection. They lack the financial investment that keeps proprietary users locked-in to a particular vendor, and see no reason to change that.</p>
<p><strong>9) Free software users expect access to developers and other employees</strong></p>
<p>The free software community prides itself on being a meritocracy, where status is the result of accomplishment and contribution. Since status depends on what you have done recently, it is less fixed than in a traditional office. Even where obvious leaders exist, they are more often first among equals than managers with direct control over others. That, in turn, means that community members cannot isolate themselves behind a wall of authority. Community members generally have direct access to project leaders, generally via email and IRC. Nor do most project leaders object to this arrangement.</p>
<p>Even in companies, traces of this flat structure exists. Instead of resisting it, sensible managers will accept it and claim a special place solely because of their position.</p>
<p><strong>Conclusion</strong></p>
<p>How long these characteristics of free software will continue to exist is uncertain. In the last few years, a new category of free operating system users has begun to emerge: those who remain entirely on the desktop. In the rush to become more user-friendly &#8212; which usually means more like Windows &#8212; the chance exists that the free software user culture will become unrecognizable to long-time users in the next few years.</p>
<p>However, that seems unlikely. For the most part, the purely desktop user&#8217;s sensibilities are not sapping the free software culture so much as being accommodated and isolated as a special case. Unless they are content to stay in their normal routines, within a year or two, desktop users will face some problem that they cannot solve without becoming either more adventurous or more in contact with the mainstream culture. When that happens, they will have taken the first steps away from being passive consumers and towards becoming the owners of their own machines.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=8</wfw:commentRss>
		</item>
		<item>
		<title>Windows Authentication via LDAP</title>
		<link>http://www.hasanen.com/?p=7</link>
		<comments>http://www.hasanen.com/?p=7#comments</comments>
		<pubDate>Sun, 06 Apr 2008 10:38:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Authentication]]></category>

		<category><![CDATA[LDAP]]></category>

		<category><![CDATA[openLDAP]]></category>

		<category><![CDATA[pigina]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=7</guid>
		<description><![CDATA[<br/>

I know how easy it is to make Unix machines authenticate to LDAP server, but with Windows to do that you need a Domain Controller !
If you just want to do simple LDAP authentication , then you can use this login replacement for windows : www.pgina.org

It is called pGIna , and works just like pam [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/ldap.gif" alt="" /></p>
<p>I know how easy it is to make Unix machines authenticate to LDAP server, but with Windows to do that you need a Domain Controller !<br />
If you just want to do simple LDAP authentication , then you can use this login replacement for windows : www.pgina.org</p>
<p>It is called pGIna , and works just like pam on linux , I tried it and it works very well with openldap , there are plugins for other things&#8230;.like authenticating against MySQL database !</p>
<p>This is really cool. you can create users on LDAP or MySQL&#8230;..and no need for a Domain Controller. It also supports some Domain functions , like startup scripts, and mobile profiles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=7</wfw:commentRss>
		</item>
		<item>
		<title>Using libusb, writing linux usermode drivers</title>
		<link>http://www.hasanen.com/?p=6</link>
		<comments>http://www.hasanen.com/?p=6#comments</comments>
		<pubDate>Sun, 06 Apr 2008 10:31:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[libusb]]></category>

		<category><![CDATA[linux usb]]></category>

		<category><![CDATA[usb driver]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=6</guid>
		<description><![CDATA[<br/>

This code is an example for using libUSB to deal with USB devices and controllering them without writing kernel modules.
It is usefull if you want to control homemade usb devices or if you want to write a driver for unsupported usb device in your OS.
The following example searches for any USB mouse attached to your [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/linuxusb.gif" alt="" /></p>
<p>This code is an example for using libUSB to deal with USB devices and controllering them without writing kernel modules.<br />
It is usefull if you want to control homemade usb devices or if you want to write a driver for unsupported usb device in your OS.<br />
The following example searches for any USB mouse attached to your system , removes the kernel driver , opens the device and keeps polling it for bytes and prints them.</p>
<p><span id="more-6"></span><br />
<code> #include &lt; iostream &gt;<br />
#include &lt; cstdlib &gt;<br />
#include &lt; stdio.h &gt;<br />
#include &lt; string.h &gt;<br />
#include &lt; usb.h &gt;<br />
#include &lt; usbpp.h &gt;</code></p>
<p>#define DEBUG_LEVEL 0</p>
<p>#define PROTOCOL_MOUSE 2<br />
#define PROTOCOL_KEYBOARD 1</p>
<p>using namespace std;</p>
<p>struct usb_bus *busses,*bus,*dbus;</p>
<p>int findDevice(int PROTOCOL,struct usb_device *device){<br />
bool found=false;<br />
struct usb_device *dev;</p>
<p>usb_find_busses();<br />
usb_find_devices();<br />
busses=usb_get_busses();<br />
for (bus=busses;bus &amp;&amp; !found;bus=bus-&gt;next){<br />
for (dev=bus-&gt;devices;dev;dev=dev-&gt;next){<br />
if (dev-&gt;config-&gt;interface-&gt;altsetting-&gt;bInterfaceProtocol==PROTOCOL) {dbus=bus;found=true;break;}<br />
}//end of devices loop<br />
}//end of busses loop<br />
if (!found) return -1;<br />
*device=*dev;<br />
return 1;<br />
}</p>
<p>int main(int argc, char *argv[])<br />
{<br />
struct usb_device *dev;<br />
char *buf;<br />
int n,x,r;<br />
char string[50];<br />
bool found=false;<br />
usb_dev_handle *fdev;<br />
usb_set_debug(DEBUG_LEVEL);<br />
usb_init(); //initilize the usb library</p>
<p>if (findDevice(PROTOCOL_MOUSE,dev)&lt;0){ //search for a USB mouse , you can change it to keyboard,joystick&#8230;etc<br />
printf(&#8221;Unable to find the required device !nexsitingn&#8221;);<br />
exit(1);<br />
}</p>
<p>printf(&#8221;Now we are dealing with device from vendor ID : %d (%x) n&#8221;,dev-&gt;descriptor.idVendor,dev-&gt;descriptor.idVendor);<br />
printf(&#8221;Trying to open the device&#8230;n&#8221;);<br />
if (fdev=usb_open(dev)) printf(&#8221;Device opened successfully.n&#8221;); //Here we open the device , just like fopen<br />
else { printf(&#8221;Operation failed :-(n&#8221;); exit(1);}</p>
<p>buf=(char*)calloc(1,100);<br />
if (usb_get_driver_np(fdev,0,buf,100)) printf(&#8221;Kernel Using Driver : %sn&#8221;,buf); //Trying to get the kernel driver name (optional)<br />
else printf(&#8221;Could not read the driver name :-(n&#8221;);</p>
<p>if (usb_detach_kernel_driver_np(fdev,0)) printf(&#8221;Device detached successfully from the kernel.n&#8221;); //detach the driver from the kernel , seems to be just like rmmod , but it always returns errors , however , it wroks<br />
else printf(&#8221;Error detaching the device :-(n&#8221;);</p>
<p>if (r=usb_claim_interface(fdev,0)) printf(&#8221;Interface Claimed !!n&#8221;); //reserving the device interface for our applicatoin , if another driver/software is using the device , it will return &#8216;interface busy&#8217;<br />
printf(&#8221;Interface Claim Status : %dn&#8221;,r);</p>
<p>printf(&#8221;Device Protocol : %dn&#8221;,dev-&gt;descriptor.bDeviceProtocol);<br />
printf(&#8221;Report Length : %dn&#8221;,dev-&gt;descriptor.bLength);<br />
printf(&#8221;Decriptor Type : %dn&#8221;,dev-&gt;descriptor.bDescriptorType);<br />
printf(&#8221;End Points : %dn&#8221;,dev-&gt;config-&gt;interface-&gt;altsetting-&gt;bNumEndpoints);<br />
printf(&#8221;Interface Class : %dn&#8221;,dev-&gt;config-&gt;interface-&gt;altsetting-&gt;bInterfaceClass);<br />
printf(&#8221;Protocol : %dn&#8221;,dev-&gt;config-&gt;interface-&gt;altsetting-&gt;bInterfaceProtocol);<br />
printf(&#8221;Interface Number: %dn&#8221;,dev-&gt;config-&gt;interface-&gt;altsetting-&gt;bInterfaceNumber);<br />
printf(&#8221;Device Filename : %sn&#8221;,dev-&gt;filename);<br />
printf(&#8221;Bus Dir Name : %sn&#8221;,dbus-&gt;dirname);</p>
<p>usb_get_string_simple(fdev,dev-&gt;descriptor.iManufacturer,string,sizeof(string));<br />
printf(&#8221;Device Manfucaturer : %sn&#8221;,string);<br />
usb_get_string_simple(fdev,dev-&gt;descriptor.iProduct,string,sizeof(string));<br />
printf(&#8221;Product Name : %sn&#8221;,string);<br />
usb_get_string_simple(fdev,dev-&gt;descriptor.iSerialNumber,string,sizeof(string));<br />
printf(&#8221;Device Serial Number: %sn&#8221;,string);<br />
printf(&#8221;End point addresses : 0x%xn&#8221;,dev-&gt;config-&gt;interface-&gt;altsetting-&gt;endpoint-&gt;bEndpointAddress);</p>
<p>while (string[0]!=3){<br />
string[0]=string[1]=string[2]=string[3]=0;<br />
r=usb_interrupt_read(fdev,0&#215;81,string,4,0); //I am reading 4 bytes using interrupt read , note that not every usb device supports interrupt read/write<br />
for (x=0;x&lt;4 &amp;&amp; r&gt;0;x++)<br />
printf(&#8221;%d &#8220;,string[x]);<br />
printf(&#8221;n&#8221;);<br />
usb_clear_halt(fdev,0&#215;81); I need to reset the device node because of some devices (usually keyboards) keep sending the same bytes even after releasing the key !<br />
}</p>
<p>printf(&#8221;Closing Device.n&#8221;);<br />
usb_release_interface(fdev,0);<br />
usb_close(fdev);</p>
<p>return EXIT_SUCCESS;<br />
}<br />
To compile this code , you need usblib and the library headers.<br />
The output of this program will be 4 numbers<br />
x1 x2 x3 x4</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=6</wfw:commentRss>
		</item>
		<item>
		<title>Postfix not creating mail directories</title>
		<link>http://www.hasanen.com/?p=5</link>
		<comments>http://www.hasanen.com/?p=5#comments</comments>
		<pubDate>Sun, 06 Apr 2008 10:26:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[MTA]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://www.hasanen.com/?p=5</guid>
		<description><![CDATA[<br/>

I got this problem with postfix 2 , when there is incoming mail for local user , it doesn't create a maildir in /var/mail.
I have a user called ittest created in LDAP , and mapped to receive emails from another local user through /etc/aliases.
I fixed the problem by uncommenting this line from main.cf :
local_recipient_maps =
Leaving [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/postfix.gif" alt="" /></p>
<p>I got this problem with postfix 2 , when there is incoming mail for local user , it doesn&#8217;t create a maildir in /var/mail.<br />
I have a user called ittest created in LDAP , and mapped to receive emails from another local user through /etc/aliases.<br />
I fixed the problem by uncommenting this line from main.cf :<br />
local_recipient_maps =<br />
Leaving it empty like that means that postfix should accept emails for any loca user with no restriction , that was the default for postfix 1.x<br />
There was no need to add any LDAP specific options to postfix.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=5</wfw:commentRss>
		</item>
		<item>
		<title>MSN , GTalk , Yahoo voice chat on linux</title>
		<link>http://www.hasanen.com/?p=4</link>
		<comments>http://www.hasanen.com/?p=4#comments</comments>
		<pubDate>Sun, 06 Apr 2008 08:36:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[IM]]></category>

		<category><![CDATA[Messenger]]></category>

		<category><![CDATA[Voice Chat]]></category>

		<guid isPermaLink="false">http://hasanen.com/?p=4</guid>
		<description><![CDATA[<br/>

Most newbies are asking me how to do things they used to do on Windows....
There are alternatives for almost everything...but when it comes to voice/video chat on Yahoo/MSN/GTalk , then it is a dead end !

It is true that Gyach Enhanced used to support voice/video for yahoo since more than 2 years....but it is not [...]]]></description>
			<content:encoded><![CDATA[<br/><p><img src="http://www.hasanen.com/images/gaim.gif" alt="" width="92" height="92" /></p>
<p>Most newbies are asking me how to do things they used to do on Windows&#8230;.<br />
There are alternatives for almost everything&#8230;but when it comes to voice/video chat on Yahoo/MSN/GTalk , then it is a dead end !</p>
<p>It is true that Gyach Enhanced used to support voice/video for yahoo since more than 2 years&#8230;.but it is not maintained anymore, and wasn&#8217;t working all the time.</p>
<p>Now I found a really good alternative for calling almost everything !</p>
<p>it is called gtalk2vip.com , read the faq here : http://gtalk2voip.com/faq.shtml</p>
<p>To start , you need a SIP client , any SIP client should work (ekiga,gizmo,linphone&#8230;&#8230;) personally I use twinkle on linux and I already have a voip account.<br />
If you don&#8217;t have a voip account configured , you can get free one from gtalk2voip&#8230;..or if you use Ekiga, it will create one for you during the first time wizard.<br />
Once you have the voip account configure in your client , you can start calling other IMs :</p>
<p># GTalk: user@domain.com can be reached by calling to sip:user_at_domain.com@gtalk.gtalk2voip.com<br />
# MSN: user@domain.com can be reached by calling to sip:user_at_domain.com@msn.gtalk2voip.com<br />
# Yahoo: user@yahoo.com can be reached by calling to sip:user_at_yahoo.com@yahoo.gtalk2voip.com</p>
<p>I tested it on GTalk ,MSN and the voice was very clear and quick&#8230;.but it didn&#8217;t work with Yahoo Messenger for some reason.<br />
Regarding Gizmo , last month I mentioned that the new version supports calls to yahoo/msn/gtalk. Later , I found that it uses the same gtalk2voip service. So it is not like they have done anything&#8230;&#8230;(except importing your contacts).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanen.com/?feed=rss2&amp;p=4</wfw:commentRss>
		</item>
	</channel>
</rss>
