Wednesday, August 31, 2011

Is Google Maps becoming the new iTunes for Android?

I remember the 80s when MTV played music videos. I also remember 2001 and Mac OS 10.1 when iTunes did nothing but play music, which it did very well.

Today, I am thinking about the Google Maps app. It is using larger and larger chunks out of my (admittedly low and self-imposed) 250 MB monthly quota but doesn't work as well as it previously did for it's most basic function: getting (and keeping) a GPS lock to display my current location on a map. I can fiddle my way around the GPS shutting off issue, which at worst, requires a reboot. The data usage issue, however, is a real problem, so much so that I am now starting maps in airplane mode, which allows me to view my current location based solely on the data cached on my phone.

If I don't do this, my current bmobile charge would be finished in less than two months, while the previous charge lasted the full four. To be honest, I can't say 100% for sure that google maps is using more data because I only previously monitored my total daily usage, rather than individual app usage. But I can honestly say that I am doing nothing differently that I am aware of, aside from using Google+. (I've always used latitude.)

I first noticed the issue after upgrading to 5.9.0 on 8/17 and enabling the new labs feature for precaching area maps, which I used to download all of the kanto region (over wifi of course). The option to Prefetch on mobile is disabled. I have a 93 MB data cache, the specifics of which are an absolute mystery. Which areas are cached? Does the cache expire? How often does it update? Does it have a maximum size that causes overwrites when visiting new areas?

Here is my 3G data usage for 8/22 from the Phone Usage app. This is after returning from Obon Holiday. I was on wifi all day except for the morning commute and a lunch break. I walked outside in the evening and used the Google Map app for about 30 seconds to view an area that is cached on my phone. (I know this because I can view it in detail while in airplane mode) That is all. I put the phone back in airplane mode and opened the Phone Usage app to see that I had just used over 2 MB.

What's the 1 MB upload from Google Maps? All the location data from my travels? I actually don't mind sharing my GPS coordinates and nearby wifi MAC addresses because it improves the database. If I had the option to opt out of sharing, I wouldn't. I would, however, prefer to not donate my precious mobile bandwidth. I am also not sure why a large chunk of this data is marked as a download.

Was more information recently packed into the backend database? Did one of the several summer updates enable access to backend information that wasn't previously accessible? Did integrations on the social side (buzz, latitude, google+) increase the amount of data pushed to my phone with each start of the maps app? Did my phone re-download and cache tiles that had been overwritten?

Here's usage from the morning of 8/24. I left the house on airplane mode, which I turned off when I got off the train to check in at the station and share with "friends on latitude" which hooks into Google+. Again, this area is cached. I then put the phone back in airplane mode and checked. 1 MB. I only opened google maps.

If I had the slightest clue why google maps recently started using what appears to be three times as much data as it previously did, then I'd have an idea of what to do differently. But while Android is open source, the core Gapps that constitute the "Google Experience" are anything but. In fact, I don't think there are even publicly available release notes.

Either way, I am at best using about 3 times more data each day than I had previously. At worst, I am using the same as I had with skype over 3G (the last few days of my last charge). Zoom in on 8/17 and onward. The drastic change in slope is when I started using airplane mode.

In related news, JCI now offers a 1 GB/month plan for ¥3100. Guess while I'll be getting?

B-Mobile FAIR SIM option for 1 GB per month

JCI announced a new recharge plan for the B-Mobile FAIR SIM. Until now, the only option was to add 1 GB that was valid for 120 days at a cost of ¥8,350 for 120 days. This leaves you paying about ¥2,000/month for only 250 MB.

With the new plan, 1 GB valid for 30 days can be purchased for ¥3,100. This is much more appropriate given how we realistically use smartphones. For an extra ¥1,000 per month, I can increase my quota by four times.

Right now, you cannot buy a FAIR SIM with a 30 day validity period. The only option is the standard FAIR with a 120 day period. Once that first amount is used, when you recharge the SIM, you can either select 30 or 120 days.

The 1 GB/month data service plan will be available from September 1 at 6 pm for current FAIR customers.

Update: A FAIR SIM can be converted to a 1GB Flat Rate, and then back to a FAIR data plan. The expiration date after which the SIM can no longer be charged depends on the last data plan. If a FAIR is purchased and the initial charge consumed, you have 60 days to recharge. if on the 59th day, a 1 GB Flat Rate charge is added, you will then have 10 days to recharge once the second charge expires. If the third charge is back to a 120 day FAIR plan, then once that expires, you again have 60 days to recharge.

The newly updated bcharge app contains a disclaimer, that is displayed in English based on your system language) related to the FAIR SIM. Here is the important excerpt.
  • This service uses a Private IP address. Therefore, it does not support Internet services or applications that require a Global IP address.
  • The Charge Period after plan expiry is 10 days. After 10 days, it will no longer be possible to charge your SIM

