Installing pycrypto on Windows 8

While trying to install pycrypto on Windows 8, because it was a requirement for “paramiko” which I needed for some SSH stuff, I kept running into failure after another. To summarise, you need to have Visual Studio 2008 installed (there is an express version available free, and there is also likely a microsoft SDK package that includes the Visual C++ 9.0 compiler). After sorting all of these out however, I still had one persistent type of problem:

warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
 Traceback (most recent call last):
 File "<string>", line 1, in <module>
 File "c:\users\fanen\appdata\local\temp\pip_build_Fanen\pycrypto\setup.py", line 456, in <module>
 core.setup(**kw)
 File "c:\Python27\lib\distutils\core.py", line 152, in setup
 dist.run_commands()
 File "c:\Python27\lib\distutils\dist.py", line 953, in run_commands
 self.run_command(cmd)
 File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
 cmd_obj.run()
 File "c:\Python27\lib\site-packages\setuptools\command\install.py", line 53, in run
 return _install.run(self)
 File "c:\Python27\lib\distutils\command\install.py", line 563, in run
 self.run_command('build')
 File "c:\Python27\lib\distutils\cmd.py", line 326, in run_command
 self.distribution.run_command(command)
 File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
 cmd_obj.run()
 File "c:\Python27\lib\distutils\command\build.py", line 127, in run
 self.run_command(cmd_name)
 File "c:\Python27\lib\distutils\cmd.py", line 326, in run_command
 self.distribution.run_command(command)
 File "c:\Python27\lib\distutils\dist.py", line 972, in run_command
 cmd_obj.run()
 File "c:\users\fanen\appdata\local\temp\pip_build_Fanen\pycrypto\setup.py", line 253, in run
 build_ext.run(self)
 File "c:\Python27\lib\distutils\command\build_ext.py", line 337, in run
 self.build_extensions()
 File "c:\users\fanen\appdata\local\temp\pip_build_Fanen\pycrypto\setup.py", line 150, in build_extensions
 build_ext.build_extensions(self)
 File "c:\Python27\lib\distutils\command\build_ext.py", line 446, in build_extensions
 self.build_extension(ext)
 File "c:\Python27\lib\distutils\command\build_ext.py", line 496, in build_extension
 depends=ext.depends)
 File "c:\Python27\lib\distutils\msvc9compiler.py", line 475, in compile
 self.initialize()
 File "c:\Python27\lib\distutils\msvc9compiler.py", line 385, in initialize
 vc_env = query_vcvarsall(VERSION, plat_spec)
 File "c:\Python27\lib\distutils\msvc9compiler.py", line 301, in query_vcvarsall
 raise ValueError(str(list(result.keys())))
 ValueError: [u'path']

It appears that the function “query_vcvarsall” fails if it doesn’t find a set of 4 environment variables (this is some dodgy coding to me :p):

  • path
  • include
  • lib
  • libpath

You may need to create these environment variables, and place in them the appropriate paths for your PC.

On my 64-bit windows 8 machine with 64-bit Python 2.7.6, I have the following:

LIB = C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\LIB;%WindowsSdkDir%lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;C:\Python27\Lib;%LIB%
INCLUDE = C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE;%WindowsSdkDir%include;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\Python27\include;%INCLUDE%
PATH = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages;%WindowsSdkDir%bin;C:\Python27\Scripts;C:\Python27;%PATH%
LIBPATH = C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\LIB;C:\Python27\Lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;%LIBPATH%

After that, I am able to use pip to install pycrypto.

Note that my variables may contain paths which are redundant, but I arrived there after a windy path of experimentation. After It worked, I said to myself: “if it ain’t broke, don’t fix it.”

The following site was very helpful in showing me alternative ways. I like what the guy did to the python utility scripts. Just hack them to do what I want. None of the cruft of general-purpose code. Just tell the bloody system I have Visual Studio 9.0 😉 http://blog.victorjabur.com/2011/06/05/compiling-python-2-7-modules-on-windows-32-and-64-using-msvc-2008-express/

 

 

