Friday, November 21, 2014

Netflix on standalone XBMC in Linux

For a long time, getting Netflix working on Linux was really tricky. On a standalone Linux XBMC HTPC system, it was virtually impossible, so much so that I didn't even try it. Now though, with Chrome supporting HTML5, it's a lot easier.

I used NetfliXBMC + Chrome Launcher. NetfliXBMC lets you browse the content in XBMC, and can then launch the selected content to play in Google Chrome.

I'm using Arch Linux, with XMBC, without a desktop environment, you may be able to skip some of these steps, or adapt them according to your configuration.

Anyway, here's how I did it.

Update: Edited to reflect that there is a new repository and a new thread for NetfliXBMC on the Kodi forums.

Update 2: In Helix, it is not possible to start/stop openbox at launch/close of chrome, it must be started before Kodi does. So I have updated the script and added step for how to do this.

Get Chrome and NetfliXBMC up and running

  1. Install the XBMC repository for Chrome Launcher, you can find a link to it on the Chrome Launcher Kodi forum thread
  2. Install Google Chrome (need at least version 37, AUR has version 38, and that's the one I installed)
    1. Download the package file from AUR
    2. Instruction for how to install from AUR can be found here. Make sure to use the -s argument when you do makepkg, since it includes dependencies.
  3. Install Openbox window manager and xdotool: sudo pacman -S openbox xdtool
  4. Edit your kodi startup script (probably /usr/bin/kodi-standalone), and add "openbox &" (without the quotation marks) as the first instruction in it (immediately after the copywrite stuff). OBS: It seems that this gets lost when you update the Kodi package, so it needs to be redone when that happens 
  5. Create a script for launching Google Chrome (I simply called it chrome.sh and placed it in the xbmc home folder). It moves the mouse pointer off screen and starts Google Chrome.
    #!/bin/bash
    xdotool mousemove 0 740 &
    /opt/google/chrome/google-chrome $*
  6. Make the script executable: chmod + x chrome.sh
  7. Set Chrome launcher to start using this script
    1. Go to Add-On Settings
    2. Toggle "Use custom chrome/script path"
    3. Select "Chrome/script path", browse and select your script
  8. Install NetfliXBMC, you'll find it in the repository here
  9. In the Add-on settings for NetfliXBMC, enter you Netflix username and password, the rest of the settings are up to you

Video settings

My system runs natively at 720p, but XBMC runs at 1080p, this means that it'll change to 720p when Chrome opens.
  1. To fix this issue, I placed a config file in /etc/X11/xorg.conf.d/ (actually I added to one I already had, named 20-intel.conf):
    Section "Screen"
        Identifier             "Screen0"
        Device                 "Intel Graphics"
        Monitor                "PANASONIC TV"
        DefaultDepth           24
        SubSection             "Display"
            Depth              24
            Modes              "1920x1080"
        EndSubSection
    EndSection

Audio settings

Looking at the forums, there seems to be a lot of users that have a problem with this.

While audio works fine in XBMC, it didn't work at all outside of it (ie in Chrome) for me. Having looked around the forums on this, there seems to be many for which this is the case.
  1. In XBMC, set "Settings -> System -> Audio output -> Keep audio device alive" to "Off"
  2. Install alsa-utils: pacman -S alsa-utils
  3. From command line: alsamixer
  4. Unmute and raise volume for the channels that you are using
  5. You need the card and device numbers for the soundcard that you are using (even if it is built in): aplay -l
  6. Create a file (if it doesn't already exist) in the xbmc home directory (for me, /var/lib/xbmc), called .asoundrc, and place this info in it (replace card and device numbers with your own found above)

    pcm.!default {
        type hw
        card 0
        device 3
    }

Controls

If you are using a remote control, you'll want to assign one of the buttons to Esc or Alt+F4, in order to close Chrome when you are done watching something.

Aside from that, both Enter and Space work as play/pause, and since I use Enter to select a movie to play in XBMC anyway, that works out. The left and right arrows step back and forward in the movie, so they work kind of like rewind/fast forward (actually, I prefer the steps).

I kind of wish that I could access the sound/subtitle settings as well, but I haven't yet found a (good) way to do this.

Finally, if you absolutely feel that you want to use "p" (ie the same as play button in XBMC) to play/pause, there is an extension for Chrome that can make this happen called Flix Plus.

Remaining issue

My one gripe is that I only get stereo sound, rather than surround. After googling a bit, it turns out that surround sound is not supported by Netflix when using a HTML5 browser... So basically, it's Netflix's fault. Still, I think I prefer a nice and convenient interface and stereo audio, to my BD players slow-a** interface with surround. Maybe fire up the BD or Xbox if there is a specific movie that I really want 5.1 audio on.

Friday, September 19, 2014

Salted Caramel Macarons

It was my turn to bring cookies to work this Friday, and I decided to make salted caramel filled macarons.

In my search for a recipe for the filling, I came across a new recipe for the macarons themselves. I learned that the recipes that I've been using up to now were the "french version", but that there is another option, the "italian version". The difference is in how the meringue is done.

I decided to try the "italian version", and I don't think I'll be going back.

This adds a tiny amount of complexity to making the batter, but it also makes it much more stable and consistent.

I found the recipe from another blog, which linked to another blog, which had the recipe but also referred to the book it came from... No offense to other bloggers, but I'll just say that this recipe is from the book "Bouchon Bakery". If you like the recipe, buy it. It looks to have a lot of good recipes, and I'll probably be making something else from it before long.

You can leave out the instant espresso if you like, it's just a very subtle flavor and gives a slight tinge to the macarons.

Salted caramel macarons





















Ingredients - Macarons
212g Almond meal
212g Powdered sugar
82g + 90g Egg whites
236g + a pinch Granulated sugar
158g Water
0,5 tsp Instant Espresso (optional)

Ingredients - Salted Caramel
2,35 dl Whipping cream
3,55 dl Granulated sugar
2 tsp Salt (preferably coarse)
220g Butter


First, to make the macarons. 

Preheat the oven to 180°C.

Sift the almond meal and powdered sugar into a large bowl and whisk together. Make a well in the center, but leave a bit of almond sugar at the bottom. Pour in the 82g of egg whites, and optionally, the instant espresso. Mix together using a flexible spatula, you should get a fairly thick mixture.

Now comes the bit that makes this "italian", and italian meringue. Put the 90g of egg whites into a bowl, and get your electric whisk ready. Put the granulated sugar and water into a pot, and place on the stove over a medium-high heat. You want to bring the sugar to 120°C at the same time as the meringue reaches soft peaks... The sugar takes some time to reach this temperature, so you don't need to start the meringue until the sugar reaches 100-110°C. At that time, add a pinch of sugar, and whisk at medium speed until it reaches soft peeks. As soon as the sugar reaches 120°C, take it off the heat, and slowly trickle into the meringue while whisking. Continue to whisk at medum-high speed for a few minutes, until it's firm and glossy, and the meringue has cooled (the bowl might still be warm, that's fine).

Fold 1/3 of the italian meringue into the almond mix, then continue folding the meringue in, a little bit at a time. You probably won't need quite all of it, but most of it. You are looking for a texture, where it is still somewhat firm, but but not too firm. It should still form ribbons, but sort of "relax" into itself. The best way to think of it is probably this, we are about to pipe this onto a tray, as we do we'll get a peak, the mixture should be soft enough that the peak collapses into the batter so that we get a smooth top, but also firm enough that it doesn't go completely flat.

Pipe the batter, using a circular hole tip, onto a baking tray covered with grease proof paper. You are looking for about 4cm in diameter (they'll grow a little as they settle down, so keep that in mid as you pipe the next one).

Place in the middle of the oven, immediately turn it down to 160°C, and bake for 9-12 minutes.

As you take them out, do so gently, a bang will make them collapse a bit (not a disaster, but still).

Let them rest on the tray for about 5 minutes, then transfer to a rack for cooling.

Heat the oven up to 180°C again, and repeat until all the batter is baked.

Now for the salted caramel.

Cut up the butter into small pieces, and leave in room temperature.

Place the cream and salt into a small pot. Place the sugar into a wide pot (the thinner the layer of sugar, the easier it'll be).

Bring the cream to the boil, and take of the heat. In the meantime, melt the sugar over a medium-high heat. As the sugar melts and starts getting dark, it might be a good idea to warm up the cream again, it really needs to be warm when it's combined with the caramel, or it won't work.

Once the sugar has become a dark brown caramel (around 175-180°C), take it off the heat and, while whisking, slowly pour in the warm cream. Be careful! It'll bubble and spit, and you do not want this stuff on you.

Once it has cooled to a reasonable temperature (50-60°C), stir in the butter, a little at a time. Place in a shallow container and let cool in the fridge.

To finish up.

Place the salted caramel into a bowl, and whisk (by hand, it's important not to over whisk it, as it'll separate). It should become softer making it easy to pipe.

Match cookies that are the same size, pipe some caramel onto one of them, sprinkle with a small amount of coarse salt, then place the other one on top and twist until the filling fits nicely along the edges.







Wednesday, September 10, 2014

CyanogenMod 11 on Samsung Galaxy S III

A couple of weeks ago, I decided to update my phone to the latest version of CyanogenMod, version 11, running Android 4.4 KitKat. CM11 has not yet reached stable, so I decided to go with the "snapshot" from early august, M9. Since it wasn't in stable yet, I wasn't sure what to expect, but I have to say, I am very pleasantly surprised.

As I was already using an earlier version of CyanogenMod, I already had the correct recovery SW installed, and could skip a lot of the stuff I had to do last time. Installation was in fact, a snap.

Just download the firmware and Google Apps, copy them to the SD-card, boot into recovery mode (switch off, then Volume up + Home + Power), flash the CM11 and then the GApps zip-file, and perform a "Wipe data/factory reset".

Reboot, and I was welcomed by the setup screen for what felt like a brand new phone.

As I said, I've been using this for a couple of weeks now, and I have yet to find a single bug. There has been some talk of possible Bluetooth issues (poor Harald), and I can't really speak to it as I haven't used it yet. But in everyday use, it works perfectly. If anything, it's faster and smoother than CM10.2 (Jelly Bean), and the battery life has increased significantly (CM10.2 was by no means bad in this area).

I'm lovin' me some KitKat right now, and so should you.

Tuesday, August 12, 2014

New Arch Linux + XBMC Installation guide







I decided to upgrade my HTPC with a SSD system drive, and a larger HDD for storage. Since I'm changing the system drive, that means a reinstall. As I did it, I found that quite a few things had changed since last time, so I made a new guide.

Compared to before, some things are easier to do, and some are more difficult.


My installation has no window manager, it is just XBMC on top of Arch Linux. If you want to be able to switch to a "normal" desktop environment for using a web-browser etc, then you can easily do that in addition to the things described in this guide, Google is your friend here.

Some of the things in this guide are optional, or HW-dependent. For both these cases I have tried to clearly mark them as such, as well as describing what they are for.

Preparation

Download the latest version of ArchLinux from archlinux.org and burn onto a CD/DVD or use a tool like dd (Don't use Unetbootin, it doesn't work with Arch Linux) to install to a USB-drive. You can find instructions here.

Boot the computer from this drive and select the appropriate version.
Once booted into the live environment, you can open additional terminals and switch between them with ALT+Fx, where x is the number of the terminal, the original one is 1. Login is “root” with no password needed.

The procedure is a little different depending on if you are using UEFI or not, I'm not. If you are, then there are some additional steps needed. Please see the Beginners' guide on the ArchWiki for details.

Later on during the installation, I realized that I had forgotten to create a swap partition, so I'm using a swap file instead. If you want a swap partition, do that during the other partitioning.

Installation

  • If needed change keyboard layout with the “loadkeys” command, the available keymaps can be sound under /usr/share/kbd/keymaps
    • loadkeys sv-latin1 (Swedish keyboard in this case)
  • You might need to setup an internet connection at this stage. If you have a wired DHCP connection, it should work without doing anything, if not, then you'll need to do some work on it.
  • Partition disks
    • First find your disks, and which is which
      • lsblk -o NAME,FSTYPE,SIZE,LABEL
    • Decide if you are going to use MBR or GPT partition tables, for disks over 2 TB GPT is required (you can mix and match MBR and GPT disks)
      • MBR: fdisk /dev/sdx
        • Type "o" + ENTER to create partition table
        • Type "n" + ENTER to create partition
        • For the rest of the options, the only thing you really need to enter is the size of the partition (unless you are using the entire disk, the  you don't even need that), leave the rest as default
        • Repeat from "n" for more partitions
        • Type "p" + ENTER to preview the partitions
        • Type "w" + ENTER to write the partitions to the disk 
      • GPT: cgdisk /dev/sdx
        • Choose "New"
        • For the rest of the options, the only thing you really need to enter is the size of the partition (unless you are using the entire disk, the  you don't even need that), leave the rest as default
        • Choose "Write", then "Quit"
      • Replace x with the letter for the drive you want to partition
  • Format (to ext4 filesystem in this case) and name your root partitions
    • List your partitions
      • lsblk -o NAME,FSTYPE,SIZE,LABEL
    • Format
      • mkfs.ext4 /dev/sdxy
    • Label
      • e2lable /dev/sdxy <label>
    • Replace x with the drive letter and y with the number
  • Repeat previous step for any other partitions you want to format
  • Edit the mirrorlist and move your closest mirror to the top of the list
    • nano /etc/pacman.d/mirrorlist
  • Mount the new root partition under /mnt
    • mount /dev/sdxy /mnt
    • Again, replace x with the drive letter and y with the number for your root partition
  • Install the base system
    • pacstrap /mnt base base-devel
  • Generate basic fstab
    • genfstab -U -p /mnt >> /mnt/etc/fstab
  • chroot into the new system
    • arch-chroot /mnt
  • If you want to have other disks automounted, edit fstab and add drives, find the UUID with blkid. This can be done later during the setup or any other time as well.
    • nano /etc/fstab
#
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sdb6 LABEL=root
UUID=fb22b964-b38f-42df-bded-d9ac6df54ec5 / ext4 rw,relatime,data=ordered 0 1
# /dev/sdb5 LABEL=swap
UUID=21ecefbb-1c9d-48fa-a5f3-c9ba9a09b547 swap swap defaults 0 0
# /dev/sdb6 LABEL=home
UUID=d0e114fa-b428-4605-851d-504c86c0e7ac /home ext4 defaults 0 2 
  • Open /etc/hostname and add you computers name
    • echo XBMC > /etc/hostname
    • You can replace "XBMC" as the hostname with whatever you want of course
  • Symlink your local time with the correct timezone
    • ln -s /usr/share/zoneinfo/Europe/Stockholm /etc/localtime
  • Open locale.gen, uncomment the language profile you want and generate the profile
    • nano /etc/locale.gen
    • locale-gen
  • Add language config, I'm using english US here. Use the same as the one you uncommented above
    • echo LANG=en_US.UTF-8 > /etc/locale.conf
  • Export locale
    • export LANG=en_US.UTF-8 
  • Add permanent keyboard mapping (Swedish keyboard in this case)
    • echo KEYMAP=sv-latin1 > /etc/vconsole.conf
  • Set the HW clock to use UTC (careful with this if you are multibooting with other OS's)
    • hwclock --systohc --utc
  • Find NW-card interface, configure and start wired DHCP (again, if you are using something else, set that up), I'm using this temporarily, I'll setup static IP later on
    • Use ip link to find the name of the NW interface
    • systemctl enable dhcpcd@enp4s0.service
    • systemctl start dhcpcd@enp4s0.service
    • Replace enp4s0 with the name of your interface
  • If needed, edit mkinitcpio.conf
    • nano /etc/mkinitcpio.conf
    • HW-dependent: Add “i915” under MODULES if using compatible intel video-card
  • Generate initial RAM-disk
    • mkinitcpio -p linux
  • Install GRUB
    • pacman -S grub
    • grub-install --target=i386-pc –recheck /dev/sdx (where x is the device that root is on. DO NOT USE THE NUMBER THAT USUALLY FOLLOWS, this is installed on the device, not the partition.
  • Configure GRUB
    • If needed you can configure grub in /etc/default/grub
      • nano /etc/default/grub
      • Change GRUB_TIMEOUT to preferred value
      • HW-dependent: If using Intel Sandy Bridge  video drivers, change so that GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.i915_enable_rc6=0" 
      • grub-mkconfig -o /boot/grub/grub.cfg
  • Install and enable ssh, you could do this later, but I like to do it here, so I can do the rest of the setup over ssh
    • pacman -Su openssh
    • systemctl enable sshd
  • Set root password
    • passwd
  • Change the NW setup from DHCP to static IP
    • systemctl stop dhcpcd@enp4s0.service
    • systemctl disable dhcpcd@enp4s0.service
    • cd /etc/netctl
    • cp examples/ethernet-static my_network
    • nano my_network
    • Change the values for the interface, ip-addr, gateway and DNS to ones you are using
    • I had some problem with it not working if the router wasn't on when I started the HTPC, to fix this, add the following line at the end of the file
      • SkipNoCarrier=yes
    • netctl enable my_network
  • Exit chroot
    • exit
  • Unmount root partition
    • umount /mnt
  • Reboot

Setup

  • You should be able to do the rest over ssh if you want now
  • Add multilib support if you are using 64-bit version and think you might need support for 32-bit applications
    • nano /etc/pacman.conf
    • Uncomment "Multilib" rows
  • Install additional packages (The ones marked in red are optional)
    • pacman -Syu mesa alsa-utils ntp avahi nss-mdns shairplay libplist polkit xbmc xorg-server xorg-xinit xorg-utils xorg-server-utils upower udisks
      • ntp: For synching the time with a network serve
      • avahi & nss-mdns & shairplay & libplist: For Airplay support
  • Install video drivers
    • HW-dependent: For Intel: pacman -Syu xf86-video-intel libva-intel-driver
  • HW-dependent: For intel video drivers, add config file to disable compositing
    • /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
# Option "AccelMethod" "sna"
# Option "TearFree" "true"
EndSection
Section "Extensions"
# fixes tearing
Option "Composite" "Disable"
EndSection
  • Add config file to enable XBMC to power off and reboot
    • /etc/polkit-1/rules.d/10-xbmc.rules
polkit.addRule(function(action, subject) {
if(action.id.match("org.freedesktop.login1.") && subject.isInGroup("power")) {
return polkit.Result.YES;
}
});
  • Add user and add that user to appropriate groups(replace username with your actual username)
    • useradd -m -g users -G video,audio,storage,power,games,network,optical username
  • Set password for new user (replace username with your actual username)
    • passwd username
  • Configure and enable services
    • Optional, perform if ntpd was installed: 
      • Change the ntp servers in /etc/ntp.conf to local ones
      • systemctl enable ntpd
    • Optional, perform if avahi was installed:
      • Not sure if it is needed or not, but I added mdns4 to the end of the hosts line in /etc/nsswitvh.conf
      • systemctl enable avahi-daemon
  • You might want to configure ssh and sftp, depending on how you want the setup to work.
    • nano /etc/ssh/sshd_config
  • Setup a swap file
    • fallocate -l 2048M /swapfile
    • chmod 600 /swapfile
    • mkswap /swapfile
    • swapon /swapfile
    • Add the line below to /etc/fstab
      • /swapfile       none    swap    defaults        0 0 
  • Finally, we need to set it up so that XBMC starts automatically. This got more difficult recently, when xorg-server 1.16 was released... There are a couple of ways of doing this, I chose this one because I found it the easiest.
    •  Add a file: /etc/X11/Xwrapper.config with the following text in it
      • allowed_users = anybody
        needs_root_rights = yes
    • Manually add the xbmc user
      • useradd -m -c 'XBMC user' -G audio,video,network,optical,storage,power,games -d /var/lib/xbmc -s /usr/bin/nologin xbmc
    • Create the xbmc service file: /etc/systemd/system/xbmc.service
      • [Unit]                                                                                                      
        Description = Starts instance of XBMC using xinit
        After = systemd-user-sessions.service network.target sound.target
        Conflicts=getty@tty7.service
        [Service]   
        User=xbmc
        Group=xbmc
        PAMName=login
        Type=simple
        TTYPath=/dev/tty7
        ExecStart=/usr/bin/xinit /usr/bin/dbus-launch --exit-with-session /usr/bin/xbmc-standalone -- :0 -nolisten tcp vt7
        Restart=on-abort

        [Install]                                                                                                       
        WantedBy = multi-user.target
    • Enable the service
      • systemctl enable xbmc
  • Reboot and enjoy









Saturday, July 26, 2014

Using the Zoom slider on Microsoft Natural Ergonomic Keyboard 4000 for scrolling

I got the Microsoft Natural Ergonomic Keyboard 4000 a while back, and thought about using the zoom slider for scrolling quite early on. After a bit of googling, it was clear that I wasn't the only one who had that idea. It did seem quite complicated though... so I kept putting it of. Now I decided to finally give it a real try, and due to some changes, it turns out to be quite simple :)

To be honest, this is not true scrolling, I'm mapping the zoom in and out to page up and down. Those buttons already exist, so some might think it redundant, but I find that the zoom slider is nicely placed in the middle of the keyboard, so it works for me. Also, you could, using this method, map it to just about any function.

The changes that have been made in Linux, in particular, the integration of systemd and udev, means that a lot of the older solutions you might find do not work. The keymap command no longer exists, for example.

  1. Create a file: /etc/udev/hwdb.d/61-keyboard-local.hwdb
  2. Paste the following text (exclude the "1."):
    1. # Microsoft Natural Ergonomic Keyboard 4000
      keyboard:usb:v045Ep00DB*
       KEYBOARD_KEY_c022d=pageup
       KEYBOARD_KEY_c022e=pagedown
  3.  In terminal, rebuild the HW DB index: sudo udevadm hwdb --update
  4. Reboot
  5. Your zoom in/out slider should now function as page up/down.

In case anyone is interested in how I came to this...

The reason I didn't need to fiddle about with evtest and event numbers etc, is that the work has already been done. If you look in  /lib/udev/hwdb.d/60-keyboard.hwdb, there is already an entry for this keyboard, and for these keys:
# Microsoft Natural Ergonomic Keyboard 4000
keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=zoomin
 KEYBOARD_KEY_c022e=zoomout
Now, you could just change it in that file, but that means that it will stop working if it is updated, better to add a separate file. So all that is needed is a hwdb file with a higher index (under etc rather than lib, to keep it separate). The point is that we can use the syntax, including VID, PID, and keycodes, in our new config file.

As I said in the beginning, you could map them to pretty much anything you like. I tried, but did not get scroll up/down to work for some reason... Anyway, if you feel like trying other things, here is a link to the list of key-mappings that you could use to map it to.
 

Tuesday, July 22, 2014

Ice Cream Cones

Here is the recipe for the cones that I made in the last post.

There was a recipe that came with the waffle iron, but it's a fair bit more complicated than this one, and I didn't have all the ingredients at the time. I might give it a try later, but for now, this is a very simple recipe for waffle cones, and it's still delicious.

This recipe makes about 5-6 ice cream cones, but you can of course double it (or more) if you like.

Ice cream cone




















Ingredients
1 Egg
0,5 dl sugar
1 dl Flour
1 tbsp Vegetable oil (something without a lot of flavor, like rapeseed oil)
0,5 tsp Vanilla powder


Whisk the egg and sugar until it's fluffy (a couple of minutes at least).

Whisk in the other ingredients.

Cook in the waffle maker, and roll into cones immediately, before they harden.



 

Tuesday, July 15, 2014

Wilfa CC-1 Review

The Wilfa CC-1 is a waffle cone maker. It's basically the same as a waffle iron, but it produces much thinner waffles that become crisp, to make ice cream cones.

Wilfa CC-1





















Having never used another waffle cone maker, I don't really have anything to compare it with. That said, it seems to work quite well. The waffles come out fairly evenly cooked, and look nice.

The problems I have with this piece of kit don't really have anything to do with the device itself.

  1. The manual, it's poor. A waffle iron is a pretty simple thing, to be sure. Still, there are 2 features that stand out on the device, the red and green lights on top, and the dial in the center. Neither of these things are even mentioned in the manual that comes with it! It's not that hard to figure out (I really hope I got it right after saying that), the lights indicate if the iron is up to temperature or not, and the dial is to set the temperature. It would be nice though, to have some indication of what temperature to use! I just set it in the middle, and that seems to work quite well.
  2. Do you really need to make your own waffles? It's fun and all that, but unless you plan to experiment to find the perfect recipe for your cones, or you go through a, frankly, ridiculous amount of them, I'm not entirely sure I see the point of this as compared to just buying some.

As I said though, If you are after a waffle cone maker, then this is quite a good one.

Oh, and it has a "Österdalsmönster" (this is the pattern on the waffles). Some seem to rave about this, but to be honest, personally, it doesn't really matter to me.

Cone




















Actually rolling the cones turned out to be quite tricky. You have to be fast, before the waffle cools enough to harden (this happens quite quickly), meanwhile you're trying to get the cone shape without burning yourself to much... I'm sure this gets easier with practice though.

I'll come back with a recipe for the cone shown above soon.