Thursday, August 11, 2011

Connect to adhoc Wireless Networks on your Galaxy S2 (SC-02C)

The usual warnings apply: We are not responsible for any broken or bricked devices. Use this guide at your own risk. However this worked for me on my SC-02C so it should work for you too. This is actually very easy but you need to make sure you have the proper tools first.

On most laptops when you share you LAN connection via wireless create an "adhoc" wireless network unless you are lucky and have a wireless card that does "infrastructure mode". Normally this is not a problem but Android does not support it by default.

In order to enable enable it you need to replace the file in /system/bin/wpa_supplicant with a version that supports it. Also you need to have root. If you do not yet have root follow my guide here.

This guide comes via SilverW1ndy (J).

Download this version of wpa_supplicant

This method uses "Root Explorer" which is a paid app but if you want to use the free way you can use the  Terminal Emulator method mentioned here.
  • use "root explorer" to mount /system/bin/ and make a backup of wpa_supplicant
  • rename the current one to wpa_supplicant.bak and copy the new wpa_supplicant to /system/bin
  • then we need to adjust the permissions on the file to match this picture
  • change /system/bin back to read only
  • disable and re-enable wireless
  • now your adhoc wireless network should be listed with the other wireless networks and you can connect.

120 days with a bmobile FAIR SIM

Four months ago, I received a bmobile FAIR SIM to test. Today my remaining charge expired. Honestly, when I started this test, I never thought that I'd actually keep using it. Well, I was wrong. I just added recharged it for another 1000 MB or 120 days, whichever comes first. (See the bottom of the post for an interactive, live updating google chart.) Because my credit card is already registered, charging was easily done with the bcharge app.

Suffice it to say, I'm happy with the SIM because it allows me to use my Nexus One on the FOMA network. If I have to chose between 250 MB at ¥2,000 per month or unlimited data at over ¥10,000, the choice is rather obvious. I have a better experience with a newer phone, and the total I pay for cellular has decreased by 4,000 yen per month.

However, the data-only FAIR is not a perfect solution for several reasons, the most obvious of which is the need to carry around two devices. Also, Android still has issues with this type of SIM card, which may result in increased battery drain at least until the next Android version is released. (Ice Cream Sandwich will merge Honeycomb, which is designed with data-only devices in mind, unlike previous versions.) The only current workaround is to use the TalkingFAIR SIM, which is a standard circuit-switched SIM card.

Finally, while the FAIR provides the best value for people who don't need an unlimited plan, the price per gigabyte is still very high. The best case scenario with the FAIR is 250 MB per month at about ¥2,000 per month, this is not only twice the cost of AT&T's 250 MB data plan, the same amount of money would you 2 GB per month, an eight-fold increase in value.

But, this is not the US or Europe or Australia or wherever. And of course this post wouldn't be complete without a discussion of the data. :-)

To use exactly 1000 MB in 120 days requires 8.3 MB of data consumption per day. I averaged 7 MB and had about 150 MB remaining when the SIM expired. Two month ago, I predicted that I'd have about 400 MB remaining (gray fit line).

So what happened?

Of course in the end, I used a lot of the remaining data. Looking at the blue fit line, you can see that I would have had closer to 300 MB remaining if I didn't drastically increase usage about a week ago, as the expiration date approached. I totally stopped using wifi and started signing in to skype all day, which works great over 3G, by the way. The reason was not to eat all the remaining data, just be cause I could. Rather, I wanted to test skype some more and get a better idea how much using wifi was saving me.

The largest reason for the increased usage was the Google+ Android app. Of course I have it set to only upload photos on wifi, but using it displays a lot of user-posted images. Considering only my usage since I joined Google+, I've averaged 8.5 MB per day, after removing the final week's usage (light and dark blue dashed line). This would actually work nearly perfectly, resulting in 1020 MB over 120 days.

