Ask Different

Countryside in Allier, France

My contributions on Ask Different occasionally leads to people reaching out to me.

A recent e-mail asked why I wrote on the site and what might improve it. I though the answers useful to share more widely. Maybe this train of thought itself answers their question?

Ask Different is a web site focusing on questions about Apple related software and hardware. Its big brother is Stack Overflow; a site where the topic is software development. Stack Overflow towers over the other Stack Exchange sites in terms of size and impact.

Discovering Stack Overflow

I had long followed Joel Spolsky, one of the creators of Stack Overflow, via the the web site “Joel on Software” and the “Business of Software” forum. I discovered Stack Overflow through Joel’s documenting its creation.

Why Contribute?

I do not actively contribute to Stack Overflow. The site does not feel welcoming and it suffers from too many looking for quick fixes, rather than answers. I do not envy the moderators their role.

I do contribute to Ask Different, another Stack Exchange site. Ask Different’s culture has been more welcoming and aims to help users of Apple devices, rather than developers.

Early on I mostly made small edits to other’s questions and answers. Typically improving formatting or fixing typos.

Later I looked for questions related to my areas of expertise. When I noticed long unanswered questions that I could answer; I answered.

Today Ask Different provides professional benefits. I get to tell others about my work and I am helping to create a safe site where I can point customers needing more general advice.

Wild blackberries in Allier, France
Wild blackberries in Allier, France

Own Research

Most of my answers are from hard won experience. I prefer not to answer questions outside of my field of experience or expertise.

Rarely but sometimes I answer opinion related questions in order to publish information in one place that is difficult to find elsewhere.

Improving Stack Overflow?

With regard to Stack Overflow specifically, it is tempting to suggest splitting up the site by development language or tool. But this would not fix the problem of low quality, quick fix seeking, behaviour.

I would examine the role of comments on questions and answers. They have use but are home to many problems.

I wonder if better cross-linking of questions and answers would be useful. The ability to find a question or answer and then navigate around the subject matter. Links outside the site to specific official documentation and tutorials might be useful.

Tractor in a field in Allier, France
Tractor in a field in Allier, France

Contributing Elsewhere?

I have my own personal and business web sites. One of the best investments in my time has been writing recipes for my software.

Splitting More Movie Formats

Plants on my desk.

I wrote Movie Splitter for us, my wife and I. We both have point and shoot Canon cameras that capture video in MPEG-4 format. The cameras have a nice feature called Auto-Hybrid. This feature captures a little video before each photograph we take and combines those little bits into a longer video. Over the course of a day or two taking photos, the compilation of little bits grows into a few minutes of treasured memories.

Some bits of video are better than others. We wanted to keep the better bits and remove the others. I wrote Movie Splitter to help us do that.

I published Movie Splitter on the Mac App Store at an unsustainably low price. Like most products on the store, it can never justify its costs.

Since then I have updated Movie Splitter when we wanted specific improvements. Rarely do I added functionality solely because of requests; I can not justify the time.

Recently I was contacted by a customer who had family footage they wanted to split. Their Canon PowerShot G15 camera, it turned out, saved Auto-Hybrid movies in a slightly different format. The request struck a cord with me for a few reasons: my assumption about Canon camera footage was wrong, the request was kindly written, and family footage is valuable.

More by luck than anything else, I have recently been messing around with video encoding for a side project. So my head was in the right place to tackle this problem.

We e-mailed back and forth figuring out what was wrong and what might make Movie Splitter work. We encountered the normal problems with video: tools silently altered the raw sample footage, sharing large files was a problem, and video file formats are inscrutable.

It took a couple of hours of work but I got Movie Splitter working for them. Their Auto-Hybrid family footage is now split into usable bits and will no doubt bring them joy.

New Formats

For everyone else, Movie Splitter now supports reading and exporting to more formats. I do not know which formats because that is not how this tool works. All I can say is that Movie Splitter definitely works with MPEG-4 but should now work with at least qt and mov video.

Movie Splitter will read any Apple AVFoundation supported video format. The only export formats allowed are those that will not re-encode the original content. The list of supported formats will change as Apple change AVFoundation.

A nice side effect of this “let AVFoundation decide” approach is that Movie Splitter can now export audio only versions of the movie being split. Is this useful? Probably not, but the feature came for free.