Windows 8 SSD 100% disk usage

Upgraded my Windows 8.1 PC by installing a 240GB Crucial SSD, and the performance became worse than with a spinning disk.

In my instance, I was able to improve the experience simply by installing Intel Rapid Storage tools drivers (downloaded from MSI’s site for my specific motherboard). I accepted all defaults. I was using an MSI motherboard. This just might be your solution.

Openssl Hint for today

You find yourself trying to look at a certificate with Openssl (I’m using the cygwin version of openssl on windows 7):

$ openssl.exe x509 -in certificate.crt -text
unable to load certificate
2675716:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

Openssl error messages are so cryptic, I tried looking at the code to deduce what it meant, and even that didn’t go so well.

The error message shown above doesn’t really have much to do with “trust”. It most likely means that your certificate is not in PEM format. The most common other format that certificates can be in is DER. If you wanted to view the certificate in DER format anyway, you would do this:

$ openssl.exe x509 -inform DER -in certificate.crt -text

the -inform argument allows you to specify what format the certificate you are trying to examine is in. The -text argument says “display it on screen”, and the -in argument specifies the certificate file name.

If you wanted to convert that certificate from DER to PEM, you would say:

$ openssl.exe x509 -inform DER -outform PEM -out ./PEMcert.crt -in DERcert.crt

-outform PEM says the output format should be PEM, and the -out argument specifies the filename to give the converted certificate.

 

 

Jquery .load() makes the target blank

If you run into the problem where calling .load(url) on an element makes it turn blank, you very likely have an unexpected space (” “) in your url.

You should re-examine it, it may be a trailing or leading space, which will make it difficult to see with the naked eye. Try calling the javscript .trim() on the url string.

At the time of this writing, I was using version 1.10.2.

HTTPD Alarm Clock

When your apache web server dies when starting with a message that goes something like “alarm clock” or SIGALARM, your solution is to get rid of the file:

/var/run/httpd.pipe

Strace helped to track this one down:

