Press "Enter" to skip to content

Category: Life: Work and Techy

Techy: Create an iPhone Ringtone from your own MP3

As you may be aware, I’ve given in to the “white side” and just switched from a Nokia 6230i to a brand new Apple iPhone 8Gb Black from o2 (whilst being disappointed that I wasn’t able to get a discount after being with them 17months on current contract and over 6 years in total). Anyway, one of the first things I wanted to do was copy over my ringtone, but Kool Katy said she didn’t think it was possible to make your own ring-tone on the iPhone without paying via iTunes…

I then found this guide to creating free iPhone ringtones with iTunes 8 which states:

  1. Right click on the song you are going to make into a ringtone and select “Get Info.”
  2. Go to the “Options” tab and go down to the “Start Time” and “Stop Time” check boxes. Check both boxes and input the time you want your ringtone to start/stop. The ringtone has to be 30 seconds or less. Click “OK” when you’re done.
  3. Right click on your newly “clipped” song and select “Create AAC Version”. Or directly click the “Advanced” tab on the main menu of iTunes 8 and select “Create AAC Version” from the drop-down list. The song will be re-encoded using the start and stop times specified.
    Note: If your menu item does not read “Create AAC Version” and reads “Create MP3 Version” or some other format, please go to ”iTunes -> Edit -> Preferences -> General”, click “Import settings” and change “Import using” to “AAC Encoder”
  4. After the song is done encoding, navigate to your iTunes Music folder, locate your song, and drag it to your desktop. After the song is on your desktop go back to iTunes and delete the clipped version from you iTunes library (It won’t delete it from your desktop, it will only remove it from iTunes).
  5. Go back the song on your desktop and right click on your song and choose “Properties”. Go to the name and extension section and change the extension from .m4a to .m4r (or you can just change the extension right from your desktop).
  6. After the extension is changed simply double click on the file to add it to your iTunes library under the ringtones section. Sync your phone with iTunes and you’re done!

Basically – iPhone ringtones need to be 30 seconds or less, less than 3Mb in size (which should be easy with a 30 second limit) and have an .m4r filetype.

RISC OS: Paul Vigay found dead

I don’t normally make postings like this, but I feel I have got to pass on the news to any old ex-RISC OS users (or any current ones) who haven’t heard the sad news yet.

Paul Vigay, ex-Micronet 800 editor, researcher on Signs, general crop-circle expert, founder of Orpheus Internet, UFO expert, founder of Digital Phenomena, founder of RISC OS.org, general privacy expert, all around helpful good chap, and last, but not least, husband to Louie, has been unfortunately found dead at the age of 44 in Southsea in Hampshire and will be missed by a large number of people (including myself) who have been in contact with him one way or another. The death is not being reported as suspicious (BBC News).

Other articles: Drobe, Comp.sys.acorn.misc, Iconbar, Book of Condolence

Snippet: ClickCartPro: Extracting VAT Exempt orders

If you are looking for a way of listing all orders in Greenbarnweb/Kryptonic’s ClickCartPro software that is exempt from European/UK VAT, then you may find the following SQL query useful:
SELECT `id` , `dateday` , `datemonth` , `dateyear` , `ordertotal`, `eutaxrefundtotal` , `country` FROM `gbu0_orders` WHERE STATUS = 'C' AND (eutaxrefundtotal >0) ORDER BY dateyear DESC , datemonth DESC

Techy: IE8 incompatible list: What isn’t listed?

Zdnet has just pointed me towards Microsoft’s Internet Explorer 8 Compatibility View List for Windows Vista which lists all the websites IE 8 is known to have problems with: and it’s extensive (see this Zdnet list for a human-readable display). I did a quick search for most of the major sites and they all seem to be listed: From Microsoft.com (if they can’t get their own site working in their own software it doesn’t bode well), all Amazon sites (.com and .de, .cn and .co.uk etc), all major social networking sites (Facebook.com, MySpace.com, LinkedIn.com and Twitter.com are all listed), to all of Google, bbc.co.uk, Paypal.com , all of eBay and many many more. And this is only the 2,400 major sites that Microsoft have found to have problems with IE8 (or should that be: sites that Microsoft have found that IE8 is broken on).

All the more reason to drop Internet Explorer and try Firefox, Safari, Opera or another browser of your choice (mine’s Firefox)

Dojo Javascript: Changing a FilteringSelect SELECT menu when another changes

Here’s a bit of Dojo Javascript which will allow you to dynamically change a SELECT sub menu (technically a “FilteringSelect” menu with an id of “secondFilteringSelectId”) when the first SELECT menu is changed (another FilteringSelect menu with an id of “firstFilteringSelectId”). It uses the Dojo’s ItemFileReadStore method to fetch an ajax page (called ajax) before populating the menu. It also has some caching built in to reduce the number of calls to the server and associated network traffic.

dojo.require("dojo.data.ItemFileReadStore");
aSecondFilteringCache=Array();
dojo.addOnLoad(function() {
    dijit.byId('firstFilteringSelectId').onChange=function() {
        fFirstFilteringSelectIdChanged(dijit.byId('firstFilteringSelectId').value);
    }
    fFirstFilteringSelectIdChanged('defaultSetting');
});
function fFirstFilteringSelectIdChanged(thisValue) {
    secondSelect=dijit.byId('secondFilteringSelectId');
    if (aSecondFilteringCache[thisValue]==undefined) {
        var myStore=new dojo.data.ItemFileReadStore({url:'ajax?setting='+thisValue});
        var gotList = function(items, request) {
            aSecondFilteringCache[thisValue]=myStore;
            secondSelect.store=myStore;
            secondSelect.setValue(items[0].id);
        }
        var gotErrors=function(error,request) {
            alert('Request failed:'+error);
        }
        var request=myStore.fetch({onComplete:gotList,onError:gotErrors});
    } else {
        secondSelect.store=aEducationsCached[thisValue];
        secondSelect.setValue(secondSelect.store._arrayOfAllItems[0].id);
    }
}

I am just learning Dojo though, so there could be a much better/sensible way of doing this: let me know if you know/find it!