POST request is in ISO-8859 after High Sierra update - clojure

I make web apps using Clojure and ClojureScript, compiling with Leiningen.
My problem is that after updating macOS to High Sierra, my compiled app works fine in my system, but after copying it to the Linux server, POST parameters go ISO-8859.
For example "pöttyös bögre" to "P?tty?s b?gre". That affects every transaction between client and server of course, email sending, writing to database etc. I clean installed Sierra, and then it worked. Updated it back to High Sierra, doesn't work again on the Linux server. I tried clean installing with case-sensitive APFS, and it still doesn't work.
Does anybody know what would cause this?

SSH sends the locale to the remote. So my problem was that my locale wasn't UTF-8. Setting up the locale resolved my problem.

Related

Flashing firmware Google Enterprise Edition 2

My GEE2 is currently running on version OPM1.190831.007, and I can't find a way to get a more recent version running. I've tried the flashing tool and manual flashing, but both methods came with their own issues. I'll give them below:
Flashing tool: I get either a 'device already in use' connection error or the device is offline. This besides the more common message that the flashing tool has some problems on windows sometimes, and that I should try refreshing the webpage.
Manual flashing: once I have given the adb reboot-bootloader command, the fastboot devices command won't recognize the device (listed as ???????? instead of the device name/number) or it will be offline. As a result, the commands that should be given afterwards according to the Readme file don't work.
I have the adb debugger from the Android Studio SDK platform-tools folder, so I updated the driver software of the GEE2 with the use of that folder initially. Afterwards I tried installing other adb software as well but that didn't help either.
I have also tried a couple of the simpler solutions, as unplugging and plugging, refreshing the site, using another computer, using another internet browser, deinstallation of the driver software, a factory reset of the GEE2, installing less recent firmware instead of the latest. None of these things changed the outcome.
Any suggestions would be highly appreciated!
Firstly, check if you have enabled developer options on EE2.
I had a hard time flashing it on Windows due to driver issues. My Android studio or ADB had no problem deploying apps to EE2, but the fastboot never worked. I ended up flashing it on a Mac using brew installed adb.
I had similar issues with Windows, the driver, and fastboot not working using the flash tool. I was told by support to use a USB 2.0 port. I used a Mac with USB 2.0 to flash it and it was successful.
There's a flaw with the instructions on google glass firmware update - for Windows only, there's a USB driver you need that is glass-specific which isn't mentioned anywhere on the page. I can't even find the page where I found that out right now and I know what I'm looking for. Which isn't very helpful.
The best I can give you is a link to this installer tool might sort out your problem judging this reddit post.
If that doesn't work, use a mac or linux.

With QtCreator, how can I build my project on a remote server I have ssh access to?

