tag:blogger.com,1999:blog-24344485833330995342024-03-18T09:47:44.878+00:00Code SinghSonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.comBlogger78125tag:blogger.com,1999:blog-2434448583333099534.post-19248116736989451302020-07-18T21:51:00.008+01:002021-06-18T12:24:14.608+01:00How To Build A Live Raspberry Pi Led Football (Soccer) Scoreboard<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkG6l23uDoEI4hNPnSJSnakvJtfRRVpi3awz-vC4tT_bQ_O7NqYcmoOOQ2vydEm_DT_2fSJE5-Lm0mm0jAm2Xw1ZEyMZOQZbruK0z-xfJ4C8Ok0-6MdxIpOOv0Ybq7xbeYiKHx32UnoSvx/s1600/IMG_20200718_213649.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1111" data-original-width="1600" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkG6l23uDoEI4hNPnSJSnakvJtfRRVpi3awz-vC4tT_bQ_O7NqYcmoOOQ2vydEm_DT_2fSJE5-Lm0mm0jAm2Xw1ZEyMZOQZbruK0z-xfJ4C8Ok0-6MdxIpOOv0Ybq7xbeYiKHx32UnoSvx/s400/IMG_20200718_213649.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div><p>** UPDATE: You can buy this kit from the <a href="http://www.codesingh.com/p/shop.html" target="_blank">CodeSingh shop</a> ** <br /></p><p>Keep an eye on your teams score without having to constantly refresh your mobile by building this live LED Football (Soccer) scoreboard.<br />
<br />
Inspired by <a href="https://www.reddit.com/r/raspberry_pi/comments/ee5kj7/build_your_own_live_nhl_scoreboard_with_raspberry/" target="_blank">this post</a> by <a href="https://www.reddit.com/u/LobsterThief" target="_blank">u/LobsterThief</a> on Reddit.com and special mention to <a class="_3t5uN8xUmg0TOwRCOGQEcU" href="https://www.reddit.com/u/RiffnShred/" rel="noopener nofollow ugc" target="_blank">/u/RiffnShred</a><span class="_3t5uN8xUmg0TOwRCOGQEcU"> for the original idea</span><br />
<br />
</p><h2>
Hardware</h2>
<ul>
</ul>
<ul>
<li><span class="a-size-large" id="productTitle">Raspberry Pi Zero WH</span></li>
<li><span class="a-size-large" id="productTitle">64x32 indoor RGB full color led display screen (<a href="https://amzn.to/36Tou8q" target="_blank">buy here</a> affiliate link)</span></li>
<li>Adafruit RGB Matrix Bonnet for Raspberry Pi (<a href="https://thepihut.com/products/adafruit-rgb-matrix-bonnet-for-raspberry-pi-ada3211?variant=12364062556222&currency=GBP&gclid=CjwKCAiA7t3yBRADEiwA4GFlI_VkoupP1-l9MVH0Yhwjh610LDKz3J0mUkEnvvnqoPJiuXxRHncQ1xoCan0QAvD_BwE" target="_blank">buy here</a> affiliate link) </li>
<li>
5 amp power supply. (I got one from a local mobile phone shop) </li>
<li>16 GB MicroSD. </li>
</ul>
<h2>
Software</h2>
<ul>
<li>Raspberry Pi OS Lite https://www.raspberrypi.org/software/operating-systems/</li>
<li>Rpi-rgb-led-matrix https://github.com/hzeller/rpi-rgb-led-matrix</li>
<li>Rpi-led-scoreboard https://github.com/CodeSingh/rpi-led-scoreboard</li>
</ul>
<h2>
Construct and Install Software</h2>
Firstly go through points 4 to 6 from <a href="https://howchoo.com/g/otvjnwy4mji/diy-raspberry-pi-nhl-scoreboard-led-panel#gather-your-materials" target="_blank">Learn how to build your own NHL Game Day Scoreboard using a Raspberry Pi and LED panel!</a><br />
<br />
Keep the micro sd in your computer<br />
<br />
Create an empty file called <b>ssh</b> (no extension just ssh) and copy to the sd card<br />
<br />
Create a file called <b>wpa_supplicant.conf</b><br />
<br />
<blockquote class="tr_bq">
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br />
update_config=1<br />
country=<b>GB</b><br />
network={<br />
ssid="<b>WiFi SSID</b>"<br />
psk="<b>WPA/WPA2 passphrase</b>"<br />
key_mgmt=WPA-PSK<br />
}</blockquote>
Replace <b>WiFi SSID</b> with your wifi network name<br />
<br />
Replace <b>WPA/WPA2 passphrase</b> with your wifi network password<br />
<br />
Replace <b>GB</b> with your two letter country code if you are not in the UK<br />
<br />
Save <b>wpa_supplicant.conf</b><br />
<br />
Copy over <b>wpa_supplicant.conf </b>and <b>ssh </b>files to micro sd card<br />
<br />
Insert micro sd card into raspberry pi zero<br />
<br />
Leave for a few minutes to let everything start up correctly.<br />
<br />
Download <a href="https://www.advanced-ip-scanner.com/" target="_blank">Advanced IP Scanner</a> and set it to scan your network for devices.<br />
<br />
<br />
<br />
If everything goes ok then you should see an ip address labelled as <b>Raspbery Pi Foundation</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUEKStQ9FhM4KDTJ4_c91PGZu8F2W2Bh_OB6KSJlmklnpoyodS-Je6m1bD2dhc10oS7v4jdWtaSkMOWj9aAY8GmDI3JO_BduA8nFd1mp9r3A4BzT7m0XtI5E_pYi5XUbEG6n-AtMaDvCqJ/s1600/AdvancedIPScanner.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="460" data-original-width="830" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUEKStQ9FhM4KDTJ4_c91PGZu8F2W2Bh_OB6KSJlmklnpoyodS-Je6m1bD2dhc10oS7v4jdWtaSkMOWj9aAY8GmDI3JO_BduA8nFd1mp9r3A4BzT7m0XtI5E_pYi5XUbEG6n-AtMaDvCqJ/s400/AdvancedIPScanner.jpg" width="400" /></a></div>
Download and install <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html" target="_blank">Putty </a><br />
<br />
Enter the Raspberry Pi's ip address into the <b>Host Name</b> and open<br />
<br />
<br />
Log in with the username: pi and password: raspberry when prompted.<br />
<br />Enter the following commands to update the list of install packages and then upgrade all install software.<br />
<blockquote class="tr_bq">sudo apt-get update<br />sudo apt-get upgrade </blockquote>
Enter the following command to install git<br />
<blockquote class="tr_bq">
sudo apt-get install git -y</blockquote>
Enter the following command to download scoreboard code and <br />
<blockquote class="tr_bq">
git clone <a href="https://github.com/CodeSingh/rpi-led-scoreboard.git">https://github.com/CodeSingh/rpi-led-scoreboard.git</a></blockquote>
Enter the following commands to go into the scoreboard directory and make the install file executable.<br />
<blockquote class="tr_bq">
cd rpi-led-scoreboard</blockquote>
<blockquote class="tr_bq">
sudo chmod 777 install.sh</blockquote>
<br />
Run the install file<br />
<blockquote class="tr_bq">
sudo ./install.sh</blockquote>
I have used the flicker-free setting by following <a href="https://github.com/hzeller/rpi-rgb-led-matrix#improving-flicker" target="_blank">these instructions</a> as they make the scoreboard display a lot better but it requires a modification on the bonnet. If you don't do the modification then you will need to make the following changes in the display.sh file.<br />
<br />
From<br />
<br />
#!/bin/bash<br />
/usr/bin/python3 /home/pi/rpi-led-scoreboard/image_viewer.py --led-cols=64 --led-gpio-mapping=adafruit-hat-pwm --led-brightness=40 &<br />
<br />
<br />
To<br />
<br />
<br />
#!/bin/bash<br />
/usr/bin/python3 /home/pi/rpi-led-scoreboard/image_viewer.py --led-cols=64 --led-gpio-mapping=adafruit-hat --led-brightness=40 &<br />
<br />
<br />
Reboot the Raspberry Pi<br />
<blockquote class="tr_bq">
sudo reboot</blockquote>
<br />
<h2>
Configure</h2>
The default configuration will show Manchester United games in the English Premier League. If they don't have a game today then it will show their up coming games or just the time, depending on what the BBC website is showing today.<br />
<br />
In the unlikely event that you want to use the scoreboard to see another teams matches you can change the configuration using the built in web configuration page.<br />
<br />
The configuration page can be accessed by browsing to the Raspberry Pi's ip address in your favourite browser.<br />
<br />
You will be greeted by a magnificently basic webpage with all scoreboard settings.<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
The configuration page has following features:<br />
<br />
<ul>
<li>Reboot button. Used to restart the scoreboard</li>
<li>Status: Used to turn the LED panel off and on</li>
<li>Team: This is where you can choose the team to show on the scoreboard. Please note: You can select <b>All</b> to show all todays matches on a 30 second rotation. </li>
<li>Live Score Type: Used to choose between English Premier League and English FA Cup</li>
<li>Weather API Key: This is an external API key used to retrieve weather information from https://openweathermap.org/. You can obtain a free weather API key using the <a href="https://openweathermap.org/" target="_blank">Get API Key</a> link.</li>
<li>Weather API Units: Used to choose centigrade or fahrenheit for the temperature display.</li>
<li>Weather Location: If you want to change the city used for the weather information then type in city, country here. </li>
</ul>
<h2>
Notes </h2>
<ul>
<li>Scores and weather information are updated every minute on a cronjob</li>
<li>I use flask to create the webpage</li>
<li>The weather icon sometimes shows a white background. I'm not sure why this happens.</li>
<li>I haven't managed to create a case for this yet. </li>
<li>I scrape BBC Sport website so the system may stop working if BBC Sport change their website. To combat this I have tried to make the score scraping system modular, so adding different score scraping sources to the system is possible.</li>
<li>If you aren't inclined to make this yourself I can make it for you (for a small fee)</li>
<li>If you want any particular customisations then let me know in the comments </li>
</ul>
<ul></ul>
Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com6tag:blogger.com,1999:blog-2434448583333099534.post-76360245440987875742019-04-10T23:28:00.000+01:002019-04-10T23:28:09.855+01:00Hyper-V virtual machines in starting state for a long time (Veeam issue)<h3>
The Issue </h3>
At work we have a two Hyper-V host set up with one live Hyper-V server and one replication server. We run 5 virtual machines on Hyper-V and use Veeam to backup and replicate all the virtual machines.<br />
<br />
The last few times that I restarted the main Hyper-V server for windows updates I noticed that the virtual machines took a long time to start up.<br />
<br />
The host server restarted as normal but all the virtual machines showed as 'starting...' in Hyper-V Manager with no sign of any of the virtual machines starting up.<br />
<br />
After around an hour and a half of waiting all the virtual machines suddenly started up as nothing had happened. When I checked all the virtual machines they were working normally.<br />
<br />
I restarted one of the virtual machines to see if the slow start up happened again. This time there was a slight delay of around thirty seconds but nothing as extreme as the first boot. So it looked like it was only an issue when the host server rebooted.<br />
<br />
I looked through the event viewer but couldn't see anything regarding the slow boot.<br />
<h3>
The Fix</h3>
After a few hours of search on the internet I finally found an article that looked like it matched my problem. It was from a <a href="https://forums.veeam.com/microsoft-hyper-v-f25/guest-os-starting-up-is-very-slow-on-hyper-v-2016-t50984.html" target="_blank">Veeam forum thread</a>. I contacted my IT support company to get there opinion on the article and they confirmed that I had the same issue.<br />
<br />
I have to schedule in an update for Veeam Backup and Replication to Version 9 Update 4<br />
<h3>
The Problem </h3>
The problem of the slow boot was caused by Veeam Backup and Replication 9 not cleaning up replication points correctly in virtual machine configuration files. Hyper-V configuation files with the extension .vmxc are used by Veeam, to temporarily store replication point information. The information should be deleted soon after the relication has completed but for some reason this clean up doesn't happen correct in this version of Veeam Backup and Replication. The .vmcx files should be quite small but in our example they were around 50 mb each. We ran the script to check how many replication points were stored in the files and found it to be an average of 14000 replication points!<br />
<br />
We haven't updated Veeam yet but hopefully this should fix the issue. I'll update this article to confirm if the fix works or not.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com3tag:blogger.com,1999:blog-2434448583333099534.post-15547530489672271822014-10-22T14:16:00.001+01:002014-10-22T14:16:33.674+01:00Automate mkdocs html files build processAt work I needed to find a way of writing a lot of documentation easily and quickly. The system was going to be used by technical and non-technical people.<br />
<br />
For this I am current looking at a great project called <a href="http://www.mkdocs.org/" target="_blank">mkdocs</a>. This is a python program that allows for all documentation to be created in markdown syntax and then built into a flat html website.<br />
<br />
<a href="http://daringfireball.net/projects/markdown/" target="_blank">Markdown</a> is a text to html processor that has an easy to learn <a href="http://daringfireball.net/projects/markdown/syntax" target="_blank">syntax </a>. Markdown files can be created in any text editor. So users can be focused on creating documentation rather than getting distracted.<br />
<br />
My idea was to allow all user to create documentation and see the changes instantly on the website. mkdocs has a setting that dynamically shows how your pages will look in a browser while creating the documentation source files.<br />
<br />
This works great but I needed to be able to build flat html files and copy them to a web server.<br />
<br />
Below is the batch file (windows)<br />
<blockquote class="tr_bq">
REM Automate the build process of creating a website from mkdocs markdown<br /><br />REM Change to source drive<br />X:<br /><br />REM path to docs site to convert<br />cd X:\DocSource\admin<br /><br />REM covert to flat html website (this creates a 'site' folder)<br />c:\Python27\python.exe c:\Python27\Scripts\mkdocs build<br /><br />REM copy site to web server folder<br />xcopy site\* c:\inetpub\wwwroot\admin\* /s /e /y</blockquote>
This can run on a schedule or even could be set up to run when something changes in the document source location.<br />
<br />
<br />Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com22tag:blogger.com,1999:blog-2434448583333099534.post-17067214447416020802014-07-08T10:46:00.002+01:002014-07-08T10:47:14.218+01:00Using Mozilla Webmaker to create a map of all Gurdwaras (Sikh Temples) in Bradford, UKI have created a <a href="https://codesingh.makes.org/thimble/LTMxOTA5NDc4NA==/bradford-uk-gurdwara-map-with-leafletjs" target="_blank">map</a> of all the Gurdwara Sahibs in Bradford. It uses <a href="http://leaflet.js/" target="_blank">leaflet.js</a> and <a href="http://www.openstreetmap.org/" target="_blank">openstreetmap</a> for the mapping. It was all created in <a href="https://thimble.webmaker.org/" target="_blank">Mozilla Thimble</a> which allows for easier javascript and html editing through an online editor.<br />
Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-36200667862200551402014-07-07T12:31:00.000+01:002014-07-07T12:31:15.492+01:00Geocoding address data in Excel using google Geocoding APII had a long list of addresses that I needed to show on a map. I found a <a href="http://policeanalyst.com/using-the-google-geocoding-api-in-excel/" target="_blank">great article</a> that showed exactly how to call googles geocoding mapping from Excel.<br />
<br />
The only issue I had was that Googles API doesn't like it if too many requests are made too quickly so I created a function to add the geocoding calculation into a column one cell at a time and waiting one second between calls.<br />
<br />
Below is the function<br />
<br />
<blockquote class="tr_bq">
Sub Geocoding100()<br /> Dim I<br /> For I = 1 To 100<br /> ActiveCell.FormulaR1C1 = "=GoogleGeocode(RC[-1])"<br /> ActiveCell.Offset(1, 0).Select<br /> Application.Wait (Now + TimeValue("00:00:01"))<br /> Next I<br />End Sub</blockquote>
I can leave this function running in the background to geocode a list of addresses in excel and I am not hammering Google Geocoding API.<br />
<br />
Its a win win situation!<br />
<br />Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com4tag:blogger.com,1999:blog-2434448583333099534.post-22914036059547421072013-12-03T22:41:00.000+00:002013-12-04T11:26:10.314+00:00Hyper-V 2012 R2 Export / Backup ScriptOur backup tool of choice for our virtual infrastructure is Acronis Backup and Recovery Virtual Edition 11.5. However recently we had issues with it on our new Hyper-V 2012 R2 Servers.<br />
<br />
We needed some backups while we fixed the issues with Acronis so I created this powershell script to export all the vms on each of our Hyper-V servers.<br />
<br />
The script loops through all virtual machines on the local Hyper-V server and exports the virtual machine to the backup location specified in $path. The exported files are stored in a folder named with todays date inside a folder with the name of the virtual machine.<br />
<br />
Example \\[path backup location]\testVM\2013-12-03\</path><br />
<br />
--Start of script--<br />
<br />
$path = "<path backup="" location="" to="">"<br />
$vms = Get-VM<br />
foreach ($vm in $vms) {<br />
$date = Get-Date -format “yyyy-MM-dd”<br />
$vmname = $vm.Name<br />
New-Item -ItemType Directory -Path $path\$vmname\$date -Force <br />
Export-VM -Name $vmname -Path $path\$vmname\$date\<br />
}</path><br />
<br />
--End of script-- <br />
<br />
Notes:<br />
<br />
This script has only been used on Hyper-V 2012 R2 servers as this version allows virtual machines to be exported while the virtual machine is running.<br />
<br />
I have had to run the script on the local Hyper-V server. It doesn't work when ran from a remote console.<br />
<br />
As with any script please test it before using in production as there is no warranty with this script.<br />
<br />
Hope it helps some one. Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com6tag:blogger.com,1999:blog-2434448583333099534.post-65683888062728123822012-07-03T11:01:00.000+01:002012-07-03T11:05:22.254+01:00Access 2000 web page showing HTTP 500 internal server errorWe had to move our web server to a new Windows 2008 R2 server.<br />
<br />
Everything copied over ok using <a href="http://www.iis.net/download/WebDeploy" target="_blank">Web Deploy</a> to copy over IIS settings.<br />
<br />
We had a problem with a website that had an Access 2000 backend database.<br />
<br />
<ul>
<li>Connection issues</li>
<li>HTTP 500 internal server errror</li>
</ul>
<h2>
</h2>
<h2>
Connection issues</h2>
Firstly it wouldn't connect at all. We found that this was due to the Win 2008 not having the correct Jet drivers. (It has changed to <a href="http://www.connectionstrings.com/access-2007" target="_blank">ACE</a>).<br />
<br />
<h2>
HTTP 500 internal server errror</h2>
The next issue was that some pages were showing Server 500 errors when users clicked on them. It looked to be when users were trying to modify the database. In one case the issue was due to the database file becoming read only when it was moved to the new server. and in the other case it was because the lock file (.ldb) file had been copied over with the main database file. Once the lock file was deleted it all started to work as it should.<br />
<br />
Hope this saves people some timeSonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com1tag:blogger.com,1999:blog-2434448583333099534.post-68607805635242684472012-06-03T08:00:00.000+01:002012-06-03T08:00:11.883+01:00Plain text email not wrapping correctlyIt has been a while!<br />
<br />
Now that summer have finally arrived in the UK I thought I should come out of my blogging hibernation.<br />
<br />
Here is an interesting one to start with.<br />
<br />
At work i have been developing a system that requires a log to be emailed to users. For this particular application I was developing in Delphi but the same problem seems to occur with many other languages.<br />
<br />
The problem was that any emails that were sent from my system were stripped of there line breaks. At first I thought that the issue was in Delphi. After a bit of debugging I found that delphi was send the information correctly as separate lines. Even the outlook notification was displaying the line breaks correctly. However when the full email was opened all text appeared on one continious line.<br />
<br />
After a frustrating few hours I found a stackoverflow <a href="http://stackoverflow.com/questions/136052/how-do-i-format-a-string-in-an-email-so-outlook-will-print-the-line-breaks">post</a>.<br />
<br />
Some of the solutions suggested were:<br />
<ul>
<li>Convert the email to HTML format so that '<br />' breaks can be inserted when required.</li>
<li>Add extra \r\n at the end of each line</li>
<li>Add %0D%0A at the end of each line</li>
<li>Add a (.) dot at the end of each line.</li>
<li>Re instated line breaks in Outlook by going into <i>Format -> Unwrap text</i> when viewing the email.</li>
</ul>
I decieded to go for the dot solution and it worked fine.<br />
<br />
Hope this helps someone.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com1tag:blogger.com,1999:blog-2434448583333099534.post-3899569695240628682011-08-12T22:31:00.005+01:002011-08-12T22:50:17.819+01:00Windows Server 2008 File Share Clustering and OSX 10.4At work we had to bring a Apple Mac back into service. Since decommissioning the Mac we have moved to a clustered file server on Windows 2008 R2.
<br />
<br />We tried to get onto some shares on the Windows 2008 R2 clustered file server and got an error saying directory or file does not exist. Looking on the web we found that there were a number of people with the same problem. It seemed to be an issue with clustered file servers because we successfully connected to shares on non clustered file servers.
<br />
<br />Our Apple Mac is on OSX 10.4 but the problem seemed to be more previlant on 10.5 AND 10.6.
<br />
<br />We found a few posts that said that you could get around the problem by typing the port number in the 'Connect to server' option.
<br />
<br />For example 'smb://[servername]:139/[share]' however this didn't solve our problem.
<br />
<br />We finally found a work around by using a hidden ($) share in the path to the shared folder.
<br />
<br />For example <strong>'smb://[servername]/X$/path/to/share'</strong>
<br />
<br />Hopefully this will help someone as it was an odd issue that took a bit of solvingSonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com1tag:blogger.com,1999:blog-2434448583333099534.post-76474628941703558362011-05-13T17:34:00.005+01:002011-05-19T20:03:14.611+01:00Generate list of non repeating numbers in Excel<div><p>At work we had to create a list of new telephone numbers for employees. </p><p>We had a list of employees and had to assign a list of telephone extensions to the names. This had to be random and each number could only be used once.</p><p>The we did this was to copy the list of names into Excel. Then we used the RAND function to assign a random number between 0 and 1 to each name. After this we sorted the list by the newly created random number column. This gave us a random list of users. Finally we copied in the sorted list of telephone extensions into a column next to the employee name column. This gave a random list of telephone extensions to employee names without any any repetition. </p><p>Below is an example of what we did:</p><p><br /></p><br /><br /><iframe src="https://spreadsheets.google.com/pub?hl=en_GB&hl=en_GB&key=0Al5tUv66A9c2dGhwUlBZdEwwWTlGV1llWTBOOUpGVWc&single=true&gid=0&output=html&widget=true" frameborder="0" height="300" width="500"></iframe><br /><br />With a column for your list of names and a column for the random number you can randomise your list of names by simply ordering the list by the random number column. When you are happy with the random list of names then all you have to do is enter your sequential list of numbers into another column.<br /><br />Simples!<br /></div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-35871555962270991942011-04-12T22:54:00.004+01:002011-04-12T23:00:12.304+01:00Remember stuff by doing something memorable<div style="margin: 0 0 10px 0; padding: 0; font-size: 0.8em; line-height: 1.6em;"><a href="http://www.flickr.com/photos/prescod/2494359136/" title="Mr. Forgetful"><img src="http://farm3.static.flickr.com/2208/2494359136_41f342a7f8.jpg" alt="Mr. Forgetful by Lily White" /></a><br /><span style="margin: 0;"><a href="http://www.flickr.com/photos/prescod/2494359136/">Mr. Forgetful</a>, a photo by <a href="http://www.flickr.com/photos/prescod/">Lily White</a> on Flickr.</span></div><p>I am constantly trying to remember if I actually did things.<br /><br />For example did I lock the car door before coming into the house? Did I set the alarm when I left the house? Did I shut the kitchen window before going to sleep?<br /><br />During an average day we do so many things in 'Auto Pilot' mode that we can not remember if we actually did them. A number of times I have had to turn the car around and go back home to make sure that I have indeed locked the door. Most of the time the door has been locked but the thing is that I cannot remember doing it. It is frustrating and it can be a big waste of time.<br /><br />I thought about why I cannot remember all the important little things and realised that it is because these little things are repeated so often that the brain gets bored of remembering them.<br /><br />My solution to the problem is to make forgettable tasks more memorable.<br /><br />Some of the ways I have made repetitive task more memorable are:<br /><br />1. Sing a little jingle after doing the task or action. For example sing 'I have locked the door' in the tune of a song you like.<br /><br />2. Do a little dance after doing the task or action.<br /><br />3. Just say the task out load after doing it.<br /><br />All three of these options are used to make the task more memorable so that your brain thinks it is worthy of being remembered.<br /><br />This has helped me (when I remember to make the task memorable ;-). So I hope it helps someone else</p>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-55511599831308396612011-03-09T20:44:00.002+00:002011-03-09T21:07:02.294+00:00Automate share creation<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioGho1vG7_g173-lqWQQrnw_6T5jdBgmFnTvDU66pupHDJQh3syqZ_uItO0kU1_YYgC66EHBslQ-1Zk9yEzkEPHV3ZyA2-aVXMotY58FXFCMhnuEZX61usIc1522KZnmqUxPJbJjpPoEXB/s1600/vista-share-folder-icon.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 268px; height: 265px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioGho1vG7_g173-lqWQQrnw_6T5jdBgmFnTvDU66pupHDJQh3syqZ_uItO0kU1_YYgC66EHBslQ-1Zk9yEzkEPHV3ZyA2-aVXMotY58FXFCMhnuEZX61usIc1522KZnmqUxPJbJjpPoEXB/s400/vista-share-folder-icon.jpg" alt="" id="BLOGGER_PHOTO_ID_5582189650476410402" border="0" /></a><br /><div><p>We have had an issue where one of our file servers forgets its share drives every time it reboots. To fix the issue we have to recreate all its share drives manually. We don't know why it happens but it is a real pain especially as it is our main file server.</p><p>In order to ease the admin issues of creating all the shares after we restart the server we have created a script to automate the task.</p><p>The script consists of multiple net share commands.</p><p>For example</p><p>net share myshare=c:\testfolder</p><p>Please note: the share is created will full share permissions given to the group 'everyone'.</p></div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-54705596317397942132011-03-01T22:52:00.001+00:002011-03-01T22:52:20.462+00:00[Fix] Outlook only showing default printer<div><p>At work we have had this issue a few time so I though it would be usefully to record the fix.</p>
<p>The problem occurs when a user tries to print a message from the preview pane in Outlook.</p>
<p>Only the default printer shows in the printer drop down list and it is disabled so the user cannot change printers.</p>
<p>To get around this issue the user simply has to double click on the message to open it in a new window.</p>
<p>Now when the user goes to file -> print it will still show the default printer in the drop down list but it will be enabled so that another printer can be selected.</p>
<p>Hope this helps someone.</p>
</div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-59301683320791776492011-02-16T08:19:00.005+00:002011-02-16T13:57:48.446+00:00Emails delayed by one day in OutlookWe had an interesting problem at work that I think would be useful to document.<br /><br />A user sent in a helpdesk ticket about receiving emails a day later than everybody else. No one else had reported this issue so we decided to ask our email server provider about the issue. They said there were no issues on their side and all mail was going through as normal.<br /><br />We sent a few test messages to the user and asked if she received them in time. She replyed the next day and said they were still coming through a day later.<br /><br />Finally my collegue logged onto the users session and found the following senario<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLayyCeWgQR2xnpNsNjOxoEeq0H1kv8GJ2EQ93jMk6WyVjG2KKQr_QzFCz2lEYa3D1IFl2dQtaR3u-SW_NQ57EQse4XeK2QjOIy5GdbXB748tCIFsborvC329ZfTAUIIxHO5TakLVsG2A1/s1600/emaildelay.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 235px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLayyCeWgQR2xnpNsNjOxoEeq0H1kv8GJ2EQ93jMk6WyVjG2KKQr_QzFCz2lEYa3D1IFl2dQtaR3u-SW_NQ57EQse4XeK2QjOIy5GdbXB748tCIFsborvC329ZfTAUIIxHO5TakLVsG2A1/s400/emaildelay.JPG" alt="" id="BLOGGER_PHOTO_ID_5574282160820245474" border="0" /></a>Can you see the deliberate mistake..?<br /><br />...<br /><br />Ok I'll tell you.<br /><br />Somehow the user had managed to minimise the 'today' group for emails so emails would only show up when they show up in the yesterday group i.e. if they were sent yesterday.<br /><br />Fair to say the user was quite embarrased when we pointed out what had happened!Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com5tag:blogger.com,1999:blog-2434448583333099534.post-25824510785554554872010-12-18T10:37:00.005+00:002010-12-18T11:15:09.736+00:00Virtualising Delphi 6 PC (Activation Errors)At work we had a very old machine that we used for Delphi 6 development. The time had come to upgrade it. We decided that the most flexible way of upgrading it was to virtualise it.<br /><br />Below are the steps we followed to virtualise the Delphi 6 machine.<br /><br /><ol><li>Take a clone of the machine. We use CloneZilla which is free and does the job fine.</li><li>Create a new virtual machine and restore the clone onto it. We use XenServer as our virtualisation server.</li><li>The virtual machine will not start up and may show BSoD. This is because of a mismatch between the physical machine hardware and virtual hardware. Repair the Windows XP installation by booting from a Windows XP CD and repairing the current installation.</li><li>Boot into the virtualised machine and apply all updates and Citrix client tools</li></ol>Everything was hunky dory up until step 4.<br /><br />I clicked on the Delphi 6 icon to start it up and I got an activation request with three options on it.<br /><ol><li>Activate over the web</li><li>Activate over phone /email</li><li>Activate later</li></ol>I chose activate later and Delphi closed down. So I tried activate over the web. This option timed out. Finally I chose Activate over phone / email. This looked more promising. I had to go to a website and enter my activation details. I entered all required information and and clicked next. The activation wizard said Delphi had been activated and registered but then behind it there was another box stating that the registration / activation information was missing or corrupt.<br /><br />To test if it was something to do with my user account I decided to activate Delphi 6 on another user account. This worked fine. So it was something to do with my account...<br /><br />I rang Embarcadero and they said they only way to solve this was to run D6RegClean.exe from the bin directory of the Delphi6 install. This would have removed all my third party tools and and all my customisation. So I decided to keep this option as a last resort!<br /><br />From my conversation with Embarcadero I relialised that a registry entry was to blame so I delved into the murky world of Windows registry.<br /><br />I found that there were three keys related to licensing<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKN1hwkwqYxNJM7Bbj-hMQY9nyvfe6yGG-ECzwxDzVA36SReE1SaCefeihnV0rPm2B5FjIyXXUpY8xzDzhX18iwao72VljkrkgvcOlSNFJrJayQHyyrJrhSjGd5XRi918MGLOb-FpbpEEy/s1600/Delphi6Registry.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 308px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKN1hwkwqYxNJM7Bbj-hMQY9nyvfe6yGG-ECzwxDzVA36SReE1SaCefeihnV0rPm2B5FjIyXXUpY8xzDzhX18iwao72VljkrkgvcOlSNFJrJayQHyyrJrhSjGd5XRi918MGLOb-FpbpEEy/s400/Delphi6Registry.JPG" alt="" id="BLOGGER_PHOTO_ID_5551978171398764546" border="0" /></a>LMKEY and LMLIC had correct information about my keys. So the only other one to investigate was LM. This was a binary number and looked like is was automatically generated.<br /><br />(Please note: Messing around with the registry can break your system only do it if you know what your doing)<br />So I took a backup of the registery and removed LM key. I tried registering again and it worked!<br /><br />Hope this helps someone.<br /><br /><img src="file:///C:/DOCUME%7E1/ssingh/LOCALS%7E1/Temp/moz-screenshot.png" alt="" />Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com3tag:blogger.com,1999:blog-2434448583333099534.post-706157763866656452010-09-30T22:40:00.006+01:002010-10-01T00:51:40.685+01:00[Software] Wake on Lan - Magic PacketOver the past month we have had a lot of problems setting up some some software that included integrated Wake on LAN. The software wouldn't wake any of our computers up even though the computers BOIS settings were correctly set to enable Wake on LAN.<br /><br />During this time I was inspired to create my own Wake on LAN (WOL) programme so that I could prove that our network wasn't to blame for the computers not waking up.<br /><br />WOL Magic Packet v.1 <a href="https://sites.google.com/site/codesinghproject/Home/WOLMagicPacket.zip?attredirects=0&d=1">Download Here</a><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwYwy1HkuuqJc0wHotCjf1GClP55zJYCe_KzgYZSusF7yDqeoneqvJ4T6rnA7v2i52Us5hFLW4XN7omO-wANkDm6_GqrepuPYjLTaI4cSUiN-U3iF94YU4t2lQpj_nn66VT0qm_4W_w4Cc/s1600/WOLMagicPacket.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 302px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwYwy1HkuuqJc0wHotCjf1GClP55zJYCe_KzgYZSusF7yDqeoneqvJ4T6rnA7v2i52Us5hFLW4XN7omO-wANkDm6_GqrepuPYjLTaI4cSUiN-U3iF94YU4t2lQpj_nn66VT0qm_4W_w4Cc/s400/WOLMagicPacket.jpg" alt="" id="BLOGGER_PHOTO_ID_5522829614940349490" border="0" /></a>WOL - Magic Packet has the following features<br /><br /><ul><li>Send Wake on LAN packets to a number of computers at the same time by using computer MAC addresses.</li><li>Retrieve computer MAC addresses by supplying a range of ip addresses. The start and finish ip address must be in the same ip subnet. i.e. Both should have the same first three numbers.<br /></li><li>Save and retrieve lists of computer MAC addresses to a text for later use</li><li>Run saved MAC address lists from the command line by using the format</li></ul> WOLMagicPacket.exe [path to list of mac addresses file]<br /><br />Please let me know what you think about this.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com8tag:blogger.com,1999:blog-2434448583333099534.post-36225113775256285992010-09-08T21:26:00.009+01:002010-09-08T22:40:30.679+01:00[Tip] Find duplicate rows in spreadsheetA number of times in the past I have helped users to remove duplicates rows from excel or calc spreadsheets.<br /><br /><div>Below is the process I have used.<br /><br /></div><div><ol><li>Order the spreadsheet by the columns from which you want to remove duplicates. This will group together all duplicate rows.</li><li>Create a calculation in an empty field to concatenate all fields that are being duplicated. For example '=CONCATENATE(A1,B1,C1)'. With A,B,C being the columns that contain duplicate data.</li><li>Create another calculation in an empty field to compare each rows concatenated result column with the previous rows concatenated result column. For example '=if(D1=D2,"duplicate","unique")'. With D being the column with the concatenate calculation in it.</li></ol><div>This will give you a list of "duplicates" and "uniques" to identify if a row is unique or a duplicate of the previous row. This list can be filtered on "unique" or copied to a new sheet to get a set of unique rows.</div></div><div><br /></div><div>Below is an example google spreadsheet to give an idea of the columns required accomplish the task</div><div><br /><iframe width="500" height="300" frameborder="0" src="https://spreadsheets.google.com/pub?key=0Al5tUv66A9c2dFpEbTNYSHF2dkhPNldWenduS21WN2c&single=true&gid=0&output=html&widget=true"></iframe><br /></div><div><br /></div><div>Hope someone finds this useful</div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-43077292332652450212010-09-01T08:55:00.001+01:002010-09-01T09:01:30.258+01:00New look websiteI have decided to freshen up the look and feel of the website.<br /><br />Please let me know what you think.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-76061060098056870482010-08-18T22:48:00.006+01:002010-08-19T00:16:10.677+01:00PXE Boot Thinstation using Windows 2003At work we run DHCP on windows servers. We wanted to stop using Thinstation CDs for for our PC thin clients so that configuration changes were easier to deploy and to eliminate the need for CD drives on our PC thin clients.<br /><br />We had already created our Thinstation image so we had all the thinstation files that we required. Instead of going into the ISO folder (for CDs) go into the PXE folder and save all the files in the folder for later. (Let me know if you need more information about this)<br /><br />Here is how we did it!<br /><br />1. Install a TFTP server from <a href="http://tftpd32.jounin.net/">TFTPD32</a><br />Make the settings look as follow<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgua_-l7B_xxdJY4ZPaUQ71A86D1YjrgrXvZoOWx-Hyu71TniZQeyTZXBEns7HLatWnDliE-QFeVxbvUleM3p9hWBmx1ZlfB-hbQWJdJKmte25Spie77nAUOxPe6V4H4jVUu18zI72-LS1l/s1600/tftp+settings.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 268px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgua_-l7B_xxdJY4ZPaUQ71A86D1YjrgrXvZoOWx-Hyu71TniZQeyTZXBEns7HLatWnDliE-QFeVxbvUleM3p9hWBmx1ZlfB-hbQWJdJKmte25Spie77nAUOxPe6V4H4jVUu18zI72-LS1l/s400/tftp+settings.JPG" alt="" id="BLOGGER_PHOTO_ID_5506885817157902898" border="0" /></a>Remember to set the location of TFTP files. Copy the previously saved PXE files into this location on the server.<br /><br />The folderlocation should look as below.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh90C5giZtnRaZxBHykgaZRHRkmPypR7jJKzPjP-XEHAOt2dK7GgX0IEssmxSUy0wfVdX5VjtGWj_7wsLNc8ebcKlwLm58TvRkpexUq1ZZog4D3G-1wBxPebDHS9U0Rpwxv5YNNro0HlIkV/s1600/pxe+files.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 366px; height: 110px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh90C5giZtnRaZxBHykgaZRHRkmPypR7jJKzPjP-XEHAOt2dK7GgX0IEssmxSUy0wfVdX5VjtGWj_7wsLNc8ebcKlwLm58TvRkpexUq1ZZog4D3G-1wBxPebDHS9U0Rpwxv5YNNro0HlIkV/s400/pxe+files.JPG" alt="" id="BLOGGER_PHOTO_ID_5506890579836792978" border="0" /></a>2. Add the following settings to your DHCP servers<br /><img src="file:///C:/DOCUME%7E1/user/LOCALS%7E1/Temp/moz-screenshot.png" alt="" /><br />Two extra [server options] need to be added in the DHCP console.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKe0ncQd4SE6DP8lzptK3AMWzjk-cR8n60E9z6U6Dera42CPXifHWvS41hnQ_QfepFmWhyphenhyphenftttXOsFzrsaTFpbsc2jKI25Mal7QCzRMeo6lZGp5JfoUUTPdSTkEEMV3BfQ3wN5TkcJKkwR/s1600/dhcp+server+settings.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKe0ncQd4SE6DP8lzptK3AMWzjk-cR8n60E9z6U6Dera42CPXifHWvS41hnQ_QfepFmWhyphenhyphenftttXOsFzrsaTFpbsc2jKI25Mal7QCzRMeo6lZGp5JfoUUTPdSTkEEMV3BfQ3wN5TkcJKkwR/s400/dhcp+server+settings.JPG" alt="" id="BLOGGER_PHOTO_ID_5506880314260724274" border="0" /></a>066 is the name of the computer where the TFTP Server is installed.<br />067 is the relative path to the thinstation pxe boot files. (I created a thinstation folder in my TFTP directory but this is optional).<br /><br />3. Configure the bios on the PC thin clients to boot from the network with PXE.<br /><br />Hope this helps someoneSonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com4tag:blogger.com,1999:blog-2434448583333099534.post-52382348365166707822010-07-08T10:18:00.003+01:002010-07-08T21:25:18.347+01:00OpenFiler Tips and TricksI have recently setup a OpenFiler server at home. The main reason was because I have maxed out all local hard drive connections on my main PC. I researched abit and it came down to FreeNAS or OpenFiler. <div><br /></div><div>I opted for OpenFiler because I have used FreeNAS before and thought it was great except for the fact that it was based on FreeBSD, an OS I'm not that familiar with. OpenFiler is based on Linux and has a reputation for having higher transfer rates than FreeNAS. I was thinking of using iSCSI so I went with OpenFiler<br /><br />The setup of OpenFiler was quite straight forward but here are a few tips that may help people new to the system.<br /><br />Problem:<br />When using the Web Interface for OpenFiler, the Volumes page does not load up<br /><br />Issue:<br />This is a known issue that OpenFiler has with floppy disk controllers.<br /><br />Solution:<br />Disable the floppy controller in the BIOS<br />--<br /><br />Problem:<br />Hard drives with partitions from other operating systems are detected in OpenFiler but cannot be used for storage.<br /><br />Issue:<br />OpenFiler must format all hard drives before they can be used as storage<br /><br />Solution:<br />Run the following command to format the hard drives that cannot be used<br /><br />parted /dev/hdX mklabel gpt<br /><br />Where /dev/hdX is the name of the hard drive<br />--<br /><br />Problem:<br />Client computers using Microsoft iSCSI Initiator to connect to iSCSI targets on the OpenFiler server get the following error when trying to discover targets.<br /><br />"CHAP secret given does not conform to the standard. Please see system event log for more information."<br /><br />Issue:<br />The password used for CHAP Authentication is not the correct length. The password needs to be between 12 and 16 characters.<br /><br />Problem:<br />Set the CHAP Authentication password in OpenFiler so that it is between 12 and 16 characters.<br /><br />Useful links </div><div><br /><a href="http://www.kernsafe.com/product.aspx?id=5&&name=Faqs">http://www.kernsafe.com/product.aspx?id=5&&name=Faqs</a></div><div><br /></div><div><a href="http://www.youtube.com/watch?v=M-ps75Ob2p4">http://www.youtube.com/watch?v=M-ps75Ob2p4</a></div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com3tag:blogger.com,1999:blog-2434448583333099534.post-85363115597944718142010-05-16T23:30:00.005+01:002010-05-16T23:57:02.883+01:00[Tip] Quick and Dirty Repetitive Command Line Tasks with ExcelAt work we had to create folders for all our users. We didn't want to create each folder manually so we went through the following set to accomplish the task (It took about 10 minutes from start to finish):<br /><br />1. Get a list of users from Active Directory. <br />We have a SQL Server Database with a linked table to Active Directory so we queried that to get a list of usernames.<br /><br />2. Copy the list of users to a blank excel document into Column B<br /><br />3. Type "mkdir" in to Column A.<br /><br />4. Fill down Column A to the number of username rows.<br /><br />5. Save the excel file as type "Text file (tab delimited)" to your desktop<br /><br />6. Close excel and rename the created file so that it has the extension ".bat" at the end.<br /><br />7. Move the file to the folder where you want to create the username folders.<br /><br />8. Double click on the file to run it.<br /><br />9. With in a few seconds you should have a list of folders called the names of your users.<br /><br />This kind of procedure has a great many uses. Please let me know if you have used a technique like this and how you used it.<br /><br />This procedure should work in a similar way on Linux / Macintosh and Windows alike.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com1tag:blogger.com,1999:blog-2434448583333099534.post-65057204669377641072010-04-22T21:27:00.006+01:002010-04-22T22:55:01.313+01:00[Tip] Use GMail to sign up to Web Apps multiple times with same email account<a style="float:right" href="http://www.flickr.com/photos/autodafe/2116296365/" title="Gmail 512px - See description for download by au-to-dafe, on Flickr"><img src="http://farm3.static.flickr.com/2248/2116296365_53c43503c8.jpg" width="250" height="173" alt="Gmail 512px - See description for download" /></a>I needed to sign up to Twitter for a website I helped develop. I have already set up multiple twitter accounts and used email addresses that I regularly use.<br /><br />I was looking for a way of using the same email for multiple twitter accounts and found a <a href="http://mail.google.com/support/bin/answer.py?answer=10313&topic=1564#">link</a> which explained that google email considers xxx@gmail.com and xxx@googlemail.com as the same address.<div><br /></div><div>Straight away that gives you a two for one deal on your google email. It doesn't end there. Google email addresses also ignore dots (.) when emails are sent to them. So xx.x@gmail.com is considered the same as xxx@gmail.com. So all variations will end up in the same google mailbox</div><div><br /></div><div>There are many applications for this feature including spam control however for me it makes it a lot simpler when signing up for web applications like twitter where your email address has to be unique for each account. </div><div><br /></div><div>Hope this helps someone.</div>Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-47922406328669623082010-04-13T16:23:00.002+01:002010-04-13T16:58:17.482+01:00[Tip] Grant Executor Permissions on All Stored ProceduresThis tip works on SQL Server 2005 or above<br /><br />Most people say that all sql code should be kept separate from your application in the database layer as stored procedures. Whenever I have done this in the past I have had to go into each stored procedure and set the execute permissions for the users. This is time consuming and error prone.<br /><br />I realised that there must be an easier way of setting the execute permissions so that it only had to be set once for the database after a bit of searching I found the <a href="http://www.sqldbatips.com/showarticle.asp?ID=8">answer</a>.<br /><br />You just have to run the following sql code on the database.<br /><br /><blockquote>/* CREATE A NEW ROLE */<br />CREATE ROLE db_executor<br /><br />/* GRANT EXECUTE TO THE ROLE */<br />GRANT EXECUTE TO db_executor</blockquote><br /><br />This code creates a new role called 'db_executor' then grants executor permissions to the role. <br /><br />After running this code you can add a user to the new role by running the following sql code.<br /><br /><blockquote>EXEC sp_addrolemember 'db_executor', 'sqlusername'</blockquote><br /><br />Important Note:<br />The only draw back with this method of assigning execute permissions is that the user will get permissions to execute any stored procedure already created or created in the future.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com0tag:blogger.com,1999:blog-2434448583333099534.post-59347635706614840622010-02-08T18:16:00.007+00:002010-02-08T18:54:21.760+00:00[Fix] Keyboard not working on Windows login screen<a style="float:left" href="http://www.flickr.com/photos/20965406@N00/84385855/" title="Apple Keyboard by mountaineer, on Flickr"><img src="http://farm1.static.flickr.com/42/84385855_6180b13cdc.jpg" width="250" height="175" alt="Apple Keyboard" /></a>I had an issue with my main development machine at work last week. It was booting up fine but as soon as it got to the Windows XP login screen the keyboard froze up. I could still move the move and the computer was still responsive.<br /><br />I did a bit of troubleshooting and found that the keyboard worked correctly in the BIOS and also worked fine in a Linux Live CD. I could even remote desktop onto the machine and it the keyboard worked correctly. I tried a few different keyboards and the computer did the same. So I thought it was a driver issue...<br /><br />To fix it I tried to do a check disk (chkdsk /r) from the recovery console on Windows XP installation CD. This is done by running the Windows XP installation CD, choosing Repair Console (option 'r') from the first option screen and then typing 'chkdsk /r' when the console loads.<br /><br />Check disk took about 1 - 2 hours to complete and showed that it had fixed some errors. So I exited the console and rebooted the machine however the problem remained.<br /><br />Finally I found a post by <a href="http://blog.ryantadams.com/">Ryan. T. Adams</a> called <a href="http://blog.ryantadams.com/2008/01/18/keyboard-not-working-due-to-missing-or-corrupt-drivers-code-39/">Keyboard Not Working Due to Missing Or Corrupt Drivers (Code 39)</a>. This had a step by step guide of how to fix the problem.<br /><br />Below are the steps I followed to fix the problem. Please note this method requires editing the registery so make a backup of the registry and be careful.<br /><br /><blockquote><br /><ol><li>Go to your Start menu and click “Run…”</li><li>In the Run box that opens, type “regedit” and press Enter.</li><li>In the new window that opens, click the “Edit” menu, then “Find.”</li><li>In the find filed, type “kbdclass” and press enter.</li><li>The registry editor will now search for any key that has “kbdclass” in it. What you are looking for is any that have a name of “UpperFilters” and a data of ” something_random_here kbdclass” You may need to go to “Edit,” “Find Next” if the search finds something else first.</li><li>Once you find the key, double click on it, and edit the text so that it includes only “kbdclass”. Press OK.</li><li>Continue searching (using the “Edit” and “Find Next” menu) until you have found and edited all of the “UpperFilters” keys. Again, all should have a data filed that includes only “kbdclass”.</li><li>Close the registry editor.</li><li>Go to the device manager, find your keyboard in the list (which should still be reporting a “Code 39″ error), and uninstall it.</li><li>You should then restart your computer, and with any luck, your keyboard will work upon rebooting.</li></ol></blockquote><br /><br />Thanks to Ryan for this great fixSonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com1tag:blogger.com,1999:blog-2434448583333099534.post-36182670330457052792010-01-27T22:55:00.003+00:002010-01-27T23:28:36.545+00:00My Thinstation ConfigurationI have been asked for our thinstation configuration file a few times so here it is. I will try to explain the customisations we have done in the comments<br /><blockquote><br /># --- Network configuration<br /><br /># Give a different name to each PC<br /># NET_HOSTNAME=MyThinclient<br /><br /># We are using a cd based system so we don't use tftp server for config<br />NET_FILE_ENABLED=Off <br /><br /># If you want to use a DHCP server, comment out these params:<br />#NET_USE_DHCP=Off<br />#NET_IP_ADDRESS=192.168.0.70<br />#NET_MASK=255.255.255.0<br />#NET_GATEWAY=192.168.0.1<br />#NET_DNS1=192.168.0.1<br />#NET_DNS2=192.168.0.21<br />#NET_DNS_SEARCH=cartoons.org.nz<br /><br /># --- Session Options<br />#<br /># Note: # is a number equal to or greater than 0<br />#<br /># SESSION_#_TITLE Title description for SESSION. Needed for replimenu.<br /># SESSION_#_TYPE Package type, choose beetwen:<br /># - vncviewer Start vncviewer in X<br /># - rdesktop Start rdesktop in X<br /># - x Start x-terminal session (xdm)<br /># - ssh Start ssh client in linux console<br /># - telnet Start telnet client in linux console<br /># - ica Start Citrix ICA client in X<br /># - tn5250 Start AS400 client in linux console<br /># SESSION_#_SCREEN Display number to run the X server on<br /># SESSION_#_AUTOSTART ON Application will be executed immediately at startup<br /># OFF Application will appear in a menu to be started manually<br /># SESSION_#_WORKSPACE Workspace to run program on in a window manager<br /># SESSION_#_type_SERVER IP address/hostname of the server<br /># SESSION_#_type_OPTIONS Command line options for the session type<br /><br /><br /># Individual Session Settings, override defaults<br />#<br /># IMPORTANT: Make sure you minimum have a SESSION_0. Otherwise you will get an error <br /># on boot. You may have additional sessions: SESSION_1, SESSION_2 ...<br /># SESSION_0 is on ctrl-alt-F3<br /># SESSION_1 is on ctrl-alt-F4<br /># ... etc.<br /><br /><br /># If you only have one session, it is a good idea to uncomment this line:<br />AUTOSTART=On<br /><br /># Typical Windows 2000 session <br />#SESSION_0_TITLE="Windows 2000 terminal server"<br />#SESSION_0_TYPE=rdesktop<br />#SESSION_0_RDESKTOP_SERVER=192.168.1.1<br />#SESSION_0_RDESKTOP_OPTIONS="-u 'fred'"<br /><br />#SESSION_0_TITLE="NewCitrixServer"<br />#SESSION_0_TYPE=ica<br />#SESSION_0_ICA_SERVER=xxx.xxx.org.uk<br /><br /># Important: don't insert spaces in the session title<br /># ica.xxx.org.uk is a dns round robin address for all citrix servers in farm<br />SESSION_0_TITLE="CitrixServerAppDesktop"<br />SESSION_0_TYPE=ica<br />SESSION_0_ICA_APPLICATION_SET="Desktop"<br />SESSION_0_ICA_SERVER=ica.xxx.org.uk<br /><br /># Typical Windows 2003 Server session, with True-color and sound redirection<br /># Note: use '-a 16' and '-a 24' to get true-color with Windows 2003+<br /># Older servers don't support these color depths, wrong settings may cause connection to fail.<br />#SESSION_1_TITLE="Windows 2003 terminal server (16 bit color depth)"<br />#SESSION_1_TYPE=rdesktop<br />#SESSION_1_RDESKTOP_SERVER=192.168.1.1<br />#SESSION_1_RDESKTOP_OPTIONS="-u user -p password -a 16 –r sound"<br />#Example on USB Printer Redirection for Rdesktop<br />#SESSION_#_RDESKTOP_OPTIONS="-r printer:usb='DYMO LabelWriter 400 Turbo'"<br /><br /># Important: don't insert spaces in the session title<br />#SESSION_0_TITLE="CitrixServer"<br />#SESSION_0_TYPE=ica<br />#SESSION_0_ICA_APPLICATION_SET="Microsoft Word"<br />#SESSION_0_ICA_OPTIONS="-username donald -password qwak"<br /><br /># ICA: Instead of connecting to an "application set",<br /># you can directly connect to a specific server desktop<br /># Important: don't insert spaces in the session title<br />#SESSION_3_TITLE="CitrixServer"<br />#SESSION_3_TYPE=ica<br />#SESSION_3_ICA_SERVER=ICA<br /><br />#SESSION_#_TITLE="Unix server"<br />#SESSION_#_TYPE=x<br />#SESSION_#_X_SERVER=192.168.1.2<br /># Default is '-query'<br />##SESSION_#_X_OPTIONS="-indirect"<br /># You should set also "SCREEN_X_FONT_SERVER", below<br /><br />#SESSION_#_TITLE="VNC server"<br />#SESSION_#_TYPE=vncviewer<br />#SESSION_#_VNCVIEWER_SERVER=192.168.1.2<br /><br />#SESSION_#_TITLE="Telnet server"<br />#SESSION_#_TYPE=telnet<br />#SESSION_#_TELNET_SERVER=192.168.1.2<br /><br />#SESSION_#_TITLE="SSH server"<br />#SESSION_#_TYPE=ssh<br />#SESSION_#_SSH_SERVER=192.168.1.2<br /><br />#SESSION_#_TITLE="AS400 server"<br />#SESSION_#_TYPE=tn5250<br />#SESSION_#_TN5250_SERVER=192.168.1.2<br /># Use this option to specify keyboard map<br />#SESSION_#_TN5250_OPTIONS="map=280"<br /># Other options<br />#SESSION_#_TN5250_OPTIONS="env.DEVNAME=JDevBox1 +underscores env.TERM=IBM-3477-FC"<br /><br /><br /># --- General Options<br />#<br /># AUDIO_LEVEL Audio Level for sound, 0-100<br /># KEYBOARD_MAP Keyboard layout<br /># TIME_ZONE Used to set time zone on TS client by entering the UTC offset.<br /># This can be set automatically if the appropriate dhcpc option is selected<br /># (Option 2, time offset in seconds)<br /># RECONNECT_PROMPT This displays the reconnection/shutdown options for when a session is ended<br />#<br /># OFF No reconnect prompt<br /># ON Reconnect prompt will be displayed<br /># MENU Shows a menu with a shutdown and reconnection option<br /># MENUXX As MENU option, but the XX is a time period in minutes.<br /># After XX minutes shutdown will occur unless the reconnect option<br /># is choosen<br /><br />AUDIO_LEVEL=67<br /><br /># Look inside BuildFiles\build.conf* file for a list of the supported KB layouts<br /># important to change the keyboard map / timezone to your local settings else time is wrong in the session. Reconnect set to "Shutdown or Reconnect"<br />KEYBOARD_MAP=en_gb<br />#TIME_ZONE="UTC-00:00"<br />TIME_ZONE="GMT+0BST,M3.5.0,M10.5.0" <br />RECONNECT_PROMPT=MENU01<br /><br /><br /># --- X Server Options<br />#<br /># SCREEN_RESOLUTION Screen resolutions available in the workstations<br /># SCREEN_COLOR_DEPTH Number of bits per pixel (8,16,24)<br /># SCREEN_HORIZSYNC Monitor horizontal sync frequency in Khz.<br /># If left blank Xorg will try to detect with DDC<br /># SCREEN_VERTREFRESH Monitor vertical refresh frecuency in Hz.<br /># If left blank Xorg will try to detect with DDC<br /># SCREEN_X_FONT_SERVER IP address or hostname of the font server for X<br /># <br /># Screen Saver Settings<br /># SCREEN_BLANK_TIME Minutes to X session goes blank<br /># SCREEN_STANDBY_TIME Minutes to X session goes into standby mode<br /># SCREEN_SUSPEND_TIME Minutes to X session goes into suspend mode<br /># SCREEN_OFF_TIME Minutes to X session turn off<br />#<br /># MOUSE_PROTOCOL Mouse protocol type (Microsoft, PS/2, etc.)<br /># (mouse is autodetected, use this only if it fails)<br /># MOUSE_DEVICE Mouse device: /dev/ttyS0 -> COM1<br /># /dev/ttyS1 -> COM2<br /># /dev/ttyS2 -> COM3<br /># /dev/ttyS3 -> COM4<br /># /dev/psaux -> PS/2 mouse port<br /># /dev/input/mice -> USB mouse (needs USB package)<br /># MOUSE_RESOLUTION Mouse resolution<br /># MOUSE_ACCELERATION Mouse acceleration<br /># X_NUMLOCK Set numlock state on boot<br /># X_COOKIE Will set X Cookie if specified<br /><br />#SCREEN_RESOLUTION="800x600"<br />SCREEN_RESOLUTION="1024x768"<br /><br />SCREEN_COLOR_DEPTH="24"<br /><br />#SCREEN_HORIZSYNC="30-64"<br />#SCREEN_VERTREFRESH="56-87"<br /><br />#SCREEN_X_FONT_SERVER=192.168.1.2:7100<br /><br />SCREEN_BLANK_TIME=10<br />SCREEN_STANDBY_TIME=20<br />SCREEN_SUSPEND_TIME=30<br />SCREEN_OFF_TIME=60<br /><br /># Mouse acceleration: We found in testing that the speed of the cursor was much slower that fat clients so we added following options to try and speed it up.<br /><br />#MOUSE_PROTOCOL=PS/2<br />MOUSE_PROTOCOL=IMPS/2<br />#MOUSE_DEVICE=/dev/psaux<br />#MOUSE_RESOLUTION=100<br />#X_NUMLOCK=Off<br />MOUSE_ACCELERATION=1/8<br />#X_COOKIE=36d71ab65c10ef065702c111a3d31593<br /><br /><br /># --- Citrix ICA Specific Options<br />#<br /># GLOBAL Settings<br />#ICA_USE_SERVER_KEYBOARD Use default server keyboard, otherwise use KEYBOARD_MAP<br /># variable<br />#ICA_BROWSER_PROTOCOL Broswer protocol, can be HTTPonTCP or UDP<br />#<br /># APPLICATION SET settings<br />#ICA_ENCRYPTION Encryption level for ICA<br /># Valid Settings Below<br /># "Basic"<br /># "RC5 (128 bit - Login Only)"<br /># "RC5 (40 bit)"<br /># "RC5 (128 bit)"<br /># "RC5 (56 bit)"<br />#ICA_COMPRESS Compression, On/Off<br />#ICA_AUDIO Audio, On/Off<br />#ICA_AUDIO_QUALITY Audio Quality, Low, Medium, High<br />#ICA_PRINTER This will turn on ICA autocreate printers, see printer section<br /># for details, On/Off<br />#<br /># NOTE: You must have the lpr package included for this option<br /># to work.<br />#<br />#ICA_APPLICATION_SET Published Application (Not needed if using<br /># ICA_SERVER)<br />#ICA_SERVER Server to Connect to (Not needed if using<br /># ICA_APPLICATION_SET, but needed if the ICA-Masterbrowser<br /># is not on the local network.)<br />#ICA_WFCLIENT_type_specific This allows you to specify specific config file details for global ica<br /># parameters any parameter can be changed with this setting. An example of this is<br /># ICA_WFCLIENT_CLIENTDRIVE="On"<br /># See your application manual for documentation on the settings which<br /># can be used.<br /><br />#ICA_USE_SERVER_KEYBOARD=Off<br />ICA_BROWSER_PROTOCOL=HTTPonTCP<br />#ICA_SERVER=<br />#ICA_ENCRYPTION=Basic<br />#ICA_COMPRESS=On<br />#ICA_AUDIO=On<br />#ICA_AUDIO_QUALITY=Low<br />#ICA_PRINTER=off<br />#ICA_SEAMLESS_WINDOW=Off<br /><br /><br /># --- LP Server Printing Options<br />#<br /># PRINTER_0_NAME Workstation Printer Name, Can be Any Valid Name<br /># If you have turned ICA_PRINTER=ON then this is the <br /># name of the printer driver<br /># PRINTER_0_DEVICE Workstation printer device (if not specified devices<br /># are not loaded).<br /># /dev/printers/[0-2] for parallel ports<br /># /dev/ttyS[0-3] for serial ports<br /># /dev/usb/lp[0-2] for USB printers<br />#<br /># PRINTER_0_TYPE P for parallel, S for serial, U for USB printer<br /># PRINTER_0_OPTIONS Serial port options.<br /># PRINTER_1_* See PRINTER_0_*<br /># PRINTER_2_* See PRINTER_0_*<br /># PRINTER_3_* See PRINTER_0_*<br /><br />#PRINTER_0_NAME="parallel"<br />#PRINTER_0_DEVICE=/dev/printers/0126<br />#PRINTER_0_TYPE=P<br /><br />#PRINTER_1_NAME="serial"<br />#PRINTER_1_DEVICE=/dev/ttyS1<br />#PRINTER_1_TYPE=S<br />#PRINTER_1_OPTIONS="speed 38400 -imaxbel"<br /><br />#PRINTER_2_NAME="usb"<br />#PRINTER_2_DEVICE=/dev/usb/lp0<br />#PRINTER_2_TYPE=U<br /><br /><br />#ICA Autocreate Printer Example<br /># Local printers can be a bit hit and miss (better with parallel printers). <br /># Must give thinstation computer a static ip address on dhcp server then <br /># install printer on print server with static ip address and correct drivers <br /># and finally change the port in printer settings from <br /># 9100 to 9101 ONLY IF printer is usb.<br />PRINTER_0_NAME="parallel"<br />PRINTER_0_DEVICE=/dev/printers/0<br />PRINTER_0_TYPE=P<br /><br />PRINTER_1_NAME="usb"<br />PRINTER_1_DEVICE=/dev/usb/lp0<br />PRINTER_1_TYPE=U<br /><br /></blockquote><br /><br />Thinstations configuration can be a bit daunting initially but once you get the hang of it, it mostly makes sense.<br /><br />Please send me your comments or questions.Sonyhttp://www.blogger.com/profile/14712061509750386357noreply@blogger.com9