 Right. Second attempt. I am Jim to Martens and my talk is about digital pitfalls in local politics. And in the background you can see the screenshot of the start page of the system I'm going to talk about. But before we get to that, some info on the political background. What is the issue with local politics in Hamburg? What do you hear? What kind of news do you hear from local politics these days? There is the tragic incidents when a local politician, Walter Lübcke, was murdered in the city of Kassel in the state of Hesse. But generally finances are tight. Swimming pools and libraries are closing. There is an infrastructure apocalypse. And shortly, local politics are mostly making negative headlines in Germany. Positive issues are rarely noticed. It doesn't mean that there is no positive news to report. But mostly they are not related to the commune as such. Now, on to Hamburg. And the question would be, the city has a long name which is called the Free and Hanseatic City of Hamburg. Many of you will know the Hanseatic League, the old trade link. But Hamburg was a free city in the Holy Roman Empire. After the Napoleon Wars ended, when the Holy Roman Empire was dissolved, Hamburg kept far-reaching privileges. And it called itself a free city. It was free of any subordinate rulings as it had been in the Holy Roman Empire. It was what was called an empire city at the time. And Hamburg has remained a federal state, has remained a double role of being a city under federal state, just like the city of Bremen and Berlin. Hamburg, outside its town walls, which are still marked by the planter named Lohmann Park and the wall tunnel, that was the actual city proper and everything outside that area, the districts of St. Pauli and St. Georg and so on, were actually outside the city boundary. And Hamburg had so-called rural fiefdoms or rural rulerships which included quite far-reaching places such as Cookshafen and Gestacht, which are far away from the actual city or federal state these days. And the Hamburg Senators were acting rulers for these areas. Most of these were then raised into suburbs and directly placed under city ruling, such as St. Georg, where the whole of the Senate was under control. And the Greater Hamburg Act in 1937 made some of these areas part of the state of Saxony or lower Saxony these days, and others were then incorporated into the city itself. And with this Greater Hamburg Act, the city of Lübeck, which also had its own independence, became part of Prussia. And one year later, in 1938, Hamburg became a Einheitsgemeinde, a unitary commune. What does that mean? For one thing, Hamburg is a federal state in Germany, and the term federal state doesn't really appear in the Constitution in the basic law, but it is used a lot. But Hamburg is a commune as well, which is the smallest legal entity in the structure of German law. And there is a rule that says that the competencies of the commune cannot be taken away by the federal state level, but with Hamburg, the situation is special. And also, many cities in Germany have districts as well, are part of a rural district, and Hamburg does not have that either. So the federal state of Hamburg incorporates the city of Hamburg, which has no district, which acts as a district as well, so that level of politics is involved, and then the city itself. Now, the Hamburg parliament is the legislative of the federal state, but also the city council of the Hamburg commune in other federal states. This is part of the executive, which shows that there is a double rule for the Hamburg parliament. Hamburg is further divided below the area of the commune. There are districts, which are Altona, Amsputl, Hamburg, North, Wantsbeck, Bergdorf, Harburg, and Hamburg Central. And each of these districts has a district administration with a district assembly or parliament, which is a committee of the administrative level, so it's part of the executive, although it is being elected in Hamburg elections. And the speciality in Hamburg, which always comes up in news, is the so-called evocation, which means that the Senate, the Hamburg executive, can instruct, can issue instructions and take on executive roles, even if a specific administration or a district assembly would actually be responsible. Now, let's come to the elections that elect these assemblies. The election period is five years, and it rules on building plans. It distributes certain funds and can ask questions to the administration. And we cannot make any binding rulings on the actions of the administrative at the high level, and that leads to certain issues, especially in the area of transport. There is a so-called lower transport authority, which is actually linked to police commissions, and this is not subordinate to the district level. It is actually subordinate to the interior administration of Hamburg as a whole. So the districts have no legal lever to make any changes or rule about lowering speed limits, for example, if this authority says no, then there is no way of moving forward there. Now, on to the digital aspect of this talk. We're using a system called ALRIS, which was developed by a company called CCEGov. And through this tool, the so-called printed matters are made available. What are these printed matters? It's everything that is a question, a query, an application, everything that is somewhat relevant, a piece of writing is part of that system and has a unique number with which it's identified. It's grouped into election periods, the numbering system. I think we are currently in the 21st legislative period. So that's the first part of the number, then followed by an increasing number. This tool also distributes the funds for meetings. And now let's move on to the state website in full color. This doesn't look that modern to put it mildly. It hasn't been, it's not being worked on. I've, I didn't, this is not a full HD screenshot, just a section, but it looks a bit last century. Now, on to some of the activities that you have to perform regularly, which is to download a piece of writing, a printed matter. And that should be the basic thing to do, right? That is the elementary activity. That's what file servers were made for. And then you download things from that. Now, I'll take you through a step-by-step instruction and you can count the number of steps or clicks. It takes the first step is to log into the system. And as you can see, this cannot be found on the start page of Al-Ristat, but on the service portal of the city of Hamburg. That in itself is, is, has been developed a new, it's, it's kind of mobile friendly. And I have, I'm logged in in the screenshot already. But that is the login screen. And if you have not, if you are not logged in and go to this page and try to log in, you will then go to a, get to a error page. But if you can log in successfully, you will directly be taken to this page. This is an online service in the service portal of Hamburg to which I have access and then have four things to click on. That is similar to other service portals. If I access the same page through another link, I will first have to click on my area and then I get a list of things I have access to. And with this extra access I have as a member of the assembly, I have this one service that I've shown you. I'll click the red arrow and get to this page. I have to click on start here. And then that takes me to the landing page. That is the view I get as a logged in member of an authenticated member. Looks a bit different. You have a log out button. You can see which meetings you're invited to. You can see something about session funds. And you can actually hand in applications online. But that is normally happening through the parliamentary parties and their offices. Now if you click on invite to disclaimer, this is not a current screenshot. This is from the autumn last year. But it's still factually correct because at the moment there are no sessions. There are none that I can be invited to. Which we will soon see in the calendar. But if there was an invitation here, I would see the date of that session, the time, and there would be a link to it and the place where the meeting room is. The meeting calendar is clearly dated. This is from April. I will show you what's happening in April. Now we are on the second weekend. It's the 12th of April today. And apart from this main committee meeting and another meeting on the 30th, there is nothing happening this month because of corona. But that shows you quite nicely what the normal load of session is. I don't have to be at every committee meeting. I'm not a member of all the committees. I'm in the regional committee and two subject committees. I'm in a meeting together with the district assembly that is for appointments a day. And then there are two meetings of the parliamentary party. So six states where I have just to be present. And then there's time for writing petitions and things like that. And the look is very 80s, I think, with this folder look there. I move on and click on one of the meetings. You have the agenda for that meeting with a nice clip graphic included there. I would arrive on such a page if I had an item in the invitations list and clicked on that. That will take me to the agenda for that meeting. There is the public and the non-public part of the meeting. And on the right you have the written materials. There is a link and a button, which I think are doing the same thing. But the interesting thing is on the upper right. You see the agenda and the invitation in writing and the materials. So exactly what I want to download. So that was a super complicated way of navigating to those. But it gets funnier or worse however you want to see it. Now consider for a short time, take a break for a few seconds, how this should be implemented in HTML, what is behind this look. Because the question of course is could I, which I can do at the Hamburg Parliament, if I were not using the login portal, if I was a public visitor and wanted to see what the agenda was for a meeting, could I share a deep link for people to get to the agenda directly, for them not to click through directly. A stable, fixed URL. I was asking myself if I can do that. So I'll give you some 10 seconds. Right, so let's look at how it's implemented in HTML. Wonderful table design. And if you think back when divs were introduced in HTML, that was, and when you think that HTML5 is now the current version. So tables really are an anti-pattern. That is still being used productively. And all these feelings can be found in one table row, which is one. And the table cell is all the way through this source view. And that contains another table with one pixel image in one of the cells. And it seems that the rows are from the left to the right, rather from the top to the bottom. And you can see forms in table cells, right. Each of these links, what looks like links is actually a form. So there's a form for accessing the agenda. I've marked the relevant fields here and the action. And there is a hidden input there, the Dolph DNR. There are options, a hidden input value 64, and there's a button which I click on. So these are actually buttons in HTML. And then I considered, how can I get a stable link from that? What is Dolph DNR, for example? That is the... If you consider, that could be the... If you expand this with no launch of German, that could be the running number of the document. Action is 2027.asp. I don't know what that is for, but this is the action. So if you put these together to get parameters, you have the number and the options equal 64. And this is probably PDF. I don't know. I've tried to change that. Would they not get a PDF page? And it is possible to turn this into get parameters rather than post parameters. So I can put this into the address line, add it to the action, and then get to the same page. So that gives you, in a new tab, a temporary view with the PDF viewer. And I can download it from there. Now, could this be a persistent link? Kind of through certain details, but did this now get me to a link I can share? No. Well, it's a clear yes and no. It's persistent in the sense that the link will always lead to the correct document. But for some reason, which is completely unclear to me, you have to access the start page before accessing that link. Even if you use the public site, which requires no logon, you have to access the start page first, and then you can go directly to that URL in the same tab without manually navigating there. Then it works. Otherwise, it does not. So some kind of session ID, a clear is set without which the whole thing does not work. So apparently the design target was to make it as difficult as possible to share documents. So then I thought, challenge accepted. Can I somehow manage to not have to click so much and save valuable time? Now, consider what you have to do. We have a login. I have to click on start here, and then on being invited, go to the meeting, download all the three documents. It's quite monotonous, right? So I thought, okay, what can I use to automatize this? Something like Selenium perhaps, which is normally used for browser testing, but maybe for a scraper as well, could be used for that. Of course, for the login, I need authentication data, which I don't want to save in the source code, which would be bad, particularly in an open source software that I would like to publish. You shouldn't put any authentication data in there, so it needs a config file, which is not committed, but which at runtime should be known to the software. I may turn this into a Python packet using Firefox and Gecko driver and Selenium, and it's available on pypy.org here. I'm not just saying that it is accessible. You can download and install it in Python. But it's not a perfect solution. It's not mobile-friendly for one thing, because neither Android or iOS can run Python. So I need a mobile-first index page with links to the downloaded documents, which I built using Bootstrap 4, put it in Uberspace and run as a cron job, and hid behind an HD access file, because the documents that I can download as a member contain non-public sections. So I need to protect the access to that. I cannot make it public to the world, and this is all stored in the index.html. And there are some problems with Selenium, because at Uberspace, where headless mode is used, I can run it, but the cron job, running out as a cron job will lead to errors, not at the moment, because there are no sessions at the moment, but there are errors, and I haven't been able to resolve these errors yet and all to see what's behind those errors. So, enough theory. Let's go to some practice and show you the source code. The whole thing starts with imports. That's relatively standard to fixed links that I've stored, which I use as forward links. The district of Amphibyl leads me to the public start page for the district, and the first one up here leads me to this login page of the service portal, with the correct forward link, so that I will be taken back to the right page and not need an extra click. Standard config options, default config options, which I used, if no config file is found, it's then created with the standard option, otherwise it's read in, and here Firefox is started. The login page is opened and the login performed. Then the page with the start here button is loaded, and then a page, I haven't explained it with the SIO12.asp, page has to be opened. This represents the invited to meetings page. So that is the server address for that, for whatever reasons. And from that page, I get all the meetings that are on the table and download all the documents and close the browser. Login is simple. You find the elements in this page and click the button. GetMeetings is a table that has different colors, implemented through classes, ZL12 and ZL11. I go through the individual elements, the individual entries for the sessions, the meetings. Every session is a row in this table which has various tables, table cells in itself. From the first column, I get the day. On the second, I get the time. And the fifth column has the link to the agenda and a link object which gets me to the actual agenda. And the name of the session is the link text of that same link. The location is the next column. So I add all these into parameters and Python 3.7. And the data class makes it very simple to write all these getters and setters. It's very simple to write. Then downloading documents uses this D007 page, which I've mentioned. I'm opening this agenda link. The overview for the agenda. I then search these links through XPath expressions, get the links for the agenda, the materials for the session, the meeting. And then I open these temporary PDF pages and download the PDFs from there. And I do that for all the meetings I've found. And finally, here you have functions that assemble those links, getting the day, passing the day, an abbreviated name for the actual committee. I produce in a separate method or function. And I then kind of replace certain abbreviations with their official ones. So that much about the source code. I'm now going to run this to show you. You'll see a Firefox window popping up, which is then driven by Selenium, entering all these data. I click start. I click on invitations. There is nothing to see there because there are no current meetings that I'm invited to. But this, of course, was way faster than me clicking through this manually. So that saves me valuable time. If this has all been executed, once this has all been executed, an index HTML is generated, which looks like this. The last committee that I was invited to was on the 18th of March, the last meeting. That was the GNUV WDI. This was the green sustainability, environmental consumer protection, economy and digitalization meeting. If you think that computer scientists love abbreviations, politicians love them way, way more. And if you click on these, you have the invitation, the materials, the agenda. You could implement something there, too. And this file, of course, is not publicly accessible because it contains non-public parts for obvious reasons that cannot be made accessible. But the whole thing still works if I make this smaller. This is still mobile-friendly, whereas a directory index generated by a standard Web server without bootstrap or any other options would still show you the desktop page, which would give you very small, three very, very small links, not as nice. Right, going back to the presentation. So what could be a solution? Because this is a real workaround. It works if you log in. It can only work under certain conditions. It's not perfect. So what would be a more fundamental solution for the whole problem? And that led me to OPAL. And by their own statements, this is a standard API for accessing public town council information to make these available in an open data sense for as many purposes as possible. This looks nice. I contact these people. The latest information on the website is kind of old, and they showed me that they are still active. But at a quite good state, they don't have to make as many changes these days. The next question, of course, is how widespread is the standard? Is it something that could be implemented? And because if not, you could stop. But all relevant products for town council information systems have actually implemented support for OPAL. And our software in version four does support it and uses it. It's part of the product description. There is one paragraph that says that OPAL is supported. So I thought, okay, this is great, right? Well, not really. I didn't factor in the administration here. There are some certain hurdles. First, a lack of understanding of open data. I talked about the digital strategy in Hamburg. I've referred to that. I've looked at that. That's not too bad. But if you look at the glossary there and that digital strategy and search open data, this is defined as data without license, which I kind of digested for a while because no license normally means that all rights are reserved, which is the exact opposite of open data, to make data public because copyright protections apply by default. I have to give away these rights to make it public. So I have to explicitly put it under a different license to make it usable as open source and open data. Okay, maybe they thought of Microsoft and said we don't want a license pop-up to avoid all this, but that clearly shows a lack of understanding. Now, the use of such an interface doesn't seem to be very clear to the administration. Introducing it, of course, costs money. You'd need a more modern UI, which would be necessary anyway, but of course, a certain investment is involved. So without getting a tangible use because a better UI probably isn't regarded as an actual benefit. You have, of course, also to educate people in the use of the new interface, so that all costs money and the administration doesn't seem to be needing it. And so the purpose of the standard is not to improve the administrative working with the data, but other entities, whether it is companies or private people, have them use that better and make it processable through by-machines. And if the administration doesn't see a sense of it for themselves, they don't seem to see a need for it. So I was thinking of planning for public tendering, which is happening in transport policy. When they change timetables, they get on the offensive, they try to improve public offerings and improve frequencies, even if the usage numbers in public transport doesn't seem to call for that. And that is, of course, a chicken and egg problem. If services are not there, the need is not there and people will not use public transport. So they understood they have to invest and create an offering to create a demand and make it possible that demand grows. But in IT, the thinking seems to be the opposite. They seem to tell themselves, no one is using it, so why should we introduce it? So another chicken and egg thing, if no city implements this, of course it cannot be used, which should be clear, but it seems to the administration. So the tip of the iceberg or the crown of the whole thing, when I was talking to the administration about this, I got the information that they regard OPAL as a proprietary standard, which made me think proprietary standard has the administration any clue? Have they looked on the website a single time? Have they wondered what proprietary actually means? Obviously not, because OPAL is neither proprietary nor is it a standard that is used by a few makers. It was developed with a few makers, yes, in order to be used by the public. Standards without use are worthless and not worth the paper they're printed on. So they were working together, certain makers to see that these standards are implemented. So this situation means that I couldn't get any further. So what can be done? First, you should apply for jobs. Open jobs in the administration. If IT jobs are advertised, apply or jobs that are touched on IT, because if you don't get competent people into the administration, things cannot improve. The competency doesn't fall down from the heavens. It has to be inserted and introduced into an organization. The second path is finding a legal foundation and instruct civil servants to do something, because then they will do something and tell it to them that there has to be a machine-readable access to these data, because there is a transparency portal which contains PDF, which they regard as the Crem de la Crem. That, of course, is the most minimal thing that you can do. It's not Crem de la Crem. It's not the best you could think of, because there's a lot of meta-information missing. The information which committees this resolution has gone through, which the results, the voting results were, all that's missing if I just have a closed PDF, which is also not that machine-readable, rather than a plain text enriched with meta-information. So to get to a positive example, we look at the city of Munich. They have a crappy town council information system, but the data is being offered through an interface, which I think is called Munich Transparent, which has much better optics, and I think Opal.org links to it as a positive example, too. And also, put pressure on politics. I have the interior perspective as a member of the assembly, but if you look at where people with IT competence are placed on voting lists, whom you can elect, this, again, is shocking. And if there is no competency in Parliament, things cannot change. There are competent people in the Green Party and other parties. But the one thing is what the party committees have. You have people there that, for example, are members of the CCC who can then insert their competency. But if these people are not in the decisive positions in the parties, someone as a member of the Hamburg Parliament, who really, with passion, stands up for IT and not as something that is part of their portfolio, then you won't make much progress. So that, hopefully, with a positive outlook, is what I can offer you as something that can be done. And if you're looking for contact info, here's my website, which also contains my public GPG key. I have a Twitter account. I have a GitHub account. Twitch, just look for two Martins and you will find me. And the last few minutes, I look forward to your questions. Right. Thanks for this interesting talk, dear two Martins. And we'll go through the questions now. There was one question about OPAL, which was already answered. Next would be, how can you avoid having a stack of complicated scripts at the end as a workaround for the underlying scripts? So as a technical info, I cannot hear the questions. That's why I'm answering only with a delay. I heard the question over the stream. I'm not sure what to say about that, about the stack of scripts. So there's obviously some communication going on between the organizers and the stream has a lot of delay. That's, of course, annoying to have such a delay. Next question, is this actually compliant if you, as an employer, hang on? Is it compliant if you, as an assembly member, store non-public documents on systems by other providers, disregarding the protection by an HD access file? What are your rules on documents security and taking documents home or storing it on your own servers as parliament or assembly members? Yeah, good question. Really, we have all our private devices where we store these documents and these private devices are more or less secured, I guess. We have deputy email addresses, but many have their own email device and use some free webmail system to exchange these documents. So IT security is not very well set up. And so the document is behind an HD access protection. It's not ideal, but looking at the risks, it's not particularly worse than having these documents sent in the clear over public email servers. So I think my solution there is even more secure than what people normally do. An interesting question. How can you make IT jobs in administrative authorities more attractive? So one thing definitely is payment. The Hamburg IT subsidiary data port actually isn't paying that badly. So they supply IT services to countries here in the region and they don't pay that badly. So it's like it always is. If the current system is not so great, the pain to improve it is a disincentive compared to a job where it can set something up from the beginning. So people starting those jobs might be actually out of their own conviction. It's a bit like postponing doing your homework. So in the end you have to do it. That would be my approach. Better pay and help with frustration tolerance. Thank you. Time slot is nearing its end and it seems there are many questions in the pad. I assume that you could perhaps respond to some of the other through social media or direct contacts. Those are the methods that with this online conference we have to fall back to. But thanks a lot for your talk. Yeah, pleasure.