0 Comments

By default any calls done by Qt over HTTPS will fail. This is because the OpenSSL it relies on is not included into the distribution that was installed. All you have to do, to make it work, is to download OpenSSL 1.0.xxx library for Windows from here and install to any folder (for example: “C:\OpenSSL”). The tiny 3MB package is enough. Then copy the libeay32.dll and libssl32.dll into developed applications folder (the output one) and it will be automatically picked up during startup.

There is no need to mess anything with Qt at all (and for sure no need to rebuild Qt framework!).

It was also described on StackOverflow, too.

0 Comments


Latest version of QtCreator out of the box installs only Qt 5.0+. That’s rather obvious, but what if someone wants to play a bit with previous edition? Yeap v4.8, the one that is almost 4 years old! It is still doable and I will shortly show the way. Move to TL;DR if you are not interested in the background story.


You could ask why I wanted to do that in the first place, so here is the reason. I am still using a BlackBerry smartphone with BB10 OS onboard. And it’s much easier to develop (and test) a “meaty part” for a native app using the desktop edition of Qt in QtCreator and then only bind it with the UI using Momentics IDE than write everything there and deploy all the time on the device. This is much slower and tiring process, especially when the BB10 device emulator doesn’t work on Windows 10 with Hyper-V enabled…

Let me stop you here, before you start complaining about it. Although the BB10 platform itself is dead and abandoned, the same code can be used to develop Android apps (and of course UWP etc…), so not everything seems to be the waste of time. Download the NDK using Android Studio, use the MaintenanceTool.exe (from Qt installation folder) to add required architecture crosscompilers support and configure the paths, kits and deployment targets in QtCreator with this short guide.

Really, after all you will be much happier person, that Qt is the framework that binds all platforms together.


TL;DR

So how to add Qt 4.8.6 support?

1. First and foremost – Qt installation is required! You can obtain the free version for open-source projects from here. Select the options that suits best and simply install it. I used “C:\Qt” as destination path.

2. From Qt archives download the Qt 4.8.6 installer. I am not going to install VS2008 nor VS2010 on my machines anymore, so I went for MinGW-based version. I recommend using “C:\Qt\4.8.6” as the destination path, as it will be next to 5.10.0 version and will also simplify further configuration.

3. Matching MinGW compiler can be downloaded from here (ended at location: “C:\mingw32”)

4. Launch QtCreator and open “Tools –> Options”. Now we need to define locations for all the compilers, debuggers etc.

5.  Add new Qt Version. Use the ‘Add…’ button on the right and navigate for qmake.exe in 4.8.6 installation folder.

qt_4.8.6_qmake

6. On “Compilers” tab add new MinGW C compiler (gcc.exe).

c_compiler

7. Then add MinGW C++ compiler (g++.exe).

cpp_compiler

8. On “Debuggers” tab add appropriate GDB from MinGW folder.

gdb

9. Finally on “Kits” tab bind all the tools added in steps above.

mingw_qt_4.8.6_kit

10. Voilà. Now the newly created kit can be using to build future projects.


Supplement

It might happen, that the application won’t start. It’s mostly because there are some DLLs the output executable depends on (like: QtCore4.dll, QtNetwork4.dll, libgcc_s_dw2-1.dll, libstdc++-6.dll, libwinpthread-1.dll or their debug editions). The easiest way is to copy them from Qt 4.8.6 installation directory into the debug-build folder (i.e.: <project>/../build-<kit>-<platform>/debug) manually, setup it up as a post-build step or make the DLLs generally visible by adding Qt 4.8.6/bin folder into PATH environment variable.

0 Comments

Recently I had some problems connecting with DataGrip to my Microsoft SQL Server 2012 instance provided as part of purchased web hosting plan.

By some reason my connection was always rejected with following error message:

The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target".

Microsoft’s documentation (available here) turned out to be very helpful. According to it, the initialization is always encrypted with JBDC and I actually should focus on encrypt and trustServerCertificate parameters, setting both to ‘true’. In this configuration client-side (my tool), was expecting SSL traffic and had disabled any checks done over the certificate itself.


Partial success, for now the error message got changed to:

The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Certificates do not conform to algorithm constraints".

This lead to a conclusion that the certificate is invalid in more ways. Little help from stackoverflow.com revealed it might be so old that the latest Java 8 OpenJDK had put it on blacklist due to weaknesses and vulnerabilities of used MD5 signatures. Brutal and effective patch is then restored it back and whitelist ;-)

