I’ve made available in my personal repository amd64
builds of LyX 2.2.1 for Debian Jesie.
Enjoy!
I’ve made available in my personal repository amd64
builds of LyX 2.2.1 for Debian Jesie.
Enjoy!
OrderNet is a a popular stock trading platform in Israel. OrderNet comes in two versions: The regular version is based on Silverlight and can be used on Linux using Pipelight. The Pro version is a desktop program written in .NET Framework and features better interface. This post walks through the steps needed to get OrderNet Pro running on Debian Jessie using Wine.
I’ve backported LyX 2.2.0-2 from Debian Testing to Jessie. The binaries for amd64
can be found in https://www.guyrutenberg.com/debian/jessie.
You can add my repository by appending the following line to /etc/apt/sources.list
:
deb https://www.guyrutenberg.com/debian/jessie ./
From time to time I build and backport deb
packages. Most of them are for my personal use, but sharing them would be nice. Another advantage for setting up a personal repository over directly installing deb
files is that you can install dependencies from that repository automatically. Especially useful if one source package builds multiple binary packages which depend on one another.
There is a list of programs ways how to setup such personal repository in the Debian wiki. However, I found most ways to be too cumbersome for my limited requirements. The way I’m describing below is probably the simplest and easiest way to get up and running.
First thing is installing dpkg-dev
which provides dpkg-scanpackages
.
sudo apt install dpkg-dev
Next put the deb
files you created in some local repository such as /usr/local/debian
and cd
into it.
# dpkg-scanpackages -m . | gzip -c > Packages.gz
will scan all the *.deb
files in the directory and create an appropriate Packages.gz
file. You need to repeat this step whenever you add new packages to /usr/local/debian
.
Finally to enable the new local repository, add the following line to /etc/apt/sources.list
:
deb [trusted=yes] file:///usr/local/debian ./
The [trusted=yes]
options instruct apt
to treat the packages as authenticated. Alternatively, if you want to share it with others, make sure that your webserver serves the directory and point to it
deb https://www.guyrutenberg.com/debian/jessie ./
(You will need the apt-transport-https
in order to use https repositories).
Don’t forget to apt update
before trying to install packages from the new repository.
The Opus codec provides superior audio quality over codecs such as AAC, MP3 and Vorbis. Android has support for Opus since Android 5.0 (Lollipop). However, when I tried playing Opus files on My LG G4, it wouldn’t recognize the file as a media file at all. It turns out, that the default .opus
extension is not recognized by Android. The workaround is to change the extension to .ogg
. Generally speaking, this is technically correct, as most Opus streams are encapsulated by an Ogg container, however, .opus
is the recommended extension (but apparently not for Android).
Some application rely on Internet Explorer to provide HTML rendering capabilities. Wine implements the same functionality based on a custom version of Mozilla’s Gecko rendering engine (the same engine used in Firefox). In Debian Jessie you have a package called libwine-gecko-2.24
(the version is part of the name) which provides this rendering engine for Wine. However, different versions of Wine require different versions of wine-gecko. The package provided in Debian Jessie, matches the Wine version provided by wine-development
from the main Jessie repository (1.7.29). Unfortunately wine-development from the jessie-backports if of version 1.9.8 and requires wine-gecko of version 2.44 which is not provided by any Debian repository. This will lead to errors like
Could not load wine-gecko. HTML rendering will be disabled.
and blank spaces where HTML content would be rendered in many applications.
The solution would be to manually install the required version of wine-gecko. We start by downloading the MSI binaries provided by Wine
$ wget https://dl.winehq.org/wine/wine-gecko/2.44/wine_gecko-2.44-x86.msi
$ wget https://dl.winehq.org/wine/wine-gecko/2.44/wine_gecko-2.44-x86_64.msi
Now install the required one, based on whether you are using 32bit or 64bit wine environment:
wine-development msiexec /i wine_gecko-2.44-x86.msi
(be sure the setup the correct $WINEPREFIX
if needed).
This fixes both the links to the PDFs and the embeding in the mailbox. Click on the “View Raw” to install.
// ==UserScript== | |
// @name Bank Hapoalim | |
// @description Workaround bugs in Bank Hapoalim website to display pdf messages. | |
// @author Guy Rutenberg | |
// @namespace http://www.guyrutenberg.com | |
// @include https://login.bankhapoalim.co.il/portalserver/mailInbox#/folders/0 | |
// @include https://login.bankhapoalim.co.il/ng1-portals/rb/he/mails#/folders/0 | |
// @run-at document-idle | |
// @version 1.1 | |
// @grant none | |
// ==/UserScript== | |
// | |
// @include url should be the url of the inner iframe containing the list of mails. | |
var MutationObserver = window.MutationObserver; | |
var myObserver = new MutationObserver (mutationHandler); | |
var obsConfig = { | |
childList: true, attributes: false, | |
subtree: true, | |
}; | |
var target = document.getElementsByTagName('mail-manager')[0]; | |
myObserver.observe (target, obsConfig); | |
function mutationHandler (mutationRecords) { | |
console.log('here'); | |
mutationRecords.forEach ( function (mutation) { | |
for (var item of mutation.addedNodes) { | |
if (item.tagName == 'PDF-VIEWER') { | |
var url = 'https://login.bankhapoalim.co.il' + item.getAttribute('pdf-show'); | |
iframe = item.querySelector('iframe'); | |
iframe.src = url; | |
} | |
} | |
}); | |
} |
JPEG is a lossy format, and naive rotation results in a loss of quality. JPEG does allow some lossless operations, such as rotation by 90 degrees and flipping, on the basic blocks (MCUs) that compromise the image. It also allows re-arranging those blocks. Using this lossless operation, it is possible to preform a lossless JPEG rotation. To do so, the rotated image mus meet some basic criteria like having it size a multiple of the MCU size (usually 16×16).
Not all programs preform a lossless JPEG rotation, so it is useful to be aware which does. I check a couple of commonly used program to see if they indeed preform lossless rotation. The testing procedure was:
compare -metric ae
) the results.Gnome’s Image Viewer 3.14.1 is lossless
Digikam (4.4.0) is lossless, however rotating with Digikam’s Image Editor is lossy.
Shotwell (0.20.1) does lossy rotation.
Update: The new locale was committed to glibc
and should be part of glibc-2.24
.
Most Israelis are literate in English, and for a large percentage of them, English is also the preferred language when it comes to computers. They prefer English, as it solves right-to-left issues and general inconsistencies (it might be annoying when some programs are translated ands some not). The downside is, that currently, the existing English locales are not suitable for Israel, as there are cultural differences:
So, up until now users had to choose locales such as en_US or en_GB and compromise on some stuff. To solve this issue, and create a truly suitable English locale for Israel, I wrote a localedef
file for the en_IL locale.
To install the new locale, copy the en_IL
file from the gist below and place under /usr/share/i18n/locales/en_IL
(no extension). Next
# echo "en_IL.UTF-8 UTF-8" >> /usr/local/share/i18n/SUPPORTED
Now, complete the installation by running dpkg-reconfigure locales
and enable en_IL.UTF-8
from the list, and set it as the default locale.
comment_char % | |
escape_char / | |
% This file is part of the GNU C Library and contains locale data. | |
% The Free Software Foundation does not claim any copyright interest | |
% in the locale data contained in this file. The foregoing does not | |
% affect the license of the GNU C Library as a whole. It does not | |
% exempt you from the conditions of the license if your use would | |
% otherwise be governed by that license. | |
% Locale for English locale in Israel | |
% Contributed by Guy Rutenberg <guyrutenberg@gmail.com>, 2016 | |
LC_IDENTIFICATION | |
title "English locale for Israel" | |
source "Free Software Foundation, Inc." | |
address "http:////www.gnu.org//software//libc//" | |
contact "" | |
email "bug-glibc-locales@gnu.org" | |
tel "" | |
fax "" | |
language "English" | |
territory "Israel" | |
revision "1.1" | |
date "2016-04-19" | |
% | |
category "i18n:2012";LC_IDENTIFICATION | |
category "i18n:2012";LC_CTYPE | |
category "i18n:2012";LC_COLLATE | |
category "i18n:2012";LC_TIME | |
category "i18n:2012";LC_NUMERIC | |
category "i18n:2012";LC_MONETARY | |
category "i18n:2012";LC_MESSAGES | |
category "i18n:2012";LC_PAPER | |
category "i18n:2012";LC_NAME | |
category "i18n:2012";LC_ADDRESS | |
category "i18n:2012";LC_TELEPHONE | |
category "i18n:2012";LC_MEASUREMENT | |
END LC_IDENTIFICATION | |
LC_CTYPE | |
copy "en_GB" | |
END LC_CTYPE | |
LC_COLLATE | |
copy "en_GB" | |
END LC_COLLATE | |
LC_MONETARY | |
copy "he_IL" | |
END LC_MONETARY | |
LC_NUMERIC | |
copy "he_IL" | |
END LC_NUMERIC | |
LC_TIME | |
abday "<U0053><U0075><U006E>";"<U004D><U006F><U006E>";/ | |
"<U0054><U0075><U0065>";"<U0057><U0065><U0064>";/ | |
"<U0054><U0068><U0075>";"<U0046><U0072><U0069>";/ | |
"<U0053><U0061><U0074>" | |
day "<U0053><U0075><U006E><U0064><U0061><U0079>";/ | |
"<U004D><U006F><U006E><U0064><U0061><U0079>";/ | |
"<U0054><U0075><U0065><U0073><U0064><U0061><U0079>";/ | |
"<U0057><U0065><U0064><U006E><U0065><U0073><U0064><U0061><U0079>";/ | |
"<U0054><U0068><U0075><U0072><U0073><U0064><U0061><U0079>";/ | |
"<U0046><U0072><U0069><U0064><U0061><U0079>";/ | |
"<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>" | |
abmon "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/ | |
"<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/ | |
"<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/ | |
"<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/ | |
"<U0053><U0065><U0070>";"<U004F><U0063><U0074>";/ | |
"<U004E><U006F><U0076>";"<U0044><U0065><U0063>" | |
mon "<U004A><U0061><U006E><U0075><U0061><U0072><U0079>";/ | |
"<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0079>";/ | |
"<U004D><U0061><U0072><U0063><U0068>";/ | |
"<U0041><U0070><U0072><U0069><U006C>";/ | |
"<U004D><U0061><U0079>";/ | |
"<U004A><U0075><U006E><U0065>";/ | |
"<U004A><U0075><U006C><U0079>";/ | |
"<U0041><U0075><U0067><U0075><U0073><U0074>";/ | |
"<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/ | |
"<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/ | |
"<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/ | |
"<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>" | |
d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>" | |
d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>" | |
t_fmt "<U0025><U0054>" | |
am_pm "";"" % 24-hour clock is used | |
t_fmt_ampm "" | |
date_fmt "<U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/ | |
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/ | |
<U0025><U005A><U0020><U0025><U0059>" | |
week 7;19971130;1 | |
% In Israel Sunday is a workday. | |
first_workday 1 | |
END LC_TIME | |
LC_MESSAGES | |
copy "en_US" | |
END LC_MESSAGES | |
LC_PAPER | |
copy "he_IL" | |
END LC_PAPER | |
LC_NAME | |
copy "en_US" | |
END LC_NAME | |
LC_ADDRESS | |
postal_fmt "<U0025><U0066><U0025><U004E><U0025><U0061><U0025><U004E>/ | |
<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/ | |
<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/ | |
<U004E><U0025><U007A><U0020><U0025><U0054><U0025>/ | |
<U004E><U0025><U0063><U0025><U004E>" | |
country_name "<U0049><U0073><U0072><U0061><U0065><U006C>" | |
country_post "<U0049><U0053><U0052>" | |
country_ab2 "<U0049><U004C>" | |
country_ab3 "<U0049><U0053><U0052>" | |
country_num 376 | |
country_car "<U0049><U004C>" | |
lang_name "<U0045><U006E><U0067><U006C><U0069><U0073><U0068>" | |
lang_ab "<U0065><U006E>" | |
lang_term "<U0065><U006E><U0067>" | |
lang_lib "<U0065><U006E><U0067>" | |
END LC_ADDRESS | |
LC_TELEPHONE | |
copy "he_IL" | |
END LC_TELEPHONE | |
LC_MEASUREMENT | |
copy "he_IL" | |
END LC_MEASUREMENT |
Server name indication (SNI) allows you serve multiple sites with different TLS/SSL certificates using a single IP address. Nginx has support for SNI for quite some time and actually setting it up is easy, simply add server
entries for the corresponding sites. There is one caveat, the server_name
entry must come before the server_certificate
in order for SNI to be activated:
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
...
}
server {
listen 443 ssl;
server_name www.example.org;
ssl_certificate www.example.org.crt;
...
}
is good, but
server {
listen 443 ssl;
ssl_certificate www.example.com.crt;
server_name www.example.com;
...
}
server {
listen 443 ssl;
ssl_certificate www.example.org.crt;
server_name www.example.org;
...
}
will serve the wrong certificate for www.example.org
.