Nice Reviews

Despite an appalling average Mac App Store rating for Movie Splitter, I take comfort in most of the written reviews being overwhelmingly positive. Thank you to everyone who has taken the time to comment or leave a positive message. I am delighted to know Movie Splitter has helped you.

New in Movie Splitter v1.4.0

  • Added support all AVFoundation formats.
  • Added export to multiple pass-through formats.

Change in Domain Registrars

A skateboarder caught mid-air at London's South Bank.

I manage a handful of domain names. Regrettably I had to move them to a new domain registrar. My former registrar had succumbed to temptation and had begun messing around.

A domain registrar is a company that manages the record of your domain names. Customers pay for annual renews of the domain. In return, the registrar is responsible for maintaining and pointing the domain record to a set of domain name servers. Once set up, there is little need to interact with or think about your domain registrar.

Like web hosting, domain registrars are subject to a cut throat market and little incentive to remain lean and transparent. Over time adds-on, up-sells, and eventually snake oil side offerings start making their way into these business’ practices.

Hover

I chose Hover because the company supports podcasts I enjoy, such as Hello Internet and Accidental Tech Podcast.

The move to Hover is ongoing and has not been smooth. Below are a few grumbles of my experience.

Better International Domain Support

Among the domains I transfered were .uk and .eu domains. These required interacting with a member of Hover staff to transfer. I am not sure why; the process can clearly be automated from the customer’s side.

I want to avoid having to contact you during your working hours. Our time zones do not align well.

Please Hover, let me transfer .eu and .uk domains via a web form.

Hide the Expiry Date

While the .com domains were being transfered, they appeared as pending in my account. This is reassuring. Less reassuring was the incorrect expiry date shown. The date was one year from the date of requested transfer. I understand why this date was shown but it is always incorrect from the customer’s perspective.

Please Hover, hide the expiry dates of pending domains until known.

null in Billing Address

Within my Hover account, the card billing address shown contains the word null. It appears either the optional Address 2 or State/Province field is being incorrectly handled. These small errors undermine confidence in your systems.

Please Hover, fix the card billing address.

Fix .eu Domain Privacy

Hover’s policy on .eu domain privacy is incorrect. The policy currently reads:

Note: WHOIS Privacy is available for more TLDs, but there are some exceptions. For instance, .CA and *.UK allow WHOIS Privacy for individuals, but not for companies. Some do not allow WHOIS Privacy at all, for example, .SEXY, .DE, .EU, and .US. And then there are others, such as .AT, that allow WHOIS Privacy only in very specific instances.

Page 4 of .eu WHOIS policy reads:

When the Registrant is a natural person (private individual) the Registrant contact information published is restricted to the e-mail address, unless they request otherwise.

According to the same .eu document, privacy is available so long as the Organisation field is left blank.

Sadly Hover’s web site enforces a non-blank Organisation field. This is a serious but hopefully easy to fix bug.

Please Hover, allow blank or empty Organisation fields!

Hover requires an organisation field; it must be optional.
Hover requires an organisation field; it must be optional.

Share Information

Stop sending public forum responses by private e-mail. Too often when researching Hover’s support forums, I found company replies that said “An email is on it’s way to you, keep an eye out for that.”

Often these threads continued with other customers also asking for the same reply. This behaviour quickly reduces the value of the thread to near zero; clearly an answer exists but Hover will not make it public.

Hover support forum.
Hover support forum.

Please Hover, answer as much as possible publicly.

Stop Sharing Information

I run ad-blocking software on my browser. It was annoying to have to turn this off to use the Hover web site.

Hover, why are relying on so many third party injected scripts and widgets? Treat paying customers’ activity and information with care and privacy. Allowing numerous third parties insight into my actions on my account is, at best, unsettling.

Once I login to a pay-for service, I want to see a serious reduction in advertising beacons and injected third party scripts.

As of February, 2018, the following domains are connected to, in addition to hover.com, when loading my Hover dashboard page:

  • a.quora.com
  • analytics.twitter.com
  • cdn.ravenjs.com
  • connect.facebook.net
  • de12.zopim.com
  • fonts.googleapis.com
  • googleads.g.doubleclick.net
  • p1.answerdash.com
  • q.quora.com
  • rs.fullstory.com
  • static.ads-twitter.com
  • stats.g.doubleclick.net
  • t.co
  • v2.zopim.com
  • www.facebook.com
  • www.fullstory.com
  • www.google-analytics.com
  • www.google.com
  • www.google.fr
  • www.googleadservices.com
  • www.googletagmanager.com