Additional charge added on 8/11/2011 (Chart is interactive)

Tuesday, August 9, 2011

Navitime free android train transit app

Navitime was a revolutionary service and the undisputed king of Japanese navigation prior to the introduction of smartphones. However, they've had trouble shedding their galapagos heritage in order to offer a product that not only works, but also has realistic pricing, given the ever growing functionality of both free and ad-supported competitors.

The basic problem was that, until recently, they only offered an all-in-one app that didn't even run unless you registered for their web service and paid ¥315 per month. Now, there are several new apps available. The main app can be started and used without authentication, though most of the features won't work. More importantly, there is now a stand-alone train transit and car navigation app.

Of these, only the train transit app is fully functional without a subscription, so here's my quick and dirty review of it.

Name: 乗換Navitime
Version: 1.0.1
Price: Free with no ads
English: No

Standard features:
  • GPS
  • Station schedules
  • Route search
  • Recallable history
  • Delay information
Unique features:
  • Extensive database with elevator, escalator, wicket, carriage numbers, exit numbers, etc.
  • Bookmarked stations (separate from history)
  • Bookmarked routes
  • Crowd-sourced "crowding" informatioin
  • Interactive train map
  • Search by line
Good: Offers several features that are not present in the other 乗換案内 apps.
Bad: Buggy, heavy, huge, can't be moved to SD card (in all or part)
Notable: First Navitime android app to achieve at least a 4 star rating.

Market Link

Good Stuff

