Kindle Paperwhite

I was not really going to buy Kindle Paperwhite. I love my Kindle Keyboard. I love having dedicated physical page turn buttons. It is just so convenient. I can hold Kindle in one hand, keep my thumb in the same place and change pages.

I had original touchscreen Kindle. I hated reading on it. I read a lot of technical documents full of links. Accidentally, tapping on a link would open browser. So I could not just press anywhere on the screen.

Then I read in bed while laying on my back, holding Kindle up. It required careful balancing of Kindle during page change.

Then Kindle Paperwhite lacked one of my favorite feature, Text to Speech. I have read listened to many classical books on Kindle while driving, running, or just doing chores.

When Kindle Voyage was announced, it lacked Text to speech. But it had dedicated area for page turn. It had built-in light. And it looked nice. So I decided to to pre-order it.

The biggest issue I had with Kindle Keyboard was lack of built-in light. While reading Kindle Keyboard at night, I had to attached a small reading lamp. It added extra weight.

So I was really excited about Kindle Voyage.However, the initial reviews of Kindle Voyage were not very positive. Not only it had uneven lighting but also it was too small and thin. People complained about not able to hold it comfortably. I am not a big fan of cases or covers.

I wanted to test Kindle Voyage before it arrived, So I went to local BestBuy.BestBuy didn’t had Kindle Voyage. But they had Paperwhite. It looked good. It felt nice. I was kind of bumped about bad reviews of Kindle Voyage. I bought Paperwhite on impulse. I figured it would be my night Kindle. While I will use Kindle Keyboard primarily.

It turns out Kindle Paperwhite is really good. It seems faster. I love the night-light. I enjoy reading on it a lot, even in bright areas. It has become my main Kindle.

It still has some issues that I had with Kindle Touch. But I purchased a light $10 cover. Having cover let me hold better when laying down in bed.

When reading a document with a lot of links in it, I have to be careful on where I click. But it is $80 cheaper than Voyage. I guess you cannot get everything you want.


Starting over again. This blog was a huge collection of links, random thoughts, and photos. It was becoming a bit too chaotic. So I wanted to clean it up. But going through hundreds of posts is no easy task. So I set all old posts to private. My main focus is on new writings but I will go through old posts and republish good one. Maybe consolidate links. Probably delete most of the content. The main topics might be programming, personal photography, books, life, and philosophy.

Now there would be fewer new posts but of higher quality. I was even thinking about using static site generators since there is an added step of uploading content. This should prevent impulse posts. But decided not to because I do like the fact that with WordPress you can use any computer anywhere to write.

I have gone through a lot of side projects. But only thing that has been consistent is this blog. While most of my side projects were financially motivated, this blog is a pure hobby.

Magento – Get All Products with Categories in a Flat View

    w1.website_id, as website_name,
    s1.store_id, as store_name,
    p1.entity_id as product_id,
    pname.value as product_name,
    url.value as url_path,
    small_image.value as small_image,
    msrp.value as msrp_price,
    price.value as price,
    p1.created_at as product_created_at,
    p1.updated_at as product_updated_at,
    visibility.value as visibility,
    pstatus.value as status,
            (pstatus.value = 1
                and visibility.value > 1)
        else 0
    end as enable_flag,
    c1.entity_id as category_id,
    cname.value as category_name,
    c1.created_at as category_created_at,
    c1.updated_at as category_updated_at
    catalog_product_entity p1
        inner join
    eav_attribute p_attr ON p1.entity_type_id = p_attr.entity_type_id
        and p_attr.attribute_code = 'name'
        inner join
    catalog_product_entity_varchar pname ON pname.entity_id = p1.entity_id
        and pname.attribute_id = p_attr.attribute_id
        inner join
    eav_attribute p_attr2 ON p1.entity_type_id = p_attr2.entity_type_id
        and p_attr2.attribute_code = 'url_path'
        inner join
    catalog_product_entity_varchar url ON url.entity_id = p1.entity_id
        and url.attribute_id = p_attr2.attribute_id
        and pname.store_id = url.store_id
        inner join
    eav_attribute p_attr3 ON p1.entity_type_id = p_attr3.entity_type_id
        and p_attr3.attribute_code = 'small_image'
        inner join
    catalog_product_entity_varchar small_image ON small_image.entity_id = p1.entity_id
        and small_image.attribute_id = p_attr3.attribute_id
        and pname.store_id = small_image.store_id
        inner join
    eav_attribute p_attr4 ON p1.entity_type_id = p_attr4.entity_type_id
        and p_attr4.attribute_code = 'msrp'
        inner join
    catalog_product_entity_decimal msrp ON msrp.entity_id = p1.entity_id
        and msrp.attribute_id = p_attr4.attribute_id
        and pname.store_id = msrp.store_id
        inner join
    eav_attribute p_attr5 ON p1.entity_type_id = p_attr5.entity_type_id
        and p_attr5.attribute_code = 'price'
        inner join
    catalog_product_entity_decimal price ON price.entity_id = p1.entity_id
        and price.attribute_id = p_attr5.attribute_id
        and pname.store_id = price.store_id
        inner join
    eav_attribute p_attr6 ON p1.entity_type_id = p_attr6.entity_type_id
        and p_attr6.attribute_code = 'visibility'
        inner join
    catalog_product_entity_int visibility ON visibility.entity_id = p1.entity_id
        and visibility.attribute_id = p_attr6.attribute_id
        and pname.store_id = visibility.store_id
        inner join
    eav_attribute p_attr7 ON p1.entity_type_id = p_attr7.entity_type_id
        and p_attr7.attribute_code = 'status'
        inner join
    catalog_product_entity_int pstatus ON pstatus.entity_id = p1.entity_id
        and pstatus.attribute_id = p_attr7.attribute_id
        and pname.store_id = pstatus.store_id
        inner join
    catalog_category_product ccp ON ccp.product_id = p1.entity_id
        inner join
    catalog_category_entity c1 ON c1.entity_id = ccp.category_id
        inner join
    eav_attribute c_attr ON c1.entity_type_id = c_attr.entity_type_id
        and c_attr.attribute_code = 'name'
        inner join
    catalog_category_entity_varchar cname ON cname.entity_id = c1.entity_id
        and cname.attribute_id = c_attr.attribute_id
        and pname.store_id = cname.store_id
        inner join
    catalog_category_product_index store1 ON store1.product_id = p1.entity_id
        and store1.category_id = c1.entity_id
        inner join
    core_store s1 ON store1.store_id = s1.store_id
        inner join
    core_website w1 ON s1.website_id = w1.website_id