I need to build an application on a remote server so it can be run locally, where it will issue commands to a website it is hosting. I'm building this application on my machine in QtCreator, but I would like to streamline testing the application by having it build on the remote server.
What is the best way to go about this?
That first sentence is so long and so confusing... -_-
That said Qt Creator supports remote deploying and debugging but not remote building (as far as I know; please someone correct me if I'm wrong).
The only remote-related thing about the building step is cross-compilation which again is performed locally (using a cross-compiler, specifying the sysroot etc.). Of course if the target platform is the same (architecture and installation wise) as the one you use for development the cross-compilation chaos can be completely omitted.
If you want to build Qt-based application (and not only run it) on the remote platform, you will have to setup the development infrastructure (Qt dev libraries, qmake etc.). However, I would suggest using your local system for the development unless the server provides a very noticeable boost during the building step. It's easier that way and makes sense especially if the application that you are building on the remote will be executed locally.
you have 3 options really:
run the IDE on the remote server and connect using vnc or x2go. This requires a relatively high bandwidth/low latency connection, or the GUI won't be reponsive. This is personally what I do at my work - although we have a dev server set up to mirror prod in our building - so the data connection is great.
sync your files using lsyncd and build via commandline. You code-completion will be based on your local machine, so won't be perfect, and you wont be able to double click compile errors, etc. If you are brave you could maybe set up a qt creator build configuration to do this for you, but includes would still be broken.
use another IDE. NetBeans supports remote builds. I have never personally used this feature, but I've heard that it works ok.

Secure Server Communication from application using C++/libcurl/openssl

I'm developing application in C++ (cross-platform; Windows, Mac and Linux) that needs to communicate securely with servers using https protocol with libcurl (built with winssl/darwinssl/openssl on Windows/Mac/Linux respectively). I've changed a curl option, CURLOPT_SSL_VERIFYPEER from 0 to 1 which should help prevent MitM issues.
This has caused issues that an initial search points to turning that option off, but after digging deeper I found:
Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); from curl docs
and
Get a better/different/newer CA cert bundle! One option is to extract the one a recent Firefox browser uses by running 'make ca-bundle' in the curl build tree root, or possibly download a version that was generated this way for you.
from curl docs
I actually use CURLOPT_CAINFO to the bundle as I had seen some word of issues using CURLOPT_CAPATH on Windows; curl docs. I have downloaded and installed this bundle along with the application on Windows and Mac and I'd like to know if this is the correct way to do it or if there is a better practice.
Initially this caused issues for users of the application running behind some corporate networks or proxy which seemed to get fixed by building libcurl against winssl instead of openssl on Windows; though potentially disguising itself as a firewall issue, still unclear although it seems likely.
Sorry for the length.
Is anything silly about installing the ca-cert-bundle.crt along with the application, and is there anything that should be done differently to communicate securely with the server from this installed application?
A slightly separate, but still very related, issue I have is CURLOPT_CAINFO on Linux giving the error:
error setting certificate verify locations:
CAfile: ../share/my_application/curl-ca-bundle.crt
CApath: none
Though attempting to open the file for reading from within the application does work successfully. Edit: This issue I solved by NOT setting the CURLOPT_CAINFO field on Linux (leaving it blank) and adding the dependency package ca-certificates to the application package. The default path is correctly /etc/ssl/certs/ca-certificates.crt and seems to be working. To me this feels a bit better than installing the bundle with the application.
Edit2: Although solved it appears the ca-certificates package sometimes doesn't install ca-certificates.crt and instead ca-bundle.crt and the locations vary on different distros as this source, happyassassin.net shows that different Linux systems store the CA bundles in different locations. It did not seem to have a clear answer as to HOW to handle this. Should I be using a value in the configuration file that the user can then modify, or any other thoughts on the subject?
Edit3: Some users have pointed out that my name exists in one of the paths curl looks for, I'm not entirely sure how that is possible as the only thing I've specified for curl is where I built openssl/cares libraries...
I realize this is a loaded/multipart question but it is all on the same subject as the title states, I'd appreciate any help.
Thanks.
In my opinion, it is better to use system certificate then package certificates with application (if you are not using some special certs). For the linux it should be easy according to https://serverfault.com/questions/394815/how-to-update-curl-ca-bundle-on-redhat And for windows you can either use winssl or create the file from system https://superuser.com/questions/442793/why-cant-curl-properly-verify-a-certificate-on-windows Configure cURL to use default system cert store
A default libcurl build is setup to attempt to use the "right" CA bundle.
Linux
A libcurl built on Linux will scan and check where the CA store is located on your system and use that. If you install libcurl on a regular Linux distro, it should've been built to use the distro's "typical" CA store.
macOS
If you build libcurl for mac and tell it to use the Secure Transport backend, it will automatically use the macOS CA store. So will the default-installed curl and libcurls that come shipped bundled with macOS from Apple.
Windows
If you build libcurl for Windows to use Schannel (the windows TLS system) it will by default use the Windows CA store.
Other setups
If you deviate from these setups, you basically opt to not use the CA store that comes bundled in the operating system you're using. Then you need to handle and update the CA store yourself.

Android hacking no longer work on XE12 (Settings.apk and Launcher2.apk)