Every company operating a domain in the list above can track my activity. This is after logging into a pay for service.

Please Hover, reduce your web site dependencies on third party scripts, beacons, tags, and widgets.

Internationalisation

One of the addresses associated with my Hover account contains the accented character, è. This character does not render correctly on the dashboard page. The character instead appears as è. I am running the latest Safari on macOS.

Please Hover, ensure your web site handles and serves unicode encoded content.

More?

I am sure there will be more grumbles later. If so, I will add them here, and if Hover fix any of these – and let me know – I will also update this page.

Updates

  • Added 3rd party domains.
  • Noted internationalisation bug.

VoIP with Asterisk on Synology via Docker

Server cabinet cables.

Having successfully banished our need for a physical phone from upstairs, everything changed. My Raspberry Pi is being repurposed for a family member and I now have a Synology DiskStation.

Thus I needed to find a way to run Asterisk on my Network Array Storage (NAS) device. Asterisk provides Voice Over IP (VoIP) and it needs an always on computer to work. Previously my Raspberry Pi performed that role, now my DiskStation must take its place.

I knew that Docker would be part of the eventual solution but I was surprised by how long it has taken to find workable images and settings.

What follows are my notes for getting this working.

Docker Image and Synology Settings

Synology provide a Docker package through the Package Center. Using this edition of Docker, I settled upon the following image by Andrius Kairiukstis:

andrius/alpine-asterisk:14
The alpine-asterisk Docker image.
The alpine-asterisk Docker image.

Launch this image with the following settings:

  • Advanced Settings > Enable auto-restart
  • Advanced Settings > Network > Use the same network as Docker Host

The setting Use the same network as Docker Host is important. This allows Asterisk to open ports and communicate without restriction. Ideally it would not be required but Synology’s Docker web interface is limited. The required port range options are not yet exposed.

Host network setting in Launch settings.
Host network setting in Launch settings.

By applying Use the same network as Docker Host there is no need to specify port mapping or exposing ranges. The container is free to open ports and chatter away. This does go against the contained nature of Docker but for this situation it bypasses many problems.

Alpine Linux and Asterisk

Next set up Asterisk. Create a terminal session to the running Docker container. Do this by Secure Shell (ssh) into the Synology and connect to the Asterisk container using:

sudo docker exec -it asterisk-alpine sh

The container is named asterisk-alpine in this example and sh is the command to execute.

Issue these commands to add any desired extras to Asterisk:

apk update
apk search -v 'asterisk*'
apk add asterisk-sounds-en

I did not immediately need any extra files but any use of the talking clock or answer machines will.

Repeat the configuration of the Raspberry Pi to set up lines and connect to the GrandStream HT-503 box.

Once set up, the asterisk-alpine container consumed 24 MB of RAM and less than 1% CPU, and requires 33 MB of storage.

Making the Phone Vanish – Telephone Calls via an HT-503 and Raspberry Pi

Telephone, HT-503, and Raspberry Pi

Having spent two days fighting with my HT-503 box and telephones, I have achieved what I wanted. Two days ago I knew practically nothing about SIP, VoIP, Asterisk, and PSTN bridges. Now I can make landline calls to and from my computers.

I am now terrified that I will need to reconfigure my phones in the future and will forget everything I have struggled to achieve. Thus I am writing this for you, dear future me – and for you dear reader who has stumbled upon this hoping for answers.

Avoiding a Phone

We have a single landline connected to our house. This line is provided by our telephone provider and offers inclusive calls almost anywhere in the world. We use our landline to phone friends and family without worrying about call time or cost; everything is included in the monthly fixed fee.

We have a home network and a disliking of modern domestic landline phones. Home phones today pale in comparison to the cheapest mobile phones; so we decided to see if we could avoid them entirely.

Office phones are capable enough but ugly and fairly expensive. Researching office phones lured me into the world of Power over Ethernet (PoE) phones and Session Initiation Protocol (SIP) connected phones.