[admin@theSuperStar] httpd # strace /usr/sbin/httpd
open("/var/run/httpd.pipe", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 0666) = ? ERESTARTSYS (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
+++ killed by SIGALRM +++

[admin@theSuperStar] httpd # mv /var/run/httpd.pipe /var/run/httpd.pipe.off
[admin@theSuperStar] httpd #/etc/init.d/httpd start 
Starting httpd: [  OK  ]

Serviio and high quality LPCM audio output

So a quick post here. If you want your Serviio instance to push 16-bit, 2 channel LPCM audio to your DLNA client or renderer, you need to configure your audio profile like this:

<Audio targetContainer="lpcm" aSamplerate="48000" aBitrate="1620">

Basically, aBitrate=”1620″ for LPCM means 16 bit 2 channel. The default (as of this writing) appears to be 192, which makes no sense, and gives you horrible 1-bit 2 channel LPCM.

If you need help with editing the audio profile, read this slightly technical article: http://www.serviio.org/index.php?option=com_content&view=article&id=16 

Now go have fun 🙂

The Rift Between Airtel Nigeria and Its Call Center Agents

The Sound of Abuja

Airtel is the current name of the estranged Second Mobile operator to launch its Network in Nigeria back in 2002. The Company started out as Econet, became Vee Networks, and then switched to V-Mobile before people could get accustomed to the new name and then settled on being owned and operated by Celtel for a few years. It spent another few years going by the moniker “Zain” and in 2010, morphed into Airtel.

Upon acquiring the totem, Airtel greeted Nigeria with a glowing marquee of price cuts, an event which attracted significant media coverage and was well liked by the people. Behind the scenes however, more straight-faced business measures were being adopted. For one, the Call Centre operations which had previously been handled by 3 mostly local firms: Bezelyn, CCSNL and HR Indexx were slated for outsourcing to two large firms with Indian roots: Spanco and Tech Mahindra. This move was expected by the affected call centre agents to imply the transference of their employment to the new firms–basically a managerial concern. The average work routine wasn’t expected to change much, the agents were assured.

Some ancillary concerns of the call centre agents that had been addressed to varying extents, and which had been languishing in recent times were brought to the fore again. For instance, the call centre agents had always expressed a desire to have “official” phone lines, at least to ease communication with their colleagues. They considered it to be a reasonable perk, considering that they worked for a telecommunications company. Most of the agents also did not have identity cards, and those who did still held cards from when the company was owned by Zain.

Towards the end of the first half of this year, curious events began to unfold. A good number of pregnant women got fired under mysterious circumstances, and practically all call centre agents who had gone on leave did not receive their full allowances and entitlements on pay day. Other agents had their pay delayed and no explanations were forthcoming. With no pay, and no explanations, and a few absent colleagues, the agents responded by “downtooling”. An action described as being present at work, but not being very efficient. This happened on the 9th of Jun 2011, and it attracted some attention because the people who were fired were re-instated, and the Airtel management promised to pay back salaries in full and work towards providing phone lines for the agents and producing identity cards for them.

Calm ensued but was short-lived because a fresh controversy arose concerning the payment of bonuses following a profitable fiscal year for the company. The call centres are organised with the lowest rung being the “agent”, directly behind the “Team Lead”, before the “Assistant Manager”, and all headed by the “Manager”. End of year bonuses were received by everyone except the agents, and feeling short-changed they embarked upon a Strike action on the 18th of July 2011. Call centres were closed as part of the action, and again the Management resumed negotiations, promising to pay ₦21,000 (twenty one thousand Naira) as bonuses to the call centre agents.

Spanco and Tech Mahindra (it is a bit confusing who exactly is in charge) informed the agents that the current salary structure could not be sustained, and the agents would have to accept a 60% pay cut, or a 50% reduction in workforce, as well as changes to their working schedules, raising the working hours to 8 hours a day, 6 days a week, no breaks, 6 days of annual leave and a maximum of 12 days of sick leave per annum. This deal was presented to the agents early September and it appears that no official notice was served, which culminated in 3000 people showing up at work on Friday the 30th of September 2011, surprised to receive notice of termination of their appointment, and receiving 1 part of a multi-part text message informing them that the call centre will be closed at midnight because an agreement could not be reached between the management of Airtel and the call centre outsourcing partners (Bezelyn, CCSNL and HR Indexx). One of such texts read as:

Dear Call Centre Agent, the Management of CCSNL would like to inform you that our contract with Airtel expires today and therefore we would like to inform you t

It is a multi-part text message which was not completely delivered.

Currently, customer care calls emanating from Nigeria are being routed to Ghana following the closure of the two call centres in Lagos and Abuja.

Airtel’s most official sounding response to the entire storm is as follows:

Artel Call Centre Shutdown: The True Position

Contrary to the rumours and outright falsehood being peddled across certain social media platforms, Airtel Nigeria has not sacked any of its employees and does not have any intention to cut staff salaries. Airtel employees remain committed.

Regarding the recent call centre shutdown, the contract of an agency to one of our partners expired yesterday, September 30th. About 40 percent of call centre workers are employees of this agency. Despite the contract expiration, several employees of this agency will be re-absorbed into the system. So, the issue of mass sack, salary cut and poor benefits are outright falsehood.

Airtel is committed to realizing its vision of being the most loved brand in Nigeria and will continue to ensure that the dialogue between its call centre partners and their employees is fruitful and productive.

We also remain passionate in our quest to continue to provide our customers with the best service experience.

This statement is however at odds with the facts as at Midnight of 30 September 2011:

  • The privileged agents who have official lines were removed from the Airtel Staff Closed User Group which allowed colleagues to communicate with each other free of charge.
  • The official lines were stripped of all benefits, and functioned like regular phone lines.
  • Affected staff email accounts were deactivated.