- <div class="title"><a href="http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">Experience and updated recipe for using the Signal app without a mobile phone</a></div>
- <div class="date">10th October 2016</div>
- <div class="body"><p>In July
-<a href="http://people.skolelinux.org/pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">I
-wrote how to get the Signal Chrome/Chromium app working</a> without
-the ability to receive SMS messages (aka without a cell phone). It is
-time to share some experiences and provide an updated setup.</p>
-
-<p>The Signal app have worked fine for several months now, and I use
-it regularly to chat with my loved ones. I had a major snag at the
-end of my summer vacation, when the the app completely forgot my
-setup, identity and keys. The reason behind this major mess was
-running out of disk space. To avoid that ever happening again I have
-started storing everything in <tt>userdata/</tt> in git, to be able to
-roll back to an earlier version if the files are wiped by mistake. I
-had to use it once after introducing the git backup. When rolling
-back to an earlier version, one need to use the 'reset session' option
-in Signal to get going, and notify the people you talk with about the
-problem. I assume there is some sequence number tracking in the
-protocol to detect rollback attacks. The git repository is rather big
-(674 MiB so far), but I have not tried to figure out if some of the
-content can be added to a .gitignore file due to lack of spare
-time.</p>
-
-<p>I've also hit the 90 days timeout blocking, and noticed that this
-make it impossible to send messages using Signal. I could still
-receive them, but had to patch the code with a new timestamp to send.
-I believe the timeout is added by the developers to force people to
-upgrade to the latest version of the app, even when there is no
-protocol changes, to reduce the version skew among the user base and
-thus try to keep the number of support requests down.</p>
-
-<p>Since my original recipe, the Signal source code changed slightly,
-making the old patch fail to apply cleanly. Below is an updated
-patch, including the shell wrapper I use to start Signal. The
-original version required a new user to locate the JavaScript console
-and call a function from there. I got help from a friend with more
-JavaScript knowledge than me to modify the code to provide a GUI
-button instead. This mean that to get started you just need to run
-the wrapper and click the 'Register without mobile phone' to get going
-now. I've also modified the timeout code to always set it to 90 days
-in the future, to avoid having to patch the code regularly.</p>
-
-<p>So, the updated recipe for Debian Jessie:</p>
-
-<ol>
-
-<li>First, install required packages to get the source code and the
-browser you need. Signal only work with Chrome/Chromium, as far as I
-know, so you need to install it.
-
-<pre>
-apt install git tor chromium
-git clone https://github.com/WhisperSystems/Signal-Desktop.git
-</pre></li>
-
-<li>Modify the source code using command listed in the the patch
-block below.</li>
-
-<li>Start Signal using the run-signal-app wrapper (for example using
-<tt>`pwd`/run-signal-app</tt>).
-
-<li>Click on the 'Register without mobile phone', will in a phone
-number you can receive calls to the next minute, receive the
-verification code and enter it into the form field and press
-'Register'. Note, the phone number you use will be user Signal
-username, ie the way others can find you on Signal.</li>
-
-<li>You can now use Signal to contact others. Note, new contacts do
-not show up in the contact list until you restart Signal, and there is
-no way to assign names to Contacts. There is also no way to create or
-update chat groups. I suspect this is because the web app do not have
-a associated contact database.</li>
-
-</ol>
-
-<p>I am still a bit uneasy about using Signal, because of the way its
-main author moxie0 reject federation and accept dependencies to major
-corporations like Google (part of the code is fetched from Google) and
-Amazon (the central coordination point is owned by Amazon). See for
-example
-<a href="https://github.com/LibreSignal/LibreSignal/issues/37">the
-LibreSignal issue tracker</a> for a thread documenting the authors
-view on these issues. But the network effect is strong in this case,
-and several of the people I want to communicate with already use
-Signal. Perhaps we can all move to <a href="https://ring.cx/">Ring</a>
-once it <a href="https://bugs.debian.org/830265">work on my
-laptop</a>? It already work on Windows and Android, and is included
-in <a href="https://tracker.debian.org/pkg/ring">Debian</a> and
-<a href="https://launchpad.net/ubuntu/+source/ring">Ubuntu</a>, but not
-working on Debian Stable.</p>
-
-<p>Anyway, this is the patch I apply to the Signal code to get it
-working. It switch to the production servers, disable to timeout,
-make registration easier and add the shell wrapper:</p>
-
-<pre>
-cd Signal-Desktop; cat <<EOF | patch -p1
-diff --git a/js/background.js b/js/background.js
-index 24b4c1d..579345f 100644
---- a/js/background.js
-+++ b/js/background.js
-@@ -33,9 +33,9 @@
- });
- });
-
-- var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
-+ var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
- var SERVER_PORTS = [80, 4433, 8443];
-- var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
-+ var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
- var messageReceiver;
- window.getSocketStatus = function() {
- if (messageReceiver) {
-diff --git a/js/expire.js b/js/expire.js
-index 639aeae..beb91c3 100644
---- a/js/expire.js
-+++ b/js/expire.js
-@@ -1,6 +1,6 @@
- ;(function() {
- 'use strict';
-- var BUILD_EXPIRATION = 0;
-+ var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
-
- window.extension = window.extension || {};
-
-diff --git a/js/views/install_view.js b/js/views/install_view.js
-index 7816f4f..1d6233b 100644
---- a/js/views/install_view.js
-+++ b/js/views/install_view.js
-@@ -38,7 +38,8 @@
- return {
- 'click .step1': this.selectStep.bind(this, 1),
- 'click .step2': this.selectStep.bind(this, 2),
-- 'click .step3': this.selectStep.bind(this, 3)
-+ 'click .step3': this.selectStep.bind(this, 3),
-+ 'click .callreg': function() { extension.install('standalone') },
- };
- },
- clearQR: function() {
-diff --git a/options.html b/options.html
-index dc0f28e..8d709f6 100644
---- a/options.html
-+++ b/options.html
-@@ -14,7 +14,10 @@
- <div class='nav'>
- <h1>{{ installWelcome }}</h1>
- <p>{{ installTagline }}</p>
-- <div> <a class='button step2'>{{ installGetStartedButton }}</a> </div>
-+ <div> <a class='button step2'>{{ installGetStartedButton }}</a>
-+ <br> <a class="button callreg">Register without mobile phone</a>
-+
-+ </div>
- <span class='dot step1 selected'></span>
- <span class='dot step2'></span>
- <span class='dot step3'></span>
---- /dev/null 2016-10-07 09:55:13.730181472 +0200
-+++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
-@@ -0,0 +1,12 @@
-+#!/bin/sh
-+set -e
-+cd $(dirname $0)
-+mkdir -p userdata
-+userdata="`pwd`/userdata"
-+if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
-+ (cd $userdata && git init)
-+fi
-+(cd $userdata && git add . && git commit -m "Current status." || true)
-+exec chromium \
-+ --proxy-server="socks://localhost:9050" \
-+ --user-data-dir=$userdata --load-and-launch-app=`pwd`
-EOF
-chmod a+rx run-signal-app
-</pre>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+ <div class="title"><a href="http://people.skolelinux.org/pere/blog/Free_software_archive_system_Nikita_now_able_to_store_documents.html">Free software archive system Nikita now able to store documents</a></div>
+ <div class="date">19th March 2017</div>
+ <div class="body"><p>The <a href="https://github.com/hiOA-ABI/nikita-noark5-core">Nikita
+Noark 5 core project</a> is implementing the Norwegian standard for
+keeping an electronic archive of government documents.
+<a href="http://www.arkivverket.no/arkivverket/Offentlig-forvaltning/Noark/Noark-5/English-version">The
+Noark 5 standard</a> document the requirement for data systems used by
+the archives in the Norwegian government, and the Noark 5 web interface
+specification document a REST web service for storing, searching and
+retrieving documents and metadata in such archive. I've been involved
+in the project since a few weeks before Christmas, when the Norwegian
+Unix User Group
+<a href="https://www.nuug.no/news/NOARK5_kjerne_som_fri_programvare_f_r_epostliste_hos_NUUG.shtml">announced
+it supported the project</a>. I believe this is an important project,
+and hope it can make it possible for the government archives in the
+future to use free software to keep the archives we citizens depend
+on. But as I do not hold such archive myself, personally my first use
+case is to store and analyse public mail journal metadata published
+from the government. I find it useful to have a clear use case in
+mind when developing, to make sure the system scratches one of my
+itches.</p>
+
+<p>If you would like to help make sure there is a free software
+alternatives for the archives, please join our IRC channel
+(<a href="irc://irc.freenode.net/%23nikita"">#nikita on
+irc.freenode.net</a>) and
+<a href="https://lists.nuug.no/mailman/listinfo/nikita-noark">the
+project mailing list</a>.</p>
+
+<p>When I got involved, the web service could store metadata about
+documents. But a few weeks ago, a new milestone was reached when it
+became possible to store full text documents too. Yesterday, I
+completed an implementation of a command line tool
+<tt>archive-pdf</tt> to upload a PDF file to the archive using this
+API. The tool is very simple at the moment, and find existing
+<a href="https://en.wikipedia.org/wiki/Fonds">fonds</a>, series and
+files while asking the user to select which one to use if more than
+one exist. Once a file is identified, the PDF is associated with the
+file and uploaded, using the title extracted from the PDF itself. The
+process is fairly similar to visiting the archive, opening a cabinet,
+locating a file and storing a piece of paper in the archive. Here is
+a test run directly after populating the database with test data using
+our API tester:</p>
+
+<p><blockquote><pre>
+~/src//noark5-tester$ ./archive-pdf mangelmelding/mangler.pdf
+using arkiv: Title of the test fonds created 2017-03-18T23:49:32.103446
+using arkivdel: Title of the test series created 2017-03-18T23:49:32.103446
+
+ 0 - Title of the test case file created 2017-03-18T23:49:32.103446
+ 1 - Title of the test file created 2017-03-18T23:49:32.103446
+Select which mappe you want (or search term): 0
+Uploading mangelmelding/mangler.pdf
+ PDF title: Mangler i spesifikasjonsdokumentet for NOARK 5 Tjenestegrensesnitt
+ File 2017/1: Title of the test case file created 2017-03-18T23:49:32.103446
+~/src//noark5-tester$
+</pre></blockquote></p>
+
+<p>You can see here how the fonds (arkiv) and serie (arkivdel) only had
+one option, while the user need to choose which file (mappe) to use
+among the two created by the API tester. The <tt>archive-pdf</tt>
+tool can be found in the git repository for the API tester.</p>
+
+<p>In the project, I have been mostly working on
+<a href="https://github.com/petterreinholdtsen/noark5-tester">the API
+tester</a> so far, while getting to know the code base. The API
+tester currently use
+<a href="https://en.wikipedia.org/wiki/HATEOAS">the HATEOAS links</a>
+to traverse the entire exposed service API and verify that the exposed
+operations and objects match the specification, as well as trying to
+create objects holding metadata and uploading a simple XML file to
+store. The tester has proved very useful for finding flaws in our
+implementation, as well as flaws in the reference site and the
+specification.</p>
+
+<p>The test document I uploaded is a summary of all the specification
+defects we have collected so far while implementing the web service.
+There are several unclear and conflicting parts of the specification,
+and we have
+<a href="https://github.com/petterreinholdtsen/noark5-tester/tree/master/mangelmelding">started
+writing down</a> the questions we get from implementing it. We use a
+format inspired by how <a href="http://www.opengroup.org/austin/">The
+Austin Group</a> collect defect reports for the POSIX standard with
+<a href="http://www.opengroup.org/austin/mantis.html">their
+instructions for the MANTIS defect tracker system</a>, in lack of an official way to structure defect reports for Noark 5 (our first submitted defect report was a <a href="https://github.com/petterreinholdtsen/noark5-tester/blob/master/mangelmelding/sendt/2017-03-15-mangel-prosess.md">request for a procedure for submitting defect reports</a> :).
+
+<p>The Nikita project is implemented using Java and Spring, and is
+fairly easy to get up and running using Docker containers for those
+that want to test the current code base. The API tester is
+implemented in Python.</p>