Ideally, we wanted to avoid needing a physical phone. A physical phone would mean having a single location to keep the phone in the house. It would be another item plugged into a wall and it would mean dedicating a prized network socket to a single purpose item, a phone.

Maybe we could use our computers as phones? They have speakers and microphones. Why not also use our trusted iPod Touch as a phone? Surely this was possible.

This led me down the path of SIP, Asterisk, and ATAs.

HT-503 – Bridging the Landline and Network

For the same cost as an office phone, or less, you can buy a Grandstream Networks HT-503 FXO/FXS Analog Telephone Adaptor (ATA). This small box of electronics can bridge the divide between a landline phone and a computer network.

Front of the Grandstream HT-503
Front of the Grandstream HT-503

When researching these bridging boxes, the trick is to look for an FXO port. This is the physical port you need to connect to an existing phone line provided by your telephone company.

Small boxes with FXO ports are far less common than boxes with the corresponding FXS ports. It is easy to become confused between the two similarly named ports.

So I bought a Grandstream HT-503 a couple of weeks ago for around fifty-five euros. The box is reasonably small, had the physical ports I needed, and has a feel of early twenty first century industrial design about it. The web interface is enough but it might be best to lower your expectations around ease of use.

Having checked the box powered on and seemed responsive, I took one look at the myriad of options, realised I was out of my depth, and put it aside for a couple of weeks.

What I Wanted

I wanted the following:

  • to be able to make phone calls from our computers through our landline connection;
  • to be able to answer incoming landline phone calls from our computers;
  • to have a working physical phone always connected for emergencies;
  • to be able to use software based phones, aka soft phones;
  • support for SIP devices in case we needed an office phone.

I did not care about:

  • being able to make outgoing VoIP calls to outside of the house;
  • being able to receive incoming VoIP calls from outside of the house;
  • being able to send or receive faxes.

What I Had – Equipment and Hardware

I had the following hardware:

  • a landline phone connection (RJ11 connection)
  • an ethernet network (RJ45 connections)
  • a Grandstream Networks HT-503 (RJ11 and RJ45 connections)
  • a Raspberry Pi 2 computer
  • an old home phone handset

What I Did – Setting up Phone Network

So this weekend, I set aside some time and threw myself into solving the home phone problem.

These are the steps I took to reach a working network based home phone system. The result works but is not the final configuration.

Network layout of Grandstream H-503, Freebox, and phone line
Network layout of Grandstream HT-503, Freebox (router), and phone line

Set up Asterisk on Raspberry Pi with Debian

In my experiments I tried Asterisk for Raspberry Pi but found the FreePBX web interface too complex and overwhelming. I was more productive installing Asterisk on the Raspberry Pi’s lite image of Debian.

Debian Stretch Lite

Debian is a flavour of the open source and free Linux operating system. I chose Debian because it is the official operating system provided by the Raspberry Pi project; other Linux flavours exist and are probably just as good.

At the time of writing, the download version was:

Minimal image based on Debian Stretch
Version:September 2017
Release date:2017-09-07
Kernel version:4.9

Copy the image onto your Raspberry Pi’s microSD card, see installing images. On macOS:

  • Format the microSD card as FAT using Disk Image;
  • Note disk id of mounted card, in my case this was disk8;
  • Copy the image onto card using the Terminal command, using the appropriate disk id:
    sudo dd bs=1m if=2017-09-07-raspbian-stretch-lite.img of=/dev/rdisk8 conv=sync
    
  • Enable ssh access, see Remote Access > Secure Shell:
    touch /Volumes/boot/ssh
    
  • Place the microSD card into the Raspberry Pi and power it on.

Set up the Raspberry Pi

  • ssh into Raspberry Pi as the default user pi with default password of raspberry; find the IP address of the device via the switch or DHCP server.
  • Change the default password:
    passwd
    
  • Reclaim any spare microSD card space using raspi-config : Advanced > Expand Filesystem > Reboot:
    sudo raspi-config
    
  • Update Debian’s core software:
    sudo apt-get update
    sudo apt-get upgrade
    
  • Install ntp (Network Time Protocol) for accurate system time:
    sudo apt-get install ntp
    sudo /etc/init.d/ntp restart
    

Asterisk on a Raspberry Pi

