Sunday, 20 March 2016

Why I Really Don't Like DataSets

Starting my career as a C# developer in a small software house with very little experience of the C# language and the .NET framework (as an undergraduate, most of my experience was with Java and a few PHP projects on the side), I often needed to get things up and running in a hurry. None of us were familiar with the best practices for .NET so we generally opted for the quickest solution. When connecting applications to databases, we generally used DataSets.
At the time, they seemed like a good idea. We could automatically build our data access layer and they helped to hide some of what was going "under the hood". Even in my current job, we still have a legacy code that based around DataSets, mainly for providing data to UI controls. The advantages they provided over plain old ADO.NET were:

Quick to Set up
Particularly if you have a large database, DataSets provided a quick way of setting up access to our application database. Today there are better ORM frameworks available, such as Entity Framework (which has improves significantly since the initial versions).
We could point the DataSet the relevant stored procedures and, hey presto! You've got a good chunk of your data access layer in place.

Winforms/WebForms Binding
DataSets made it pretty easy to bind data to controls. This was useful where we needed ComboBoxes that were populated from the database (e.g. list of types/statuses) or for DataGridViews that displayed search results.


Ultimately, these justifications are laziness more than anything else. If you're not comfortable with alternative mechanisms/frameworks, it's too easy to stick with what you know.
Now, I try to remove DataSets where possible and here are a few reasons why:

Clutter
Have you ever seen a DataSet with 50 or more TableAdapters? I have! Believe me, it wasn't a pretty sight. DataSets can become a real headache to manage when you have a large number of Table classes and TableAdapters.
If you want an example of how bad this can be, try mapping everything from the AdventureWorks2012 database in to a DataSet!
I've worked on DataSets that have this level of... clutter and they are not that easy to manage.
OMG! 70 TableAdapters? How is that even possible?
Storing The Connection
For a small application, this can make a lot of sense. An application scoped setting that any other datasets (or anything else pointing to that database, for that matter) can use.
The problem comes when you:

  1. Have multiple projects (in which case you have duplicated connections/connection strings)
  2. If you want to change connection based on things like build configuration
It's a problem you can't escape with auto-generated code, you're surrendering a certain degree of control

Extensibility
One of the biggest problems I've found with the Extensibility of DataSets (or, specifically, TableAdapters) is when you need to change the default timeout. In a connection string, you can set the connection timeout, but not the command timeout. This will default to 30 seconds. This poses something of a problem when you have complex searches taking place that may run for longer than this. Making changes to auto-generated files is not a good idea as your changes will be undone next time someone opens the designer and makes a change..
Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
Fortunately, partial classes can help. A solution I found a few years ago on Stack Overflow suggested the following:
By providing a property that will set the SelectCommandTimeout on all commands in the command collection, we can set the timeout to whatever we want. The only problem is that the same (boilerplate) code is required for every TableAdapter. Not happy with this duplication, I was able to clean it up slightly.
An extension method can apply the override to the command collection:

