c# using custom attributes to validate prerequisites for methods, controller APIs

If you have bunch of prerequisites to be validated for more than one method, we could make code more cute by using an attribute.

For normal methods, this new custom attribute’s constructor could throw exception in case of failure.

But throwing exception in Controller API is bad idea. We want to return more gracefully.

Instead of extending Attribute, extend AuthorizeAttribute and override IsAuthorized() [ or AuthorizeCore() ] method to return true or false. This is more graceful way of doing prerequisite check.

I know this AuthroizeAttribute is to check authorization, but we could mis-use it to validate any prerequisites until a better way is available.

/*****************************************************************************************/

using System;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
internal class MustBeAuthorizedAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{

if (preRequsitesFail)

{
return false;

}

return true;
}
}
}

/*****************************************************************************************/

[MustBeAuthorized]
public ActionResult Index()
{
return View();
}

/*****************************************************************************************/

Thanks to @philip instead of AuthroizeAttribute  ActionFilterAttribute is better. We could return any return value (e.g.. MethodNotAllowed, InternalServerError); see https://stackoverflow.com/questions/16822365/web-api-how-to-stop-the-web-pipeline-directly-from-an-onactionexecuting-filter 

notes, unit testing c# mock, stub, shim!

What to unit test?

Some times it feels why the heck are we adding this unit test? Some times did we really added at least minimum required unit tests or not?

I spent good amount of time researching this topic.

My thumb rule is :

Assume you are adding a document with samples directly taken from Unit tests (except Mocking part though) ; We want our Unit tests to test what customer typically do.

Unit Test is a shield:

Unit test works like a shield. It protects from the minute it is born. This unit test shield will protect the code from your future self. This unit test shield will also protect from others working on this piece of code. Mistakes which will break some existing user can be avoided with this unit testing strategy.

Mock Vs Fake(Stub/Shim)

Use whatever works! External DLLs are better faked. But there are some beasts which will have give tough fight to be faked. In that case do not directly call this external DLL, rather call via a thin layer, a layer with zero business logic but with an interface+class design. Then mock this layer instead of trying to fake your external DLL. Unit tests are saved!

Idea : Rating Display Card for retail shelves

One big difference between online Vs offline retail shopping experience is its rating experience.

Why not retail shelves include a rating card for for all its items on shelf? Customers can view current rating and enter their rating.

It is challenging, but not impossible.

Some of the challenges

1. How to avoid duplicate rating ?

2. How to authenticate users?

(Adding Finger print based rating will solve both above problems. Again which finger? How sensitive is this finger print data? What are security/privacy implications? How to provide accessibility? )

But all these are solvable and fun to work on.

arate

——

Background : I purchased a scrub in QFC (supposed to be better than the one we buy in costco), it cleans OK like in between steel scrub vs sponge scrub but thats where the goodness stops, it spoils everything it touches! For some reason it puts dirty marks on the sink and floor. If the same item is purchased in any online store, I might have read reviews/ratings and may not have purchased the same.

Idea : Health Insurance for 65+

Apparently one of the biggest concern for retiring is rising health costs.

What if there is a company which collects nominal insurance premium for < 40 years people until they become 60 and starts giving health insurance with zero premium from 65+ ?

Company had more than 25 years to make enough profits on the pre collected premiums.

Company can put restriction of maximum cap on insurance amount per year (Like they do in India) That way it can minimize risk and calculate its costs with confidence.

USPS use of technology is crazy! (on a good side)

USPS – now you can simply check incoming mails including the photo of the letter from your computer or mobile! Cool. You can visit your mail box only if the letter is important. Easy to ignore those spam covers Smile 

I am pretty sure, all this is automated!

Imagine millions (Billions?) of letters scanned, address is (OCR) recognized, categorized and visible to owner.

Whoever first got this idea Kudos!

This is now completely different

This is now completely different,

a magical transformation.

An urban setting into rural-

A rural setting into urban.

