Category: Uncategorized

April Fools has been canceled this year.

By , April 1, 2017 12:01 am

Because we live in a farce now.

That will be all.

Full control of your LimitlessLED/Milight – v6- bulbs from Amazon Echo

By , February 24, 2017 9:42 pm

A while ago I blogged about controlling you Milight smart bulbs from Amazon Echo. This was done by sending raw UDP packets directly to Milight bridge. Since a packet consisted only of a few bytes – this was manageable.

Then we got v6 of Milight bulbs. They’re vastly superior to previous version – besides brightness and color you can set warmth and saturation among other things. But with new features came increase complexity of commands. UDP packets now consist of huge number of bytes and you cannot simple send packet and forget it, response matters too.

HA-Bridge, which is used to emulate Phillips Hue bulbs so Echo can detect the devices, is incapable of such commands. Thankfully it can run external scripts. Continue reading 'Full control of your LimitlessLED/Milight – v6- bulbs from Amazon Echo'»

There’s new reflective LCD in town (SMA Q2 vs PTS)

By , January 20, 2017 12:23 pm

I’ve been a fan of Pebble smartwatch for a very long time, both as a user and developer, but recently, even before announcement of Pebble acquisition by FitBit I got curious – what else’s out there? Two mainstream branches of smartwatches – Android Wear and “The Watch” are of no interest to me – too boring. So I looked into Samsung Gear watches – Tizen platform is very interesting, then it was Vector Watch (which ended up being bought by FitBit as well) and now a new ePaper watch from Chinese company Shenzhen – SMA Q2 (sometimes called SMA Time).

There is no question that despite obvious visual similarities, at this point in time Pebble Time Steel is vastly superior to SMA Time. PTS is on 4th generation firmware which brought many advanced features over the years, PTS has a very popular appstore and high quality developer ecosystem. SMA Time feels like Pebble circa firmware v1.x (probably even less, e.g. it has only 3 slots for watchfaces on the watch) but it seems to have great potential.

I am posting here a few pics comparing PTS with SMA Time. Continue reading 'There’s new reflective LCD in town (SMA Q2 vs PTS)'»

Infragistics WebDataGrid crashes if its total width over 32767 pixels

By , July 14, 2014 1:33 pm

When you’re dealing with Infragistics WebDataGrid and want to manipulate appearance of individual columns – there’s a handy Columns collection for that. Unfortunately it’s available only if you define columns at design time or add columns to it in code-behind. If your grid features autogenerated columns – the collection will be empty.

There’s a way to derive column info tho – and can be done from grid row. The example below uses grid’s PreRender event to capture first row from which columns are derived and their width set:

Protected Sub xmyGrid_PreRender(sender As Object, e As EventArgs) Handles myGrid.PreRender
   Dim oGrid As GridControls.ContainerGrid
   Dim oRow As GridControls.ContainerGridRecord

   oGrid = sender
   oRow = oGrid.Rows(0)

   If oRow IsNot Nothing Then
      InitGridColumns(oRow) 'passing 1st grid row to helper sub
   End If
End Sub

Sub InitGridColumns(i_oRow As GridControls.ContainerGridRecord)
   Dim oGridCol As GridControls.BoundDataField

   'looping thru row cells
   For I As Integer = 0 To i_oRow.Items.Count - 1
       oGridCol = i_oRow.Items(I).Column 'deriving column object from row cell
       oGridCol.Width = Unit.Pixel(CalculateWidthHere()) 'setting calculated width
   Next
End Sub

This works pretty well – that is until summary width of all columns combined hit’s 32K. If this happens – grid crashes:

Continue reading 'Infragistics WebDataGrid crashes if its total width over 32767 pixels'»

WebHierarchicalDataGrid binds to data twice

By , July 14, 2014 12:04 pm

Infragistics WebHierarchicalDataGrid offers a nice ability to custom load-on-demand data via its ContainerGridDataBinding event. It is very useful during paging or displaying grid children – you can make a DB call and provide data a just needed for current page or child.

But it has a drawback – if you need to programmaticaly sort the grid by manipulating SortedColumns collection – grid thinks it needs to rebind the data and is calling ContainerGridDataBinding event handler again thus making it execute DB call again – which is redundant and may hinder performance. In a typical scenario you have your binding code:

