True Japanese Ramen

I think average Japanese eats 2-3 ramen bowls a week, so people in Japan (especially in Tokyo) loves ramen. But when I was living in Japan, I was eating Ramen everyday. Yes, EVERYDAY.
If you never been to Japan, you would surprise that there is hundreds of Ramen restaurants in city.

Ramen restaurants lifetime is usually short. Some shops lasts 1-2 years while some restaurant ends business less than a year. Ofcourse there are some “traditional” restaurants like having 10+ years history, but no so many.

So people like me always looking for something new.

Ramen restaurants are “saturated” in Japan. They can’t survive with average taste.
So I would not surprise United States is the next Ramen business field.

OK, now the main thing: “Ramen in United States are not average taste compare to Japan. Even in Bay Area.”
I could say that this is the TRUE opinion of real native Japanese ramen lover.

First of all, pork broth a.k.a “Tonkotsu” is not a standard in Tokyo. I think it is more like southern Japan style, but still different. But people in Bay Area always loves Tonkotsu.

I asked several people why not soy sauce (which is highly standard in rest of Japan), they complained “because Tonkotsu taste better.”
I thought this was cultural difference, but I was bit doubtful about it. Because people really loves Japanese foods though.

So went to several famous Ramen restaurants in Bay Area and tried soy sauce ones. Then I understand what they meant. Yes, the taste is not good. (Or I would say BAD. Far below the average taste.)

I’m going to tell you this: You would get much better Ramen at your home.

Now I give you REAL ramen recipe. Don’t trust other recipes in English. Believe me. I’m making Ramen every week because it taste SO good.

Your first most simple Ramen recipe

Ingredients for 1L broth

  • 1 Chicken bone (with neck and skin is preferable)
  • 1 Ginger slice
  • 1 Garlic clove (peel it obviously)
  • 2 green onion (use only “green” part, discard white part)
  • 1 kg Pork butt or Pork belly (not sliced)
  • 20g Dried anchovy a.k.a “Niboshi”

It will takes 4 hours. Don’t be scary, just listen to your favorite music. It is a good time to discover some musics 😉 But don’t go out of kitchen, watch your stock every 10 minutes, especially at a beginning.

1. Wash a chicken bone, and soak it long time (overnight is preferable, but at least 2 hours) in water.
Reason: to remove the blood.
2. You need to tied up the pork with kitchen twine. Just like this.
3. Put everything except Niboshi in 2L of hot “soft water” (I’m using Crystal Geyser usually.) and simmering for 4 hours. (Don’t bring it boil! Keep the best temperature for simmering.)
4. Watch your stock and skim off the scum constantly.
5. After 2 hours from the beginning, remove the pork. (Then soak it in the “Sauce” for 30 min. Keep read this article!)
6. In last 30minutes, put Niboshi in stock.

That’s it! How easy steps.
Rember that the final volume of the broth is 1L. I would start with 2L so the water level goes down and hopefully you will get 1L after 4 hours of simmering.

Ingredients for 400ml of “Sauce”

  • 300ml soy sauce
  • 100ml seasoning sake a.k.a “Mirin”

1. Put Mirin in the sauce pan, bring it to boil then “Flambé” it.
2. After cool it down, pour soy sauce and mix.

You will need it for serving and also for seasoning the pork. So the pork toppings that you see in Ramen is actually the by-product.
It is better idea to put the pork in refrigerator after seasoning so it become easy to slice.
You also can use this for seasoning the boiled eggs. Just soak it for several hours.

Now you serve the Ramen.

Ingredients for 1 serve of Ramen bowl

  • 30-50ml Sauce
  • 350-450ml broth
  • 1 pack of Ramen noodle (get Japanese noodles from Japanese store. They usually comes with some soup pack, discard it.)
  • Slices of the pork
  • Your favorite toppings

Follow this 4-easy-step. (The measure is vary depends on personal favorites.)
1. Pour the Sauce into a bowl.
2. Pour the broth into a bowl.
3. Put boiled noodle and mix it.
4. Place the toppings.

I think you would proberbly get the what I called “average taste” Ramen with this recipe. This is very basic standard recipe, so I would suggest to research and optimize it and create your very own Ramen!

Thanks for reading this and enjoy your Ramen life.

Objective-C on Embedded MCU

In these days, I spend time pretty much for Objective-C; not for iOS nor OSX, but embedded.

Oracle is pushing hard their Java to embedded these days (This is not the first time though.), Arduino; which uses “Java-like” language; keeps going well, and another platform called mbed is introducing C++ based high-layer framework. JavaScript board is actually exist (Tessel) as well!

…Why not Objective-C?

I guess people believe that: ObjC is Apple proprietary language and can’t compile with any other than Apple’s devices which is not correct.
Objective-C actually consists of “Pure C + ObjC runtime”, and there is several runtimes are exist.
“libobjc” is one of the famous implementation included in gcc, “GNUStep” is another popular runtime, and Apple’s one.
These 3 are long-time de-facto standard for ObjC, but I want to introduce another newer implmentation: ObjFW

