Russ Allbery: Review: Sector General
| Series: | Sector General #5 |
| Publisher: | Orb |
| Copyright: | 1983 |
| Printing: | 2002 |
| ISBN: | 0-312-87770-6 |
| Format: | Trade paperback |
| Pages: | 187 |
| Series: | Sector General #5 |
| Publisher: | Orb |
| Copyright: | 1983 |
| Printing: | 2002 |
| ISBN: | 0-312-87770-6 |
| Format: | Trade paperback |
| Pages: | 187 |
In this blog post, I ve described what started as simple migration of WordPress blog to AWS, ended up as automation project consisting of publishing multiple Ansible roles deploying and running multiple Docker images.
If you re not interested in reading about my entire journey, cognition gains and how this process came to be, please skim down to Birth of: containerized-wordpress-project (TL;DR) section.
Migrating WordPress blog to AWS (EC2, Lightsail?)
Since I ve been sold on Amazon s AWS idea of cloud computing services for couple of years now. I ve wanted, and been trying to migrate this (WordPress) blog to AWS, but somehow it never worked out.
Moving it to EC2 instance, with its own ELB volumes, AMI, EIP, Security Group it just seemed as an overkill.
When AWS Lightsail was first released, it seemed that was an answer to all my problems.
But it wasn t, disregarding its bit restrictive/dumbed down versions of original features. Living in Amsterdam, my main problem with it was that it was only available in a single US region.
Regardless, I thought it had everything I needed for WordPress site, and as a new service, it had great potential.
Its regional limitations were also good in a sense that they made me realize one important thing. And that s once I migrate my blog to AWS, I want to be able to seamlessly move/migrate it across different EC2 s and different regions once they were available.
If done properly, it meant I could even have it moved across different clouds (I m talking to you Google Cloud).
P.S: AWS Lightsail is now available in couple of different regions across Europe. Rollout which was almost smoothless.
Fundamental problem of every migration is migrationBirth of: containerized-wordpress-project (TL;DR)
After a lot of work, end result is project which allows you to automagically deploy & run containerized WordPress instance which consists of 3 separate containers running:
Once run, containerized-wordpress playbook will guide you through interactive setup of all 3 containers, after which it will run all Ansible roles created for this project. End result is that host you have never even SSH-ed to will be fully configured and running containerized WordPress instace out of box.
Most importantly, this whole process will be completed in <= 5 minutes and doesn t require any Docker or Ansible knowledge!
containerized-wordpress demo
Console output of running containerized-wordpress Ansible Playbook:
Accessing WordPress instance created from containerized-wordpress Ansible Playbook:
Did I end up migrating to AWS in the end?
You bet. Thanks to efforts made in containerized-wordpress-project, I m happy to report my whole WordPress migration to AWS was completed in matter of minutes and that this blog is now running on Docker and on AWS!
I hope this same project will help you take a leap in your migration.
Happy hacking!
I now have an XMPP setup which has all the features of the recent fancy chat systems, and on top of that it runs, client and server, on Free Software, which can be audited, it is federated and I can self-host my own server in my own VPS if I want to, with packages supported in Debian.
prosodyctl adduser alice@example.orgc2s_require_encryption = true
s2s_secure_auth = trues2s_insecure_domains = "gmail.com" VirtualHost "chat.example.org"
enabled = true
ssl =
key = "/etc/ssl/private/example.org-key.pem";
certificate = "/etc/ssl/public/example.org.pem";
Component "conference.chat.example.org" "muc"
restrict_room_creation = "local"Component "upload.chat.example.org" "http_upload""something";
The lava documentation has various example test scripts e.g. https://validation.linaro.org/static/docs/v2/examples/test-jobs/qemu-kernel-standard-sid.yaml these have no licence information, we've adapted them for a Linux Foundation project, what licence should apply to these files? Robert MarshallThose are our own examples, contributed as part of the documentation and covered by the AGPL like the rest of the documentation and the software which it documents, so I replied with the same. However, what about all the other submissions received by the service?
metadata:
licence.text: http://mysite/lava/git/COPYING
licence.name: BSD 3 clause
PSA: Research in the domain of Ayurveda
http://www.patanjaliresearchfoundation.com/patanjali/
I am so glad to see this initiative taken by the Patanjali group. This is a great stepping stone in the health and wellness domain.
So far, Allopathy has been blunt in discarding alternate medicine practices, without much solid justification. The only, repetitive, response I've heard is "lack of research". This initiative definitely is a great step in that regard.
Ayurveda (Ancient Hindu art of healing) has a huge potential to touch lives. For the Indian sub-continent, this has the potential of a blessing.
The Prime Minister of India himself inaugurated the research centre.
Within the next three years, more than seven billion people and businesses will be connected to the Internet. During this time of dramatic increases in access to the Internet, networks have seen an interesting proliferation of systems for digital identity management (i.e. our SPID in Italy). But what is really meant by digital identity ? All these systems are implemented in order to have the utmost certainty that the data entered by the subscriber (address, name, birth, telephone, email, etc.) is directly coincident with that of the physical person. In other words, data are certified to be identical to those of the user; there is a perfect overlap between the digital page and the authentic user certificate: an idem , that is, an identity.
This identity is our personal records reflected on the net, nothing more than that. Obviously, this data needs to be appropriately protected from malicious attacks by means of strict privacy rules, as it contains so-called sensitive information, but this data itself is not sufficiently interesting for the commercial market, except for statistical purposes on homogeneous population groups. What may be a real goldmine for the web company is another type of information: user s ipseity. It is important to immediately remove the strong semantic ambiguity that weighs on the notion of identity. There are two distinct meanings <Read More [by Fabio Marzocca]>
Recently we had a WTF moment at a customer of mine which is worth sharing.
In an automated deployment procedure we re installing Debian systems and setting up MySQL HA/Scalability. Installation of the first node works fine, but during installation of the second node something weird is going on. Even though the deployment procedure reported that everything went fine: it wasn t fine at all. After bisecting to the relevant command lines where it s going wrong we identified that the failure is happening between two ssh/scp commands, which are invoked inside a chroot through a shell wrapper. The ssh command caused a wrong exit code showing up: instead of bailing out with an error (we re running under set -e ) it returned with exit code 0 and the deployment procedure continued, even though there was a fatal error. Initially we triggered the bug when two ssh/scp command lines close to each other were executed, but I managed to find a minimal example for demonstration purposes:
# cat ssh_wrapper chroot << "EOF" / /bin/bash ssh root@localhost hostname >/dev/null exit 1 EOF echo "return code = $?"What we d expect is the following behavior, receive exit code 1 from the last command line in the chroot wrapper:
# ./ssh_wrapper return code = 1But what we actually get is exit code 0:
# ./ssh_wrapper return code = 0Uhm?! So what s going wrong and what s the fix? Let s find out what s causing the problem:
# cat ssh_wrapper chroot << "EOF" / /bin/bash ssh root@localhost command_does_not_exist >/dev/null 2>&1 exit "$?" EOF echo "return code = $?" # ./ssh_wrapper return code = 127Ok, so if we invoke it with a binary that does not exist we properly get exit code 127, as expected.
# cat ssh_wrapper chroot << "EOF" / /bin/sh ssh root@localhost hostname >/dev/null exit 1 EOF echo "return code = $?" # ./ssh_wrapper return code = 1Oh, but that works as expected!? When looking at this behavior I had the feeling that something is going wrong with file descriptors. So what about wrapping the ssh command line within different tools? No luck with stdbuf -i0 -o0 -e0 ssh root@localhost hostname , nor with script -c ssh root@localhost hostname /dev/null and also not with socat EXEC: ssh root@localhost hostname STDIO . But it works under unbuffer(1) from the expect package:
# cat ssh_wrapper chroot << "EOF" / /bin/bash unbuffer ssh root@localhost hostname >/dev/null exit 1 EOF echo "return code = $?" # ./ssh_wrapper return code = 1So my bet on something with the file descriptor handling was right. Going through the ssh manpage, what about using ssh s -n option to prevent reading from standard input (stdin)?
# cat ssh_wrapper chroot << "EOF" / /bin/bash ssh -n root@localhost hostname >/dev/null exit 1 EOF echo "return code = $?" # ./ssh_wrapper return code = 1Bingo! Quoting ssh(1):
-n Redirects stdin from /dev/null (actually, prevents reading from stdin).
This must be used when ssh is run in the background. A common trick is
to use this to run X11 programs on a remote machine. For example,
ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi,
and the X11 connection will be automatically forwarded over an encrypted
channel. The ssh program will be put in the background. (This does not work
if ssh needs to ask for a password or passphrase; see also the -f option.)
Let s execute the scripts through strace -ff -s500 ./ssh_wrapper to see what s going in more detail.dup(0) = 4 [...] read(4, "exit 1\n", 16384) = 7while in the strace run with ssh s -n option being present there s no file descriptor duplication but only:
open("/dev/null", O_RDONLY) = 4
This matches ssh.c s ssh_session2_open function (where stdin_null_flag corresponds to ssh s -n option):
if (stdin_null_flag)
in = open(_PATH_DEVNULL, O_RDONLY);
else
in = dup(STDIN_FILENO);
This behavior can also be simulated if we explicitly read from /dev/null, and this indeed works as well:
# cat ssh_wrapper chroot << "EOF" / /bin/bash ssh root@localhost hostname >/dev/null </dev/null exit 1 EOF echo "return code = $?" # ./ssh_wrapper return code = 1The underlying problem is that both bash and ssh are consuming from stdin. This can be verified via:
# cat ssh_wrapper chroot << "EOF" / /bin/bash echo "Inner: pre" while read line; do echo "Eat: $line" ; done echo "Inner: post" exit 3 EOF echo "Outer: exit code = $?" # ./ssh_wrapper Inner: pre Eat: echo "Inner: post" Eat: exit 3 Outer: exit code = 0This behavior applies to bash, ksh, mksh, posh and zsh. Only dash doesn t show this behavior.
# cat stdin-test-cmp #!/bin/sh TEST_SH=bash strace -v -s500 -ff ./stdin-test 2>&1 tee stdin-test-bash.out TEST_SH=dash strace -v -s500 -ff ./stdin-test 2>&1 tee stdin-test-dash.out # cat stdin-test #!/bin/sh : $ TEST_SH:=dash $TEST_SH <<"EOF" echo "Inner: pre" while read line; do echo "Eat: $line"; done echo "Inner: post" exit 3 EOF echo "Outer: exit code = $?"When executing ./stdin-test-cmp and comparing the generated files stdin-test-bash.out and stdin-test-dash.out you ll notice that dash consumes all stdin in one single go (a single read(0, ) ), instead of character-by-character as specified by POSIX and implemented by bash, ksh, mksh, posh and zsh. See stdin-test-bash.out on the left side and stdin-test-dash.out on the right side in this screenshot:
So when ssh tries to read from stdin there s nothing there anymore.
Quoting POSIX s sh section:
When the shell is using standard input and it invokes a command that also uses standard input, the shell shall ensure that the standard input file pointer points directly after the command it has read when the command begins execution. It shall not read ahead in such a manner that any characters intended to be read by the invoked command are consumed by the shell (whether interpreted by the shell or not) or that characters that are not read by the invoked command are not seen by the shell. When the command expecting to read standard input is started asynchronously by an interactive shell, it is unspecified whether characters are read by the command or interpreted by the shell. If the standard input to sh is a FIFO or terminal device and is set to non-blocking reads, then sh shall enable blocking reads on standard input. This shall remain in effect when the command completes.So while we learned that both bash and ssh are consuming from stdin and this needs to prevented by either using ssh s -n or explicitly specifying stdin, we also noticed that dash s behavior is different from all the other main shells and could be considered a bug (which we reported as #862907). Lessons learned:
An open source approach to food
An interesting aspect of this project is the promise of an open source approach. The project provides hardware plans, a a video of the build process, source code and the promise of sharing climate recipes (scripts) to replicate the climates of different regions, helping ensure it is always the season for your favour fruit or vegetable.
Do we need it?
Some people have commented on the cost of equipment and electricity. Carsten Agger recently blogged about permaculture as a cleaner alternative. While there are many places where people can take that approach, there are also many overpopulated regions and cities where it is not feasible. Some countries, like Japan, have an enormous population and previously productive farmland contaminated by industry, such as the Fukushima region. Growing our own food also has the potential to reduce food waste, as individual families and communities can grow what they need.
Whether it is essential or not, the food computer project also provides a powerful platform to educate people about food and climate issues and an exciting opportunity to take the free and open source philosophy into many more places in our local communities. The Zurich Meetup group has already received expressions of interest from a diverse group including professionals, researchers, students, hackers, sustainability activists and free software developers.
Next steps
People who want to form a group in their own region can look in the forum topic "Where are you building your Food Computer?" to find out if anybody has already expressed interest.
Which patterns from the free software world can help more people build more food computers? I've already suggested using Debian's live-wrapper to distribute a runnable ISO image that can boot from a USB stick, can you suggest other solutions like this?
Can you think of any free software events where you would like to see a talk or exhibit about this project? Please suggest them on the OpenAg forum.
There are many interesting resources about the food crisis, an interesting starting point is watching the documentary Food, Inc.
If you are in Switzerland, please consider attending the meeting on at 6:30pm on 20 June 2017 at ETH (Centre/Zentrum), Zurich.
One final thing to contemplate: if you are not hacking your own food supply, who is?
Weblate 2.14 has been released today slightly ahead of the schedule. There are quite a lot of security improvements based on reports we got from HackerOne program, API extensions and other minor improvements.
Full list of changes:
demo account using demo password or register your own user. Weblate is also being used on https://hosted.weblate.org/ as official translating service for phpMyAdmin, OsmAnd, Turris, FreedomBox, Weblate itself and many other projects.
Should you be looking for hosting of translations for your project, I'm happy to host them for you or help with setting it up on your infrastructure.
Further development of Weblate would not be possible without people providing donations, thanks to everybody who have helped so far! The roadmap for next release is just being prepared, you can influence this by expressing support for individual issues either by comments or by providing bounty for them.
Very excited about the next few weeks which will cover a number of R conferences, workshops or classes with talks, mostly around Rcpp and one notable exception:
drat: A Case Study with Hurricane Exposure Data, accepted presentation, joint with Brooke Anderson
A laptop that was installed using the default Ubuntu 16.10 (xenial)
full-disk encryption
option stopped booting after receiving a
kernel update somewhere on the way to Ubuntu 17.04 (zesty).
After showing the boot screen for about 30 seconds, a busybox shell pops up:
BusyBox v.1.21.1 (Ubuntu 1:1.21.1-1ubuntu1) built-in shell (ash)
Enter 'help' for list of built-in commands.
(initramfs)
Typing exit will display more information about the failure before
bringing us back to the same busybox shell:
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/ubuntu--vg-root does not exist. Dropping to a shell!
BusyBox v.1.21.1 (Ubuntu 1:1.21.1-1ubuntu1) built-in shell (ash)
Enter 'help' for list of built-in commands.
(initramfs)
which now complains that the /dev/mapper/ubuntu--vg-root root partition
(which uses
LUKS and
LVM) cannot be found.
There is some comprehensive advice out there
but it didn't quite work for me. This is how I ended up resolving the problem.
dd if=ubuntu.iso of=/dev/sdc1
option key during boot on Apple hardware).
/dev/sda1: EFI partition/dev/sda2: unencrypted boot partition/dev/sda3: encrypted LVM partitioncryptsetup luksOpen /dev/sda3 sda3_crypt
vgchange -ay
mount /dev/mapper/ubuntu--vg-root /mnt
mount /dev/sda2 /mnt/boot
mount -t proc proc /mnt/proc
mount -o bind /dev /mnt/dev
Note:
cryptsetup luksOpen, you must use the same name as the one
that is in /etc/crypttab on the root parition (sda3_crypt in this
example)./proc and /dev) for
the initramfs scripts to do all of their work. If you see errors or
warnings, you must resolve them.chroot /mnt
and make sure that the lvm2
package is installed:
apt install lvm2
before regenerating the initramfs for all of the installed kernels:
update-initramfs -c -k all
SUCCESS.pdf.SUCCESS.pdf.SUCCESS.pdf.cats in your user directory.to do in your user directory.cats folder to the to do folder.cats folder.unicorns in your personal directory.unicorns in order to
find it again in a few weeks.vlc package.vlc package.
Alternatively, here is the spreadsheet that was
used to create this picture, with added text to avoid relying on
colors only.
Most tasks were accomplished with little or no difficulty so we will
now focus on the problematic parts.
What were the challenges?
The heat map shows several "hot" rows, that we will now be looking at
in more details.
Mission A.3 Create a bookmark in Nautilus
Most testers right-clicked the folder first, and eventually found they
could simply drag'n'drop to the bookmarks location in the sidebar.
One tester thought that he could select a folder, click the hamburger
icon, and from there use the "Bookmark this folder" menu item.
However, this menu action only works on the folder one has entered,
not on the selected one.
Mission B.1 Install and remove a package
Here we faced a number of issues caused by the fact that Debian Live
images don't include package indices (with good reason), so no package
manager can list available software.
Everyone managed to start a graphical package manager via the Overview
(or via the CLI or Alt-F2 for a couple power users).
Some testers tried to use GNOME Software, which listed only already
installed packages (Debian bug #862560) and provided no way we could
find to refresh the package indices. That's arguably a bug in Debian
Live, but still: GNOME Software might display some useful information
when it detects this unusual situation.
We won't list here all the obstacles that were met in Synaptic:
it's no news its usability is rather sub-optimal and better
alternatives (such as GNOME Software) are in the works.
Mission C.2 Tweak temporary files management
The mission was poorly phrased: some observers had to clarify that it
was specifically about GNOME, and not generic Linux system
administration: some power-users were already searching the web for
command-line tools to address the task at hand.
Even with this clarification, no tester would have succeeded without
being told they were allowed to use the web with a search query
including the word "GNOME", or use the GNOME help or the Overview.
Yet eventually all testers succeeded.
It's interesting to note that regular GNOME users had the same problem
as others: they did not try searching "temporary" in the Overview and did
not look-up the GNOME Help until they were suggested to do so.
Mission C.3 Change the default video player
One tester configured one single video file format to be opened by
default with VLC, via right-click in Nautilus Open with etc.
He believed this would be enough to make VLC the default video
player, missing the subtle difference between "default video player"
and "default player for one single video format".
One tester tried to complete this task inside VLC itself and then
needed some help to succeed. It might be that the way web browsers ask
"Do you want ThisBrowser to become the default web browser?" gave a hint
an application GUI is the right place to do it.
Two testers searched "default" in the Overview (perhaps the previous
mission dealing with temporary files was enough to put them in this
direction). At least one tester was confused since the only search
result (Details View information about your system), which is the
correct one to get there, includes the word View, which suggests
that one cannot modify settings there, but only view them.
One long-term GNOME user looked in Tweak Tool first, and then used
the Overview.
Here again, GNOME users experienced essentially the same issues
as others.
Mission C.4 Add and remove world clocks
One tester tried to look for the clock on the top right corner of the
screen, then realized it was in the middle. Other than this, all
testers easily found a way to add world clocks.
However, removing a world clock was rather difficult; although most
testers managed to do it, it took them a number of attempts to
succeed:
--run, which runs the command given on the command-line;--exit-after-running, which closes automatically QSoas after all the commands specified by --run were run;--stdout (since version 2.1), which redirects QSoas's terminal directly to the shell output.script.cmds file containing the following commands:generate-buffer -10 10 sin(x) save sin.datand run the following command from your favorite command-line interpreter:
~ QSoas --stdout --run '@ script.cmds' --exit-after-runningThis will create a
sin.dat file containing a sinusoid. However, if you run it twice, a Overwrite file 'sin.dat' ?dialog box will pop up. You can prevent that by adding the
/overwrite=true option to save. As a general rule, you should avoid all commands that may ask questions in the scripts; a /overwrite=true option is also available for save-buffers for instance.I use this possibility massively because I don't like to store processedfiles, I prefer to store the original data files and run a script to generate the
processeddata when I want to plot or to further process them. It can also be used to generate fitted data from saved parameters files. I use this to run automatic tests on Linux, Windows and Mac for every single build, in order to quickly spot platform-specific regressions.To help you make use of this possibility, here is a shell function (Linux/Mac users only, add to your
$HOME/.bashrc file or equivalent, and restart a terminal) to run directly on QSoas command files:qs-run ()
QSoas --stdout --run "@ $1" --exit-after-running
To run the script.cmds script above, just run~ qs-run script.cmds
Number of subscribers and moderators on /r/NoSleep over time.This blog post was written with Charlie Kiene. The paper and work this post describes is collaborative work with Charlie Kiene and Andr s Monroy-Hern ndez. The paper was published in the Proceedings of CHI 2016 and is released as open access so anyone can read the entire paper here. A version of this post was published on the Community Data Science Collective blog.
Recently, Daniel visited us in
Helsinki. In addition to enjoying local food and scenerey, we spent
some time together in front of a whiteboard to sketch out designs for
Ick2. Ick is my continuous integration system, and it's all Daniel's
fault for suggesting the name. Ahem.
I am currently using the first generation of Ick and it is a rigid,
cumbersome, and fragile thing. It works well enough that I don't miss
Jenkins, but I would like something better. That's the second
generation of Ick, or Ick2, and that's what we discussed with Daniel.
Where pretty much everything in Ick1 is hardcoded, everything in Ick2
will be user-configurable. It's my last, best chance to go completely
overboard in the
second system syndrome
manner.
Where Ick1 was written in a feverish two-week hacking session, rushed
because my Jenkins install at the time had broken one time too many,
we're taking our time with Ick2. Slow and careful is the tune this
time around.
Our "minimum viable product" or MVP for Ick2 is defined like this:
Ick2 builds static websites from source in a git repository, using ikiwiki, and published to a web server using rsync. A change to the git repository triggers a new build. It can handle many separate websites, and if given enough worker machines, can build many of them concurrently.This is a real task, and something we already do with Ick1 at work. It's a reasonable first step for the new program.
Some decisions we made:
deb http://packages.arctica-project.org/debian jessie,stretch,sid maindeb http://packages.arctica-project.org/ubuntu trusty,xenial main wget -qO - http://packages.arctica-project.org/archive.key sudo apt-key add -
The nx-libs software project brings to you the binary packages
nxproxy (client-side component) and nxagent (nx-X11 server,
server-side component). The nxagent Xserver can be used from remote
sessions (via nxcomp compression library) or as a next Xserver.
Ubuntu developers, please note: we have added nightly builds for Ubuntu
latest to our build server. At the moment, you can obtain nx-libs builds for
Ubuntu 16.10 (yakkety) and 17.04 (zenial) as nightly builds.
References
A new release 0.2.14 of RInside is now on CRAN and in Debian.
RInside provides a set of convenience classes which facilitate embedding of R inside of C++ applications and programs, using the classes and functions provided by Rcpp.
It has been nearly two years since the last release, and a number of nice extensions, build robustifications and fixes had been submitted over this period---see below for more. The only larger and visible extension is both a new example and some corresponding internal changes to allow a readline prompt in an RInside application, should you desire it.
RInside is stressing the CRAN system a little in that it triggers a number of NOTE and WARNING messages. Some of these are par for the course as we get close to R internals not all of which are "officially" in the API. This lead to the submission sitting a little longer than usual in incoming queue. Going forward we may need to find a way to either sanction these access point, whitelist them or, as a last resort, take the package off CRAN. Time will tell.
Changes since the last release were:
CRANberries also provides a short report with changes from the previous release. More information is on the RInside page. Questions, comments etc should go to the rcpp-devel mailing list off the Rcpp R-Forge page, or to issues tickets at the GitHub repo.Changes in RInside version 0.2.14 (2017-04-28)
- Interactive mode can use readline REPL ( ukasz aniewski-Wo k in #25, and Dirk in #26)
- Windows macros checks now uses
_WIN32(Kevin Ushey in #22)- The wt example now links with
libboost_system- The
Makevarsfile is now more robist (Mattias Ellert in #21)- A problem with empty environment variable definitions on Windows was addressed (Jeroen Ooms in #17 addressing #16)
HAVE_UINTPTR_Tis defined only if not already defined- Travis CI is now driven via
run.shfrom our forked r-travis
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
The US Census Bureau released a new build 1.1.39 of their X-13ARIMA-SEATS program, released as binary and source. So Christoph and went to work and updated our x13binary package on CRAN.
The x13binary package takes the pain out of installing X-13ARIMA-SEATS by making it a fully resolved CRAN dependency. For example, if you install the excellent seasonal package by Christoph, then X-13ARIMA-SEATS will get pulled in via the x13binary package and things just work: Depend on x13binary and on all relevant OSs supported by R, you should have an X-13ARIMA-SEATS binary installed which will be called seamlessly by the higher-level packages such as seasonal or gunsales.
So now the full power of the what is likely the world's most sophisticated deseasonalization and forecasting package is now at your fingertips and the R prompt, just like any other of the 10,500+ CRAN packages.
Not many packaging changes in this release besides updating the underlying builds, but we switched our versioning scheme to reflect that our releases are driven by the US Census Bureau releases. But thanks to an initial contribution by David Schaub we now support the 'armhf' architecture common on Chromebooks running Linux.
Courtesy of CRANberries, there is also a diffstat report for this release.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
It's been a long time I did not write any new blog posts, and finally I got
something which is interesting enough for a new post and so here it is.
I actually wanted some bills from my ISP for some work and I could not find mail
from the ISP which had bills for some specific months in my mailbox. Problem
with my ISP is bills are accessible in their account which can be only accessed
from their own network. They do have a mobile app and that does not seem to work
especially for the billing section. I used mobile app and selected month for
which I did not have bill and clicked Send Mail button. App happily showed
message saying it sent the bill to my registered mail address but that was a
fancy lie. After trying several time I gave up and decided I will do it once I
get back home.
Fast forward few hours, I'm back home from office and then I sat in front of my
laptop and connected to ISP site, promptly downloaded the bills, then used
notmuch-emacs and fire up a mail composer, attach those HTML file (yeah they
produce bill in HTML file :-/) send it to my gmail and forget about it.
Fast forward few more days, I just remember I need those bills. I got hold of
mail I sent earlier in gmail inbox and clicked on attachment and when browser
opened the attachment I was shocked/surprised . Did you ask why?. See what I saw
when I opened attachment.
Well I was confused for moment on what happened, I tried downloading the file
and opened it an editor, and I see Chinese characters here also. After reaching
home I checked the Sent folder in my laptop where I keep copy of mails sent
using notmuch-emacs's notmuch-fcc-dirs variable. I open the file and open
the attachement and I see same character as I saw in browser!. I open the
original bills I downloaded and it looks fine. To check if I really attached the
correct files I again drafted a mail this time to my personal email and sent it.
Now I open the file from Sent folder and voila again there is different content
inside my attachment!. Same happens when I receive the mail and open the
attachment everything inside is Chinese characters!. Totally lost I finally
opened the original file using emacs, since I use spacemacs it asked me for
downloading of html layer and after which I was surprised because everything
inside the editor is in Chinese!. OK finally I've something now so I opened same
file at same time in nano from terminal and there it looks fine!. OK that is
weird again I read carefully content and saw this line in beginning of file
<?xml version="1.0" encoding="UTF-16" ?>
<html xmlns="http://www.w3.org/1999/xhtml>....
<?xml version="1.0" encoding="utf-8"?><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title> Something weird </title><body>blablablablablalabkabakba</body></html>
I made following observation from above experiments.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><META http-equiv="Content-Type" content="text/html; charset=utf-8">
Content-Type: text/html; charset=utf-8
Content-Disposition: attachment;
filename=SOA-102012059675-FEBRUARY-2017.html
Content-Transfer-Encoding: base64
Content-Type: text/html
Content-Disposition: attachment;
filename=SOA-102012059675-DECEMBER-2016.html
Content-Transfer-Encoding: quoted-printable
Next.