Navitime guides you to the specific train car that provides the easiest and fastest transfer. Boarding in the right versus wrong car can be the difference in having enough time to make a tight connection when changing trains. UPDATE: I forgot to mention that this the navitime database also includes the locations of elevators and escalators on platforms. See last, newly added screenshot. (This is really the only thing that Navitime has that google maps doesn't. That traffic information.)

It also allows you to save routes, as opposed to individual stations, which in theory should allow one click schedule retrieval. All other apps I am aware of simply store individual stations.

In addition to GPS, a common feature on other apps, it also includes an interactive transit maps (for Tokyo trains, tokyo Subways, Kansai, and Nagoya) that can be used to select stations, a function that no other apps offer.

It has crowd-sourced "crowding" information with several ranks, ranging from plenty of seats to sardine can.

It feels a lot less like it was designed for an i-mode feature phone, but could use a stronger UI makeover.

Not Bad Just Weird Stuff

Navitime includes a feature that quickly alerts you if your morning route is experiencing delays, which is particularly useful for anyone who clocks into work at the same time every day. Unfortunately, it is mislabeled as a "Bookmarked Route" and is inaccessible from the standard delay information menu.

Routes are saved with departure/arrival times. Specifying a different time requires first searching the saved time, and then redoing the search with a newly specified time. This is great for a salaryman, less so for someone who doesn't take the exact same train at the exact same time everyday. The same is true for station bookmarked schedules, though not for schedules when viewed from search history.

A better way would be supporting relative times as well, such as "current" or "10 minutes later". Otherwise, the primary purpose becomes for checking delays along a particular route because searching with a random departure time is more quickly completed by ignoring this feature. (Navitime has always been this way and probably always will.)

Buggy Stuff

Being version 1.0.1, I expect this stuff to get better, though don't be surprised if ads creep into subsequent versions.

Sometimes a schedule is saved at the proper time, other times not. I have some stations that saved at the exact time I tried to set, others that got set to random times, and still others that are set to the current time when I performed the search. Only one hour's worth of departures are displayed at a time and displaying more requires mashing an often unresponsive up or down arrow. Sometimes, but now always, the entire day's schedule simply won't display.

Deleting bookmarks doesn't always work properly. Often times the bookmark will be deleted, but still appears in the list. Clicking it brings up an error message. After a while, something seems to trigger removal of the deleted bookmark from the list.

Bad Stuff

This app is huge compared to it's competitors. 7 MB just for the app. On first start, with no prompt, it downloaded an addition 3 MB for the transit database. The first time I clicked on the map portion, it, again with no prompt pulled down another 6 MB for the Tokyo train map. I was able to select to download the Tokyo Subway map for a grand total of 18.14 MB of internal storage consumed with no built-in option of moving to the SD card. For comparison, Eikitan is about 1.5 MB plus 2 MB of data, and Jorudan (v. 1.2.5 with no ads) doesn't even total 1 MB, though it has no local database. (Navitime's database contains more information than Ekitan's.)

Normally a local database would probably in the the long term consume less bandwidth than downloading individual results, but since 3/11, Tokyo train schedules have been in a constant state of flux. The database must be updated more often.

Some Random Screenshots

While it doesn't include English menus, you can enter station information in romaji.

The standard route screen showing departure and arrival stations, connecting/pass-through station, date and time, and other options (express, etc.)

Interactive Tokyo subway map. Other downloadable options include Tokyo, Nagoya, Kansai trains. Left button brings up the option for selecting a connecting station. Middle button selects closest station based using GPS, etc. Right button switches between maps.

Schedules can be displayed via lines.

Here's the list of major options, ordering by time, cost, number of transfers, carbon emissions, elevator location, elevator and escalator locations.

Tuesday, August 2, 2011

Installing XBMC 10.1 Live CD on Shuttle xs35gt v2

  • Part 1: the hardware
  • Part 2: the software choices
    • Part 3: Linux Basics / Ubuntu 10.10
    • Part 4: XBMC Live CD
This gives you a functional Ubuntu 10.04 LTS server that automatically launches XBMC by default after startup. This system can easily be expanded for other purposes. However, it will not have a desktop environment (GUI) like Gnome or K. So, this won't be a good computer for normal stuff like email, browsing, wordprocessing, etc. (Of course a GUI can be installed.)

While I had this up and running, I no longer have it installed, so I am presenting this as a record of what I did. It worked as described below. Nicholas and I can provide suggestions, but there is no system to test against. in the Part 5, I'll describe configuring OpenELEC, which I opted for in favor of the Live CD.

This guy has a good write up describing installing an older version of the Live CD on the first revision of the xs35gt. It is a good reference, but I didn't need to do a lot of what is described. Even on the new versions that I am using, wired networking was not setup during installation, meaning I had to enable it manually.

I installed this while peppering Nicholas with questions over chat because it s a lot faster to say, "Yo! Nicholas, how do I do X" than it is to google for it. Googling would definitely work, but Nicholas is faster.

Installing XBMC 10.1 Live CD on Shuttle xs35gt v2 with an SSD


The order in which I am presenting this is not the order in which we did it. The last thing we did was enable sound, but for the sake of those without SSDs, I decided to order this write up thusly:
  1. Make some changes to the BIOS
  2. Wipe all existing data from the solid state drive and install
  3. Configure wired networking
  4. Install SSH
  5. Configure HDMI sound output
  6. Configure analog sound output
This also describes steps that are particular to solid state drives. If you are installing onto a USB stick (unless it supports TRIM commands) or a traditional spinning hard disk, stop here. This first step can be presumably skipped for people installing later versions of the Live CD (greater than 10.1)
  1. Install a linux kernel that supports TRIM commands for SSDs
After confirming that your kernel supports TRIM, then you need to configure it:
  1. Set TRIM for the SSD
  2. Lower swappiness
Finally, while I never bothered to do it, here are my thoughts on what you could try to do for configuring wireless networking. I don't guarantee this will work.
  • Our thoughts on what you might have to do to enable wireless networking
1. Configure BIOS
  1. Unlike the original revision of the xs35gt, v2 shipped with a BIOS version that allows disabling of wifi power control, which is required for the wireless to work properly with linux. Personally, I am using the wired gigabit ethernet due to the much higher throughput, so I have the power control setting enabled.
  2. Set SATA to AHCI.
  3. Set an appropriate order for boot disks, such that the media from which you will install (CD or USB) is higher priority than the internal disk. (The order can be altered after installing.)
2. Install from CD or USB stick

I'm not going to describe the actual installation. In general, you'll need to:
  • Download the Live CD ISO from here.
  • Create install media from one of the following:
    • Burn ISO to CD
    • Make USB installer (Ubuntu example). Cheap USB sticks often don't work.
  • Partition and format the target disk
    • swap partition
    • Data and OS partition

There has been some discussion of if swap is a good or bad thing on SSDs. With 4 GB of RAM (or even with only 2 GB), it shouldn't be necessary if all this is doing is running XBMC. However, it is unclear how the lack of swap could affect some programs that expect it to be there. So it is probably best to create a swap partition, and then set swappiness down.

Regarding partitioning of the rest of the drive, you could 1) create a small partition for the OS and a second for data, or 2) leave it as one big partition. The former is nice if you think you might want to try multiple OSs because you can leave all your media on the data partition and just clone (backup) the OS partition. The problem is that you have to decide exactly how big to make the OS partition. Too small and you'll run out of room. Too big and it could wind up as wasted space.