My biggest frustration is that TableAdapters only inherit from System.ComponentModel. My preferred solution would be to call an extension method on the tableadapter. If there were a common base class that that TableAdapter classes inherit from or a common interface they implement then it would probably be easier (although with the command collection not being exposed, I'd probably have to do something with reflection to find it)

These days I now avoid ORM Frameworks. In theory, they're great. In practice, they can cause headaches. My preferred solution is to use a wrapper (that we wrote ourselves) around ADO.NET to provide a things like mapping of results to classes that represent results (dealing with collections of objects rather than data tables).
It may take longer to write the classes, but it's all easier to maintain (besides, the code generation of ReSharper can speed up things like constructor or property generation)

Another advantage of using plain old ADO.NET is that passing interfaces (e.g. ICommand, IConnection etc instead of SqlCommand, SqlConnection) will make it a little easier to change database provider (e.g. going from Sql Server to Oracle)

Sunday, 25 October 2015

Anatomy of a Like and Share Scam

There are many of these scams on Facebook. Fortunately, I don't come across them very often (most people I know are fairly sensible) but on the occasions I do I tend to be proactive about warning friends.

We've all seen it before - the offer that seems too good to be true. A major airline is offering free flights (or even free holidays) to amazing destinations to a few lucky people. All you have to do is to like and share their facebook page.

If you clicked share then I have some bad news for you - you're a "mark". There are no free flichts, the page you shared is not affiliated with the airline and you've just fallen for a "like and share scam". How does this work? It's simple. By liking and sharing a facebook page, you're making it look popular. This makes it a valuable commodity. The "like farmers" simply sell the page once they get enough likes/shares. Sophos have written extensively about this kind of scam: https://nakedsecurity.sophos.com/2011/10/03/freesouthwest-airlines-tickets/

So how can you tell it's a scam? Simple, lets look an an example I recently came across:

Wow! A free holiday? First class tickets? Where do I sign up?

Upon closer inspection, is this an airline? Why does it say community? And what's with that abbreviated name?
A company listed as a community, a sure warning sign
Fake pages like this are often listed as "Community" or other vague categories and have a shortened version of the actual company name. See above, "Emirates Air." is a "Community". This is a good warning sign that you're on a fake page. Here is the real Emirates page:
Check for pages that have been verified
As you can see above, the real page has been verified by facebook. Look out for the tick.

Next, we have a strangely convoluted URL
Page names with lots of random letters and numbers, a good warning sign
In comparison, the real Emirates page has a much more elegant URL

The number of posts can also be a good warning sign. The fake page has a single post (promoting the free flights offer) and was dated 16 hours ago. I'm pretty sure that a world class airline like Emirates probably won't be new to marketing through social media.
While we're on the topic of that one post, why is it a "life event"?

Anyway, the real page has far more posts than that.

Another useful thing to look for are whether an official website is listed. In the fake example, The About text includes only the "offer" (and a "helpful" reminder that it's a limited time offer!). Be suspicious when an "ask for their website" link appears there. Surely Emirates have their own website?
No website?

So there you have it, a few simple things to look for when you come across a page on Facebook purporting to offer a once in a lifetime opportunity. I've seen this scam target several well known airlines (Emirates, Virgin Atlantic and Southwest) and several well known brands (such as free Apple products).

So remember these simple tips and think before you share. Remember, falling for a scam like that could lead to you being targeted by other scammers (such as phishing for banking details) by being added to a "suckers list"

Be safe online

Saturday, 29 August 2015

Japanese Summer Adventure 2015 - Day 6 (Mizushima & the Gods of Karaoke)

Our plan for the day was to meet with Mizushima San. I'd met Mizu last year when he showed us around Yokohama, so I was looking forward to seeing him again. Kyle and I needed to think of somewhere nice to take Mizu, thinking of his interests, Kyle suggested Nakano. This also had the advantage of us being familiar with the area so we would be less likely to make fools of ourselves. Well, that was the theory anyway.
For someone who claims to have grown out of anime, to suggest Nakano Broadway no less, I started to wonder if Kyle was just putting on an act.
Anyway, we'd arranged to meet Mizu outside Minami-Nagareyama (南流山) station. By the time we were set to meet it would have been lunchtime. Assuming that Mizu already had lunch, we arrived early and set about finding something to eat at the konbini (コンビに - convenience store) near the station. It soon became apparent that we had made a significant miscalculation. The rush of morning commuters had ended so the shelves had been raided. The situation reminded me of the old story of Old Mother Hubbard. Only the smallest selection of sandwiches, rolls and onigiri (おにぎり- rice balls) remained. Picking over the remains, I found a BLT. I was a little disappointed that where were no katsu-sando (カツサンド - katsu sandwich) left, but in hindsight, this was probably better for my waistline.
Kyle and I's prior recon bore fruit early on. We had already worked out that taking the Tskuba Express to Akihabara would provide an easier (albeit slightly more costly) route.
Upon our arrival to Nakano, we proceeded to check out some of the second-hand games shops in the arcade leading up to Broadway. We still had a few, elusive, Yu-Gi-Oh! games to locate. Well, that was after Kyle tried to convince me to visit some of the seedier establishments near the station. Sometimes I worry about what goes on in that guy's head.
Our search for games proved futile so we headed over to Broadway. On the way, I noticed something unusual (that we somehow missed the previous day) - a shop named "Piccadilly Circus". That was an... interesting one to explain to Mizu.

I won't go in to too much detail about the various shops (considering this was a key part of the previous update). One noteworthy example was that Kyle thought it a good idea (for some reason) to suggest a crossplay shop. Exactly why Kyle wants me to do... that, I'd rather not know (once again, I worry about exactly what goes on in his head).
After browsing three floors of anime merchandise it was time to move on from Broadway. We debated a few possibilities, including a number of other places in Nakano, but Mizu suggested trying Kichijouji instead.
Kichijōji Station
This proved to be a particularly good recommendation. This was hardly surprising as Mizu had previously introduced us to the street food of Yokohama Chinatown. After leaving the station, we explored a fancy looking shopping street which also had a number of restaurants. The street led up to a lake. As this was a large lake in a popular area, it was hardly surprising that there was a boat house. Naturally, we thought it would be nice to go out on a boat.
A shop with a stormtrooper. Because, Japan
In hindsight, hiring a row boat for the three of us was probably not the best idea we ever had. Even with the best planning and help from the staff members, we encountered some "weight displacement" issues.
Mizu was first in the boat, he sat in the middle as he had more experience with rowing and wanted to demonstrate his skills. Next in was Kyle, taking the rear seat. At that point, the scene that unfolded in front of me was vaguely reminiscent of the Titanic. As Kyle stepped in to the boat, I noticed the bow start to lift out of the water. My unease grew (as did that of the staff) as the bow took a worryingly steep angle. The level of the stern in the water did not look encouraging either.
How the member of staff managed to help Kyle out of the boat without capsizing it is a complete mystery to me! At this point Kyle conceded defeat and suggested that Mizu and I take a (2 person) peddle boat instead.
Continuing the comparisons with the Titanic, Mizu (for some reason) allowed me to steer. After 2 collisions and getting the boat stuck under an overhanging branch, I began to realize that a nautical career would not be the best thing for me and becoming a developer was the right choice. After all, if my code crashes then it's no big deal. Crashing a ship, on the other hand...
Mizu's brush with death seemed to give him quite the appetite so a bite to eat was next on the agenda. Among the many options available to us, there was kushi katsu. I hadn't tried that before so I was keen to give it a go,



The best way to describe Kushi Katsu is various types of katsu with a specific dipping sauce. The katsu included meat, vegetables (such as lotus root) and even egg.
After eating, it was time for us to indulge in our hobby of brutally murdering popular music.By this, I mean that Kyle suggested we go to Karaoke. Even though he knows how awful I sound, he suggests it anyway. Clearly, he is an acoustic masochist.
I'll spare the (horrific) details but I managed to butcher Queen, Pink Floyd and Foreigner - I really must stop singing songs that I like, I'm ruining them!
That wraps up another day. Next time: Nikko, off to the countryside.

Thursday, 13 August 2015

Japanese Summer Adventure 2015 - Day 5 (Nakano)

With Kyle still not feeling 100% (running around showing me all the new places so far this trip hadn’t given him the chance to recover) our original plan for the day was for me to go out and explore somewhere like Omiya (in Saitama) or Tokyo while Kyle took the day to rest and regain his strength. Kyle, in keeping with his ganbatte spirit, later suggested that he show me Kashiwa (in Chiba). The reason for this was that there are lots of old retro-game shops around so I would have a good chance of locating some Yu-Gi-Oh games I was hoping to play.
For those who are interested, here is a little information: https://en.wikipedia.org/wiki/Kashiwa.
Since we were travelling from Saitama prefecture to Chiba prefecture, this was a fairly long train journey requiring switching lines. Normally, this is something that wouldn’t be a problem. Unfortunately, we had to switch at the dreaded Nishi-Funabashi station. This wasn’t a problem on the way out, but it would be a serious problem on the way back. For the uninitiated, we had to switch between the Musashino and Chuuou Soubu lines and the signs for the Musashino line at Nishi Funabashi are… wrong. The Musashino line branches in a few places and Nishi Funabashi is one of the stations where this happens. Helpfully, there are different platforms for different destinations (4 in total). Less than helpfully, they are all labelled with the same destination. Returning to Misato would not be an easy mission!
After arriving at Nakano, Kyle and I surveyed the surrounding area to get our bearings. By this, I mean we lost track of which exit we needed and had to have a quick look around. After identifying the correct exit, we proceeded to our objective – Nakano Broadway. Located at the end of a long shopping arcade, Nakano Broadway is a shopping centre filled with all manner of game, anime and generally geeky shops. Think Akihabara in a single building!
With three floors of anime and gaming goodness, I was in geek heaven! Having already maxed out my capacity for anime character figures, I focussed on smaller trinkets. Among the various items available for a number of earphone jack accessories (characters that dangle from your phones earphone socket) and some themed folders (featuring some Macross Frontier characters). Kyle, on the other hand, was on a mission to find a Bakura figure (Yu-Gi-Oh).
Macross Frontier Character Folders
One of the other interesting items I came across was a Yu-Gi-Oh! themed T-Shirt, featuring the phrase: "Ore no turn!" (It's my turn!). I saw that and had to buy it! (lucky for me I'm starting to lose weight - recently I've been able to fit in to Japanese M size T-Shirts, or maybe they're designed for portly otaku?)

After a complete anime overload, we were in need of food to keep us going on our epic journey. Sadly, Kyles favourite Indian curry restaurant wasn’t open (I was looking forward to seeing what Indian curry in Japan was like) so we had a look around for somewhere to get Japanese curry. I was satisfied with the result although Kyle, who had become quite the connoisseur of curry, a little less impressed (not a bad curry but not the best he’s ever had).
Curry

At that point we decided to start our journey back. The night was still young so we needed something to do in the evening. Our first train back passed Akihabara so we decided to stop off there. This actually had an unintended bonus – we could catch the Tsukuba Express and therefore avoid the need to change at the dreaded Nishi-Funabashi. I still had a game I was looking for and Kyle still needed his Bakura figure so we still had a mission.
Yu-Gi-Oh! - Popular again

Sometimes, it seems like the Gods are against us as we were both unsuccessful in our missions.

No matter, it was still an enjoyable day.

Japanese Summer Adventure 2015 - Day 4 (Kashiwa)

After going over familiar terrain yesterday, it was time to visit somewhere new. This time round it was Kashiwa in Chiba prefecture.
Kashiwa city has a bustling shopping district, in fact, the train station is built in to a large shopping mall. This did present us with a challenge when we were trying to navigate the area. There was a North exit and a South exit to the station, it did take a few surveys of the areas surrounding the exit to determine the area Kyle was familiar with.
Once we had familiarized ourselves with the area we started a little exploration. We came across an interesting looking shrine. Upon further investigation (namely when I was looking at expanding my omomori collection) we found an “out to lunch” sign. This we took to be a sign from the kami that we, ourselves, should get lunch. This might also have had something to do with my stomach producing the kind of rumbles that register on earthquake monitoring equipment.

Kyle had clearly recovered from the year that I subjected him to the “ramen diet” as his suggestion was ramen. In this instance it was a type of ramen that I had not previously tried: cold ramen. This is a summer dish, sometimes visiting Japan in one of its hottest months has its advantages. The say it’s served can vary. Sometimes it’s served as a typical ramen (all in one bowl), in this restaurant it was served in two bowls. The soup base was in one bowl while the noodles and toppings were in the second. Dipping the rice/toppings in the soup was an interesting change and overall was something I’d certainly have again. After trying it I could understand the popularity of cold ramen and the way it made for a refreshing dish in summer.

As to be expected, there was a fairly large amount of window shopping (partially due to the large amount of shopping I had previously done in Akihabara). There were a wide variety of shops, so it’s safe to say that we were both kept on our feet for quite a while. Because Kyle was not feeling 100% I was particularly appreciative of the effort he was going to.
As luck would have it, we stumbled across the “chibi” dark magician girl figure I saw last summer but didn’t buy. I looked all over at new year but to no avail. Recognising that I would probably not have this opportunity again I leaped at the chance to buy it. Somehow, I think my suitcases will be a little crowded!
No more figures - I'll have no room in my suitcase!

After plenty of browsing and walking the equivalent of a marathon, it was time to head back to Misato. Upon our return to Misato, Kyle offered to buy me dinner at Burger King as we wouldn’t be able to go out to a restaurant for dinner that evening. This seemed like an unusually generous gesture so I was a little suspicious. My suspicions were confirmed when Kyle returned from the counter, with a particularly evil grin on his face! He had ordered me aka samauri burgers. For those who are not familiar with these, here’s a link:
These burgers feature a sauce based on Chinese chilli bean paste and the red buns are marinaded in chilli. I iwas warned by Kyle that these were pretty powerful, in fact, he could only manage a few bites last time he tried one and it played hell with his… digestive system. He had presented me with 2, the chicken version and the beef version - This was his revenge!
Caution - not for 猫舌

Being a brave Yorkshireman who lives for curry, I had no choice but to rise to the occasion.
With trepidation, I took my first bite. So far so good, but I’d eaten enough curries to know that this could be a trap. I’d had plenty of curries that seemed mild at first but took a few seconds for the heat to register – I call this the “afterburner”. A few more bites and I’d managed to eat half the beef burger. Other than some heat from the sauce and from the bun, it all seemed okay. In fact, it was rather nice. Kyle could only look on with horror as I finished the beef burger and moved on to the chicken burger. Kyle’s revenge had turned in to his humiliation, it seems he’s lost his ability to handle chilli. From now on, he will be known as 猫舌 (cat tongue) – for the inability to handle hot/spicy food.
Here goes nothing!

My victory sure was a good way to round off the day. Until next time!

Wednesday, 12 August 2015

Japanese Summer Adventure 2015 - Day 3 (Shopping Malls and Pizza)

We started the morning off with a trip to Koshigaya Lake Town, specifically, the large Aeon shopping mall just outside Koshigaya. We were running a little low on ideas and Koshigaya was just a few stops on the Musashino line so it seemed like a good way to start the day.
I’d been to Laketown before and had found that the size alone meant that there’s plenty to do.
First things first, neither of us had eaten so lunch was the first order of the day. As a large mall it’s to be expected that there’s a large food court. My choice of lunch was Barayaki: a relatively simple dish consisting of fried beef and onions served with rice. It was served up in a nice bento style box.

We browsed for a while but unfortunately weren’t able to locate the Starbucks in the outdoor area that I’d commented on in previous blog posts. I suspect this was in the second of the two mall structures “Mori”, we spent the whole time in “Kaze” (The mall consists of 2 main structures linked by a walkway). Disappointingly, we also found that the arcade had closed down. The cinema was still there but there didn’t look like there was much worth watching.
With time marching on, it was time to return to Misato. We stopped by LaLaPort on the way back where we noticed a rather creepy inflatable Anpanman as an attraction. Kyle tells me that Anpanman is the ultimate zombie as he (in the cartoon) rips off bits of his head (including jam, which appears to be his brain) and offers them to friends as a snack. Weird! I was more worried about where the entrance/exit was…

After LaLaPort we returned to the apartment, giving me a little time to catch up on the copious amounts of writing I needed to do and work out potential arrangements for meeting friends who were near the area at the time. Between this and needing to take a little time for Kyle to regain his strength (the poor guy was feeling quite worn down and a little unwell) it was pretty late by the time we thought about getting dinner. Kyle’s suggestion was a local Pizza restaurant with an eat all you want option. Once again, I hadn’t experienced much of the Japanese adaptation of western dishes so this was a useful opportunity. They operated a similar system to Brazilian steakhouses where you turn a card over to indicate whether you want more pizza or not.
The pizza base was definitely in the Italian style, by that I mean thin crust. This was great because it’s my preferred way of having pizza. Pizza was brought out by the slice so we could try a variety of toppings, some standard and some a little more unusual. Probably the most unusual was teriyaki chicken, it was strange but it worked pretty well!

After the “main” pizzas there were also a number of “desert pizzas”. This was a mind blowing concept for me. All in all, it gets the thumbs up from me!

Tuesday, 11 August 2015

Japanese Summer Adventure 2015 - Day 2 (Anime and Karaoke)

At the start of day 2, Kyle had a few things to attend to so it seemed like a good opportunity to make the trip to Akihabara. The visit to Akihabara is something I do once each trip and it’s interesting to see the changes in the area.

While I was out, I was hoping that I’d get time to stop by Kanda while I was on my way out and visit the Kanda Myojin – a shrine in the area that I saw on my very first trip to Japan. For anyone who wants to read a little more about that excursion, Kyle and I’s blog entry is available here:

So, back to Akihabara.


As always, I was looking for some new figures to add to the collection. Stopping by the usual shop, I had a little browse around. A little browse turned in to an extended period of agonizing over which figures to buy. It didn’t take me long to narrow down my choices to some Macross Frontier and Bakemonogatari figures. By far the biggest problem was that there were too many to choose from, the second and third problems were working out which combinations I could budget for and what I could actually carry back with me (I did see a huge Sheryl Nome figure – that would just about fit in my large suitcase but without leaving room for much else!)
After much to-ing and fro-ing I settled on a Senjogahara Hitagi (Bakemonogatari) Figma and a Sheryl Nome (Macross Frontier) figure.

While paying for the second figure (with these shops it’s common to pay for purchases on each floor) I noticed that they now took cards (I didn’t remember this before) so thought I’d try a little experiment and pay for it on the Amex card. I’d already notified my card provider that I’d be in Japan at this point so in theory it should work. Sure enough, the transaction went through without any issue. I was a little surprised as a travel guide I’d read a few years ago warned that cards aren’t widely accepted in Japan and foreign issues cards were not likely to be accepted. Over the past 4 years I’ve seen more and more card machines appearing and it seems credit card use is on the rise (in fact, the previous day I noticed someone paying at a restaurant with a Japan Airlines frequent flyer credit card) and foreign cards are more widely accepted than before (come to think about it, when buying a Shinkansen ticket a few years ago, I was asked if I wanted to pay by card).
After making my purchases it was time to grab a (slightly late) lunch. While looking around for restaurants, I stumbled across a rather unusual form of promotion. Samples being held up by a mannequin of Ruri from the series Nadesico (old 90’s anime series)

Tempura Restaurant
The eventual choice was a Tempura restaurant on the main street. The restaurant was next to the Komori Soba I had visited a few years earlier. From memory, the Komori Soba had nice curry noodles but I’d already had noodles recently so fancied Tempura as a change.

Price of a set meal
This particular restaurant used an upgraded version of the pre-ordering machines I’d seen before. The idea is that you select and pay for your order and the machine provides a token which you provide to the staff. The upgraded version here used a touchscreen in place of the conventional “push button”. What made this really useful was the inclusion of an English language option. With a sizable queue behind me (always a good sign – clearly a popular place) I decided the safest option would be to use the English option rather than take a while with translating the on screen options (and annoying the hungry people behind me). From the many available options I chose a set meal. This basically meant that I also got rice and miso soup – miso soup is one of the things I miss whenever I get back to England.
In the evening our plan was to meet with Abe San (Kyle’s dentist and a keen student of English). We met Abe after he had finished work and proceeded Minami Koshigaya for dinner and drinks. There were a variety of bars, restaurants and eateries in the area. Kyle’s suggestion was an outdoor bar we had been to on a previous occasion. That particular bar served outstanding yakitori last time we were there. Unfortunately we had made a slight miscalculation, we were going out on a Sunday and was the day that the bar was closed. Unperturbed by our initial setback, we once again deferred to Kyle’s extensive knowledge of the food available in Koshigaya. In the end, we opted for a European style restaurant called Pangea.
On previous visits I’d stuck to Japanese food so it was interesting to try the Japanese take on European style dishes. Because this was my first time (and we have a tendency to do this anyway), the three of us picked some dishes “for the table” so we could all try a little. The food was enjoyable, some of the dishes seemed familiar (ones I recognise) but with hints of Japanese flavourings, the “fusion” worked well. The one disk that Kyle couldn’t resist ordering was grilled lamb. Lamb being the meat he can’t get regularly. I’m partial to a little bit of Spring lamb and even I was impressed with the lightly spiced lamb served up to us.
In addition, Pangea has a wide selection of international beers. Rather than focus on the beers, Abe recommended that I try out the Shochu (焼酎). Some people drink it “neat”, I opted for trying it with a mixer (being the Japanese equivalent of vodka, this seemed like a wise approach).
With a sufficient amount of food in our bellies, Abe recommended spending a little time at Karaoke before heading back. Clearly Kyle had never told Abe the horror stories of my singing! He had, on the other hand, told me about Abe’s amazing singing voice.
At Karaoke, I (for some reason) let Kyle pick my first song. This was a decision that I immediately regretted, for Kyle had chosen none other than Barbie Girl (I can tell you, that gave me flashbacks to the 90’s!). As I was made to endure the humiliation of singing that song, I made sure to subject Kyle and Abe to the most unemotional (with hints of anger and bitterness on top of that) singing voice ever hears. Imagine if Will Self released an album – this is what that would have sounded like! Some of the other contributions I ended up making were “Fat Bottomed Girls”
Abe amazed us with various renditions through from ABB48 through to various anime songs. It’s safe to say that his singing more than made up for my crimes against music.
Amazingly Kyle managed to resist the temptation to sing “Sit on My Face” from Monty Python.


After karaoke it was getting pretty late so Kyle and I headed back to Misato to get some rest. Koshigaya was a great spot to finish off the day.