• Home
  • About
  • Resume

Posts tagged: workaround

Root your Android device without flashing custom recovery

By , 02/15/2015 1:03 PM

HTC Rooted
It is fairly straightforward to root an Android phone using SDK platform tools (adb, fastboot), for example this is a very nice guide how to root HTC One M8. Basically you download SuperSU superuser manager to your device, download custom recovery image onto your computer and flash it to your device via command

fastboot flash recovery your_custom_recovery.img

then reboot into newly flashed recovery and flash the SuperSU. Boom, you’re done.

The problem with this approach, once you phone receives OTA (over the air) update (e.g. new version of Android) it needs original stock recovery to install it. If you have custom recovery (e.g. TWRP) – OTA update will fail. The solution is, when you root your phone, not to flash custom recovery, but just to reboot into it without flashing. Instead of above command, use

fastboot boot your_custom_recovery.img

This command will reboot your phone into custom recovery without flashing it. Then you can flash SuperSU and after reboot your phone will be rooted and original stock recovery remains.

You can even save the original stock recovery (after you rooted the phone) in case you do need to flash custom one. This way you can have a backup of stock recovery in case you need to flash it back to install OTA update. Below steps are for HTC One M8, but other devices will have similar approach:

Assuming that your phone is connected to PC, you have correct drivers installed and USB debugging mode enable.

run  "adb shell" command on your PC
"su" (watch your phone and grant permission if needed)
"dd if=/dev/block/mmcblk0p43 of=/sdcard/stock_recovery.img"

This will copy stock recovery of your HTC One M8 into file “stock_recovery.img” on the SD Card.

Credits go to this XDA thread

ASP.NET WebForms: Safe refresh after postback

By , 02/10/2015 6:36 PM

It’s all too commons scenario in a Web Application, you initiate a postback by clicking a button (basically submitting a form), some action is performed, perhaps database is written to, all fine and good. And then you refresh the page. Or even page is refreshed for some purpose by a client-side JavaScript code. And the dreaded “resubmit” message appears, it differs from browser to browser, e.g. Firefox would say

“To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier”

And if you agree – the form is resubmitted again along with all the actions performed – not good.

This issue happens because the page is submitted via POST request and in order to refresh the page – POST request has to be resubmitted along with form action. And the solution is Post/Redirect/Get pattern. The idea is to take the page submitted via POST request and convert it into GET. In ASP.NET this can be achieved via simple Response.Redirect. You can redirect to another page or you can reload your current one:

Response.Redirect(Request.RawUrl)

This code redirects to original page URL, essentially reloading the from page server side. But now it’s a GET page, safe to refresh

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.

Access nested controls in ASP.NET Page PreInit event (when no Master Page is involved)

By , 11/07/2014 4:34 PM

There’re situations when you need access ASP.NET web controls very early in page lifecycle, more specifically – in Page PreInit event – and you can, but only top-level controls. But what if you need to access child/nested controls? The example below uses Infragistics WebHierarchicalDataGrid as a child of Infragistics WebSplitter, but this pretty much applies to any such scenario.

Let’s say you have following layout

<ig:WebSplitter ID="WSP" runat="server">
   <Panes>
      <ig:SplitterPane runat="server">
         <Template>

            <ig:WebHierarchicalDataGrid ID="WHG" runat="server">
            </ig:WebHierarchicalDataGrid>

         </Template>
      </ig:SplitterPane>
      <ig:SplitterPane runat="server"></ig:SplitterPane>
   </Panes>
</ig:WebSplitter>

As you can see grid “WHG” is nested withing first pane of splittet “WSP. Let’s see what happens if you try access the controls in PagePreInit event: Continue reading 'Access nested controls in ASP.NET Page PreInit event (when no Master Page is involved)'»

Infragistics WebDataMenu: Manual postback from client-side Click event

By , 10/07/2014 1:46 PM

There’s a a few possible scenarios when you need to manually to initiate server-side Click event of Infragistics WebDataMenu control. For example in client side click event you do some verification/user confirmation and upon positive confirmation (e.g. user clicks YES) – server-side Click event should kick in.

In a normal flow of event you can use set_cancel(bool) method to allow/disallow natural menu postback e.g.

function Menu_ItemClick(sender, eventArgs) {

   if (confirm('Are you sure?'))
       eventArgs.set_cancel(false)
   else
       eventArgs.set_cancel(true)

}

This works because this dialog stops code execution waiting for the user input. But what if you use something like jQueryUI dialog that relies on callback functions to get user feedback? In this case execution of the code continues immediately so you have to cancel postback right away and instead in the callback of the dialog initiate manual postback e.g

function Menu_ItemClick(sender, eventArgs) {

   $("#dialog").dialog({
      resizable: false,
      height:140,
      modal: true,
      buttons: {
        "Yes": function() {
          $(this).dialog("close");
          __doPostBack(sender.get_id(), 'ItemClick' + eventArgs._getPostArgs());
        },
        "No": function() {
          $(this).dialog("close");
        }
      }
   });  

   eventArgs.set_cancel(true)

}

The example above initiates modal confirmation jQuery UI dialog and immediately cancels menu postback (Line 18). Later if user clicks “Yes” button – dialog is closed and manual menu postback is initiated (Line 10) – it passes menu ID and correct postback argruments which result in server-side Click event of menu control. If user clicks “No” – dialog is closed and nothing else happens.

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 delayed resizing in Chrome

By , 08/01/2014 4:36 PM

I encountered weird issue using Infragistics ASP.NET WebDataMenu control. If total width of top-level items was bigger than menu’s width and scrolling kicked in – Google Chrome browser produces unexpected results.

Consider following basic markup for Infragistics WebDataMenu:

<ig:WebDataMenu ID="WebDataMenu1" runat="server" Width="300px">
   <ClientEvents Initialize="myInit" />
   <GroupSettings Orientation="Horizontal" />
   <Items>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
      <ig:DataMenuItem Text="Root Item"></ig:DataMenuItem>
   </Items>
</ig:WebDataMenu>

It’s a pretty basic markup that defines 10-item horizontal menu with a limited width, so scrolling is enabled. Code in the Initialize event handler would handle some calculation based on menu dimensions and other items on the page would be affected by these calculations. Continue reading 'Infragistics WebDataMenu delayed resizing in Chrome'»

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'»

Infragistics WebDataGrid stalls on paging large datasets

By , 06/25/2014 4:12 PM

A common scenario while using Infragistics WebDataGrid is to have an unbound column, whose cell’s value is determined at runtime in InitializeRow event, something like

Private Sub xmyGrid_InitializeRow(ByVal sender As Object, ByVal e As GridControls.RowEventArgs) Handles xmyGrid.InitializeRow
   '... some code
   e.Row.Items(0).Value = SomeCalculatedData
   '... some more code
End Sub

This works fine if you bind the grid to a small data set (and you should!) But if, due to circumstances out of your control, you bind it to a dataset with tens of thousand of records you might be screwed. Even if you enable paging (and you most definitely should!) you may find yourself living in a shotgun shack in a situation that changing page takes forever and eventually crashes. If you do – change the above line to

e.Row.Items(0).Text = SomeCalculatedData

note using of .Text property, which is String, instead of .Value which is Object. Since you’re assigning the calculated data for presentation only – no need to change underlying value – and this makes all the difference.

Panorama Theme by Themocracy