Protected Sub xmyGrid_ContainerGridDataBinding(sender As Object, e As GridControls.DataBindingEventArgs) Handles xmyGrid.ContainerGridDataBinding
   e.Cancel = True
   e.DataSource = MakeDbCallToGetCurrentData()
   e.SelectArguments.TotalRowCount = iTotalNumberOfRecords
End Sub

and somewhere else add sorting

Protected Sub xmyGrid_PreRender(sender As Object, e As EventArgs) Handles xmyGrid.PreRender
   xmyGrid.Behaviors.Sorting.SortedColumns.Add(sCol1Key, SortDirection.Ascending)
   xmyGrid.Behaviors.Sorting.SortedColumns.Add(sCol2Key, SortDirection.Descending)
End Sub

Sorting code in the second event handler is causing grid to perform second call to ContainerGridDataBinding. The solution is to move sorting code inside of ContainerGridDataBinding handler:

Protected Sub xmyGrid_ContainerGridDataBinding(sender As Object, e As GridControls.DataBindingEventArgs) Handles xmyGrid.ContainerGridDataBinding
   e.Cancel = True
   e.DataSource = MakeDbCallToGetCurrentData()
   e.SelectArguments.TotalRowCount = iTotalNumberOfRecords

   xmyGrid.Behaviors.Sorting.SortedColumns.Add(sCol1Key, SortDirection.Ascending)
   xmyGrid.Behaviors.Sorting.SortedColumns.Add(sCol2Key, SortDirection.Descending)
End Sub

Since at this point grid already bound to data – columns are already available. And since we’re inside of ContainerGridDataBinding – the call to it is not repeated.

UltraWebGrid: “Invalid Argument” error after upgrade

By , October 11, 2011 2:34 pm

One would think that classic UltraWebGrid control would not be touched by 2010+ Infragistics NetAdvantage upgrades, perhaps some bugs would be fixed, but definitely no new ones should be introduced – since no new development is done on the control.

One would be mistaken, The Adventure Of Upgrading liveth on.

If you’re using UltraWebGrid, and its columns’ width is set as a percentage and some columns are hidden, e.g. you have something like this:

<igtbl:UltraGridColumn Key="COL1" Width="25%" Hidden="True">
   <Header Caption="My Important Column"></Header>
</igtbl:UltraGridColumn>

And you try to unhide the column in client-side JavaScript code like this:

var oBand = igtbl_getGridById('xMyGrid').Bands[0];
oBand.getColumnFromKey("COL1").setHidden(false);

You will get an error: Invalid argument deep in the jungle of Infragistics JavaScript code. What the?! It worked fine before the upgrade! Continue reading 'UltraWebGrid: “Invalid Argument” error after upgrade'»

Use symlinks to serve subdomain content

By , August 19, 2011 12:21 pm

When you add a subdomain to your site, many hosting providers will automatically create a new physical folder on the server to match the subdomain name and to serve the subdomain content from. Which is all fine and good if your subdomain has a completely different content from main site/other subdomains.

But there’re situations when you need several subdomains to point to the same physical folder. Case in point: WordPress multisite install. There’s only a single installation of WordPress software, but depending on how you access it – it will serve different content. For example if you visit http://kitchen.galanter.net you will see a culinary blog, but if you open http://codecorner.galanter.net – a programming content will be served to you. This is achieved by WordPress by reading host header information (HTTP_HOST) and depending on header name (“kitchen” or “codecorner”) different content will be served. But it will be served from the same physical folder

Many hosting providers allow you to select root folder for the subdomains – in this case it’s easy: just add subdomain, point it to the root folder of the main domain and you’re done. But some, like my current host hard-code subdomain-subfolder relationship and it’s not allowed to change. In my case my root domain (which serves http://www.galanter.net) is physically located in /galanter.net/public folder. When I added subdomain codecorner, provider automatically created folder /galanter.net/codecorner/public which would have a completely different content, but I needed its content to be served from main /galanter.net/public folder, just pass “codecorner” HTTP host header to it. Enter symlinks. Continue reading 'Use symlinks to serve subdomain content'»

Panorama Theme by Themocracy

Bitnami