I am recently trying to use protobuf.net for serializing objects for network communication in a .net application. Protobuf is a great format for sending data. Protobuf tries to be very frugal to save bandwidth. However, this causes some unexpected side effects when using it with .NET.
I love thewirecutter.com. I like them a lot. They are posting really well researched reviews about stuff I care about a lot. Headphones, smartphones, TVs, NAS. Some of their articles are based on hundreds of hours of research and they are trying out dozens of gadgets to find the best ones. They save me time, energy and money and I trust them…
Whenever I am looking for something to buy or I need to learn about stuff I will go there. Read their article and learn a lot about the actual topic. After I am done with the reading I am ready to buy whatever they recommend me to buy. Only if, I could buy it.
Recently, I was looking for a new smart tv that is cheap, so I read from start to finish The Best $500 TV on my favourite site. Their pick is Samsung PN51F4500, which seems like an amazing tv, so let’s buy it. Quick google search shows that I cannot buy this tv in the EU.
It turns out I need to decrypt the model number and try to find a similar tv. So PN51F4500 means that it is a P=Plasma TV made for N=North America in 51 inch size. The model number also tells me that it is a F=2013 model from the 4500 series. Now I know enough, so I will search for PE51F4500 in the EU or one of the variants. I found the PE51H4500AW model which I think is the 2014 year model of the same series.
So the problem is with wirecutter.com is not really a problem for all. It is rather my problem. It is the problem of amazon that they are no delivering to remote places like the eastern part of the EU. It is the stupidity of the TV manufacturers that they give out different model numbers for product that are the same and I have to spend time on decrypting the model number and then translate it to a model that is available in my country.
At the end, it comes down to a lot of factor why this is a problem and the easiest way to fix this if wire cutter.com would start posting the different model numbers for each market - if there are differences. It would make my life easier…
“Porcelain” is the material from which toilets are usually made (and sometimes other fixtures such as washbasins). This is distinct from “plumbing” (the actual pipes and drains), where the porcelain provides a more user-friendly interface to the plumbing.
Git uses this terminology in analogy, to separate the low-level commands that users don’t usually need to use directly (the “plumbing”) from the more user-friendly high level commands (the “porcelain”).
One of those programmer jokes…
So is Noda Time perfect then?
Of course not. Noda Time suffers several problems:
Despite all of the above, I’m a rank amateur when it comes to the theory of date and time. Leap seconds baffle me. The thought of a Julian-Gregorian calendar with a cutover point makes me want to cry, which is why I haven’t quite implemented it yet.
I am getting more confused about this simple thing called date and time minute by minute…
Couple of weeks ago I started to look into different open source packages on the .NET platform such as Nancy and Simple.Data. They all looked very cool, but one paragraph in an article called Introducing Simple.Data - explaining how the code snippet below works - caught my attention:
That’s pretty neat, right? So, did we have to generate the Database class and a bunch of table classes to make this work?
In this example, the type returned by Database.Open() is dynamic. It doesn’t have a Users property, but when that property is referenced on it, it returns a new instance of a DynamicTable type, again as dynamic. That instance doesn’t actually have a method called FindByNameAndPassword, but when it’s called, it sees “FindBy” at the start of the method, so it pulls apart the rest of the method name, combines it with the arguments, and builds an ADO.NET command which safely encapsulates the name and password values inside parameters. The FindBy* methods will only return one record; there are FindAllBy* methods which return result sets. This approach is used by the Ruby/Rails ActiveRecord library; Ruby’s metaprogramming nature encourages stuff like this.
Just read that sentence once again…
That instance doesn’t actually have a method called FindByNameAndPassword, but when it’s called, it sees “FindBy” at the start of the method, so it pulls apart the rest of the method name, combines it with the arguments, and builds an ADO.NET command which safely encapsulates the name and password values inside parameters.
This sounds like crazy awesome magic and I need to understand it!
How magic works?
To find out how the magic worked, I downloaded the source code from github and started to poke around the code. The rest of the article explains what I got out of this experiment.
She was then hired as a senior consultant to Digital Equipment Corporation, a position she retained until her death in 1992, aged 85.
Her primary activity in this capacity was as a goodwill ambassador, lecturing widely on the early days of computers, her career, and on efforts that computer vendors could take to make life easier for their users. She visited a large fraction of Digital’s engineering facilities, where she generally received a standing ovation at the conclusion of her remarks. During many of her lectures, she illustrated a nanosecond using salvaged obsolete Bell System 25 pair telephone cable, cut it to 11.8 inch (30 cm) lengths, the distance that light travels in one nanosecond, and handed out the individual wires to her listeners. Although no longer a serving officer, she always wore her Navy full dress uniform to these lectures.
Grace Hopper invented the compiler and coined the term debugging. The two things I do in most of my professional life. She must be a truly remarkable person and I owe her my job! :)
What does this sound like? Yes, it’s a textbook case of a protection racket. It is organized crime, plain and simple. It is an abuse of the legal system, an abuse of the patent system, and a moral affront.
In the face of organized crime, civilized people don’t pay up. When you pay up, you’re funding the criminals, which makes you complicit in their next attacks. I know, you’re just trying to write a little app for the iPhone with in-app purchases, and you didn’t ask for this fight to be yours, but if you pay the trolls, giving them money and comfort to go after the next round of indie developers, you’re not just being “pragmatic,” you have actually gone over to the dark side. Sorry. Life is a bit hard sometimes, and sometimes you have to step up and fight fights that you never signed up for.
I think the last sentence is classic and I fully agree with it. Life is a bit hard sometimes, and sometimes you have to step up and fight fights that you never signed up for.
There are some very awfull software patents granted in the past and there are some, who are clearly abusing this system. Let’s stop these trolls together!
Xamarin not so long ago released the version 2.0 of their product that allows all .NET developers to use C# and .NET libraries to code apps for iOS and Android. Better yet, it allows us to use our bellowed Visual Studio.NET to code for these platforms.
I love to try out new things, so I decide to figure out if it is really possible to create very basic application for iOS and for Android purely from Visual Studio.NET.
I am looking into to learn more about web client side programming, but whenever I find an interesting project I am overwhelmed with the unknown names of different libraries and technologies mentioned, while reading the project’s page. Consider Dashing for example. They mention Sinatra, Heroku, jQuery.. These are the ones that I have at least a slight idea what they are good for. But the list continues: Sprockets, Gridster.js, Server Sent Events and batman bindings.
This is nuts, I do not understand any of these. So I decided to divide and conquer the problem and try to focus on one unknown technology at a time. The aim is not to master the library, but to construct a minimum viable sample that helps to understand what it is good for.
Let’s start with Gridster.js.
The project page describes this library as:
Microsoft has the tendency to overdo things. It happened before with .NET around the 2000s. They started to call all of their product ending with .NET. Do you remember Windows Server.NET or Windows CE.NET? Now, they are back with overdoing other stuff such as secrecy, not listening and neglectic developers with Windows Phone and Windows 8. Hal nails it again:
Let me contrast three strategic thrusts going on at Microsoft. Windows, Windows Phone, and Azure. Windows and Windows Phone are in the “shut up and ship” camp. Azure is in the ENGAGE camp. It seems like every week Scott Guthrie is announcing new Azure technology previews or releases. Everything about Azure is exciting. Amazon, Salesforce, and a few others defined cloud computing. Azure is displacing them. It has the Big Mo. Let me make this clear, AZURE IS GOING TO WIN the cloud computing infrastructure and platform battle. Meanwhile Windows and Windows Phone continue to alienate their ecosystems. It is unclear if Windows Phone will ever amount to a significant third ecosystem. It is unclear that Windows will be able to halt an overall market share decline against IOS and Android tablets. Azure developers are excited. No, it’s beyond excitement. Windows and Windows Phone developers? Not so much. They are, at best, conflicted. Azure is doing platforms right. Windows and Windows Phone? They prefer to “shut up and ship”, even if it risks no one caring what they ship….