• Home
  • About
  • Resume

Category: Rant

WriteEndObject of JSON.NET ouptuts NULL literal

By , 01/07/2015 4:50 PM

JSON.NET is a very popular framework to process JSON data in .NET. We recently upgraded from v4 to v6 and noticed strange thing it started to output null to JSON strings created by JsonTextWriter object.

For example if JSON produced by v4 would look like this:

{"param1":"value1", "param2":"value2",
"someArray":[{"arrParam1": "arrValue1"}, {"arrParam2": "arrValue2"}]}

Same code, using v6, would prodcuce

{"param1":"value1", "param2":"value2",
"someArray":[{"arrParam1": "arrValue1"}, {"arrParam2": "arrValue2"}]null}

that extra “null” makes it invalid and unusable JSON.

The .NET function to create JSON writes it into a StringBuilder and is pretty straighforward.

  1. It starts with call to WriteStartObject method of JsonTextWriter
  2. Then it creates parameter name via WritePropertyName
  3. Depending on whether primitive value or raw string needs to be written WriteValue or WriteRaw methods are used respectfully
  4. Repeat steps 2 and 3 as needed
  5. Call to WriteEndObjectto finish writing.

This worked perfectly well when version 4 of Newtonsoft.Json.dll was used. After upgrading to version 6 last method – “WriteEndObject” began to output “null” to resulting JSON.

The solution is to use WriteRawValue method instead of WriteRaw – it still outputs raw string, but at the end WriteEndObject doesn’t output “null” anymore.

Solution: Lenovo Thinkpad w540 black LCD screen (only external monitor works)

By , 12/22/2014 5:33 PM

I spend ungodly amount of time trying to solve this issue, there were many similar issues reported on Lenovo forums, but no solutions and contacting Lenovo support is akin jumping thru hoops of fire.

The problem began after I plugged my brand new Thinkpad w540 into external monitor and set it to mode “Extended display (monitor + built-in screen). For a while everything worked fine, but then laptop own screen went black – and nothing could revive it. The external monitor worked fine and the maddening part was – when laptop booted – Lenovo logo appeared bright and shiny on laptop own screen, so I knew graphics card was OK. I ran full Lenovo System update, I updated NVidia drivers from Nvida site – nothing helped.

Then I tried to update Intel drivers for laptop’s HD Graphics 4600 card. Intel installer refused to install them because “The driver being installed is not validated for this computer“. To bypass that I

1. Unzipped the installer package into it’s own folder (you can use WinRar to unpack actual EXE or you can download Zip version of the package).
2. Went to Device Manager, right clicked on “HD Graphics 4600 card” driver and selected Update.
3. When prompted I selected “Browse my computer for driver software”
4. Selected “Let me pick from list of Device Drivers”
5. Clicked “Have disk” and browsed for an INF file inside of GRAPHICS folder of the unpacked driver files from Step 1

Installation commenced and lo and behold – laptop’s display sprang to life.

These instructions are specific to this laptop model and videocard, but I imagine they might be helpful in other similar situations. And hopefully Lenovo will take notice and finally update their drivers.

Solution for NFC not working on Samsung Galaxy phone

By , 10/03/2014 1:44 PM

This has been bothering me for a while – NFC refused to work on my Samsung Galaxy phone. Service was enabled and running, no errors or warning were displayed, but phone was unable to detect any NFC presence – tags, stickers, point of sale etc.

I was wrecking my mind until I realized that a while back I replaced the original Samsung Battery with a higher capacity generic one to extend battery life. But original Samsung Battery acts as an NFC antenna as well!

As soon as I put original battery in – lo and behold NFC sprang to action.

Amazon Prime Instant Video is available on Android

By , 09/09/2014 9:17 AM

Amazon Prime on Android

Finally! Now Amazon Instant Videos (including Prime Videos) left the stale cradle of Kindles and Fire Phones and now available for generic android devices. If you have the Amazon shopping app – you can do a one time videoplayer install directly from it, or you can get it from Amazon App store. Details…

Amazon Prime Instant Video on Android

SAY NO TO FLASH!

By , 09/05/2014 9:21 AM

Say no to flash Just say no. And tell your kids never to use this piece of junk. And not only because its obsolete and has been replaced by HTML5 long ago. It also promotes bloatware and malware.

I got a prompt from my current Flash player that an update is available. So I ran the update – first it tried to download and install that bloatware of McAfee and only failed because connection to McAfee site failed. But that wasn’t all.

After install finished, I found that my browser was hijacked by “Trovi” malware – start page, search engine etc. And this was done by official installer from Adobe site! Wtf?!

Bye Flash, you won’t be missed.

Reenable (temporary) showModalDialog support in Chrome (for Windows) 37+

By , 09/02/2014 9:03 AM