Asterisk is an open source and free software based Private Branch Exchange (PBX). It is Asterisk that will handle the computers on the network and the calls coming in from and going to the HT-503.

  • Install Asterisk on the Raspberry Pi:
    sudo apt-get install asterisk
    

All the server software we need is now installed and ready to set up.

I started simply with Asterisk and have not gone much further than getting two extensions up and running with the landline. I followed the examples at A simple PBX system in The Asterisk Book to achieve this.

Asterisk is huge and complex. I deferred to the defaults in almost every case. I put aside the originals and started with blank files for the sip.conf and extensions.conf files:

cd /etc/asterisk
sudo mv sip.conf sip.conf-orig
sudo mv extensions.conf extensions.conf-orig
sudo touch sip.conf
sudo touch extensions.conf

These commands change into the folder, cd, containing all the Asterisk configuration files. Then the two key configuration files are renamed, mv, to remain safely available but out of the way. Two blank files are then created, touch, to take their place.

Within /etc/asterisk/sip.conf I created four extensions:

  • 2000
  • 2001
  • ht503fxo
  • ht503fxs

An extension is effectively a phone within the telephone system. 2000 and 2001 are from the Asterisk examples I followed and dedicated to soft phones on our computers. You can dial 2000 on the house phone and the computer or device within the house will ring.

The two ht503fxo and ht503fxs are extensions for the HT-503 to use. Numerous configuration guides suggested that an extension (SIP account) for the HT-503 was not required, or more strongly, must not be configured. I did not find this to be the case. Doug Crompton’s Replacing a Sipura SPA-3000
with a Grandstream HT-503
provided the first hint that this advice was misguided.

The complete /etc/asterisk/sip.conf file:

[general]
port = 5060
binaddr = 0.0.0.0
context = others

[2000]
type=friend
context=my-phones
secret=1234
host=dynamic

[2001]
type=friend
context=my-phones
secret=1234
host=dynamic

[ht503fxo]
type=peer
username=ht503fxo
secret=something
canreinvite=no
insecure=very
host=dynamic
nat=no
port=5062
disallow=all
allow=alaw
allow=ulaw
dtmf=rfc2833
qualify=yes
context=my-phones

[ht503fxs]
type=friend
username=ht503fxs
secret=something
host=dynamic
insecure=very
nat=no
dtmf=rfc2833
port=5060
canreinvite=no
disallow=all
allow=alaw
allow=ulaw
qualify=yes
context=my-phones

The complete /etc/asterisk/extensions.conf file:

[others]