Like black into white,

like white into black.

Shredding all gray on the way,

This is magical transformation.

Readying journey onto distant worlds,

igniting boosters with pure will power,

taking whole families along with it,

including their hopes and passions.

This is just begging of

exciting journey towards more magic.

Make no mistake,

this is not what you know,

this is nobody named yet,

only those part of it,

can experience this wonder

until ballads are sung,

until books are written,

until case studies are made

nobody knows the magic.

An idea to keep Microsoft Windows relevant for another decade

Microsoft Windows, a must have for every middle class home is no longer true. Everybody is buying phones. Either Android or iPhone and occasionally WinPhone. Windows Desktop is no longer relevant. All the developers moved to Browser or Mobile. All the users happily moved to web or apps. Except office, Adobe no major apps continue to innovate for Windows desktop. Is there any miracle in pipeline to reverse the tide?

Doesn’t seem to be so. Microsoft is trying to move towards single OS for all screens hoping it will somehow solve its developer problem. But no positive signs in that direction.

At the same time Microsoft is concentrating on enterprise market and cloud market. Both of them turning out to be its bread and butter for future. At least stock market thinks so.

What else it can do?

Idea: Introduce Home-Server concept!

No more home-PC, it will be home-server. Or PS – Personal Server! Unlike the past – now middle class homes are generating too much of digital content. Everything is either going to specific clouds or to Google servers! Introduce a concept of MyData, MyHardware, MyControl. Every home will have servers. (no more PCs); Developers can take advantage of APIs and can write data, analyze the data, improve customers life greatly. Data is the most valuable asset. Complete ownership, privacy, security is divine gift one can wish for!

This will nurture a new developer echo system very soon.

For example based on the data in PS’s we could have apps around

  1. What is my ideal sleep time?
  2. How is my health?
  3. Where is my daughter now? Where is my family in past three days?
  4. Most liked photo in my album.
  5. My video dairy
  6. How much time the light is on in past week?
  7. How many times garage door opened?
  8. When is water filter change time?
  9. Auto prepare my shopping cart for the week.
  10. What am I doing 10 years back.
  11. Auto write my auto biography so far!
  12. How to be happy?
  13. what makes me happy?
  14. what makes me sad?
  15. What are my strengths? weaknesses ?
  16. etc..

Taking IOT concept, edge computing into consideration. Allowing sharing of data with friends and family servers. We could have much better app scenarios.

  1. What is the fad in neighbors now?
  2. Who are potential friends I haven’t yet met in my neighbors?
  3. Who had three D printer in my neighborhood?
  4. Display garage sales happening
  5. What is my father doing now in India?
  6. Suggest new hobbies for me
  7. Who can give me training on xyzzy?
  8. who needs training on abcd?
  9. etc..

May be all is not lost yet.

Opportunity: Every damn innovation now a days requires gathering data. But all the data belonging to a home is widely scattered. There is simply no way to cross reference data, unless both solutions are coming from same company. Once PSs comes live any solution can input data to PS in predefined format. Same can be queried by other solutions after proper permissions sharing handling. Of course no direct access to data is allowed only via predefined APIs yadha yadha!

This will also be biggest blow to its competitors. Who’s bread and butter is selling users data in one form or other form. Now Users own their data, it is not straightforward to sell it!

What more? There are thousands of patents as the arena is very new!

Idea2: Phone is PC. (Phone + Docking station + Screen)

Just like after laptops the desktops are optional. after phones we could make laptops/Desktops optional. We need to make docking stations innovative. Everything else we need will be in phone. Phone is new PC. Microsoft should start selling these docking stations which makes any phone (Android, iPhone, WinPhone) as PC! The Phone + docking station + screen (either smart TV or a separate monitor or existing laptop/desktop screen). All the Windows apps will run on docking stations but uses data from phone, writes data to phone. User folder will be on phone. (that is MyDocuments, MyPictures, etc.. will be on phone instead of PC).