You know you shouldn’t use showModalDialog to open modal windows – it’s bad taste and prone to cause issues. Unfortunately many applications (especially Enterprise ones) rely on the method ability to halt code execution until the window closed (e.g. user answers a YES/NO question).

Tough luck, starting version 37 Google Chrome removed support for showModalDialog. Your code suddenly began to act in weird and unpredictable way. You definitely should rework it to use a different approach to dialogs. Fortunately Google gives you a bit more time. You can re-enable showModalDialog support, but only temporarily – until May of 2015. Continue reading 'Reenable (temporary) showModalDialog support in Chrome (for Windows) 37+'»

Infragistics WebDataMenu flashes unexpected color on hover

By , 07/17/2014 2:44 PM

WebDataMenu
Infragistics WebDataMenu ASP.NET control comes both with predefined stylesets and allows you granularly overwrite any of the styles. For example definition like this

<ig:WebDataMenu ID="xmyMenu" runat="server" StyleSetName="Office2007Blue"
                 CssClass ="topMenuStyle" >
   <GroupSettings Orientation="Horizontal" />
   <ItemSettings CssClass="itemCssStyle" 
                 HoverCssClass="hoverCssStyle" 
                 SelectedCssClass="selectedCssStyle" />  
</ig:WebDataMenu>

will create a horizontal dropdown menu in default “Office 2007 Blue” styleset but allows you to overwrite individual styles via exposed CSS properties.

Let’s take a look at hover style. Continue reading 'Infragistics WebDataMenu flashes unexpected color on hover'»

Microsoft Skype Doesn’t support IE11

By , 05/21/2014 8:39 AM

Ever since I upgraded to IE11 my Skype is throwing error

Skype IE11 error

Digging deeper – the error is throwing while Skype is attempting to display an ad banner

Skype ad banner error

So not only when Skype came into Microsoft possession it stated to display banner ads – in doing so it relies on Internet Explorer and it’s not compatible with the latest version.

How stupid is that?

Pebble Steel: DIY (some assembly required)

By , 04/01/2014 8:38 AM

Pebble Steel: DIY

Pebble Steel is a new flagship smartwatch of a widely successful kickstarter Pebble. It’s the latest craze and everybody wants one. Unfortunately the demand far outweighs the supply – it’s a well known problem. Pebble can’t manufacture enough new Steels in time, there’re many backorders, missed deadlines, a lot of frustrated, complaining customers.

But Pebble is not called genius for nothing. They found a brilliant solution, one they borrowed directly from the Apple, when the company was at its very humble beginning and was struggling as well. If you recall – original Apple 1 computer was sold as an electronic kit, that users had to put together themselves. This approach solved many problems for Apple back then and it will be very helpful for Pebble today.

Enter “Pebble Steel: Do it yourself” kit. The new Steel will ship as a collection of parts with detailed instructions on how to put them together. Since Pebble Steel doesn’t have to come fully assembled – that will seriously cut down manufacturing time and the product will ship to users much sooner. Cost saved on assembly labor will also be passed directly to customers – expect to see cheaper Steels soon. And since majority of Pebble users are computer/electronics geeks anyway, crowd that loves tinkering with their gadgets – assembling your very own Pebble Steel will come as an interesting and a welcome challenge and will make a proud owner even more proud.

Solution for SqlDataReader.ReadColumnHeader NullReferenceException

By , 08/30/2013 10:38 AM

This post related to the previous one, but I decided to write a separate article because it seems to be a common problem.

Sometimes when you use SqlDataReader, you would get an exception:

NullReferenceException {“Object reference not set to an instance of an object.”}
at System.Data.SqlClient.SqlDataReader.ReadColumnHeader(Int32 i)
at System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)

And the maddening thing – it doesn’t happen often, just every once in a while. And it happens at different times too, sometimes reader would read 100 records, sometimes 200 etc.

One possible case – SqlDataReader is losing its connection. And one possible reason for that – connection goes out of scope.

Consider following scenario – you have a function that returns SqlDataReader:

Function GetTheReader() as SqlDataReader
   Dim oConn As New SqlConnection("Connection String") : oConn.Open()
   Dim oComm As New SqlCommand("Stored Procedure", oConn)

   Dim oReader As SqlDataReader = oComm.ExecuteReader(CommandBehavior.CloseConnection)

   Return oReader
End Function

And you use it like this:

Dim oReader as SqlDataReader = GetTheReader()
'Begin use reader - loop, read data etc.

The problem with this approach that connection used to create the reader is stored in a private variable inside of `GetTheReader` function and when the function exits – the variable goes out of scope. Eventually, sooner or later Garbage Collector will collect it and close and dispose of connection – and at this time your SqlDataReader will fail.

The solution? Either use SqlDataReader at the same scope level you created it, or, if you do need to use function – pass connection object into it as one of the parameters, so it would remain valid after function exits.

Panorama Theme by Themocracy