[my-phones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2001,1,Dial(SIP/2001,20)

exten => _XXXXX.,1,Dial(SIP/ht503fxo,60,D(w${EXTEN}))
exten => _XXXXX.,n,Hangup()

The extensions are trivial in our case. The two internal extensions, 2000 and 2001, map to SIP accounts.

The final extension is a pattern _XXXXX. that matches any 6 or more digits. Matched calls are then passed to the HT-503 via SIP. The format of the Dial(SIP/ht503fxo,60,D(w${EXTEN}) is interesting and differs from some configuration guides. The line says, dial the ht503fxo, and then after connecting, dials ${EXTEN}. The w waits a couple of seconds.

I saw guides suggesting the format Dial(SIP/ht503fxo/${EXTEN}) but this did not immediately work for the HT-503. I suspect more experiments would reveal a better approach.

This Asterisk configuration is simplistic and likely needs hardening for security. In particular, I believe the context of the HT-503 extensions need attention. I also suspect some of the HT-503 key value pairs can be removed. For now though, it works.

Asterisk Hints

Use sudo asterisk -rvvvvvc to connect to a running instance of Asterisk. The extra verbosity is essential for debugging.

Set up the HT-503 for Asterisk

With the Asterisk server set up and running, I turned my attention to the HT-503. Discovering the appropriate settings for this box has been time consuming.

Back of the Grandstream HT-503
Back of the Grandstream HT-503

Plug in:

  • Plug nothing into the LAN port
  • Ethernet cable into the WAN port
  • Power into DC12V
  • Physical telephone into Phone port
  • Telephone line from wall into Line port

HT-503 Network Settings

Connect the HT-503 to the switch via the WAN port. Then use the physical phone connected to the HT-503 to enable WAN access to the web interface:

  • Dial **** (menu) > 12 (WAN access) > 9 (toggle to enable)

Reboot the HT-503:

  • Dial **** (menu) > 99 (reboot menu) > 9 (reboot)

My network is simple. The HT-503 is plugged into a switch. The network already has a DHCP server handing out IP addresses. The HT-503’s support for both local and wide area networks is not needed; let’s turn that off.

Basic Settings
  • Telnet Server: No
  • Device Mode: Bridge
  • WAN side HTTP/Telnet access: Yes

HT-503 Country Specific Settings

A telephone line’s behaviour is country specific. That means the following section is only relevant as a guide to what needs change but not what to change the values to.

My HT-503 is in France connected to a French landline. I need to change the box to behave appropriately for France.

Basic Settings

Time Zone: GMT+01:00

Advanced Settings
  • Dial Tone: f1=440@-10,f2=0@-10,c=0/0;
  • Ringback Tone: f1=440@-10,f2=0@-10,c=150/300;
  • Busy Tone: f1=440@-10,f2=0@-10,c=50/50;
  • Reorder Tone: f1=440@-10,f2=0@-10,c=50/50;

These lines tell the HT-503 what to expect for dial tones in France. I found the Interface Technical Specifications for France Telecom and Operational Bulletin No. 781 (1.II.2003) and Annexed List: Various tones used in national networkshelpful in crafting these. I am unsure about the volumes but -10 seems to work.

FXS Port
  • SLIC Setting: France
FXO Port
  • FXO Termination > PSTN Disconnect Tone: f1=440@-30,f2=440@-30,c=50/50;
  • FXO Termination > Country-based: France

You may find the PSTN Disconnect Tone does not work for your set-up. If this happens, try: f1=440@-30, f2=440@-30, c=500/500;

HT-503 Asterisk Settings

With the network and country specific settings applied, the HT-503 is ready to connect to the Asterisk server.

Basic Settings
  • Unconditional Call Forward to VOIP: 2000 / ip.address.raspberry.pi / 5060

This setting tells the HT-503 to forward all incoming calls from the landline (PSTN) to the specified SIP account. In this case the account is for extension 2000 on our Asterisk server. This means any phone connected to the Asterisk server will ring when someone phones your home landline.

FXO Port
  • FXO Termination > Number of Rings: 2
  • FXO Termination > Impedance-based: Yes
  • FXO Termination > PSTN Ring Thru FXS: No
  • Channel Dialing > Stage Method (1/2): 1

This reduces the number of rings before the HT-503 picks up incoming calls. Two rings is enough for caller identification information to be collected by the HT-503 and passed onto the Asterisk server. You can reduce the number of rings to zero but you may loose Caller ID support.

By the time your computer’s soft phone rings, the caller will have heard two or three rings. This is because the HT-503 consumes the first two rings and only then starts sending the call to the network.

I am not convinced Impedance-based is needed.

The PSTN Ring Thru FXS determines whether a physical phone connected to the HT-503 rings when an incoming call arrives. I want only the computers to make a sound when calls come in, so I have disabled the physical phone from ringing.

Stage Method is critical. This setting determines how the HT-503 expects external numbers to be dialled. By default the HT-503 is configured to expect a two stage dialling process. The first stage is to dial the registered SIP account, ht503fxo. The caller will then hear the external dial tone. Only then is the external number called and this is referred to as stage 2.

We want to be able to dial our external number in one step. Our soft phone should only need to dial the external number. It is then the responsiblity of Asterisk and the HT-503 to cooperate. With Stage Method set to 1 this is what we get. Remember the Dial(SIP/ht503fxo,60,D(w${EXTEN})) in extensions.conf? This line connects to the HT-503 and immediately asks for the HT-503 to dial out the number we initially dialled.

If you wanted to be able to dial to just an external line, this is possible with:

exten => 2003,1,Dial(SIP/ht503fxo)

With this line in /etc/asterisk/extension.conf, a call to 2003 would end up hearing the dial tone of the external landline. From there you could dial a number on the keypad to connect elsewhere.

HT-503 SIP Settings

The SIP accounts on the HT-503 connect to the Asterisk server. The names of the accounts is deliberate the will hopefully ease pairing of the right port with the right account.

FXS Port
  • Account Active: Yes
  • Primary SIP Server: ip.address.raspberry.pi
  • Outbound Proxy: ip.address.raspberry.pi
  • SIP User ID: ht503fxs
  • Authenticate ID: ht503fxs
  • Authenticate Password: 1234
  • SIP Registration: Yes
FXO Port
  • Account Active: Yes
  • Primary SIP Server: ip.address.raspberry.pi
  • Outbound Proxy: ip.address.raspberry.pi
  • SIP User ID: ht503fxo
  • Authenticate ID: ht503fxo
  • Authenticate Password: 1234
  • SIP Registration: Yes

Reboot and Test

Congratulations on getting through all those settings. It is now time to reboot the HT-503, for luck, and start testing the phones work as desired.

Update: I upgraded to a Synology DiskStation in place of the Raspberry Pi. See how to set up Asterisk with Docker on a NAS.

Internet At Home Without a Phone Line

Our house move is nearly upon us and the telecom line has yet to be installed. Rather than panic, I set up a wireless network backed by a 4G mobile/cellular data connection.

The resulting connection is enough to work with but I still look forward to having a physical line. The laws of physics mean a physical connection will always outpace a wireless one.

Simple Approach

By chance I had a spare TP-Link TL-MR3420 bought for family but later no longer required. This surprisingly inexpensive box did exactly what I needed and with almost no fiddly set-up.

If you are looking for a fast, simple to connect solution, buy the TP-Link TL-MR3420 or whatever is the latest model. The low price of the TP-Link box is because you will need a separate USB 3G or 4G mobile stick. The USB stick is plugged into the TP-Link box and the box shares the mobile connection through a wireless network.

This means one mobile connection is shared across all the devices you have.

TP-Link TL-MR3420 + USB 4G modem = Easy Wireless Network

Want a more capable but more complex set up experience? Consider a RouterBOARD.

Movie Splitter and Multilingual Chapter Markers

Miln Movie Splitter for Mac OS X

An update to my MPEG-4/.mp4 splitting application, Movie Splitter, is now available.

Yesterday Apple’s Mac App Store reviewers accepted my latest update to Movie Splitter. The update should be available worldwide in the next 24 hours.

Movie Splitter in the Mac App Store
Movie Splitter in the Mac App Store

This update adds support for multilingual chapters markers. This odd sounding improvement is as strange as you might imagine. It is possible for movie files to include different chapter markers for different languages. In practice this ability seems rarely used.

However, it is possible for chapter markers to be associated with languages you do not use or for an “undetermined” language context.

It is this latter undetermined, und, language context that this update really addresses.

The movie footage from our Canon cameras contains chapter information in the und context. That makes sense, the camera does not involve itself with the specifics of any spoken language being recorded.

Up until OS X 10.11.4, Apple’s AVFoundation framework happily returned und chapter markers when searching for a best match. With OS X 10.11.5, this behaviour changed and und chapters were no longer returned even when they were the only chapter markers available in the movie file. Is this a bug? I am not sure. If it is, waiting for Apple to fix it is not a game I am any longer willing to play.

With the original Movie Splitter, I searched for the chapters best matching your preferred languages – as determined by your locale. In almost every case this worked.

Then OS X 10.11.5 was released and suddenly Movie Splitter was frequently not being given any chapter markers for movies that previously had good results.

With today’s Movie Splitter, I search for chapter markers for every known ISO 639-2 language code known to OS X plus und. Preference is still given to your preferred languages.

This appears to restore the previous in almost every case this worked behaviour and it improves support for splitting movie files containing chapters markers in extraordinary languages.

My thanks to those who reported this problem via e-mail and for their patience as I found and worked around the underlying cause.

Happy movie splitting!

Problems with OS X 10.11 – El Capitan

Autumn arrives in the park.

With every major operating system update from Apple, I publish a short entry over on the DssW blog. The update invariably includes the advice not to update immediately.

Wait! Do not update to OS X 10.11, El Capitan, today.

Autumn colours arrive in Lyon's parks.
Autumn colours arrive in Lyon’s parks.

Every major OS X update has problems. Many lurk unnoticed by reviewers and early adopters. Some, like the network changes in the OS X 10.10 update, only appear when a critical mass of devices are updated.

This year Apple released OS X 10.11, also known as El Capitan. This has not been a good update for me.

I have to update my Mac because I am a software engineer. The products and services I work on need to be developed and tested on the latest versions of the operating system.

A Week of Problems on OS X 10.11

In just the last week, the problems I have suffered include, but are not limited to:

  • A kernel panic on shut down due to an IOKit layer regression (reported by Crash Reporter):
    panic(cpu 2 caller 0xffffff8003a3bcce): "A kext releasing a(n) AppleUSB20HubPort has corrupted the registry."@/Library/Caches/com.apple.xbs/Sources/xnu/xnu-3247.1.106/libkern/c++/OSObject.cpp:200
  • Disks failing to unmount safely during sleep (reported via Apple Feedback):

    Disk not ejected properly notification on OS X
    Disk not ejected properly notification on OS X
  • Accessing my USB GPS data logger locks up the USB sub-system (reported by Bug Reporter #22970080).
  • Scanning via the document feeder on our HP LaserJet no longer works (reported by Bug Reporter #23045716 and HP Forums)
  • Numerous graphical glitches during animations.

If you have an option not to update, wait for at least the first minor update.

OS X 10.11.1 should be released soon. It is unlikely Apple will fix all these problems soon. It took until OS X 10.10.4 before the last round of serious networking problems were dealt with.

Found a Bug?

Updated and found a bug, problem, regression, glitch, annoyance, or frustration? Please report it directly to Apple:

Speaking with a French accent – OS X say

French flags flying all along a street in Lyon

I just answered a fun question over at Ask Different. The questioner wanted to know how to make their Mac speak with French pronunciation.

By happy coincidence I recently stumbled upon someone else having fun with OS X’s say command and different internationalised voices. These voices are designed for use with a specific language and generally hidden from users of other languages.

However, the say command can still be told to use the voice regardless of the current language.

It happens that the voice Thomas is designed for the French language. Let’s have some fun:

say -v Thomas "Hello. I am speaking with a cute French accent."

Say as Thomas

You can use the say command with OS X’s Thomas voice to get French pronunciation.

Try the following command in Applications > Utilities > Terminal.app:

say -v Thomas "Bonjour. Je m'appelle Thomas."

We can wrap the say command up in an Automator service to make this useful.

Automator Service

To create the Automator Service:

1. Launch Automator.app
2. Create a new Service
3. Add a Run AppleScript action
4. Copy and paste in the AppleScript below:

on run {input, parameters}
	do shell script "say -v Thomas " & (quoted form of (input as string))
	return input
end run

5. Save the service as Speak in French

Automator.app say service
Automator.app say service

To use the service:

1. Select text in TextEdit.app or Safari.app
2. Control + Click to reveal the Context Menu
1. Select Services > Speak in French

Et voilà ! We turned a fun distraction into something useful.

Other Languages

Voices tuned for other languages beyond English and French are available. To discover the full list of voices and associated languages:

  1. Open System Preferences.app
  2. Select Dictation & Speech
  3. Select System Voice > Customize…
OS X 10 offers many languages
OS X 10 offers many languages

Improving Hugin on OS X

A couple of years ago a friend introduced me to Hugin. Hugin is software for stitching together photos into panoramas.

We were traveling together in the south of France and trying our best to photograph the landscape. Single regular photos of flat, but beautiful, landscape tends to result in dull images.

Take a series of slightly dull photos and combine them into a panorama, and ta-da! now you have a photo that evokes the landscape you saw.

Pont du Gard, France
Pont du Gard, France

I have found Hugin 2014 to be less able that previous versions when relying on the simplified interface. Today I discovered how to install an external tool to assist Hugin and in turn create better panoramic photos.

Install autopano-shift-c

These following steps will install and tell Hugin to use a more capable control point detector.

  1. Install Homebrew on your Mac
  2. Using brew, install autopano-sift-c using the command:

    brew install autopano-sift-c

  3. Open Hugin’s preferences: Hugin.app > Hugin (menu) > Preferences > Control Point Detectors

    Hugin 2014's Preferences on OS X
    Hugin 2014’s Preferences on OS X
  4. Select Autopano-SIFT-C (Configured, not installed)
  5. Update Program to point to the installed autopano-sift-c tool. At the time of writing this is: /usr/local/bin/autopano-sift-c
  6. Select OK, and Set Default

With the new tool installed and setting applied, Hugin should now be able to detect more control points. Meaning better matches between individual photos and better stitched panoramic photos.