I got my glass around thanksgiving last year. I downloaded Settings.apk and Launcher2.apk from www.glassxe.com. My project needs to communication through Bluetooth data channel. With these two apks, it works fine.
This week, I connected the glass to my PC and it started auto upgrade, after the upgrade (XE12 firmware), the above two apks no longer work. I had to uninstall them.
I am wondering how can I make them work under XE12?
Or how can I downgrade back to early versions of firmware?
BTW, my platform is Win 7, and adb seems working, but fastboot not working after XE12 upgrade.
Thanks in advance,
Xd
It is worth noting that if your application includes the the Settings Intent filter and you have it on your Glass with XE12 it will break the Settings Bundle -- when you tap on Settings no apps will show up and you won't be able to go to the regular settings options such as Wifi, Bluetooth etc. This seems to be new behaviour in XE12 -- previously in XE11 this wasn't a problem.
The solution is to remove the Settings Intent filter from your application and launch your application only from the Voice Trigger method documented here:
https://developers.google.com/glass/develop/gdk/input/voice

How to run Django on Windows and cope with Apache not having a daemon mode?

Evolution of this question
This started as an attempt to find other recommendations for running Django on Linux, accessing SQL Server via Django-PyODBC, and supporting Unicode as competently as in installations running Django on Windows.
After failing to materialize with a good solution for ODBC drivers in Linux that would provide the same level of support for Unicode as the Windows ODBC driver; the question morphed into coping with the negative side-effect of not having an Apache daemon mode in Windows.
The question
If you run Apache+mod_wsgi on Windows, every time you deploy new Django code you are required to restart the Apache server. See Graham's answer for details on why.
How to run a dependable set of applications and services when you might be required to restart Apache, denying service until it completely restarts?
The issue
We use SQL Server 2005 and we need to support unicode characters and certain characters (like smart-quotes) generated in Microsoft Office applications.
Running Django atop SQL Server 2005 requires us to use Django-PyODBC. It works great on Windows/Linux/Mac OS X; but if you require unicode support, you are out of luck on Linux / Mac OS X - the ODBC drivers for SQL Server in Unix are in varied stage of unicode compliance. FreeTDS, the open source driver, works for some characters if you specify a client character encoding of UTF-8 (*); but doesn't support all characters.
In our tests, running Django on Windows 2003 and using the Microsoft ODBC driver allowed us to properly insert/update/select any character in several different languages, and the Microsoft smart characters from Office applications.
But running on Windows means that every time we deploy new code we are required to bounce Apache - which means a few seconds without service.
(*) The only way we managed to get to the point where some characters would be accepted with FreeTDS, frankly, was to add a client charset entry to freetds.conf:
[a_db_server]
host = a_db_server
port = 1433
tds version = 8.0
client charset = UTF-8
In relation to reloading on Windows when using Apache/mod_wsgi, read my response to:
Server software choice for Django live/staging
Might be bad form to accept one's own answer, but it suited our case and it may help others...
First and foremost: we gave up trying to find an ODBC driver that would work properly with PyODBC and support unicode as competently as the Microsoft native ODBC driver. FreeTDS works partially, and some of the commercial drivers out there just didn't cut it in our tests. We considered a ODBC-JDBC bridge, but never really tested it.
We also thought about using an ODBC router, but given the price for a multi-user solution, the potential for more complexity, and the low load scenario for our Django apps; we decided to just stick with running Django on Windows and try to cope with the requirement of restarting the Apache server every time a new version of any of the Django apps is deployed.
What we did to cope with the Apache restart and still provide service availability:
We deployed an Apache server as a proxy/load-balancer to a cluster of (at the moment) two Apache servers running on Windows
On each of the Windows Apache servers in the cluster we have all our Django apps running
When new code must be deployed to the servers we:
Disable one of the servers in the cluster via Apache's balancer-manager interface
Apply the updates and install any new Django apps in the disabled server
Test the modifications in the disabled server
Reenable the the server in the cluster via Apache's balancer-manager interface
Perform the same steps for the second server
As long as one of the servers in the cluster is enabled and running, the applications and services are available to our users - no interruption. At the same time we gained some load-balancing (in our case we really don't need it at this point).
The proxy Apache servers rewrites all the redirects and cookie response headers, so as long as people are accessing the services through the proxy, there are no modifications needed in the Django code whatsoever.