Edit file: %ProgramFiles%\JetBrains\DataGrip 2017.1.5\jre64\lib\security\java.security

and remove MD5 and MD5withRSA

from those two variables: jdk.certpath.disabledAlgorithms and jdk.tls.disabledAlgorithms.


Now, connection succeeded and we are ready to play with the database.


You are right. At this point I should stop and let them know about the issue and ask about certificate upgrade. Thanks.

0 Comments

It’s been quite a while since I upgraded my machine for daily development. Till four months ago I was still using my 2011’ MacBook Pro with some additional upgrades done down the line (described them here and here). Nevertheless it was more often seen it became older and older and somehow the speed and work comfort was insufficient anymore.  

Once decision was made, for the first time in my life I wanted to buy my next laptop wisely. So I wrote requirements!:

  1. it should be small – 13’’ would be preferable, but 15’’ should go fine too
  2. it should have some brand new processor and 32GB RAM or more
  3. display should support al least FullHD on IPS matrix; 4k resolution is probably unnecessary for 13’’
  4. it should allow to plug-in 2 external monitors simultaneously
  5. must have 1Gbit Ethernet socket (as there is no WiFi inside an office due to security reasons)
  6. should support 2 SSD drives, at least one must be PCIex NVMe
  7. good secondary graphic card will be a huge advantage (as the MacBook had only the build-in Intel HD Graphics 3000 – slow as a 3-wheel kid bike)
  8. doesn’t need DVD drive
  9. should support Windows 10 Pro x64
  10. BT 4.0, TPM module, SD-card reader will be an advantage
  11. not too heavy


And then started looking around for anything matching my wishes. Unfortunately, and I cried about it a lot, Apple was out almost immediately. Since I wanted to max the spec on the day one and never care about an upgrade in the future, MacBooks turned out to be extremely expensive. 2 sometimes even 3 times more than the competition with similar components. That is insane. I like them, but I am not such a fan boy.

Also Lenovo jumped out from the competition, but mostly by my personal preferences. Few years back I had two business editions of T51 and I was using them happy until both died almost at the same time, few months after warranty period. I don’t want to say anything bad about Lenovo’s quality as they were really good hardware. It just kept worrying me at the back of my head.


My final choice became: MSI GE62VR Apache Pro i7-7700HQ/32GB/1TB GTX1060 with Samsung 512GB 960 Pro M.2 2280 NVMe as the main drive. After those four months of usage I am really satisfied with this laptop.


Pros:

  • it’s fast (~9 seconds for cold boot to be logged in in Windows, including PIN typing)
  • the quality of colors of the build-in display in really impressive
  • supports 3 displays simultaneously (2 externals and the build-in), that gives lots of space for developer
  • Steelseries keyboard, which is stunning with key reprogramming (changed Pause/Break into Delete) and customizable colors
  • touchpad can be disabled with a shortcut (Fn+F3)
  • it has GTX 1060 and let play newest games with really good quality and framerate
  • is VR-ready


Cons:

  • it almost can’t work without power supply (1.5h if doing only presentation with only HDMI projector attached; when Visual Studio or similar IDE is running it goes down to less than 1h)
  • the given HDD is extremely noisy, I mean it!
  • playing newest games on ultra might make the center of keyboard really hot (65C or more)
  • chassis bottom is plastic not aluminum


I hope you find it useful.

1 Comments

I really like development in Visual Studio even if I have a feature to implement for other platforms. And anytime I can I try to continue this experience. Period.

This time I had a pleasure to wrap several HTTPS calls using libcurl. But how to make it run on my x64 Windows machine? There is some info on StackOverflow.com, what can be moved to VS2017 in following steps:

  1. Start VS2017 console: "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
  2. Download the curl-7.53.1.zip source-code and unzip it
  3. enter “winbuild” folder
  4. compile with Windows SSL build-in support: nmake /f Makefile.vc mode=static VC=14 ENABLE_IPV6=no MACHINE=AMD64(optionally mode can be set as ‘dll’ to have later one more DLL do deal with in the project)
  5. grab the outcomes from “/builds/libcurl-vc14-AMD64-release-static-sspi-winssl” folder
  6. setup new project’s ‘include’ and ‘lib’ folder (put libcurl_a.lib or libcurl.lib into references)
  7. and remember to take a look at samples!

Thanks!