Jekyll2024-03-19T23:04:04+01:00https://danielpocock.com/feed/postgresql.xmlDaniel Pocock’s personal blog | PostgresqlSoftware engineer, Free, Open Source Software Consultant, Innovator, Fedora & Debian Developer
Anzacathon: the benefits of Open Data2020-04-23T23:10:00+02:002020-04-23T23:10:00+02:00https://danielpocock.com/anzacathon-the-benefits-of-open-data<p>25 April is Anzac Day in Australia, New Zealand and many communities around the world where Anzacs have served. Given the shift to online collaboration in 2020, <a href="https://anzacathon.com">Anzacathon has been set up to help people engage online</a>.</p>
<p>One of the key themes of <a href="https://anzacathon.com">Anzacathon</a> is data: finding new ways to use the data and also demonstrating the benefits of community engagement with open data.</p>
<p>With that in mind, I'm providing some tutorials for users of <em>PostgreSQL</em> and <em>R</em> to access the data and some simple examples to use it.</p>
<video poster="https://ipfs.io/ipfs/QmPyiZ6E2VXiRrUNALTgUxZfgFKi6Mg4oMqDrF8gvuCbLF" controls="" class="videoplayer" width="100%" height="auto">
<!--<source type="video/webm" src="https://ipfs.io/ipfs/QmQ6tzgATBjZU2HY2mgjU44LCtGd4W7jiieHqCQeVikgzZ"/>
<source type="video/mp4" src="https://ipfs.io/ipfs/QmYpMJjuFQgaSBY2QVe5PS85Bu2UC1CoAiMvEHvzVezN5L"/>-->
<source type="video/mp4" src="https://ipfs.io/ipfs/QmenToxkMUMB9FyBivDLNXz5t4Tmia9TtYoUsorQRs7uRW"/>
</video>
<h3>Data access over IPFS</h3>
<p>The raw data files are shared over <a href="https://ipfs.io">IPFS</a>. They are in <em>SQLite</em> format, as this provides a convenient mechanism to query the data with SQL commands directly over IPFS.</p>
<p>The <em>pgloader</em> tool provides a convenient way to load SQLite databases directly from IPFS into a PostgreSQL schema. There is no need to download the SQLite files, we can simply mount IPFS like a filesystem. A <a href="https://gitlab.com/anzacathon/postgresql">sample configuration for PostgreSQL users is provided</a>.</p>
<p>For R users, there is an <a href="https://www.rdocumentation.org/packages/RSQLite/versions/2.2.0">RSQLite module</a> that allows R to access SQLite data. Once again, there is no need to download the data, any file in IPFS can be opened directly using fuse.</p>
<p>R users who want to use this method first need to follow the <a href="https://gitlab.com/anzacathon/postgresql/-/blob/master/README.md">first part of the PostgreSQL setup instructions</a>, up to the point where you start the IPFS daemon process.</p>
<h3>Finding the lone Anzacs</h3>
<p>Every year, there are huge gatherings at Gallipoli and other sites where large numbers of Anzacs died. Due to Coronavirus, those gatherings won't take place in 2020.</p>
<p>Therefore, we have the opportunity to discover lesser known places where Anzacs have died. In one place I discovered in the French alps, there is a single Australian airman buried alongside his British colleagues. After a quick search of the National Archives and a hike up the mountain with my camera, I <a href="https://anzac.site/france/le-rivier-d-allemont/">created a visual story about their mystery</a>.</p>
<p>How many more cemeteries in France and other places contain a single Anzac like this? We can't ask that question through any of the web sites but it is very easy with SQLite or PostgreSQL:</p>
<pre>
SELECT cemeterymemorial, country, COUNT(cemeterymemorial)<br/>
FROM cwgc_casualty<br/>
GROUP BY cemeterymemorial, country<br/>
HAVING COUNT(cemeterymemorial) = 1;
</pre>
<p>The query lists 1,143 cemeteries around the world having a single Anzac.</p>
<p>We could further refine that to focus on a single country, such as France:</p>
<pre>
SELECT cemeterymemorial, country, COUNT(cemeterymemorial)<br/>
FROM cwgc_casualty<br/>
WHERE country = 'France'<br/>
GROUP BY cemeterymemorial, country<br/>
HAVING COUNT(cemeterymemorial) = 1;
</pre>
<p>Of 1,143 cemeteries around the world, 192 are in France.</p>
<p>Using a subquery, we can see the names, services numbers and dates when those Anzacs died:</p>
<!-- \copy ( ) To '/tmp/lone-anzacs.csv' With CSV -->
<pre>
SELECT cemeterymemorial, country, forename, surname, TRIM(servicenumberexport, '''') as servicenumber, date_of_death, date_of_death2<br/>
FROM cwgc_casualty<br/>
WHERE cemeterymemorial IN (<br/>
SELECT cemeterymemorial<br/>
FROM cwgc_casualty<br/>
GROUP BY cemeterymemorial<br/>
HAVING COUNT(cemeterymemorial) = 1);
</pre>
<p>For convenience, I'm <a href="https://danielpocock.com/assets/2020-04-23-lone-anzacs.csv">providing that list as a spreadsheet that you can download and explore</a>.</p>
<p>With that list, it is fairly easy to get the name and service number of the relevant Anzac and look up the scanned copy of his paper file at <a href="https://recordsearch.naa.gov.au">the National Archives</a>. Given the unique circumstances of these casualties, their files often contain something notable. For example, some of them were on particularly dangerous missions deep behind enemy lines during the time France was occupied.</p>
<h3>Anzacs within a given radius (PostgreSQL / PostGIS)</h3>
<p>The <a href="https://www.cwgc.org">CWGC</a> web site allows people to search for Anzacs by specificying regions, such as the <a href="https://en.wikipedia.org/wiki/Departments_of_France">department</a> within France. There are 95 departments, far more than the 6 states in Australia. It can be a lot more convenient to search by distance/radius from of a point where you live or plan to travel.</p>
<p>Fortunately, we have the <a href="https://postgis.net/">PostGIS</a> extension. The PostGIS FAQ includes a specific example, <a href="https://www.postgis.net/docs/manual-dev/PostGIS_FAQ.html#idm33651">the best way to find all objects within a radius of another object</a>, using the <em>ST_DWithin</em> function.</p>
<p>The <a href="https://gitlab.com/anzacathon/postgresql/">PostgreSQL setup documentation</a> includes the necessary code to enable PostGIS and add extra columns to the tables containing the PostGIS objects encapsulating latitude ang longitude values.</p>
<p>This is a basic example of how to use ST_DWithin to obtain sites within a specified radius, returning the distances in kilometers:</p>
<pre>
SELECT cemetery_desc,<br/>
ROUND(ST_Distance(location_gis, ('SRID=4326;POINT(46.5535 6.6523)')::geography)/1000) AS d<br/>
FROM iwmcemeteries<br/>
WHERE ST_DWithin(location_gis,('SRID=4326;POINT(46.5535 6.6523)')::geography, 100000)<br/>
ORDER BY d;
</pre>
<p>The <a href="https://gitlab.com/anzacathon/postgresql/-/blob/master/schema.sql">schema</a> also includes a view, <em>anzac_sites</em>, that uses the SQL <em>UNION</em> mechanism to concatenate both the CWGC and TracesOfWar tables. We can access results from both tables using a single query like this:</p>
<pre>
SELECT source, description,<br/>
ROUND(ST_Distance(location_gis, ('SRID=4326;POINT(46.5535 6.6523)')::geography)/1000) AS d<br/>
FROM anzac_sites<br/>
WHERE ST_DWithin(location_gis,('SRID=4326;POINT(46.5535 6.6523)')::geography, 100000)<br/>
ORDER BY d;
</pre>
<h3>Anzac family names (using R)</h3>
<p>To begin, it is necessary to install the R modules RSQLite and Plyr. On a Debian system, that can be done with:</p>
<pre>
apt install r-cran-rsqlite r-cran-plyr
</pre>
<p>and on any other type of system:</p>
<pre>
install.packages("RSQLite")<br/>
install.packages("plyr")
</pre>
<p>As discussed above, make sure that the IPFS daemon is running. See the <a href="https://gitlab.com/anzacathon/postgresql/-/blob/master/README.md">first part of the PostgreSQL setup instructions</a>.</p>
<p>Start the R command line and from there, it is possible to verify you have access to the data over IPFS:</p>
<pre>
library(DBI)<br/>
cwgc_cemeteries <- dbConnect(RSQLite::SQLite(), "/ipfs/QmRgD8xHJXKGwE1S1YySUKQGt25EK8R2W1HTCCEA7sKDLy")<br/>
dbListTables(cwgc_cemeteries)<br/>
cwgc_casualty <- dbConnect(RSQLite::SQLite(), "/ipfs/QmPVkHJrSYoeig71EzrxU45zTMbFefQgwdRDSHv7fpjChA")<br/>
dbListTables(cwgc_casualty)
</pre>
<p>To verify this, we can load the entire content of one table into a data frame and count the frequency of surnames:</p>
<pre>
data <- dbReadTable(cwgc_casualty, "cwgc_casualty")<br/>
summary(data)<br/>
<br/>
library(plyr)<br/>
fd = count(data, 'surname')<br/>
index <- with(fd, order(freq, surname))<br/>
tail(fd[index,])
</pre>
<p>The results will look something like this:</p>
<pre>
surname freq<br/>
18130 TAYLOR 467<br/>
19939 WILSON 549<br/>
9558 JONES 590<br/>
2303 BROWN 628<br/>
19901 WILLIAMS 635<br/>
17182 SMITH 1376
</pre>
<p>While this may be a trivial example, it demonstrates that we can use datasets from the IPFS cloud directly in R.</p>
<h3>Making data personal</h3>
<p>A British police chief suggested on 30 March that <a href="https://www.theguardian.com/world/2020/mar/30/coronavirus-message-not-getting-through-demographics-police">messages about flattening the curve were not getting through to many people</a>. Five days later, the <a href="https://www.theguardian.com/politics/2020/apr/05/boris-johnson-admitted-to-hospital-with-coronavirus">British PM was admitted to hospital with Coronavirus</a>. Most of Britain spent the next week intensely following the news as he went in and out of intensive care. This example demonstrates the power of personal stories and examples over statistics and charts.</p>
<p>Using the tools described above, we can examine this data set at scale and also hone in on personal stories and acute examples of tragedy. Reading through the <a href="https://recordsearch.naa.gov.au">National Archives</a>, there are plenty of personal letters from parents, spouses and children of missing Anzacs. It is particularly important to be respectful with a data set like this.</p>
<h3>Why not attack Coronavirus this weekend?</h3>
<p>The <a href="https://euvsvirus.org">EUvsVirus hackathon</a> takes place the same weekend as Anzac Day. Some people asked me why I don't put energy into that instead.</p>
<p>There are many answers to that question.</p>
<p>One that is on the top of my mind is that I like to finish things. Together with a <a href="https://danielpocock.com/anzacathon-national-hackathon-saving-anzac-day/">dedicated group of volunteers in Kosovo</a>, we had started looking at this data in 2019 and I feel this is a great way to take what I've learnt and hand it off to the crowd.</p>
<p>There have already been a number of dedicated events like the <a href="https://github.com/virtual-biohackathons/covid-19-bh20/wiki">Bio-hackathon</a>. For people unfamiliar with the science, it can be difficult to simultaneously learn about data science and bioinformatics. The Anzac data set provides an opportunity to boost skills with data science while working with an important data set that many people can already understand.</p>
<p>Innovations from this hackathon, such as the use of <a href="https://ipfs.io">IPFS to share data sets between participants</a> are directly transferrable to bio-hackathons and many other use cases.</p>
<h3>Initial directions for studying the data</h3>
<p>Here are some thoughts that come to mind:</p>
<ul>
<li>Which of these casualties were buried at a time and place behind enemy lines? There are stories of <a href="http://www.leparisien.fr/paris-75/le-village-decouvre-enfin-le-visage-de-ses-liberateurs-21-04-2013-2744479.php">French citizens taking great risks to give allied soldiers a proper funeral</a>.</li>
<li>The notes often refer to their place of birth or enlistment. Can we build a report by place of birth / enlistment?</li>
<li>How can we systematically gather links to third party documents and news reports and link them to the relevant diggers? This could be a Natural Language Processing (NLP) problem.</li>
<li>Using the keywords extracted from Traces of War, how can we identify monuments relevant to Anzacs or in close proximity to Anzac graves?</li>
<li>A classification problem: examining the descriptions in the Traces of War data set to identify whether they correspond to infrastructure (such as a fort) or to a monument</li>
</ul>25 April is Anzac Day in Australia, New Zealand and many communities around the world where Anzacs have served. Given the shift to online collaboration in 2020, Anzacathon has been set up to help people engage online.RHL’19 St-Cergue, Switzerland, 25-27 January 20192018-10-31T22:06:34+01:002018-10-31T22:06:34+01:00https://danielpocock.com/rhl19-st-cergue-switzerland<p><i>(translated from original <a href="https://lists.debian.org/debian-switzerland/2018/10/msg00001.html">French version</a>)</i></p>
<p>The <a href="https://hivernal.es">Rencontres Hivernales du Libre (RHL) (Winter Meeting of Freedom)</a> takes place 25-27 January 2019 at <a href="http://www.st-cergue-tourisme.ch/">St-Cergue</a>.</p>
<p><a href="https://www.swisslinux.org">Swisslinux.org</a> invites the free software community to come and share workshops, great meals and good times.</p>
<p>This year, we celebrate the 5th edition with the theme <b>«Exploit»</b>.</p>
<p>Please think creatively and submit proposals exploring this theme: lectures, workshops, performances and other activities are all welcome.</p>
<p>RHL'19 is situated directly at the base of some family-friendly ski pistes suitable for beginners and more adventurous skiers. It is also a great location for alpine walking trails.</p>
<h3>Why, who?</h3>
<p>RHL'19 brings together the forces of freedom in the <a href="https://en.wikipedia.org/wiki/Lake_Geneva">Leman basin</a>, <a href="https://en.wikipedia.org/wiki/Romandy">Romandy</a>, neighbouring France and further afield (there is an excellent <a href="https://www.sbb.ch/en">train</a> connection from <a href="https://www.gva.ch">Geneva airport</a>). Hackers and activists come together to share a relaxing weekend and discover new things with free technology and software.</p>
<p>If you have a project to present (in 5 minutes, an hour or another format) or activities to share with other geeks, please send an email to <a href="mailto:rhl-team@lists.swisslinux.org">rhl-team@lists.swisslinux.org</a> or submit it through <a href="https://2019.hivernal.es/talks/new/">the form</a>.</p>
<p>If you have any specific venue requirements please contact the team.</p>
<p>You can find detailed information on the <a href="https://rencontres.hivernal.es/">event web site</a>.</p>
<p>Please ask if you need help finding accommodation or any other advice planning your trip to the region.</p>
<img src="https://danielpocock.com/sites/danielpocock.com/files/jura-snow.jpg"/>(translated from original French version) The Rencontres Hivernales du Libre (RHL) (Winter Meeting of Freedom) takes place 25-27 January 2019 at St-Cergue. Swisslinux.org invites the free software community to come and share workshops, great meals and good times. This year, we celebrate the 5th edition with the theme «Exploit». Please think creatively and submit proposals exploring this theme: lectures, workshops, performances and other activities are all welcome. RHL'19 is situated directly at the base of some family-friendly ski pistes suitable for beginners and more adventurous skiers. It is also a great location for alpine walking trails. Why, who? RHL'19 brings together the forces of freedom in the Leman basin, Romandy, neighbouring France and further afield (there is an excellent train connection from Geneva airport). Hackers and activists come together to share a relaxing weekend and discover new things with free technology and software. If you have a project to present (in 5 minutes, an hour or another format) or activities to share with other geeks, please send an email to rhl-team@lists.swisslinux.org or submit it through the form. If you have any specific venue requirements please contact the team. You can find detailed information on the event web site. Please ask if you need help finding accommodation or any other advice planning your trip to the region.A step change in managing your calendar, without social media2017-10-08T19:36:49+02:002017-10-08T19:36:49+02:00https://danielpocock.com/a-step-change-in-your-calendar<p>Have you been to an event recently involving <a href="https://en.wikipedia.org/wiki/Free_software">free software</a> or a related topic? How did you find it? Are you organizing an event and don't want to fall into the trap of using Facebook or Meetup or other services that compete for a share of your community's attention?</p>
<p>Are you keen to find events in foreign destinations related to your interest areas to coincide with other travel intentions?</p>
<p>Have you been concerned when your <a href="https://danielpocock.com/tags/gsoc">GSoC or Outreachy</a> interns lost a week of their project going through the bureaucracy to get a visa for your community's event? Would you like to make it easier for them to find the best events in the countries that welcome and respect visitors?</p>
<p>In many recent discussions about free software activism, people have struggled to break out of the illusion that social media is the way to cultivate new contacts. Wouldn't it be great to make more meaningful contacts by attending more a more diverse range of events rather <a href="https://danielpocock.com/how-did-the-world-ever-work-without-facebook">than losing time on social media</a>?</p>
<h3>Making it happen</h3>
<p>There are already a number of tools (for example, <a href="https://www.drupal.org/search/site/icalendar">Drupal plugins</a> and <a href="https://wordpress.org/plugins/search/icalendar/">Wordpress plugins</a>) for promoting your events on the web and in <a href="https://en.wikipedia.org/wiki/ICalendar">iCalendar format</a>. There are also a number of sites like <a href="https://www.agendadulibre.org/">Agenda du Libre</a> and <a href="http://grical.org/">GriCal</a> who aggregate events from multiple communities where people can browse them.</p>
<p>How can we take these concepts further and make a convenient, compelling and global solution?</p>
<p>Can we harvest event data from a wide range of sources and compile it into a large database using something like <a href="https://www.postgresql.org">PostgreSQL</a> or a NoSQL solution or even a distributed solution like <a href="https://blog.savoirfairelinux.com/en-ca/2015/ring-opendht-a-distributed-hash-table/">OpenDHT</a>?</p>
<p>Can we use big data techniques to mine these datasources and help match people to events without compromising on privacy?</p>
<p>Why not build an automated iCalendar "to-do" list of deadlines for events you want to be reminded about, so you never miss the deadlines for travel sponsorship or submitting a talk proposal?</p>
<p>I've started <a href="https://wiki.debian.org/SocialEventAndConferenceCalendars">documenting an architecture for this on the Debian wiki</a> and proposed it as an <a href="https://wiki.debian.org/Outreachy/Round15/Projects/SocialEventAndConferenceCalendars">Outreachy project</a>. It will also be offered as part of GSoC in 2018.</p>
<h3>Ways to get involved</h3>
<p>If you would like to help this project, please consider <a href="https://lists.debian.org/debian-outreach">introducing yourself on the debian-outreach mailing list</a> and helping to mentor or refer interns for the project. You can also help contribute ideas for the specification through the mailing list or wiki.</p>
<h3>Mini DebConf Prishtina 2017</h3>
<p>This weekend I've been at the <a href="https://wiki.debian.org/DebianEvents/ks/2017/MiniDebConfPrishtina">MiniDebConf in Prishtina, Kosovo</a>. It has been hosted by the <a href="http://www.prishtinahackerspace.org/">amazing Prishtina hackerspace community</a>.</p>
<img src="https://danielpocock.com/sites/danielpocock.com/files/2017-10-07-prishtina-group-photo.jpg"/>
<p>Watch out for future events in Prishtina, the pizzas are huge, but that didn't stop them disappearing before we finished the photos:</p>
<img src="https://danielpocock.com/sites/danielpocock.com/files/2017-10-07-pizzas.jpg"/>Have you been to an event recently involving free software or a related topic? How did you find it? Are you organizing an event and don't want to fall into the trap of using Facebook or Meetup or other services that compete for a share of your community's attention? Are you keen to find events in foreign destinations related to your interest areas to coincide with other travel intentions? Have you been concerned when your GSoC or Outreachy interns lost a week of their project going through the bureaucracy to get a visa for your community's event? Would you like to make it easier for them to find the best events in the countries that welcome and respect visitors? In many recent discussions about free software activism, people have struggled to break out of the illusion that social media is the way to cultivate new contacts. Wouldn't it be great to make more meaningful contacts by attending more a more diverse range of events rather than losing time on social media? Making it happen There are already a number of tools (for example, Drupal plugins and Wordpress plugins) for promoting your events on the web and in iCalendar format. There are also a number of sites like Agenda du Libre and GriCal who aggregate events from multiple communities where people can browse them. How can we take these concepts further and make a convenient, compelling and global solution? Can we harvest event data from a wide range of sources and compile it into a large database using something like PostgreSQL or a NoSQL solution or even a distributed solution like OpenDHT? Can we use big data techniques to mine these datasources and help match people to events without compromising on privacy? Why not build an automated iCalendar "to-do" list of deadlines for events you want to be reminded about, so you never miss the deadlines for travel sponsorship or submitting a talk proposal? I've started documenting an architecture for this on the Debian wiki and proposed it as an Outreachy project. It will also be offered as part of GSoC in 2018. Ways to get involved If you would like to help this project, please consider introducing yourself on the debian-outreach mailing list and helping to mentor or refer interns for the project. You can also help contribute ideas for the specification through the mailing list or wiki. Mini DebConf Prishtina 2017 This weekend I've been at the MiniDebConf in Prishtina, Kosovo. It has been hosted by the amazing Prishtina hackerspace community. Watch out for future events in Prishtina, the pizzas are huge, but that didn't stop them disappearing before we finished the photos:Arrival at FSFE Summit and QtCon 2016, Berlin2016-09-02T10:46:39+02:002016-09-02T10:46:39+02:00https://danielpocock.com/arrival-at-fsfe-summit-and-qtcon-2016-berlin<img src="https://danielpocock.com/sites/danielpocock.com/files/fsfe-summit.png" align="left" width="128" style="margin-right: 20px"/>
<img src="https://danielpocock.com/sites/danielpocock.com/files/QtCon16_Logo.png" align="right" width="128"/>
<p>The <a href="https://fsfe.org/community/events/2016/summit/frontpage.en.html">FSFE Summit</a> and <a href="https://qtcon.org">QtCon 2016</a> are getting under way at <a href="http://bcc-berlin.de">bcc, Berlin</a>. The event comprises a range of communities, including KDE and VideoLAN and there are also a wide range of people present who are active in other projects, including Debian, Mozilla, <a href="https://danielpocock.com/tags/gsoc">GSoC</a> and many more.</p>
<h3>Talks</h3>
<p>Today, some time between 17:30 and 18:30 I'll be giving a <a href="https://conf.qtcon.org/en/qtcon/public/events/585">lightning talk about Postbooks</a>, a Qt and PostgreSQL based free software solution for accounting and ERP. For more details about how free, open source software can make your life easier by helping keep track of your money, see my <a href="https://danielpocock.com/comparison-of-free-open-source-accounting-software">comparison of free, open source accounting software</a>.</p>
<p>Saturday, at 15:00 I'll give a talk about <a href="https://conf.qtcon.org/en/qtcon/public/events/448">Free Communications with Free Software</a>. We'll look at some exciting new developments in this area and once again, contemplate the question <a href="https://danielpocock.com/want-free-rtc-for-christmas-2016">can we hope to use completely free and private software to communicate with our friends and families this Christmas?</a> (apologies to those who don't celebrate Christmas, the security of your communications is just as important too).</p>
<h3>A note about the entrance fee...</h3>
<p>There is an entry fee for the QtCon event, however, people attending the FSFE Summit are invited to attend by <a href="https://fsfe.org/community/events/2016/summit/attendance#donation">making a donation</a>. Contact FSFE for more details and consider joining the <a href="https://fsfe.org/fellowship/index">FSFE Fellowship</a>.</p>
<img src="https://danielpocock.com/sites/danielpocock.com/files/berlin-tower.jpg"/>The FSFE Summit and QtCon 2016 are getting under way at bcc, Berlin. The event comprises a range of communities, including KDE and VideoLAN and there are also a wide range of people present who are active in other projects, including Debian, Mozilla, GSoC and many more. Talks Today, some time between 17:30 and 18:30 I'll be giving a lightning talk about Postbooks, a Qt and PostgreSQL based free software solution for accounting and ERP. For more details about how free, open source software can make your life easier by helping keep track of your money, see my comparison of free, open source accounting software. Saturday, at 15:00 I'll give a talk about Free Communications with Free Software. We'll look at some exciting new developments in this area and once again, contemplate the question can we hope to use completely free and private software to communicate with our friends and families this Christmas? (apologies to those who don't celebrate Christmas, the security of your communications is just as important too). A note about the entrance fee... There is an entry fee for the QtCon event, however, people attending the FSFE Summit are invited to attend by making a donation. Contact FSFE for more details and consider joining the FSFE Fellowship.Working to pass GSoC2016-06-08T19:11:41+02:002016-06-08T19:11:41+02:00https://danielpocock.com/working-to-pass-gsoc<p><a href="http://danielpocock.com/tags/gsoc">GSoC</a> students have officially been coding since 23 May (about 2.5 weeks) and are almost half-way to the mid-summer evaluation (20 - 27 June). Students who haven't completed some meaningful work before that deadline don't receive payment and in such a large program, there is no possibility to give students extensions or let them try and catch up later.</p>
<p>Every project and every student are different, some are still getting to know their environment while others have already done enough to pass the mid-summer evaluation.</p>
<p>I'd like to share a few tips to help students ensure they don't inadvertently fail the mid-summer evaluation</p>
<h3>Kill electronic distractions</h3>
<p>As a developer of real-time communications projects, many people will find it ironic or hypocritical that this is at the top of my list.</p>
<p>Switch off the mobile phone or put it in silent mode so it doesn't even vibrate. Research has suggested that physically turning it off and putting it out of sight has significant benefits. Disabling the voicemail service can be an effective way of making sure no time is lost listening to a bunch of messages later. Some people may grumble at first but if they respect you, they'll get into the habit of emailing you and waiting for you to respond when you are not working.</p>
<p>Get out a piece of paper and make a list of all the desktop notifications on your computer, whether they are from incoming emails, social media, automatic updates, security alerts or whatever else. Then figure out how to disable them all one-by-one.</p>
<p>Use email to schedule fixed times for meetings with mentors. Some teams/projects also have fixed daily or weekly times for IRC chat. For a development project like GSoC, it is not necessary or productive to be constantly on call for 3 straight months.</p>
<h3>Commit every day</h3>
<p>Habits are a powerful thing. Successful students have a habit of making at least one commit every day. The "C" in GSoC is for <em>Code</em> and commits are a good way to prove that coding is taking place.</p>
<p>GSoC is not a job, it is like a freelance project. There is no safety-net for students who get sick or have an accident and mentors are not bosses, each student is expected to be their own boss. Although Google has started recommending students work full time, 40 hours per week, it is unlikely any mentors have any way to validate these hours. Mentors can look for a commit log, however, and simply won't be able to pass a student if there isn't code.</p>
<p>There may be one day per week where a student writes a blog or investigates a particularly difficult bug and puts a detailed report in the bug tracker but by the time we reach the second or third week of GSoC, most students are making at least one commit in 3 days out of every 5.</p>
<h3>Consider working away from home/family/friends</h3>
<p>Can you work without anybody interrupting you for at least five or six hours every day?</p>
<p>Do you feel pressure to help with housework, cooking, siblings or other relatives? Even if there is no pressure to do these things, do you find yourself wandering away from the computer to deal with them anyway?</p>
<p>Do family, friends or housemates engage in social activities, games or other things in close proximity to where you work?</p>
<p>All these things can make a difference between passing and failing.</p>
<p>Maybe these things were tolerable during high school or university. GSoC, however, is a stepping stone into professional life and that means making a conscious decision to shut those things out and focus. Some students have the ability to manage these distractions well, but it is not for everybody. Think about how leading sports stars or musicians find a time and space to be "in the zone" when training or rehearsing, this is where great developers need to be too.</p>
<p>Some students find the right space in a public library or campus computer lab. Some students have been working in hacker spaces or at empty desks in local IT companies. These environments can also provide great networking opportunities.</p>
<h3>Managing another summer job concurrently with GSoC</h3>
<p>It is no secret that some GSoC students have another job as well. Sometimes the mentor is aware of it, sometimes it has not been disclosed.</p>
<p>The fact is, some students have passed GSoC while doing a summer job or internship concurrently but some have also failed badly in both GSoC and their summer job. Choosing one or the other is the best way to succeed, get the best results and maximize the quality of learning and community interaction. For students in this situation, now it is not too late to make the decision to withdraw from GSoC or the other job.</p>
<p>If doing a summer job concurrently with GSoC is unavoidable, the chance of success can be greatly increased by doing the GSoC work in the mornings, before starting the other job. Some students have found that they actually finish more quickly and produce better work when GSoC is constrained to a period of 4 or 5 hours each morning and their other job is only in the afternoon. On the other hand, if a student doesn't have the motivation or energy to get up and work on GSoC before the other job then this is a strong sign that it is better to withdraw from GSoC now.</p>GSoC students have officially been coding since 23 May (about 2.5 weeks) and are almost half-way to the mid-summer evaluation (20 - 27 June). Students who haven't completed some meaningful work before that deadline don't receive payment and in such a large program, there is no possibility to give students extensions or let them try and catch up later. Every project and every student are different, some are still getting to know their environment while others have already done enough to pass the mid-summer evaluation. I'd like to share a few tips to help students ensure they don't inadvertently fail the mid-summer evaluation Kill electronic distractions As a developer of real-time communications projects, many people will find it ironic or hypocritical that this is at the top of my list. Switch off the mobile phone or put it in silent mode so it doesn't even vibrate. Research has suggested that physically turning it off and putting it out of sight has significant benefits. Disabling the voicemail service can be an effective way of making sure no time is lost listening to a bunch of messages later. Some people may grumble at first but if they respect you, they'll get into the habit of emailing you and waiting for you to respond when you are not working. Get out a piece of paper and make a list of all the desktop notifications on your computer, whether they are from incoming emails, social media, automatic updates, security alerts or whatever else. Then figure out how to disable them all one-by-one. Use email to schedule fixed times for meetings with mentors. Some teams/projects also have fixed daily or weekly times for IRC chat. For a development project like GSoC, it is not necessary or productive to be constantly on call for 3 straight months. Commit every day Habits are a powerful thing. Successful students have a habit of making at least one commit every day. The "C" in GSoC is for Code and commits are a good way to prove that coding is taking place. GSoC is not a job, it is like a freelance project. There is no safety-net for students who get sick or have an accident and mentors are not bosses, each student is expected to be their own boss. Although Google has started recommending students work full time, 40 hours per week, it is unlikely any mentors have any way to validate these hours. Mentors can look for a commit log, however, and simply won't be able to pass a student if there isn't code. There may be one day per week where a student writes a blog or investigates a particularly difficult bug and puts a detailed report in the bug tracker but by the time we reach the second or third week of GSoC, most students are making at least one commit in 3 days out of every 5. Consider working away from home/family/friends Can you work without anybody interrupting you for at least five or six hours every day? Do you feel pressure to help with housework, cooking, siblings or other relatives? Even if there is no pressure to do these things, do you find yourself wandering away from the computer to deal with them anyway? Do family, friends or housemates engage in social activities, games or other things in close proximity to where you work? All these things can make a difference between passing and failing. Maybe these things were tolerable during high school or university. GSoC, however, is a stepping stone into professional life and that means making a conscious decision to shut those things out and focus. Some students have the ability to manage these distractions well, but it is not for everybody. Think about how leading sports stars or musicians find a time and space to be "in the zone" when training or rehearsing, this is where great developers need to be too. Some students find the right space in a public library or campus computer lab. Some students have been working in hacker spaces or at empty desks in local IT companies. These environments can also provide great networking opportunities. Managing another summer job concurrently with GSoC It is no secret that some GSoC students have another job as well. Sometimes the mentor is aware of it, sometimes it has not been disclosed. The fact is, some students have passed GSoC while doing a summer job or internship concurrently but some have also failed badly in both GSoC and their summer job. Choosing one or the other is the best way to succeed, get the best results and maximize the quality of learning and community interaction. For students in this situation, now it is not too late to make the decision to withdraw from GSoC or the other job. If doing a summer job concurrently with GSoC is unavoidable, the chance of success can be greatly increased by doing the GSoC work in the mornings, before starting the other job. Some students have found that they actually finish more quickly and produce better work when GSoC is constrained to a period of 4 or 5 hours each morning and their other job is only in the afternoon. On the other hand, if a student doesn't have the motivation or energy to get up and work on GSoC before the other job then this is a strong sign that it is better to withdraw from GSoC now.PostBooks, PostgreSQL and pgDay.ch talk2016-05-23T19:35:02+02:002016-05-23T19:35:02+02:00https://danielpocock.com/postbooks-pgday-ch-2016<p>PostBooks 4.9.5 was recently released and the packages for <a href="https://packages.qa.debian.org/p/postbooks.html">Debian (including jessie-backports)</a>, <a href="https://launchpad.net/ubuntu/+source/postbooks">Ubuntu</a> and <a href="https://apps.fedoraproject.org/packages/postbooks">Fedora</a> have been updated.</p>
<h3>Postbooks at pgDay.ch in Rapperswil, Switzerland</h3>
<p><a href="http://www.pgday.ch/">pgDay.ch</a> is coming on Friday, 24 June. It is at the HSR Hochschule für Technik Rapperswil, at the eastern end of Lake Zurich.</p>
<p>I'll be making a presentation about Postbooks in the business track at 11:00.</p>
<h3>Getting started with accounting using free, open source software</h3>
<p>If you are not currently using a double-entry accounting system or if you are looking to move to a system that is based on completely free, open source software, please <a href="http://danielpocock.com/comparison-of-free-open-source-accounting-software">see my comparison of free, open source accounting software</a>.</p>
<p>Free and open source solutions offer significant advantages: flexibility, businesses can choose any programmer to modify the code, and use of SQL back-ends, multi-user support and multi-currency support are standard. These are all things that proprietary vendors charge extra money for.</p>
<p>Accounting software is the lowest common denominator in the world of business software, people keen on the success of free and open source software may find that encouraging businesses to use one of these solutions is a great way to lay a foundation where other free software solutions can thrive.</p>
<h3>PostBooks new web and mobile front end</h3>
<p>xTuple, the team behind Postbooks, has been busy developing a new <a href="https://github.com/xtuple/xtuple">Web and Mobile front-end</a> for their ERP, CRM and accounting suite, powered by the same PostgreSQL backend as the Linux desktop client.</p>
<p>More help is needed to create official packages of the JavaScript dependencies before the Web and Mobile solution itself can be packaged.</p>PostBooks 4.9.5 was recently released and the packages for Debian (including jessie-backports), Ubuntu and Fedora have been updated. Postbooks at pgDay.ch in Rapperswil, Switzerland pgDay.ch is coming on Friday, 24 June. It is at the HSR Hochschule für Technik Rapperswil, at the eastern end of Lake Zurich. I'll be making a presentation about Postbooks in the business track at 11:00. Getting started with accounting using free, open source software If you are not currently using a double-entry accounting system or if you are looking to move to a system that is based on completely free, open source software, please see my comparison of free, open source accounting software. Free and open source solutions offer significant advantages: flexibility, businesses can choose any programmer to modify the code, and use of SQL back-ends, multi-user support and multi-currency support are standard. These are all things that proprietary vendors charge extra money for. Accounting software is the lowest common denominator in the world of business software, people keen on the success of free and open source software may find that encouraging businesses to use one of these solutions is a great way to lay a foundation where other free software solutions can thrive. PostBooks new web and mobile front end xTuple, the team behind Postbooks, has been busy developing a new Web and Mobile front-end for their ERP, CRM and accounting suite, powered by the same PostgreSQL backend as the Linux desktop client. More help is needed to create official packages of the JavaScript dependencies before the Web and Mobile solution itself can be packaged.FOSSASIA 2016, pgDay Asia 2016 and MiniDebConf Singapore2016-02-16T17:39:25+01:002016-02-16T17:39:25+01:00https://danielpocock.com/fossasia-2016-pgday-asia-minidebconf-singapore<p>The <a href="http://2016.fossasia.org">FOSSASIA 2016 conference</a> is taking place next month, 18-20 March at the <a href="http://www.science.edu.sg/">Science Centre Singapore</a>. The FOSSASIA community has also offered to host a <a href="https://wiki.debian.org/FOSSASIA/MiniDebConf2016">MiniDebConf Singapore 2016</a> and <a href="http://2016.pgday.asia/">pgDay Asia 2016</a>. With sufficient interest from volunteers and participants, these events could do a lot to raise the profile of free software in the region.</p>
<p>Applications from speakers and exhibition tables are still possible <a href="http://2016.fossasia.org/speaker-registration">using the form</a>.</p>
<h2>Real-time communications technology at FOSSASIA 2016</h2>
<p>We are currently discussing a <a href="https://lists.fsfe.org/pipermail/free-rtc/2016-February/000191.html">Real-time lounge and demo area</a> for FOSSASIA, hopefully with a live linkup to the FSF's <a href="https://libreplanet.org/2016/">LibrePlanet 2016 in Boston</a>.</p>
<p>FOSSASIA have invited a number of developers to speak about SIP, XMPP, WebRTC and peer-to-peer communications solutions. Hopefully exact attendance and scheduling can be publicised soon.</p>
<h2>Sponsors needed</h2>
<p>Bringing leading free software developers to Singapore is not easy and further sponsorship is needed to ensure all the speakers who would like to participate can get there. If you or your organization can help with funding or accommodation <a href="mailto:contact@fossasia.org?subject=FOSSASIA%20sponsorship&cc=daniel@pocock.pro">please make contact</a>.</p>
<h2>Google Summer of Code</h2>
<p>If you <a href="https://danielpocock.com/getting-selected-for-google-summer-of-code-2016">want to be selected for Google Summer of Code 2016</a> and you live in Singapore or a neighbouring country, FOSSASIA could be a great opportunity to meet potential mentors, hack on things together and talk about project ideas. Free software development is a community activity and the more you engage with the community, the more confident mentors are likely to be about selecting you.</p>
<h2>Questions and contact</h2>
<p>For general questions about FOSSASIA 2016 and Singapore, please ask the <a href="https://groups.google.com/forum/#!forum/fossasia">FOSSASIA mailing list</a>. For questions about the MiniDebConf, see <a href="http://lists.debconf.org/mailman/listinfo/debconf-discuss">debconf-discuss</a> and for pgDay Asia, please join the <a href="https://groups.google.com/forum/#!forum/pgday-asia">pgday-asia mailing list</a> or otherwise try <a href="http://www.postgresql.org/community/lists/subscribe/">pgsql-general or the seasiapug regional list</a>.</p>The FOSSASIA 2016 conference is taking place next month, 18-20 March at the Science Centre Singapore. The FOSSASIA community has also offered to host a MiniDebConf Singapore 2016 and pgDay Asia 2016. With sufficient interest from volunteers and participants, these events could do a lot to raise the profile of free software in the region. Applications from speakers and exhibition tables are still possible using the form. Real-time communications technology at FOSSASIA 2016 We are currently discussing a Real-time lounge and demo area for FOSSASIA, hopefully with a live linkup to the FSF's LibrePlanet 2016 in Boston. FOSSASIA have invited a number of developers to speak about SIP, XMPP, WebRTC and peer-to-peer communications solutions. Hopefully exact attendance and scheduling can be publicised soon. Sponsors needed Bringing leading free software developers to Singapore is not easy and further sponsorship is needed to ensure all the speakers who would like to participate can get there. If you or your organization can help with funding or accommodation please make contact. Google Summer of Code If you want to be selected for Google Summer of Code 2016 and you live in Singapore or a neighbouring country, FOSSASIA could be a great opportunity to meet potential mentors, hack on things together and talk about project ideas. Free software development is a community activity and the more you engage with the community, the more confident mentors are likely to be about selecting you. Questions and contact For general questions about FOSSASIA 2016 and Singapore, please ask the FOSSASIA mailing list. For questions about the MiniDebConf, see debconf-discuss and for pgDay Asia, please join the pgday-asia mailing list or otherwise try pgsql-general or the seasiapug regional list.Comparison of free, open source accounting software2015-12-08T22:17:15+01:002015-12-08T22:17:15+01:00https://danielpocock.com/comparison-of-free-open-source-accounting-software<p>There are a diverse range of free software solutions for accounting.</p>
<p>Personally, I have been tracking my personal and business accounts using a <a href="https://en.wikipedia.org/wiki/Double-entry_bookkeeping_system">double-entry</a> accounting system since I started doing freelance work about the same time I started university. Once you become familiar with double-entry accounting (which doesn't require much more than basic arithmetic skills and remembering <a href="https://en.wikipedia.org/wiki/Debits_and_credits">the distinction between a debit and a credit</a>) it is unlikely you would ever want to go back to a spreadsheet.</p>
<p>Accounting software promoted for personal/home users often provides a very basic ledger where you can distinguish how much cash goes to rent, how much to food and how much to the tax man. Software promoted for business goes beyond the core ledger functionality and provides helpful ways to keep track of which bills you already paid, which are due imminently and which customers haven't paid you. Even for a one-man-band, freelancer or contractor, using a solution like this is hugely more productive than trying to track bills in a spreadsheet.</p>
<h3>Factors to consider when choosing a solution</h3>
<p>Changing accounting software can be a time consuming process and require all the users to learn a lot of new things. Therefore, it is generally recommended to start with something a little more powerful than what you need in the hope that you will be able to stick with it for a long time. With proprietary software this can be difficult because the more advanced solutions cost more money than you might be willing to pay right now. With free software, there is no such limitation and you can start with an enterprise-grade solution from day one and just turn off or ignore the features you don't need yet.</p>
<p>If you are working as an IT consultant or freelancer and advising other businesses then it is also worthwhile to choose a solution for yourself that you can potentially recommend to your clients and customize for them.</p>
<h3>The comparison</h3>
<p>Here is a quick comparison of some of the free software accounting solutions that are packaged on popular Linux distributions like Debian, Ubuntu and Fedora:</p>
<table>
<tr>
<th>Product</th>
<th><a href="http://danielpocock.com/tags/postbooks">Postbooks</a></th>
<th><a href="http://www.tryton.org/">Tryton</a></th>
<th><a href="http://www.gnucash.org/">GnuCash</a></th>
<th><a href="http://ledgersmb.org/">LedgerSMB</a></th>
<th><a href="https://furius.ca/beancount/">Beancount</a> (see <a href="http://www.cyrius.com/blog/beancount/ledger2beancount/"></a>)</th>
<th><a href="https://www.ledger-cli.org/">Ledger(-cli)</a></th>
<th><a href="http://hledger.org/">hledger</a></th>
<th><a href="https://firefly-iii.org/">Firefly III</a></th>
<th><a href="http://homebank.free.fr/">HomeBank</a></th>
<th><a href="http://skrooge.org/">Skrooge</a></th>
<th><a href="https://kmymoney.org/">KMyMoney</a></th>
<th><a href="http://badernageral.github.io/">BG Financas</a></th>
<th><a href="http://www.grisbi.org/">Grisbi</a></th>
<th><a href="https://www.invoiceninja.org/"/>Invoice Ninja</a></th>
</tr>
<tr>
<th>GUI</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>N</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>Y</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td>Y</td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td>N</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Web UI</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>N</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>Y</td> <!-- hledger -->
<td>Y</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>N</td> <!-- Skrooge -->
<td>N</td> <!-- KMyMoney -->
<td>N</td> <!-- BG Financas -->
<td>N</td> <!-- Grisbi -->
<td>Y</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th><a href="https://sandstorm.io/">Sandstorm</a> UI</th>
<td>N</td> <!-- Postbooks -->
<td>N</td> <!-- Tryton -->
<td>N</td> <!-- GnuCash -->
<td>N</td> <!-- LedgerSMB -->
<td>N</td> <!-- beancount -->
<td>N</td> <!-- ledger(-cli) -->
<td>Y</td> <!-- hledger -->
<td>Y</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>N</td> <!-- Skrooge -->
<td>N</td> <!-- KMyMoney -->
<td>N</td> <!-- BG Financas -->
<td>N</td> <!-- Grisbi -->
<td>N</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Multi-user</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>N</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>N</td> <!-- Skrooge -->
<td>N</td> <!-- KMyMoney -->
<td>N</td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td>Y</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>File storage</th>
<td>N</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>N</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>Y</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td>N</td> <!-- BG Financas -->
<td>N</td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>SQL storage</th>
<td>Y - PostgreSQL</td> <!-- Postbooks -->
<td>Y - PostgreSQL</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>N</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td>Y</td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td>Y - MySQL</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Multi-currency</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>A/R</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td>Y</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>A/P</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>VAT/GST</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td>N</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Inventory</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>N</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>N</td> <!-- HomeBank -->
<td></td> <!-- Skrooge -->
<td>N</td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td>N</td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Linux</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td>Y</td> <!-- GnuCash -->
<td>Y</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>Y</td> <!-- HomeBank -->
<td>Y</td> <!-- Skrooge -->
<td>Y</td> <!-- KMyMoney -->
<td>Y</td> <!-- BG Financas -->
<td>Y</td> <!-- Grisbi -->
<td>Y</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Windows</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td></td> <!-- GnuCash -->
<td></td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td></td> <!-- HomeBank -->
<td></td> <!-- Skrooge -->
<td></td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td></td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Mac OS</th>
<td>Y</td> <!-- Postbooks -->
<td>Y</td> <!-- Tryton -->
<td></td> <!-- GnuCash -->
<td></td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td></td> <!-- HomeBank -->
<td></td> <!-- Skrooge -->
<td></td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td></td> <!-- Grisbi -->
<td></td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>Technology</th>
<td>C++, JavaScript, Node</td> <!-- Postbooks -->
<td>Python</td> <!-- Tryton -->
<td>C</td> <!-- GnuCash -->
<td>Perl</td> <!-- LedgerSMB -->
<td>?</td> <!-- beancount -->
<td>?</td> <!-- ledger(-cli) -->
<td>?</td> <!-- hledger -->
<td>?</td> <!-- Firefly III -->
<td>C</td> <!-- HomeBank -->
<td></td> <!-- Skrooge -->
<td></td> <!-- KMyMoney -->
<td>Java</td> <!-- BG Financas -->
<td></td> <!-- Grisbi -->
<td>PHP, Laravel</td> <!-- Invoice Ninja -->
</tr>
<tr>
<th>License</th>
<td>CPAL</td> <!-- Postbooks -->
<td>GPL3</td> <!-- Tryton -->
<td>GPL2</td> <!-- GnuCash -->
<td>GPL2</td> <!-- LedgerSMB -->
<td>GPL2</td> <!-- beancount -->
<td>BSD</td> <!-- ledger(-cli) -->
<td>GPL3</td> <!-- hledger -->
<td>GPL3</td> <!-- Firefly III -->
<td></td> <!-- HomeBank -->
<td></td> <!-- Skrooge -->
<td></td> <!-- KMyMoney -->
<td></td> <!-- BG Financas -->
<td></td> <!-- Grisbi -->
<td>Attribution Assurance (BSD)</td> <!-- Invoice Ninja -->
</tr>
</table>
<p>The table doesn't consider Odoo (formerly OpenERP) because <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=633587">the packages were considered buggy</a> and are not maintained any more, it is replaced by Tryton. <a href="http://www.compiere.com/">Compiere</a> and <a href="http://adempiere.org/">Adempiere</a> are other well known solutions but they haven't been packaged at all.</p>
<p/>
<h3>Features in detail</h3>
<p>While the above list gives a basic summary of features, it is necessary to look more closely at how they are implemented.</p>
<p>For example, if you need to report on VAT or GST, there are two methods of reporting: cash or accrual. Some products only support accruals because that is easier to implement. Even in commercial products that support cash-based VAT reporting, the reports are not always accurate (I've seen that problem with the proprietary Quickbooks software) and a tax auditor will be quick to spot such errors.</p>
<p>The only real way to get to know one of these products is to test it for a couple of hours. Postbooks, for example, provides the <a href="https://packages.debian.org/search?keywords=postbooks-schema-demo">Demo database</a> so you can test it with dummy data without making any real commitment.</p>
<h3>User interface choices</h3>
<p>If you need to support users on multiple platforms or remote users such as an accountant or book-keeper, it is tempting to choose a solution with a web interface. The solutions with desktop interfaces can be provisioned to remote users using a terminal-server setup.</p>
<p>The full GUI solutions tend to offer a richer user interface and reporting experience. It can frequently be useful to have multiple windows or reports open at the same time, doing this with browser tabs can be painful.</p>
<h3>File or database storage</h3>
<p>There are many good reasons to use database storage and my personal preference is for <a href="http://danielpocock.com/tags/postgresql">PostgreSQL</a>.</p>
<p>Using a database allows you to run a variety of third-party reporting tools and write your own scripts for data import and migration.</p>
<h3>Community and commercial support</h3>
<p>When dealing with business software, it is important to look at both the community and the commercial support offerings that are available.</p>
<p>Some communities have events, such as <a href="http://danielpocock.com/postbooks-4.7-packages-xtuplecon-award">xTupleCon for Postbooks</a> or a presence at other major events like <a href="http://fosdem.org">FOSDEM</a>.</p>
<h3>Summary</h3>
<p>My personal choice at the moment is <a href="http://danielpocock.com/tags/postbooks">Postbooks</a> from <a href="http://www.xtuple.com">xTuple</a>. This is because of a range of factors, including the availability of both web and desktop clients, true multi-user support, the multi-currency support and the PostgreSQL back-end.</p>There are a diverse range of free software solutions for accounting. Personally, I have been tracking my personal and business accounts using a double-entry accounting system since I started doing freelance work about the same time I started university. Once you become familiar with double-entry accounting (which doesn't require much more than basic arithmetic skills and remembering the distinction between a debit and a credit) it is unlikely you would ever want to go back to a spreadsheet. Accounting software promoted for personal/home users often provides a very basic ledger where you can distinguish how much cash goes to rent, how much to food and how much to the tax man. Software promoted for business goes beyond the core ledger functionality and provides helpful ways to keep track of which bills you already paid, which are due imminently and which customers haven't paid you. Even for a one-man-band, freelancer or contractor, using a solution like this is hugely more productive than trying to track bills in a spreadsheet. Factors to consider when choosing a solution Changing accounting software can be a time consuming process and require all the users to learn a lot of new things. Therefore, it is generally recommended to start with something a little more powerful than what you need in the hope that you will be able to stick with it for a long time. With proprietary software this can be difficult because the more advanced solutions cost more money than you might be willing to pay right now. With free software, there is no such limitation and you can start with an enterprise-grade solution from day one and just turn off or ignore the features you don't need yet. If you are working as an IT consultant or freelancer and advising other businesses then it is also worthwhile to choose a solution for yourself that you can potentially recommend to your clients and customize for them. The comparison Here is a quick comparison of some of the free software accounting solutions that are packaged on popular Linux distributions like Debian, Ubuntu and Fedora: Product Postbooks Tryton GnuCash LedgerSMB Beancount (see ) Ledger(-cli) hledger Firefly III HomeBank Skrooge KMyMoney BG Financas Grisbi Invoice Ninja GUI Y Y Y N ? ? ? ? Y Y Y Y Y N Web UI Y Y N Y ? ? Y Y N N N N N Y Sandstorm UI N N N N N N Y Y N N N N N N Multi-user Y Y N Y ? ? ? ? N N N N Y Y File storage N Y Y N ? ? ? ? Y Y Y N N SQL storage Y - PostgreSQL Y - PostgreSQL Y Y ? ? ? ? N N Y Y Y Y - MySQL Multi-currency Y Y Y Y ? ? ? ? N Y Y Y A/R Y Y Y Y ? ? ? ? N Y Y Y Y A/P Y Y Y Y ? ? ? ? N Y Y Y VAT/GST Y Y Y Y ? ? ? ? N N Y Y Inventory Y Y N Y ? ? ? ? N N N Linux Y Y Y Y ? ? ? ? Y Y Y Y Y Y Windows Y Y ? ? ? ? Mac OS Y Y ? ? ? ? Technology C++, JavaScript, Node Python C Perl ? ? ? ? C Java PHP, Laravel License CPAL GPL3 GPL2 GPL2 GPL2 BSD GPL3 GPL3 Attribution Assurance (BSD) The table doesn't consider Odoo (formerly OpenERP) because the packages were considered buggy and are not maintained any more, it is replaced by Tryton. Compiere and Adempiere are other well known solutions but they haven't been packaged at all. Features in detail While the above list gives a basic summary of features, it is necessary to look more closely at how they are implemented. For example, if you need to report on VAT or GST, there are two methods of reporting: cash or accrual. Some products only support accruals because that is easier to implement. Even in commercial products that support cash-based VAT reporting, the reports are not always accurate (I've seen that problem with the proprietary Quickbooks software) and a tax auditor will be quick to spot such errors. The only real way to get to know one of these products is to test it for a couple of hours. Postbooks, for example, provides the Demo database so you can test it with dummy data without making any real commitment. User interface choices If you need to support users on multiple platforms or remote users such as an accountant or book-keeper, it is tempting to choose a solution with a web interface. The solutions with desktop interfaces can be provisioned to remote users using a terminal-server setup. The full GUI solutions tend to offer a richer user interface and reporting experience. It can frequently be useful to have multiple windows or reports open at the same time, doing this with browser tabs can be painful. File or database storage There are many good reasons to use database storage and my personal preference is for PostgreSQL. Using a database allows you to run a variety of third-party reporting tools and write your own scripts for data import and migration. Community and commercial support When dealing with business software, it is important to look at both the community and the commercial support offerings that are available. Some communities have events, such as xTupleCon for Postbooks or a presence at other major events like FOSDEM. Summary My personal choice at the moment is Postbooks from xTuple. This is because of a range of factors, including the availability of both web and desktop clients, true multi-user support, the multi-currency support and the PostgreSQL back-end.reSIProcate 1.10 release2015-10-29T13:20:46+01:002015-10-29T13:20:46+01:00https://danielpocock.com/resiprocate-1.10-release<p><a href="https://www.resiprocate.org">reSIProcate</a> 1.10.0 was <a href="http://list.resiprocate.org/archive/resiprocate-announce/msg00008.html">released a few weeks ago</a> and after going through the various QA cycles has become available in packages for Debian jessie-backports, EPEL6 and EPEL7 and the latest releases of Fedora and Ubuntu.</p>
<p>Key features of the 1.10.x branch:</p>
<ul>
<li>The <em>repro</em> SIP proxy now has support for <a href="https://github.com/resiprocate/resiprocate/blob/master/repro/create_postgresql_reprodb.sql">PostgreSQL databases</a>. The <a href="http://rtcquickstart.org">RTC Quick Start Guide</a> also has more details about <a href="http://rtcquickstart.org/guide/multi/user-authentication-databases.html#user-authentication-sql">using PostgreSQL with multiple VoIP servers</a> such as a combined repro/Asterisk installation. There is also a script to <a href="https://github.com/resiprocate/resiprocate/blob/master/reTurn/psql-user-extract">manage the TURN server user database using PostgreSQL tables</a>.</li>
<li>Integrated presence server in the <em>repro</em> SIP proxy</li>
<li>WebSocket authentication (for <a href="http://rtcquickstart.org/guide/multi/webrtc.html">WebRTC</a>) can now use URL parameters instead of cookies. This is also supported in the <a href="http://drucall.org">DruCall v2.3 release</a>. The key benefit of this feature is that the SIP proxy no longer needs to be using the same domain and certificate as the web server or Drupal site making it ideal for virtual hosting.</li>
<li>Improvements to TLS, boosting compatibility and adding support for PFS</li>
</ul>
<p>A 1.10.1 release was tagged yesterday and is not yet widely available in packages. This release is only significant for people using RADIUS authentication and keen to change from the FreeRADIUS-client library to <a href="http://radcli.github.io/radcli/">radcli</a>.</p>reSIProcate 1.10.0 was released a few weeks ago and after going through the various QA cycles has become available in packages for Debian jessie-backports, EPEL6 and EPEL7 and the latest releases of Fedora and Ubuntu. Key features of the 1.10.x branch: The repro SIP proxy now has support for PostgreSQL databases. The RTC Quick Start Guide also has more details about using PostgreSQL with multiple VoIP servers such as a combined repro/Asterisk installation. There is also a script to manage the TURN server user database using PostgreSQL tables. Integrated presence server in the repro SIP proxy WebSocket authentication (for WebRTC) can now use URL parameters instead of cookies. This is also supported in the DruCall v2.3 release. The key benefit of this feature is that the SIP proxy no longer needs to be using the same domain and certificate as the web server or Drupal site making it ideal for virtual hosting. Improvements to TLS, boosting compatibility and adding support for PFS A 1.10.1 release was tagged yesterday and is not yet widely available in packages. This release is only significant for people using RADIUS authentication and keen to change from the FreeRADIUS-client library to radcli.Skype outage? reSIProcate to the rescue!2015-09-21T19:19:19+02:002015-09-21T19:19:19+02:00https://danielpocock.com/skype-outage-resiprocate-to-the-rescue<p>On Friday, the reSIProcate community released the <a href="http://list.resiprocate.org/archive/resiprocate-devel/msg08950.html">latest beta of reSIProcate 1.10.0</a>. One of the key features of the 1.10.x release series is <a href="http://list.resiprocate.org/archive/repro-users/msg00923.html">support for presence (buddy/status lists) over SIP</a>, the very thing that is currently <a href="http://tech.slashdot.org/story/15/09/21/1235250/status-problems-break-skype-for-many-users-quick-fix-promised">out of action in Skype</a>. This is just more proof that free software developers are always anticipating users' needs in advance.</p>
</p>reSIProcate 1.10.x also includes other cool things like support for <a href="http://www.postgresql.org">PostgreSQL databases</a> and <a href="http://list.resiprocate.org/archive/resiprocate-devel/msg08948.html">Perfect Forward Secrecy</a> on TLS.</p>
<h3>Real free software has real answers</h3>
<p>Unlike Skype, reSIProcate is genuine free software. You are free to run it yourself, on your own domain or corporate network, using the same service levels and support strategies that are important for you. That is real freedom.</p>
<h3>Not sure where to start?</h3>
<p>If you have deployed web servers and mail servers but you are not quite sure where to start deploying your own real-time communications system, please check out the <a href="http://rtcquickstart.org/">RTC Quick Start Guide</a>. You can <a href="http://rtcquickstart.org/guide/multi">read it online</a> or <a href="http://rtcquickstart.org/guide/RTCQuickStartGuide.pdf">download the PDF e-book</a>.</p>
<h3>Is your community SIP and XMPP enabled?</h3>
<p>The Debian community has a federated SIP service, supporting standard SIP and WebRTC at <a href="https://rtc.debian.org">rtc.debian.org</a> for all Debian Developers. XMPP support was tested at DebConf15 and will be officially announced very soon now.</p>
<p>A similar service <a href="http://danielpocock.com/free-and-open-webrtc-for-the-fedora-community">has been developed for the Fedora community</a> and it is under evaluation at <a href="https://fedrtc.org">fedrtc.org</a>.</p>
<p>Would you like to extend this concept to other free software and non-profit communities that you are involved in? If so, please feel free to contact me personally for advice about how you can replicate these successful initiatives. If your community has a Drupal web site, then you can install everything using packages and the <a href="http://drucall.org">DruCall</a> module.</p>
<h3>Comment and discuss</h3>
<p>Please join the <a href="https://lists.fsfe.org/mailman/listinfo/free-rtc">Free-RTC mailing list</a> to discuss or comment</p>On Friday, the reSIProcate community released the latest beta of reSIProcate 1.10.0. One of the key features of the 1.10.x release series is support for presence (buddy/status lists) over SIP, the very thing that is currently out of action in Skype. This is just more proof that free software developers are always anticipating users' needs in advance. reSIProcate 1.10.x also includes other cool things like support for PostgreSQL databases and Perfect Forward Secrecy on TLS. Real free software has real answers Unlike Skype, reSIProcate is genuine free software. You are free to run it yourself, on your own domain or corporate network, using the same service levels and support strategies that are important for you. That is real freedom. Not sure where to start? If you have deployed web servers and mail servers but you are not quite sure where to start deploying your own real-time communications system, please check out the RTC Quick Start Guide. You can read it online or download the PDF e-book. Is your community SIP and XMPP enabled? The Debian community has a federated SIP service, supporting standard SIP and WebRTC at rtc.debian.org for all Debian Developers. XMPP support was tested at DebConf15 and will be officially announced very soon now. A similar service has been developed for the Fedora community and it is under evaluation at fedrtc.org. Would you like to extend this concept to other free software and non-profit communities that you are involved in? If so, please feel free to contact me personally for advice about how you can replicate these successful initiatives. If your community has a Drupal web site, then you can install everything using packages and the DruCall module. Comment and discuss Please join the Free-RTC mailing list to discuss or comment