Greenshot is a handy Open Source screenshot tool.
http://getgreenshot.org/
Friday, November 25, 2016
Thursday, September 22, 2016
Run Android apps in Chrome
I might be late to the party but better late than never. That's two cliches at once.
Being late has an obvious benefit of not trying the stuff that does not work and/or screwing up the stuff that does. So, by now Google has released an official ARC Welder extension for Chrome browser (https://chrome.google.com/webstore/detail/arc-welder/emfinbmielocnlhgmfkkmkngdoccbadn). The extension/app will convert an Android .apk into a Chrome app.
This is quite amazing from the user point of view. Technically, it is enabled by Chrome apps and Android using (more or less) the same underlying runtime.
The apps I tried were very responsive and much easier to use than on an emulator.
Being late has an obvious benefit of not trying the stuff that does not work and/or screwing up the stuff that does. So, by now Google has released an official ARC Welder extension for Chrome browser (https://chrome.google.com/webstore/detail/arc-welder/emfinbmielocnlhgmfkkmkngdoccbadn). The extension/app will convert an Android .apk into a Chrome app.
This is quite amazing from the user point of view. Technically, it is enabled by Chrome apps and Android using (more or less) the same underlying runtime.
The apps I tried were very responsive and much easier to use than on an emulator.
Saturday, September 17, 2016
Genymotion issues
The most common issue I experience with Genymotion is inability to start a virtual device. At least now I believe I've figured out how to fix this behaviour.
It seems that Genymotion waits for a short time for the device to get an IP address from the VirtualBox DHCP server that serves the Host-Only network adapter. To work around this issue, the virtual device can be started from VirtualBox directly. Then, once the IP is assigned, and this is visible on the screen, the device can be started in Genymotion. It will simply continue the already-running session and will display the graphical screen in the Genymotion window while the console output will remain in the VirtualBox screen. One could also run the VM headless, in which case there would be no VirtualBox screen open, I guess. That way it would be harder to figure out when the IP address has been assigned.
Another issue that may cause this behaviour seems to have to do with the configuration of the DHCP. The main reason here is the discrepancy between the DHCP address range and the virtual network adapter IP address.
Sometimes there are multiple adapters in the Host-Only section of the VirtualBox network configuration. Make sure there is only one. Remove the others.
Then, synchronize the IP range of the DHCP server to match the given IP address of the host-only adapter.
Example: if the host-only adapter has the IP settings 192.168.248.2/255.255.255.0, the DHCP server can be configured as such:
Server Address: 192.168.248.100
Server Mask: 255.255.255.0
Lower Address Bound: 192.168.248.101
Upper Address Bound: 192.168.248.254
On Windows 10 these issues seem to resolve automatically as Genymotion sets up the host-only adapter on its own.
It seems that Genymotion waits for a short time for the device to get an IP address from the VirtualBox DHCP server that serves the Host-Only network adapter. To work around this issue, the virtual device can be started from VirtualBox directly. Then, once the IP is assigned, and this is visible on the screen, the device can be started in Genymotion. It will simply continue the already-running session and will display the graphical screen in the Genymotion window while the console output will remain in the VirtualBox screen. One could also run the VM headless, in which case there would be no VirtualBox screen open, I guess. That way it would be harder to figure out when the IP address has been assigned.
Another issue that may cause this behaviour seems to have to do with the configuration of the DHCP. The main reason here is the discrepancy between the DHCP address range and the virtual network adapter IP address.
Sometimes there are multiple adapters in the Host-Only section of the VirtualBox network configuration. Make sure there is only one. Remove the others.
Then, synchronize the IP range of the DHCP server to match the given IP address of the host-only adapter.
Example: if the host-only adapter has the IP settings 192.168.248.2/255.255.255.0, the DHCP server can be configured as such:
Server Address: 192.168.248.100
Server Mask: 255.255.255.0
Lower Address Bound: 192.168.248.101
Upper Address Bound: 192.168.248.254
On Windows 10 these issues seem to resolve automatically as Genymotion sets up the host-only adapter on its own.
Wednesday, September 14, 2016
Manually updating Avira Antivirus
Avira Antivirus supports a manual update option, which is great when automatic update fails with different errors but all the required files can be downloaded through a browser, for example.
The tool is fairly simple and effective.
https://www.avira.com/en/support-vdf-update-info
The tool is fairly simple and effective.
https://www.avira.com/en/support-vdf-update-info
Wednesday, August 24, 2016
World clock
Another world clock but with a very convenient presentation of time zones in parallel:
http://www.worldtimebuddy.com/?pl=1&lid=2761369,5128581,184745,1609350&h=2761369
http://www.worldtimebuddy.com/?pl=1&lid=2761369,5128581,184745,1609350&h=2761369
Tuesday, August 23, 2016
Markdown Editors: Typora
It's that time again, searching for a quick editor for Markdown (.md) files. This time it is getting easier as it seems that a lot of people are using Markdown. There are also lot of people developing editors, it seems.
After a fairly quick search, I narrowed down to two options. Will see how it goes.
There are several important factors to consider, in order of preference:
After a fairly quick search, I narrowed down to two options. Will see how it goes.
There are several important factors to consider, in order of preference:
- startup speed
- HTML preview
- styles support (so I can make it dark)
- extended Markdown support (strikethrough, for example)
Wednesday, July 20, 2016
Saturday, July 16, 2016
CloudRail and Crashlytics
In mobile apps, adding one thing leads to another and so I ended up using Twitter's Fabric / Crashlytics.
Prior to that, I was lucky to have the good guys from CloudRail introduce their fantastic library that communicates with four major cloud storage providers (Dropbox, Google Drive, OneDrive, and Box). This came about at the same time Dropbox announced the retirement of v1 of their APIs. As the most requested features for MoneyManagerEx for Android were the support for some of these services, this was a great match. A unified interface to different cloud providers was something I was expecting to create in order to provide multiple storage providers for data synchronization anyway, and architecturally this solution fit perfectly into the app's roadmap.
After adding this, of course, various issues appeared. This is almost a given on even the quietest releases. Just after Beta testing for at least a week does not produce any exceptions, rest assured that publishing an app to Production will result in a torrent of exception logs. Various devices, operating systems, and network environments, mixed with different user levels will invariably result in infinite number of possibilities for exceptions.
This torrent of exception reports is becoming an overkill for a custom default uncaught exception handler. Plus the custom solution depends heavily on users actually willing to submit the report via email. Over the past several months, this solution really shows its age and is becoming unmaintainable as the number of users constantly grows. And, as I've found out only later, the stack trace produced in this manner does not include all the useful information. With multithreading being used ever more for even the simplest tasks, the log covering the crashing thread does not produce the full picture of what exactly went wrong, especially if there are several layers of libraries. So, an issue with SSL parsing in OpenSSL might cause OneDrive part of CloudRail to fail, in turn resulting in an exception during the initialization of the sync service which is set up to use Dropbox as the provider!
This level of logging only becomes possible by introducing a specialized automated exception reporting solution.
This lead to dusting off my Fabric account and adding Crashlytics to the app. The results are simply stunning. Real-time reports show the exceptions as they happen. Now, without relying on users' submission, I do not need to bug users to send exception reports manually any longer.
Another great benefit is that the caught exceptions can now be reported, too. Adding a whole bunch of try/catch blocks muted these errors and prevented the app from crashing but in reality did nothing to handle the root cause. Now I can log any of these caught exceptions and report them. Then, whichever one tops the list, it will get addressed and the related code improved further. Specific cases, like missing files, DNS errors, and so on, can be specifically handled and the user notified. This way they can be properly handled and excluded from the exception logs.
So, overall, lots of fun introducing two new features/libraries - CloudRail and Crashlytics. It is one of those moments when one asks himself how the world existed before this. Should I mention that both are free to use, even though they are not Open Source? If they remain so, they will probably have a historic impact on technology implementation by improving outreach (CloudRail) and handling the user experience quality (Crashlytics). Thanks, guys!
Happy development to you all.
Prior to that, I was lucky to have the good guys from CloudRail introduce their fantastic library that communicates with four major cloud storage providers (Dropbox, Google Drive, OneDrive, and Box). This came about at the same time Dropbox announced the retirement of v1 of their APIs. As the most requested features for MoneyManagerEx for Android were the support for some of these services, this was a great match. A unified interface to different cloud providers was something I was expecting to create in order to provide multiple storage providers for data synchronization anyway, and architecturally this solution fit perfectly into the app's roadmap.
After adding this, of course, various issues appeared. This is almost a given on even the quietest releases. Just after Beta testing for at least a week does not produce any exceptions, rest assured that publishing an app to Production will result in a torrent of exception logs. Various devices, operating systems, and network environments, mixed with different user levels will invariably result in infinite number of possibilities for exceptions.
This torrent of exception reports is becoming an overkill for a custom default uncaught exception handler. Plus the custom solution depends heavily on users actually willing to submit the report via email. Over the past several months, this solution really shows its age and is becoming unmaintainable as the number of users constantly grows. And, as I've found out only later, the stack trace produced in this manner does not include all the useful information. With multithreading being used ever more for even the simplest tasks, the log covering the crashing thread does not produce the full picture of what exactly went wrong, especially if there are several layers of libraries. So, an issue with SSL parsing in OpenSSL might cause OneDrive part of CloudRail to fail, in turn resulting in an exception during the initialization of the sync service which is set up to use Dropbox as the provider!
This level of logging only becomes possible by introducing a specialized automated exception reporting solution.
This lead to dusting off my Fabric account and adding Crashlytics to the app. The results are simply stunning. Real-time reports show the exceptions as they happen. Now, without relying on users' submission, I do not need to bug users to send exception reports manually any longer.
Another great benefit is that the caught exceptions can now be reported, too. Adding a whole bunch of try/catch blocks muted these errors and prevented the app from crashing but in reality did nothing to handle the root cause. Now I can log any of these caught exceptions and report them. Then, whichever one tops the list, it will get addressed and the related code improved further. Specific cases, like missing files, DNS errors, and so on, can be specifically handled and the user notified. This way they can be properly handled and excluded from the exception logs.
So, overall, lots of fun introducing two new features/libraries - CloudRail and Crashlytics. It is one of those moments when one asks himself how the world existed before this. Should I mention that both are free to use, even though they are not Open Source? If they remain so, they will probably have a historic impact on technology implementation by improving outreach (CloudRail) and handling the user experience quality (Crashlytics). Thanks, guys!
Happy development to you all.
Monday, July 4, 2016
CloudRail: Unified Cloud Storage API
Just came across CloudRail library for Android and am adding it to MoneyManagerEx for Android. The library provides a unified API to several cloud storage (and other) services.
After Dropbox announced deprecation of v1 of their APIs and libraries, these needed to be replaced in the app. Now, for the same amount of effort in migration the app will get, for free, the ability to use four of the most common cloud storage providers. This is fantastic! Hope this stays a secret. :)
https://cloudrail.com/
After Dropbox announced deprecation of v1 of their APIs and libraries, these needed to be replaced in the app. Now, for the same amount of effort in migration the app will get, for free, the ability to use four of the most common cloud storage providers. This is fantastic! Hope this stays a secret. :)
https://cloudrail.com/
Wednesday, June 29, 2016
Monday, June 27, 2016
Deploy SQL Migrations with Octopus
Here is a brief summary and a to-do list for packing and deploying SQL migrations in combination with Octopus. The prerequisites are: .NET project, Fluent Migrator, Octopus Deploy.
The first step is to set-up database migrations using code (C#). For this,
- create a library project in the solution,
- add Fluent Migrator (eventually FluentMigrator.Tools and/or FluentMigrator.Runner but these are not required) NuGet package to it,
- create the first migration class containing the change (schema and/or data).
This will produce the migration binary .dll file on build operation. To get the SQL commands for the actual change, one needs to run the Migrator tool to generate the change commands based on the current version of the database. If this is the first migration it will also generate the commands for creation of the Migration_Info table.
- Create SQL generation script(s). There are a few useful scripts for checking the SQL output.
- Script for previewing the current migration (just runs -preview),
- Script for manually generating the SQL output, and
- PowerShell script for automatic generation of the SQL file output during the automatic build process.
The PowerShell script will be executed after the build completes on an integration server. It will generate the SQL file from the built migrations .dll binary. To do that,
- add the post-build script that runs the Migrator and generates the output SQL file (this is the automatic script from above).
After this, it is time to generate the NuGet package.
- create .nuspec file that includes the generated .sql file.
- adjust this script to create the NuGet package with the generated output.
- set the script to upload the NuGet package to a NuGet repository. This is the Octopus Library.
Once this is done, the only remaining step is the deployment.
- create the Deploy.ps1 script and include it in the generated NuGet package. This script should either execute the SQL file or copy/send it to the DBAs for examination and scheduled execution.
This solution provides the history of database changes (both schema and data). It is automatic and does not require developers to manipulate or send SQL commands. Besides the code migrations, it also creates an archive of all the migration packages, which is useful for the database administrators and possibly other parties. These packages can be safely stored along with the other binary packages for deployment.
The first step is to set-up database migrations using code (C#). For this,
- create a library project in the solution,
- add Fluent Migrator (eventually FluentMigrator.Tools and/or FluentMigrator.Runner but these are not required) NuGet package to it,
- create the first migration class containing the change (schema and/or data).
This will produce the migration binary .dll file on build operation. To get the SQL commands for the actual change, one needs to run the Migrator tool to generate the change commands based on the current version of the database. If this is the first migration it will also generate the commands for creation of the Migration_Info table.
- Create SQL generation script(s). There are a few useful scripts for checking the SQL output.
- Script for previewing the current migration (just runs -preview),
- Script for manually generating the SQL output, and
- PowerShell script for automatic generation of the SQL file output during the automatic build process.
The PowerShell script will be executed after the build completes on an integration server. It will generate the SQL file from the built migrations .dll binary. To do that,
- add the post-build script that runs the Migrator and generates the output SQL file (this is the automatic script from above).
After this, it is time to generate the NuGet package.
- create .nuspec file that includes the generated .sql file.
- adjust this script to create the NuGet package with the generated output.
- set the script to upload the NuGet package to a NuGet repository. This is the Octopus Library.
Once this is done, the only remaining step is the deployment.
- create the Deploy.ps1 script and include it in the generated NuGet package. This script should either execute the SQL file or copy/send it to the DBAs for examination and scheduled execution.
This solution provides the history of database changes (both schema and data). It is automatic and does not require developers to manipulate or send SQL commands. Besides the code migrations, it also creates an archive of all the migration packages, which is useful for the database administrators and possibly other parties. These packages can be safely stored along with the other binary packages for deployment.
Thursday, June 23, 2016
Process Hacker
Process Hacker is an Open Source version of Process Explorer. Some say it has more functionality, too. To be tested.
Project page
Project page
Friday, June 17, 2016
Friday, June 10, 2016
Thursday, June 9, 2016
Sublime Text 3 - save on blur
Sublime Text 3 has a built-in option to save a file when the editor loses focus. It just requires a switch to enable it. Add the following option to User Preferences:
"save_on_focus_lost": trueSource: http://wesbos.com/5-sublime-text-tweaks-tips/
Simple HTTP Server with Node.js
Looking for a quick web-server set-up? Mongoose is a good choice but there's also an option to run an HTTP server on Node.js:
https://github.com/indexzero/http-server
https://github.com/indexzero/http-server
Thursday, May 26, 2016
Maximum line length for source code
Does the length of a line of code matter? And what would a common measure be? Interesting overview with a conclusion of 125 characters per line:
Source
Source
Monday, May 23, 2016
Friday, May 20, 2016
Firefox tops Microsoft browser market share for first time
Wow, Firefox has surpassed Internet Explorer in terms of usage. The measures come from StatCounter.
Source: link
And here are the current stats: Top 5 browsers
Source: link
And here are the current stats: Top 5 browsers
Tuesday, April 26, 2016
Issues with Reinstalling Internet Explorer 11
Just had some weird issues with IE11 that I tried to fix by reinstalling. However, I could not find an entry to uninstall in Windows components nor in Programs and Features. I could also not install the latest version via installer because it reported that a newer version was already installed. Bump.
Fortunately, there are logs that can be used to trace what is going on.The Internet Explorer installation log is at C:\Windows\IE11_main.log. Once the installer starts, it creates a temporary folder in C:\Windows\Temp\IExxxx.tmp. This folder contains the installation files and things can be manually adjusted there.
Fortunately, there are logs that can be used to trace what is going on.The Internet Explorer installation log is at C:\Windows\IE11_main.log. Once the installer starts, it creates a temporary folder in C:\Windows\Temp\IExxxx.tmp. This folder contains the installation files and things can be manually adjusted there.
Customizing Android Location
The paths for Android SDK and related tools can be customized through environment variables
- ANDROID_HOME
- ANDROID_SDK_HOME
Monday, April 18, 2016
Sunday, April 17, 2016
Must-Have Libraries for Android
It is always good to see a confirmation of one's choices. The same goes for this list. I've already used most of the libraries on this list and have made them a part of the Android development arsenal.
The only sad part about reading this article is finding out that it's not a "treasure map" and has not provided some yet-undiscovered miracle-library that makes things simpler.
However, any article that puts Parceler, Retrofit, and EventBus together is always a good read.
Source
And if that is not enough here is another list for 2015.
The only sad part about reading this article is finding out that it's not a "treasure map" and has not provided some yet-undiscovered miracle-library that makes things simpler.
However, any article that puts Parceler, Retrofit, and EventBus together is always a good read.
Source
And if that is not enough here is another list for 2015.
Thursday, April 14, 2016
Quick Firefox Restart
Sometimes it is useful to restart Firefox but keep all the previously-open tabs and windows.
Unfortunately, simply closing the browser will not do as the next time it is started, it will simply show your default start settings. This is blank page in my case.
To assist with this, there was a couple of extensions, like Restartless Restart or the Restart Button, but they all stop working after some time due to Firefox updates.
The solution is available in Firefox by opening the Developer Toolbar (link) using Shift+F2 and typing "restart" as the command.
Unfortunately, simply closing the browser will not do as the next time it is started, it will simply show your default start settings. This is blank page in my case.
To assist with this, there was a couple of extensions, like Restartless Restart or the Restart Button, but they all stop working after some time due to Firefox updates.
The solution is available in Firefox by opening the Developer Toolbar (link) using Shift+F2 and typing "restart" as the command.
Monday, April 11, 2016
Customize your ProgramFiles variable
If you are running short on space on C: drive, you can customize some variables that tell programs where to install by default.
Such are
Reference
Such are
- ProgramFiles
- ProgramData
- CommonFiles
- ProgramW6432
Reference
Saturday, April 9, 2016
Thursday, April 7, 2016
SQLite encryption support on Windows
SQLite Manager seems to be the only tool that supports encrypted SQLite database files on Windows.
Read more
Read more
Saturday, April 2, 2016
Sunday, March 20, 2016
Root NVidia Shield K1 Tablet
# Root NVidia Shield K1
Follow the article for K1 and use the files listed in the article!
## Marshmallow; Nvidia Shield Zone
- [Article: Root K1](http://nvidiashieldzone.com/shield-tablet/shield-tablet-k1/root-shield-tablet-v1-marshmallow-2/)
- [Article: Tutorial: Root Shield Tablet (Marshmallow)](http://nvidiashieldzone.com/shield-tablet/shield-tablet-root/root-shield-tablet-v1-marshmallow/)
******************************
# My Instructions
- Enable Developer Mode and USB Debugging on the device.
- Install drivers
- unlock device
- Enable Developer Mode and USB Debugging on the device.
"adb reboot bootloader" will reboot into fastboot. PC needs to be authorized for access the first time ADB accesses it.
## Install drivers
Find the device in the Device Manager, click Update Drivers, select the folder with the drivers.
After this, the device is visible through "fastboot devices".
## Unlock device
Reboot into fastboot.
"fastboot oem unlock"
Confirm on the device and wait for it to finish. Then choose Continue to boot the device.
## TWRP
Experimental build for Android 6 Marshmallow
http://forum.xda-developers.com/showpost.php?p=64520513&postcount=229
The official builds are for Android 5 Lollipop only! (below)
https://twrp.me/devices/nvidiahshieldtablet.html
Reboot into fastboot.
"fastboot flash recovery twrp.img"
"fastboot boot twrp.img"
## Recovery
Switch off tablet. Wait 20 sec. Now press vol down + power. Now from menu find recovery and press power button. Or if you have root download quick reboot from market.
Dead Android IS the door to recovery. Press "Pwr + Vol Up" to enter
***************************
# Non-TWRP Root
[Article](http://forum.xda-developers.com/shield-tablet/general/how-to-root-nvidia-tablet-android-6-0-t3280671)
Follow the article for K1 and use the files listed in the article!
## Marshmallow; Nvidia Shield Zone
- [Article: Root K1](http://nvidiashieldzone.com/shield-tablet/shield-tablet-k1/root-shield-tablet-v1-marshmallow-2/)
- [Article: Tutorial: Root Shield Tablet (Marshmallow)](http://nvidiashieldzone.com/shield-tablet/shield-tablet-root/root-shield-tablet-v1-marshmallow/)
******************************
# My Instructions
- Enable Developer Mode and USB Debugging on the device.
- Install drivers
- unlock device
- Enable Developer Mode and USB Debugging on the device.
"adb reboot bootloader" will reboot into fastboot. PC needs to be authorized for access the first time ADB accesses it.
## Install drivers
Find the device in the Device Manager, click Update Drivers, select the folder with the drivers.
After this, the device is visible through "fastboot devices".
## Unlock device
Reboot into fastboot.
"fastboot oem unlock"
Confirm on the device and wait for it to finish. Then choose Continue to boot the device.
## TWRP
Experimental build for Android 6 Marshmallow
http://forum.xda-developers.com/showpost.php?p=64520513&postcount=229
The official builds are for Android 5 Lollipop only! (below)
https://twrp.me/devices/nvidiahshieldtablet.html
Reboot into fastboot.
"fastboot flash recovery twrp.img"
"fastboot boot twrp.img"
## Recovery
Switch off tablet. Wait 20 sec. Now press vol down + power. Now from menu find recovery and press power button. Or if you have root download quick reboot from market.
Dead Android IS the door to recovery. Press "Pwr + Vol Up" to enter
***************************
# Non-TWRP Root
[Article](http://forum.xda-developers.com/shield-tablet/general/how-to-root-nvidia-tablet-android-6-0-t3280671)
Friday, March 18, 2016
Publishing Beta as a separate app on Play Store
The article below will help you set up either a Flavour or a Build Type, which can be useful if you decide to publish an unstable (Beta) version of an app as a separate app, instead of using the Beta channel.
I find the separate-app approach to be much more convenient for the testers as it always leaves them a fallback option to the stable app, which is a whole separate app on their device. That way they will never be blocked out of using the app and might be more likely to try out the unstable version and help out with testing.
Build Type is the correct setting for this and it is enough to add the line
Ref: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
I find the separate-app approach to be much more convenient for the testers as it always leaves them a fallback option to the stable app, which is a whole separate app on their device. That way they will never be blocked out of using the app and might be more likely to try out the unstable version and help out with testing.
Build Type is the correct setting for this and it is enough to add the line
applicationIdSuffix ".beta"to the build type definition, which will modify the application id. This is required for publishing the effectively same app to the Play Store.
Ref: http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
Thursday, March 17, 2016
Streaming video to Android device
There are several options for streaming videos to, or rather through, an Android device.
Source: article
VLC Direct
VLC Direct is an Android app that links directly to your VLC player on a PC. Never managed to make this work.
AirStream
AirStream contains two applications: one for PC and one for Android. It will serve files from a PC, making them available on Android. The solution is fairly stable and reliable.Plex Server
This option will use media server on a PC and UPnP client on Android.
- Guide
- Plex server
- BubbleUPnP app for Android
- VLC Player for Android
Source: article
Remove other users' pending changes in TFS
Using "tf /lock" and "tf /undo" will remove other users' locks or pending changes in TFS source control.
Ref: https://msdn.microsoft.com/en-us/library/cc470668.aspx
Ref: https://msdn.microsoft.com/en-us/library/cc470668.aspx
Thursday, March 10, 2016
Examples of Design Patterns
OO Design site has a nice collection of examples for the design patterns, along with the description on when to use them.
Source: link
Source: link
Wednesday, March 9, 2016
Service-like behaviour in a Web Application
Whether the time of (Windows) Service executables is going away and the execution moves completely into the web server (sand-)box remains to be seen. One step in that direction is Hangfire, a library for scheduling tasks running under ASP.Net.
When one can get a "heartbeat" going in the context of a web application then the rest remains relatively easy to accomplish.
When one can get a "heartbeat" going in the context of a web application then the rest remains relatively easy to accomplish.
Thursday, March 3, 2016
Troubleshooting MSDTC
Basically, use DTC Ping to check a few things, like network connectivity, firewall issues, etc.
Source: DTCPing: Troubleshooting MSDTC Connectivity Issues (link)
Source: DTCPing: Troubleshooting MSDTC Connectivity Issues (link)
Tuesday, March 1, 2016
QA Browser Tools
Here's a handy Chrome extension from Microsoft that significantly helps with development and, more particularly, testing of web applications:
Exploratory Testing
Exploratory Testing
Thursday, February 18, 2016
Choosing Vanilla JavaScript in 2016
Interesting post, listing advances in core JavaScript that make some frameworks and add-ons redundant.
Choosing Vanilla JavaScript in 2016
Some key points:
Choosing Vanilla JavaScript in 2016
Some key points:
- check the performance stats at VanillaJS. That's also a good guide on how to get the same thing in plain JS or different frameworks.
- try using document.querySelector and document.querySelectorAll
Wednesday, February 17, 2016
Friday, January 29, 2016
Custom domains on Google App Engine
Here is the new link to the Custom Domain settings for Google App Engine sites:
https://console.cloud.google.com/appengine/settings/domains/add?project=your-project
https://console.cloud.google.com/appengine/settings/domains/add?project=your-project
Saturday, January 23, 2016
Finally got Cortana working
After all the fiddling, I've finally got Cortana working on Windows 10. Yay. :S
Thanks to these instructions, I guess the missing bit was installing the speech files for the selected language. I have to say that I still find it strange that English (US) is considered a completely different language to English (UK) or English (Australia). Balkanization all over the place, it seems.
So, anyway, installing English (Australia) speech files made Cortana finally work with Australia as the selected region and English (Australia) as the default language.
Now let's see what it can do. So far not impressive.
Thanks to these instructions, I guess the missing bit was installing the speech files for the selected language. I have to say that I still find it strange that English (US) is considered a completely different language to English (UK) or English (Australia). Balkanization all over the place, it seems.
So, anyway, installing English (Australia) speech files made Cortana finally work with Australia as the selected region and English (Australia) as the default language.
Now let's see what it can do. So far not impressive.
Tuesday, January 19, 2016
Free Vector Graphics
Here is my list of free vector-based graphics on the Web. In addition, there are Open Source tools for working with them.
Font Icons
Vector Icons
Clip Art
Software:
Wednesday, January 13, 2016
Web Authentication Methods
Web Authentication Methods Explained
- HTTP Basic authentication
- Cookies
- Tokens
- Signatures
- One-Time Passwords
Monday, January 11, 2016
Firefox Restart button
Here's an extension that adds a Restart button to Firefox: Restart Button.
Considering that Firefox instance sometimes gets dumb and does not display the newly-created tabs, this is absolutely necessary. There is also a Restartless Restart extension but that does not seem to work any longer.
Considering that Firefox instance sometimes gets dumb and does not display the newly-created tabs, this is absolutely necessary. There is also a Restartless Restart extension but that does not seem to work any longer.
Friday, January 8, 2016
Sign of things to come - 3D - Project Tango
It seems that this year is shaping to be the year of mobile 3D. There are more 3D-enabled phones coming out and software is catching up with 3D recognition and overlay. Microsoft's HoloLens looks pretty interesting (at least in the pictures) and Google's Project Tango is being developed for mobile devices.
Sources: Bloomberg,
List of 3D-enabled phones, Wikipedia
Sources: Bloomberg,
List of 3D-enabled phones, Wikipedia
Subscribe to:
Posts (Atom)