I considered going with option one but in the end just made one big partition.

boot the XBMC live CD on the target computer

Once in, you want to quit XBMC. Don't shutdown the computer, just quit. This will bring you to the command line. You'll need to login with the username and password you created during installation (If my memory is failing me and you weren't prompted to create a password, try xbmc xbmc for user and pass.)

3. Configure wired networking

While the necessary drivers were installed during installation, the wired NIC probably wasn't detected, so you'll have to manually enable it:


If you don't see eth0 but only the loopback interface, then

sudo ifconfig eth0 up

Enter your admin password.


This time you should see eth0. Next you need to configure it. You'll want this XBMC box to have a static IP address. If you router supports static DHCP, you can tell your router to always assign it the same IP. If not, then when you try and find it on your network with either another computer or your android remote, it will be like hitting a moving target.

To enable DHCP using vi (see here for a list of vi commands):

sudo vi /etc/network/interfaces

Add to the end of the file

auto eth0
iface eth0 inet dhcp

Restart networking.

sudo /etc/init.d/networking restart

[NOTE: if you have never used vi, it might be best to try something different like nano.
sudo nano /etc/network/interfaces
I don't recall if nano was installed. If not, you can try installing with.

sudo apt-get install nano

You can then substitute nano for an vi commands]

To enable a Static IP (this replaces the above DHCP configuration):

auto eth0
sudo vi /etc/network/interfaces
iface eth0 inet static

Be sure to replace the numeric values with those appropriate to your network.

4. Install SSH

I own one keyboard and it is typically at work. So without SSH, I have no way of interacting with the command line of this machine. Plus, if you are googling for things, or in my case just bombarding Nicholas with questions via a chat window, it is good to be using SSH, so you can simply paste in any commands, like the one you see here.

sudo apt-get install openssh-server

To access the the XBMC computer:

ssh username@xbmc-box's-IP-address

You'll have to accept the RSA key.

5. Configure HDMI sound output

Restart XBMC and configure your sound.

sudo /etc/init.d/xbmc-live start

(This command also takes the arguments stop and restart.)
Navigate to System/Audio and set the following to get sound working through the HDMI cable attached to you TV (if you want to listen through a stereo, see below).
  • Audio output: HDMI
  • speaker config: 2.0
  • Boost vol: on
  • AC3: on
  • DTS: on
  • Audio output device: HDA NVidia hdmi
  • passthrough: HDA Nvidia hdmi
6. Configure analog sound output

If you want to route the sound through an external stereo with the 3.5 inch headphone jack:
  • Audio output: analog
  • speaker config: 2.0
  • Boost vol: on
  • Audio output device: Defaults
7. Upgrade the kernel for TRIM support

SSD drives will slow down over time without TRIM enabled. It is included from the Linux 2.6.33 kernel and is supported by the ext4 file system. If you are installing a version of the XBMC Live CD that is greater than 10.1, then the chances are that you can skip this.

You will need to exit XBMC to the command line of SSH in from another computer.

First, check the kernel version.

uname -r

If it is greater than .33, go to the next step. If not, then you will need to install a newer kernel. XBMC 10.1 Live CD was based on 10.04 LTS. Here, we will install the 2.6.35 kernel from 10.10 to get TRIM support (see here)

sudo apt-get update && sudo apt-get install linux-image-generic-lts-backport-maverick linux-headers-generic-lts-backport-maverick

Restart the computer

sudo shutdown -r now

After rebooting, from the command line verify the new kernel

uname -r

8. Set TRIM

Finally you need to enable TRIM on your SSD. First back up the file you're about to edit. (see here)

sudo cp /etc/fstab /etc/fstab_bak-notrim

Next, you are doing to want to add discard to the fstab entry for your partitions that are ext4.

sudo vi /etc/fstab

The final thing should look something like this

UUID=[NUMS-AND-LETTERS] / ext4 discard,errors=remount-ro 0 1

9. Lower swappiness

Finally, the last thing you want to do is lower swappiness. When I did this originally, I used a value of 1. This means that the system will only write the contents of its hard memory to the swap partition on the SSD under the most extreme circumstances. (See here.)

Check the current settings

cat /proc/sys/vm/swappiness

The output I got was 60. We want to lower this by editing this file.

sudo vi /etc/rc.local

Add this line

echo 1 > /proc/sys/vm/swappiness


sudo shutdown -r now

And check to make sure all is well.

cat /proc/sys/vm/swappiness

You should get back 1.

Our thoughts on what you might have to do to enable wireless networking

Because the xs35gt v2 has gigabit wired ethernet, and because I can't write to the ext4 partitions directly with my notebook that stores my music, I decided it would be best to use wired networking for file transfers. I meant to try out the wireless but I completely forgot to before wiping out this system. If I was to try and get wireless working, this is what I'd do.
  1. Boot into BIOS and disable Wireless Power Control
  2. try to bring up wireless
    sudo ifconfig wlan0 up
  3. Next, look for it
If it shows up in the ifconfig output, Then try enaling it with DHCP first.

sudo vi /etc/network/interfaces

Add to the end of the file

auto wlan0
iface wlan0 inet dhcp

Restart networking.

sudo /etc/init.d/networking restart

If it works, you can try switching to a static address.

auto wlan0
sudo vi /etc/network/interfaces
iface wlan0 inet static

If it doesn't work, then you are probably going to need to install drivers.

Monday, August 1, 2011

B-mobile Talking FAIR is good for singles, less so for families

After going through all my statements from the past 12 months, I calculated what would have been the cost for voice service without a Docomo family plan. I used the pricing from two different Docomo plans and the B-mobile Talking FAIR plan. But first, here is the actual number of minutes I used each month, which is greatly influenced by being able to make free calls to family members.

The three horizontal dashed lines indicate the number of included minutes for the Plan SS, the Talking FAIR and the Plan S (25, 32.5, and 55, respectively), assuming only normally-charged domestic calls. The blue area represents minutes used in the family plan.

The Talking FAIR SIM, while not the absolute least expensive, is the best value of the plans with a one year contract. The Value S Plan is cheaper with a two year contract, but it automatically renews every 24 months. Canceling at any point except for increments of 24 months after starting service (e.g., 24th, 48th, 72th month) will incur a ~ ¥10,000 early termination fee. The FAIR's 1 year contract does not automatically renew, so you can cancel it whenever you want, after the initial 12 months, just like in most other places around the world.

What really makes the FAIR SIM compelling is data, especially if you are like me and are 1) have access to wifi most of the day and 2) have an overseas phone. The Talking FAIR may still be a good deal, even if you satisfy only one of these two conditions because of the lack of a renewing contract and no forced tethering charges for any non-docomo branded phone.