ObjFW is developed by Jonathan Schleifer, it is small, modern ObjC, and notably portable. ObjFW is not only a runtime, but also a library as well. That means, if you write some code top on the ObjFW library, you could have it runnable both ObjFW runtime and Apple’s runtime. So it pretty much “portable”. Another good thing is that is lightweight. He has done running his runtime on small gaming devices includes Wii, PSP, and NintendoDS.

Anyway, I like ObjFW, and I decided to use ObjFW for embedded device. Using ObjC in embedded device has many advantages.

  1. You can use “Pure C” anytime anywhere.
  2. It also means that you can use assembly anytime.
  3. Powerful object-oriented language, but still faster than Java.

The only disadvantage that I think is large memory footprint. Even if use ObjFW it would consume 600KB+ at least. That means you cannot run without external RAM. (Embedded Java is better in that issue.)
Because of that, you gonna need some bootloader for program/execute code with external RAM. So that would be another disadvantage in contrast to C/C++ execution from flash. (And most of the MCU is pretty much optimized performance for flash execution. RAM execution is usually slower than flash execution actually.)

A week ago, ObjFW was not supported (not tested) on Embedded MCU. I tried to compile it for ARM Cortex-M4F and it was success. (I did some minor hacks to work, and this is my forked repository: https://github.com/FantomJAC/objfw/tree/cortex-m4f)
I’ve contacted Jonathan about that I’ve done build for Cortex-M4, and he put that in his blog! Thanks!
Then we discussed a lot and finally ObjFW supports Cortex-M4 officially.
Now everyone can try ObjFW on your Cortex-M4 board using his master branch!

Due to lack of documents about how to build & execute, I put some tutorial here.

First, you need Clang/LLVM 3.5. Actually, 3.5 is still in development but you can build from trunk.
Then you need GCC ARM Embedded. This is an prebuilt gcc package maintained by ARM.

Next, you need to do some workaround with gcc. Reason here is that Clang is still immature with cross-compilation unfortunately.

1. Make a symbolic link for clang

cd /path_to_toolchain
ln -s arm-none-eabi usr

2. Put a bash script called arm-none-eabi-clang in /path_to_toolchain/bin
This script adds ARM cross-compile options to clang forcibly. Do not put FPU options if you are using Cortex-M4 w/o FPU.

/path_to_llvm/bin/clang --target=arm-none-eabi \
-march=armv7e-m -mthumb -mfloat-abi=softfp -mfpu=fpv4-sp-d16 \
-isysroot /path_to_toolchain $@

3. Rename arm-none-eabi-gcc to arm-none-eabi-gcc.real

cd /path_to_toolchain/bin
mv arm-none-eabi-gcc arm-none-eabi-gcc.real

4. Put a bash script called arm-none-eabi-gcc in /path_to_toolchain/bin
Ahh this is so hackish :( Clang passes gcc all options from command line. So gcc gets angry for those ObjC options which is not supported.

#!/bin/bash
for ARG in "$@"
do
if [[ $ARG != -fobjc* ]] && \
[[ $ARG != -fconstant-string-class* ]] && \
[[ $ARG != -fblocks ]] && \
[[ $ARG != -fno-constant-cfstrings* ]]
then
NEW_ARGS="$NEW_ARGS $ARG"
fi
done
arm-none-eabi-gcc --specs=rdimon.specs $NEW_ARGS

5. configure & make
The link option here is to satisfy autoconf’s linkage checks.

./autogen.sh
export PATH=$PATH:/path_to_toolchain/bin
export LDFLAGS=--specs=rdimon.specs
./configure --host=arm-none-eabi --disable-shared --disable-threads --disable-sockets --disable-files
make

OK, got errors? Yes, the final task should fail because there is no way to link ObjFW’s tests application.
To run the tests, you need to create a static library that contains whole tests code objects.

6. Linkage
So the link process is pretty much different between those IDE/SDKs. If you are using GCC ARM Embedded as well, you might add some linker script & init codes to ObjFW autoconf script. Or if you are an user of IAR, MDK…well it should be done in each individual IDE. The static library “libobjfw.a” is portable anyway.
I use GNU ARM Eclipse Plug-in with GCC ARM Embedded. Here is the tips for that.

  • Remove unused sections is better be unchecked
  • In Library->Libraries, put objfw, m.
  • User “ObjC” library should be added in Miscellaneous->Other linker flags as -Wl,–whole-archive -lmyapp -Wl,–no-whole-archive
  • Make sure the linker script for external RAM

My debugging hardware environment is Silabs EFM32WG-DK3850. It has 4MB PSRAM and 16MB Flash, so enough specs for ObjC development. I wrote PSRAM bootloader from scratch. There is no example how to boot from PSRAM, because of that, maybe I should open-source that later.