I understand that this is a bit of an unfair comparison because of the ¥4,200 yen tethering fee from Docomo, but this is the cost of using a Nexus (or iPhone) on Docomo versus B-mobile.

The FAIR is much less expensive, even if you to add a data charge every month. If a charge only lasts two months, the FAIR is still cheaper, even without Docomo's forced tethering fee. Based on how I actually use my phone, I would expect to pay on average half of what it would cost to use my Docomo branded (and aging) ht-03a on Docomo (~ ¥8,000), versus my much better Nexus One on B-mobile (~¥4,200).

However, I didn't need to look though a year's worth of Docomo invoices to know that the b-mobile Talking FAIR SIM wouldn't be a good deal for a family, since we are eligible for free calling between family members. Over the past 12 months, we used a combined 2,652 total minutes, for which we incurred ¥43,349 in voice related charges. This is an effective rate of about ¥16/minute.

All the calls in blue were essentially free. I could show you the results of a number of calculations, based on a number of differing assumptions regarding usage, but it would be pointless because in all cases the answer is the same. We'd have to significantly alter our usage if we canceled the Docomo family plan. It isn't even economical for me to cancel only my service with Docomo.

So, if you're in Japan for a year or two, perhaps even three, it is seriously in your best interest to understand how much data you tend to consume and consider the Talking FAIR SIM with prepaid data and postpaid voice. But if you have family members, then it is unlikely to be a good value.