Plone Conf 2018 - Day2: Lightning Talks
This is a modal window.
Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.
Formale Metadaten
Titel |
| |
Serientitel | ||
Anzahl der Teile | 53 | |
Autor | ||
Lizenz | CC-Namensnennung 3.0 Deutschland: Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. | |
Identifikatoren | 10.5446/51905 (DOI) | |
Herausgeber | ||
Erscheinungsjahr | ||
Sprache |
Inhaltliche Metadaten
Fachgebiet | |
Genre |
Plone Conference 201851 / 53
2
3
11
12
13
16
19
20
21
24
34
35
37
38
39
40
42
50
52
00:00
BeschreibungskomplexitätSystemprogrammierungElastische DeformationProgrammbibliothekGruppenoperationLoginInhalt <Mathematik>SchlussregelSkriptspracheDesintegration <Mathematik>AppletProgrammierumgebungEreignishorizontCachingStatistikSoftwarewartungVerschlingungMaßstabSpezialrechnerAutomatische IndexierungVererbungshierarchieDatenstrukturEindeutigkeitAggregatzustandDatenstrukturDatenverwaltungMathematikRelationale DatenbankSelbst organisierendes SystemStatistikProgrammbibliothekMAPIntegralAutomatische IndexierungKlon <Mathematik>GruppenoperationHochdruckInhalt <Mathematik>MultiplikationPolygonzugE-MailVerschlingungQuick-SortElastische DeformationAnpassung <Mathematik>PunktRepository <Informatik>VererbungshierarchieInformationsspeicherungSkriptspracheBestimmtheitsmaßDifferentePatch <Software>LoginMultiplikationsoperatorSchlussregelCachingDienst <Informatik>Attributierte GrammatikInformationZellularer AutomatVorlesung/KonferenzBesprechung/InterviewComputeranimation
04:36
Lineares zeitinvariantes SystemBeschreibungskomplexitätGruppenoperationStellenringWhiteboardE-MailPROMGammafunktionLatent-Class-AnalyseLeistung <Physik>EnergiedichteQuellcodeInformationsspeicherungGebäude <Mathematik>Gerichteter GraphCASE <Informatik>Formale SpracheInformationTopologieMAPGrenzschichtablösungInhalt <Mathematik>Projektive EbeneTranslation <Mathematik>EnergiedichteService providerWeb SiteMultiplikationsoperatorComputeranimationVorlesung/Konferenz
07:32
SystemprogrammierungBeschreibungskomplexitätTopologieSpieltheorieMeterRechenschieberEindringerkennungLemma <Logik>W3C-StandardVollständiger VerbandStabHalbleiterspeicherProgrammierumgebungPROMLeistung <Physik>Physikalisches SystemSchedulingAutorensystemParametersystemProzess <Informatik>Coxeter-GruppeComputersicherheitFormation <Mathematik>Gemeinsamer SpeicherSpezielle unitäre GruppeOffene MengeUmsetzung <Informatik>EreignishorizontAutorisierungMultiplikationsoperatorDigitale PhotographieBenutzerbeteiligungWeb-DesignerMereologieElektronisches ForumWeg <Topologie>SoftwareentwicklerComputeranimationVorlesung/KonferenzXML
13:03
BeschreibungskomplexitätSystemprogrammierungRechenschieberLesezeichen <Internet>App <Programm>Coxeter-GruppeFormale GrammatikSichtenkonzeptZeitzoneMultiplikationsoperatorVorlesung/KonferenzComputeranimation
13:38
Komplex <Algebra>BeschreibungskomplexitätBitHardwareGrundraumComputervirusSkriptspracheSicherungskopieClientWeb SiteVorlesung/KonferenzComputeranimation
14:26
DatenbankSkriptspracheSicherungskopieMini-DiscWeb logDatenbankAggregatzustandWiederherstellung <Informatik>FehlermeldungInstantiierungDatenfeldSkriptspracheSchlüsselverwaltungObjekt <Kategorie>Computeranimation
15:20
E-MailDatenbankSkriptspracheSicherungskopieMini-DiscWeb logSicherungskopieObjekt <Kategorie>Computeranimation
16:06
SkriptspracheEbeneTransaktionE-MailGarbentheorieWiederherstellung <Informatik>DateiverwaltungWiederherstellung <Informatik>E-MailPunktInformationsspeicherungSkriptspracheSicherungskopieElektronische PublikationComputeranimation
17:15
EbeneBaumechanikSystemprogrammierungMarketinginformationssystemBeschreibungskomplexitätGüte der AnpassungSkriptspracheClientObjekt <Kategorie>TypentheorieXMLUMLVorlesung/Konferenz
18:34
Open SourceDigitale PhotographieYouTubeVorlesung/Konferenz
19:20
Elastische DeformationEbeneW3C-StandardSichtenkonzeptInklusion <Mathematik>Weg <Topologie>Vorlesung/KonferenzComputeranimation
20:00
EbeneRegulärer GraphMathematische LogikMinkowski-MetrikGebäude <Mathematik>GoogolDisk-ArrayCodeArithmetisches MittelMailing-ListeMAPKonfiguration <Informatik>FlächeninhaltWorkstation <Musikinstrument>Rechter WinkelComputeranimationBesprechung/Interview
20:47
BeschreibungskomplexitätSystemprogrammierungGeradeVollständiger VerbandCodeFormale SpracheLokales MinimumDruckverlaufFormation <Mathematik>Sampler <Musikinstrument>Notebook-ComputerVererbungshierarchieUnrundheitTurnier <Mathematik>EreignishorizontNP-hartes ProblemTouchscreenSchlussregelRechter WinkelDemo <Programm>Künstliches LebenVorlesung/Konferenz
22:43
GEDCOMVollständiger VerbandKlasse <Mathematik>Lemma <Logik>Innerer PunktLokales MinimumVorzeichen <Mathematik>CodeKonfiguration <Informatik>DatensichtgerätWeb-SeiteKartesische KoordinatenMailing-ListeCanadian Mathematical SocietySichtenkonzeptRechter WinkelREST <Informatik>SoftwareentwicklerBeweistheorieVollständigkeitFront-End <Software>Digitale PhotographieKeller <Informatik>Computeranimation
24:36
BeschreibungskomplexitätSystemprogrammierungZusammenhängender GraphMultiplikationsoperatorEinsVorlesung/Konferenz
25:30
BefehlsprozessorInstantiierungInformationsspeicherungElektronische PublikationEinfache GenauigkeitKonfiguration <Informatik>DefaultThreadDatenmodellEreignishorizontKlasse <Mathematik>LoopProzess <Informatik>Total <Mathematik>SynchronisierungDifferenteMarketinginformationssystemKonfiguration <Informatik>Total <Mathematik>BefehlsprozessorBenchmarkBitHybridrechnerLastLoopWarteschlangeKonfigurationsraumGüte der AnpassungVerzweigendes ProgrammProzess <Informatik>FehlermeldungInstantiierungStrömungsrichtungKlasse <Mathematik>ThreadElektronische PublikationEndliche ModelltheorieDifferenteSelbstrepräsentationCheat <Computerspiel>Einfache GenauigkeitDefaultSoftwareDateiverwaltungSynchronisierungSoftwaretestEreignishorizontDatenparallelitätZweiChord <Kommunikationsprotokoll>Computeranimation
30:03
BeschreibungskomplexitätSystemprogrammierungBildschirmfensterGraphische BenutzeroberflächeSichtenkonzeptLesezeichen <Internet>EntscheidungsmodellProzessautomationProdukt <Mathematik>Mooresches GesetzProdukt <Mathematik>Gebäude <Mathematik>CodeComputerspielPhysikalisches SystemProgrammfehlerInformationsspeicherungMailing-ListeTrennschärfe <Statistik>SchlüsselverwaltungPlug inDebuggingErwartungswertComputeranimation
31:11
SpieltheorieBildschirmfensterGraphische BenutzeroberflächeSichtenkonzeptLesezeichen <Internet>ServerEntscheidungsmodellProzessautomationProdukt <Mathematik>Exogene VariableURLCodeE-MailElektronische PublikationDatenmodellPunktgitterWitt-AlgebraZeichenketteDefaultTypentheorieMailing-ListeDemo <Programm>VersionsverwaltungInstallation <Informatik>DatensatzKonfigurationsraumLokales MinimumWurm <Informatik>MarketinginformationssystemInnerer PunktMusterspracheDickeKomponente <Software>ENUMPlug inGatewayVersionsverwaltungOpen SourceCodeDatenbankDatensatzImplementierungMathematikValiditätHalbleiterspeicherProgrammbibliothekProdukt <Mathematik>Ganze FunktionSoftwaretestLokales MinimumPhysikalisches SystemProjektive EbeneSpeicherabzugVerschlingungExogene VariableKrümmungsmaßPunktUmwandlungsenthalpieAbzählenSichtenkonzeptEndliche ModelltheorieEinfache GenauigkeitDickePlug inDemo <Programm>MusterspracheSoftwareentwicklerGeradeKardinalzahlCASE <Informatik>Offene MengeDomain <Netzwerk>Objekt <Kategorie>App <Programm>In-Memory-DatenbankComputeranimation
35:11
BeschreibungskomplexitätInformationMarketinginformationssystemFormation <Mathematik>Vorlesung/Konferenz
36:09
VektorrechnungNotepad-ComputerWeb logVollständiger VerbandVersionsverwaltungStrom <Mathematik>W3C-StandardWürfelOffene MengeQuellcodeMathematikGoogolKomponente <Software>BinärdatenKontrollstrukturÜberlagerung <Mathematik>ComputersicherheitProjektive EbeneNotepad-ComputerZusammenhängender GraphFirewallOpen SourceDifferenteComputeranimation
36:57
Lokales MinimumGammafunktionZahlzeichenChi-Quadrat-VerteilungMessage-PassingKategorie <Mathematik>SpieltheorieQuick-SortDifferenteSystemplattformMereologieProjektive EbeneKlasse <Mathematik>Offene MengeMinimalgradMessage-PassingProgramm/Quellcode
38:36
BeschreibungskomplexitätVorlesung/Konferenz
39:39
VideokonferenzKlasse <Mathematik>SpeicherabzugKontrollstrukturWeb SiteDokumentenserverSoftwareQuellcodeLesezeichen <Internet>Kontinuierliche IntegrationOpen SourceContent ManagementEbeneRechenschieberTopologieVektorrechnungBeschreibungskomplexitätPROMOffene MengeBildschirmsymbolStandardabweichungKontextbezogenes SystemIndexberechnungGewöhnliche DifferentialgleichungComputersicherheitSkriptspracheParametersystemPolygonzugGebundener ZustandInformation-Retrieval-SystemDienst <Informatik>Proxy ServerCachingKonvexe HülleComputervirusInformationsspeicherungSkriptspracheCodeSpieltheorieProzess <Informatik>StandardabweichungComputeranimationVorlesung/Konferenz
41:24
BeschreibungskomplexitätVollständiger VerbandMultiplikationsoperatorVorlesung/Konferenz
42:16
ATMDefaultOnline-KatalogKonfigurationsdatenbankSoftwaretestRoboterTaskInhalt <Mathematik>DatenmodellDigitalfilterTypentheorieDatensichtgerätQuadratzahlVererbungshierarchieSichtenkonzeptDatenstrukturVerzeichnisdienstInteraktives FernsehenTemplateMaßerweiterungEinfügungsdämpfungElektronische PublikationCodeArithmetisches MittelSichtenkonzeptMultiplikationsoperatorTypentheorieKlon <Mathematik>BitVererbungshierarchieCLIVirtualisierungComputeranimation
43:36
KonfigurationsraumChi-Quadrat-VerteilungBrowserZeitbereichSichtenkonzeptFontDefaultDatenmodellWidgetVersionsverwaltungMailing-ListeSoftwareentwicklerInformationOffene MengeServerVerzeichnisdienstInformationsspeicherungGammafunktionTypentheorieTaskKlon <Mathematik>BitZahlenbereichVerschlingungDatenfeldMonster-GruppeSichtenkonzeptAuszeichnungsspracheWeb SiteEndliche ModelltheorieApp <Programm>CodePlug inInterface <Schaltung>Computeranimation
44:50
InformationBrowserGenerizitätTypentheorieOnline-KatalogAttributierte GrammatikStellenringSoftwareentwicklerMereologieTemplateDefaultKonfigurationsraumSichtenkonzeptMessage-PassingStellenringTranslation <Mathematik>SkriptspracheElektronische PublikationMultiplikationsoperatorURLComputeranimation
45:45
Produkt <Mathematik>EbeneFlächeninhaltKonfigurationsraumWeb SiteE-MailFormale SpracheNummernsystemComputervirusFahne <Mathematik>BitrateMarketinginformationssystemLokales MinimumMagnettrommelspeicherTrägheitsmomentInhalt <Mathematik>VersionsverwaltungCASE <Informatik>Digitale PhotographieTranslation <Mathematik>XML
46:25
BeschreibungskomplexitätFormation <Mathematik>
Transkript: Englisch(automatisch erzeugt)
00:00
All right, so for a lightning talk, I haven't actually seen very many simple talks just about add-ons that people can just use, and so in the lightning talk fashion, I'm just going to try to rip through as much as I can. One of the original Plone conferences, this is one from Retsu, from New Orleans,
00:22
there was a great time where someone was in a lightning talk trying to enumerate all the different add-ons they could without knowing what they were just by their package names, which was really fun, but I'm just going to see if I can get through what I have here in five minutes. All right, so there is a few
00:43
things that we have in our repo that are public, and we would love, some of this stuff has been forked, and we would love to push it back. I don't know who the original people are, so here we go. Collective notifications is a way of notifying users or groups of users. When you click on the link, it auto marks it as
01:03
red, or you can manually click it, and then there's an external service adapter for email, so the notification will go through. Plone email push notifications for Apple is what we're using. Collective audit log, we forked it, we don't know who it is, we'd like to push these changes back. Use a
01:20
relational database to store audits, add, edit, delete workflow, log-ins, undos for us, and some custom features, things that we added such as being able to search, sort by different columns, fixed quite a few of the issues that we saw in it, and I think the content rules stuff works. Trash can, we couldn't find
01:42
anything that was simple that you would just simply be able to delete it and it would go off into a trash can without patching and doing all these other weird things. So after the item is deleted, it can be restored. Ability to expunge it, and then there's a little script to expunge it after X days. Sentry, I don't know how anyone's using it here. We had a package that we had
02:03
info.getSentry or something. We've updated it to use the latest Raven, expose all the different Sentry attributes to it. Notifications can now be sent via Celery, and there's some JavaScript integration that actually works, but it's really finicky, and that's probably the reason why most of this conference is talking around JavaScript, is
02:22
because it's finicky. The Redis cache really should be called collective.dogpile, but that's not really a great name, but basically it's basically, it's a, uses dogpile.cache, so any back-end for dogpile will support caching, and it supports old-style cache
02:41
managers, yes, with ZMI statistics. Toolbox is something that it would be neat for the Plone community to have something like this. I'm not sure how you'd organize it, but we have all these really boring scripts that we've written, and we've accumulated over years and years of just all sorts of different things. So it's a place that we document the
03:02
scripts, what they do, and it's sitting there. We'd love to have other people work on it. The elastic search index, we forked it, uses elastic search DSL, supports faceting, back ported to Plone 4 recently, and cell reintegration works well.
03:20
Collective library is this really weird thing for large organizations that basically have libraries where they can create folders and content structures, and you can create another library that has, that points to a parent library, and then that library will see the parents' folders and contents, and then they can add things inside of their child library. It's really strange. You give it a try.
03:42
It's really, really interesting. So if a parent does create a folder, a piece of content automatically, the child libraries will see it. Child libraries can also create content in the parent libraries transparently. A parent can delete its folders without removing the child library content. And a parent can mimic a child library structures
04:01
and then automatically things will show up in both the child. Got it. And so you can have really deep parentage, something like country, region, state, city, and have all these different sort of folder structures at each level. And there's some filtering adapters as well. More insanity is that you can actually have multiple
04:20
parent libraries, which is really, really interesting. And if you want to see something that really demonstrates some, some really deep magic of traversal, this is a really, really interesting package. It's really insane. Thank you.
04:42
Thank you very much. All right. After Alexander, we'll be Hiroki.
05:07
I would just like to see some of use cases of Plone at the conferences. We haven't seen a
05:22
lot in the last few days, so I want to show one we have done in the last time. The, which is an institution located here in Tokyo has done a project for
05:41
sustainability and energy within Japan. So the site is completely written for the Japanese audience in Plone because Plone can handle the Japanese languages perfectly, the translation, search on it. Thank you for
06:01
all the fixes in the search and everything of it. The nice thing is to do some larger stuff. So sometimes we have the information about it. Here, the idea is to make it possible for
06:20
the Japanese community to line up all the sustainable energy resources in the country and to scroll and look at them. So it's the possibility that you can just select one of the several provided projects around it, see it
06:43
on a map, get the information about it and everything. Well, Japanese is probably not the thing for all of us, so switching to English, the translation workflow and
07:01
everything goes smooth together, solving all the information in it, and that's what's Plone about. We are managing content and making it accessible for the people, and that's nice little project we are working on. And where is Philip? Thank you for all
07:25
the support and work you have done for that project. Thank you very much. Okay, Hiroki is up now, and next will be Matthew Wilkes.
07:43
So we have a hard deadline at 6.20 or 18.20 for the Foundation meeting after this, so anyone that we don't get to today will carry over to tomorrow.
08:14
Can you hear me? Okay, nice to meet you, and thanks for this great event.
08:24
I'm really enjoying this event, and I learned so much things, and I noticed that the Plone community is really like primary and really friendly, and talking about the container or accessibility was really interesting for me too. So why I'm here?
08:44
So because I'm using the Django memory, and I don't use Plone so much times or pyramid or so, I don't know well about the pyramid and so on, but I came here to know as a web a development or environment or
09:01
community, and I want to know something about the Python web, culture, or environment or some knowledge or some thing. Okay. My name is Hiroki, so please call me K-Y. I used Python and Django for 10 years,
09:23
and I'm the chairperson of the Django Congress JV, and I was one of the staff of the Plone symposium in Tokyo in 2015. So I introduce today and now I introduce you about Django Congress JV. So this is the biggest
09:43
event, I think, in the world, in Japan for Django, so more than 100 people attended this event, and there was both Japanese tracks and English tracks, and the event was mainly the one-day track for the sessions
10:03
and one day for the sprint. And here's a look at the presentation, this is the opening presentation, and this is nice shot, nice snapshot, making a conversation and sharing knowledge. And this is a TPSan comes
10:22
from Taipei and making presentation about I think the future of Django or async in the web development. So this is the second session, this is nice atmosphere,
10:40
and it's part of all of us, all attendees. So I think when I host some event or when I join the event, I think everyone is all of a role. I don't want to split the role, like your attendees or your
11:03
speakers or even your staff. I want to be all of kind of role, so for example, if you are just attendees, I will make a talk, if you think so, that if you can share knowledge next to you, or you can help our staffs, or you can collect
11:22
garbage or introduce something, so you can be even the staffs, and I want to make a role event and I want to do some harassment or something, and I want to make an event as really simple, so that there is a talk and sprint and sharing knowledge, it is really nice, and I think that
11:43
this forum conference is really like that, so I do like this event, and I enjoy it. So I will host a Django Congress JP in 2019 too, so on May, there isn't a correct schedule
12:00
anyway, but there will be English talks, even English talks available, so if you are interested in Django or some other web development, please join to the Django Congress dot JP. Okay, so, and also I will make the talk tomorrow
12:21
at day three, tomorrow morning, in the sixth floor, room D, start at 1040, the talk will be about Django and authorization, but it's not talk about Django mainly, so I learned a lot of things
12:40
from the Django security authorization and so on, so I conducted that system into the Django, so I'm talking about the security or authorization system, so if you are interested in some kind of talks, please join this talk. So thank you so much.
13:02
Thank you very much. Hello Matthew. Next up will be John Jordan and Dylan Jay.
13:20
For some filler time, Manabu had some questions for me. I have some questions for her. How about do you think Japan? So what do I think of Japan? I really enjoy it so far, the jet lag I don't enjoy so much, but that's not your fault.
13:40
But I have gotten to do a little bit of visiting and seeing around Tokyo, so that's been nice. Okay, Matthew, go ahead. Hello. Okay. Is this the most scary thing you can hear from a client?
14:03
So we had this very large university contact us saying we had a hardware failure six months ago and we're still running the site, but we can't run backups or pack anymore, so can you fix it, please? They tried it themselves first.
14:23
So we found this script online. It's not your fault. It's a really good script. It's not your fault. So this is a script that Mike just happened wrote, which is if you've got
14:41
a corrupt ZODB and you need to get some information out of it, then an FS recover didn't work, then you can try this. What it does is it patches around a bunch of POS key errors so that you can get the instance to start up, so that you
15:00
can go get the individual object you wanted, get the text of a field or something like that, and use that to rebuild your new database by just like copy and pasting the data. It doesn't fix it back to a working state. It lets you start the instance so you can do last-ditch data recovery.
15:24
Mike's quite clear about that. He says we can see what data can be saved, not this fixes everything. Anyway, so they ran that, and it deleted 1.7 gigabytes of their data, and generally we'd think that's probably meant that it hasn't worked very well and we shouldn't use this.
15:44
They said we've got that working apart from like two objects still need to be deleted, so can we pay you to delete those extra objects? You've just deleted 1.7 gig and you want me to delete more? By the way, they had a backup. They just didn't restore from it, which is the really upsetting bit.
16:03
If they'd just replaced the backup, it would all have been fine, but the problem is they didn't, and they carried on using it, and they have six months' worth of data that they need to be fixed. So I wrote a new script. It's inspired by FS-Recover, but it takes as a hint a known good ZODB from the past.
16:22
So you've got your file storage. It's file storage only. If you have a file storage that's an old backup and a file storage that has known corruption, and you're lucky enough that all the corruption happens in the place before the backup starts covering it, so if you could have restored from a backup and you just didn't think to do it
16:41
or you didn't realize there was corruption until too late, then this will help you. What it does is it runs through both ZODBs until it gets to the last point where there's overlap, and then it starts copying the new transactions in and fixing the headers and the back pointers so that it's
17:00
a valid ZODB. Then it runs FS-Recover again at the end just to be sure because it's all dark magic. Back in the day, we could just email these files to Jim, and he'd fix them for us. So you managed to run this, and it recovered with zero missing objects in about 40 minutes for
17:21
60GB data FS, and the GitHub gist, so if you ever have this problem, you can try this script and hopefully it will help. But yeah, good luck if you're in this situation, and hope your clients don't recover things themselves.
17:41
Thank you very much. Okay, John and Dylan, I guess you're just going to stand by. Next, after that, is Rob. Okay, one more question.
18:02
So what type of do you like Japanese food? Japanese food? Sushi? Yeah, I do enjoy sushi. Already ate? Oh, yeah, I've already had some. Yeah, we went to one of those places that all the
18:21
sushi comes around on the conveyor belt, so you just kind of look at it, you know, you don't always know what it is, but it looks good, so you grab it. I haven't died. Okay, so last year, Dylan, over there, kicked off PyCon in Thailand,
18:41
and assembled a team of helpers, and we charged in, and organized our first PyCon. The photo there is the photo of the venue that will be in again next year. We had Wes McKinney doing the keynote,
19:01
talking about data science and sustainability of open sources and scientific endeavors. All the talks are on YouTube, there's a YouTube channel, and will be next year. We had veterans joining us, and you can recognize the guy in yellow in front, I'm Manabu.
19:20
And we had first-timers, this guy came all the way down from the north of Thailand to give his first ever talk at a conference. And we had more firsts, that's someone's first conference, that's Dylan's young daughter attending the conference. We had people from about 20 countries, two days, three tracks, 40-plus
19:40
talks. We had a tie track as well, but most talks were in English, and most people speak English. The food is excellent, that's the lunch at the first day, I think it was. Those little things that look like dinosaurs are really fishes. Very tasty.
20:02
We had a code war, that was great fun, we were doing one later this year again. We put on a mean party, that was the highlight of the conference for a bunch of us. We sold out early bird tickets in five days, and we had a waiting
20:20
list. We had about 220 people in the end. So next year should be just as big at least, or bigger. We have no problem with accommodation and food, that's the map of the area on the right-hand side, there is the venue, the accommodation options nearby
20:40
are about 30 dollars or so a night. It's five minutes from the nearest public transport station. So yeah, join us, Thailand, line of beaches.
21:01
I just realised that we didn't explain what code war was, and we're going to run another one, and it's a really fun event that anyone can put on if you want to run an event that is cross-language, it's super fun. So the idea is that at any one, it's a tournament, so you start with eight teams. Each team has
21:20
one laptop that has a minimum of three people and a maximum of five people, and their code gets put up onto the screen, so their live coding head-to-head, first one to finish, wins the round. So they're not hard problems, but there's a lot of pressure, right? Everyone's watching your code, right? And we have funny commentary going on, we have silly
21:42
music, hopefully there's beer involved, and you get through tournament to the end, and yeah, super fun event. If you want to know the rules, it's online. Thanks. Come to Thailand next year. Thank you very much.
22:04
Actually, I promise I will go to Thailand next June, so please come to Aja again. And Bangkok is available in English,
22:24
cheaper nice foods, very, very nice place, so I want to return to Bangkok. Up next will be Thomas. Alright,
22:40
I'm going to show you a little demo first. So some people might have already seen this, this is boring indeed. We'll get to the good stuff, don't worry. Yeah, so this is a photo as you all know, you can browse through some items,
23:02
you can view the items, you can edit them, save everything, add another page, add some stuff there, save that as well,
23:20
and let's see what else. So we have some display options there to go to the list view, and you're saying well, what's special about this? We already saw this, right? And we did. Except the thing here is that the backend is running on is not blown, the backend is not guillotina,
23:40
just running a simple note application which I started with when I got here in Japan, I had the idea about why not just start something else to see if it works. And it does. And it implements the same API as Plone does, and it's not for your feature complete of course, but all the basics are there.
24:00
So why would I ever do that? So one thing is that maybe from the developers don't know a lot of the Python stack and this would be really easy for them. Another reason was that it's actually a proof of concept that if you have another CMS and if you just implement the same API as the Plone REST API has, you can actually use this on top of the other CMS, so maybe
24:21
you have a Django application or you have Drupal or WordPress or Typeword3 or just to name a few. If you implement the same API, you can actually just use Folda on top of that, so that was my idea. Thanks.
24:43
Okay, now we'll have Thomas, and after that is Nate. Actually, I am 10 times Plone component first in Washington DC, so I missed San Francisco, only San Francisco.
25:02
How many times? I think this one's my fifth. First one was DC and all the US ones since then plus Brazil. Haven't been to Europe yet. Do you want another country? Do you want to go to...
25:21
I would love to visit the entire world, so anywhere. So as we heard a couple of minutes ago, Plone 5.2 will run on Whiskey only for now, and yesterday I started to compare a couple of
25:43
Whiskey options because I was just interested in how it would work out. I prepared a Vagrant VM with two CPUs, two gigs of RAM running on current Ubuntu Bionic. I installed
26:00
Python 3.7.1 with pyenv and then a build-out coredef on the 5.2 branch that has just been released. And I was running a single Plone instance using file storage, so no CO of course, and Nginx in front of it. First
26:20
option is the default that everybody will get now. It's a Waitress using four worker threads. As a second option, I tested Cunicorn and in two different configurations. One is with four worker threads
26:40
with the default threading model. They call it sync. And second option is with four workers using gvent worker class, and for Cunicorn, there's a lot of other possible worker classes like eventlet, cheat thread, and tornado. I didn't test those.
27:02
Then I had two configurations for, I tested two configurations for MuWhiskey. One using the asyncio loop engine with four greenlet workers. And MuWhiskey also supports preforked processes, and
27:22
I was going for, because I was, that's important maybe, because I was, because I'm having a vacant VM with two CPUs. I thought it's maybe good to have processes instead of threads, so I went for a hybrid setup with two preforked processes, each running two
27:42
greenlet threads. And I was using good old HTTPERF and Apache benchmarking for just putting some load on those. Yeah. Setups. So, disclaimer,
28:02
this is in no way representative and what you're going to see now is not a recommendation for any of those setup, of those setups, it's just I want you to try it out and I want you to share. So, first, 1000 sequential requests using HTTPERF.
28:21
I wanted to use HTTPERF for the second test as well, but it turned out that it's not a good idea, because HTTPERF is much more persistent than Apache benchmarking and it will lead to a lot of 5.0x errors. Whereas Apache benchmarking, it just
28:41
seems to wait until the request queue is empty and then sent to the next. So, for the concurrent requests, I was using Apache benchmark. So, five concurrent requests and 1000 requests in total. Yes. So, this is the HTTPERF
29:01
chart. As I said, it's in no way representative and it's not a recommendation and I guess there's a lot of errors in it and as you can see, there's not a lot of difference in this chart also. It seems to be that unicorn using g-event is a bit slower than everything else, but it's not, it doesn't really matter, maybe.
29:25
You can see that there's quite a difference when we start having some concurrency. So, in general, it seems that geowisky using queenlet seems to be a bit faster. Waitresses is slower, but maybe
29:40
yeah, it's not significant in any way and as expected, the hybrid new whiskey configuration using two processes can make use of the two CPUs of the vagrant VM and therefore is yeah, fastest in this test. Yeah, that's all from me.
30:02
Thank you. Good luck, Nate. And up next is Eric Steele. Are you ready for jokes? Yeah, I got one. Yep, it broke.
30:21
No, it didn't. Did it? Yay. Okay, so we're building a new product. We want to make WooCommerce, owning a WooCommerce store is easy as owning a Shopify store. And I've had the privilege of working with Doman on this during the summer. And, you know, I don't care
30:41
about how cool your system is or how fast you can churn out code. I care about how stable it is and the resilience against stupid bugs. So for this, we're using the deployment happens in the Kubernetes cluster and we have React front end and there's a pyramid to basically drive the API that glues everything together. And I want to make sure that
31:01
if there's a plugin on the front there's a selection list of plugins that those keys actually match what the Kubernetes cluster expects. So we built, we started using Swagger. Swagger has recently donated the whole concept to the open source community and renamed the whole thing to open API.
31:21
So I'm going to be saying open API now is a new version of Swagger. And this is a short talk about how to do it with pyramid. So here we have a simple drinks API. You have a get, you have a post. You can try it out. So what I did today was I drank water. OK.
31:43
Up until this point. And then you can record a drink. Again you see how it should look. You say I want to try it out. You say I drank. I'm going to drink sake. Execute. I got 200 OK and what I had and you can just repeat this.
32:01
The good thing is because down here if you go to our models we see that the name of the drink is limited to 10 characters. So if I do where is it? A very long name. It doesn't matter.
32:23
I totally broke it. Let's see if I can do it again. Blah blah blah blah blah blah. I totally broke it.
32:41
What if I do this? Live demos. Yeah, totally broke it. In any case, it should work. I'm going to release the package this sprint. The idea is this is the code that you need for the entire API implementation. This is a very simple database implementation.
33:02
You have one object, a drink and this is in memory database. And then you have a get view and a record view. The point what I'm trying to make here is you get all the validation from the API. So if you submit a wrong schema, this code here would not even execute.
33:21
So you don't need any validation here, any ifs. And by having this little code here, that means you have way less tests because the OpenAPI core library already does all the tests for you. And also if you return something that doesn't make sense, that is not according to the API spec, your response will fail. So that's fantastic for front-end developers because they know that what they're
33:41
getting is actually what actually matches the API implementation. So the API specification. There's code. So this entire app, which works, I promise, is on zoopa slash minimal OpenAPI. I'm going to add tests and things to it during the sprint.
34:02
Besides the maximum length validators, you have a ton of other validators. You can do regex. You can also do your own custom validators, which I'm also going to add examples for. And if you want to see how this actually works in practice, there's a link here at the end. Full flat production API
34:20
spec, which is for our Wucard project. For example, here we have a pattern for subdomain validation. And if I go to plugins. If this changes, for example, the name of this plugin changes or we add a new plugin or remove a plugin,
34:41
React will not build because it takes this specification and builds enumerations out of it. Go will not compile because it takes it creates enumerations from the API and Python build will fail because mypy again checks against this specification. So this is this specification is a single source of truth
35:02
and if things change here, all of our systems will break until we fix
35:48
them and it's been fantastic. A lot of magic. That works out. And so we can so very
36:01
nice. So very useful for Japanese. Okay, thank you. This has nothing to do with Plone. I just wanted to talk about another Python project I've been playing around with. It's called Home Assistant. It is for home automation and all that kind of crazy fun
36:23
stuff. It is according to GitHub the 9th fastest growing open source project on GitHub this year. There is a very active community. Basically what it's allowing me to do is connect the currently integrated with over 1200
36:41
different component, home automation components, all kinds of various things. Basically lets me run it from home on a Raspberry Pi, sit it behind my firewall so most of this stuff can't get out and talk to all the things that are trying to mess around with it. And basically so like I can get a
37:01
basically combine a whole bunch of different things, different lights like platforms door locks, that sort of thing so I can you know turn on lights in my living room from here. We'll see if my wife texts me and asks me what the hell I'm doing. So turn things on check status while I'm away so because we always get about
37:21
two miles down the road and ask do we lock the door we can check that or do it automatically. It's all written in YAML which is YAML but there's also so besides just turning things off and on there's also a whole automation setup which is the fun part so it works in Python
37:41
so I can do all kinds of crazy things like so it's fall right now so weather's getting cold if the temperature's gonna be below 40 degrees tonight send me a message to remind me to turn on my furnace or if the kids have left the house and left the door open for more than two minutes I'll get a it'll shut off the heat and give me a notification.
38:02
I've been working on shock collars but they won't keep them on. And my favorite one is morning startup which will poll the iCalendar feed for my kids' school to find out what school day it is then I basically set up a morning announcement that checks the weather
38:20
tells them what they have at school today whether it's gym or art class that sort of thing and just is sort of like a morning alarm to let us know what's going on that day. So it's a fun project check it out. That's it.
38:44
And now we will hear from Yusei and after that will be our last lightning talk for today. Do you have anything else to talk about Manabu?
39:01
Okay. How how do you think the discomfort is? How was the discomfort? How do you think? Oh it's great. The food is awesome like all the snacks. You know lots of the snacks that we don't get
39:20
in the US you know not things that we normally eat so I love those little just the little things like the pandas yesterday and the little seaweed things. I enjoy those. Thank you very much. Okay. Hello.
39:45
Do you know it's possible to store NumPy array in Godb? I will show you a demonstration. So there is this Python package.
40:00
It makes possible to store NumPy array in Godb. So this is code. I wrote ecosystem method in job2. This is
40:22
Python script. Then you can see the persistent NumPy array is printed. And in background this
40:42
hoge method is repeatedly executed. So currently this array is becoming longer and longer and longer. Up.
41:10
Sorry. Anyway so it's possible so if you are interested in it please try this Python package.
41:21
Thank you. Okay. Mike Darstapin will be our final lightning talk. After that pretty soon we'll start the foundation meeting.
41:41
Everyone is welcome to attend. But I'm pretty sure you're not allowed to talk unless you are a foundation member. Last question. What do you know the Japanese sentence? America jendes?
42:02
America jendes. I am American. American people. It means American people. Okay. Thank you very much. Okay. I have a question for you. How much time do you think it takes to build
42:21
this really simple to do add-on for Plone? Yes. You're really fast. No. What? Three minutes? You're mean. Let me show you something.
42:49
Okay. We're using Plone CLI to create a Plone package. Then we create a content type todos. It's a container. We want
43:01
it to be globally editable. And then we add a todo item which is not globally editable but will also have parent todos. I speeded it up because I'm really slow typer. Now we add a view also
43:22
to Plone CLI. And then we have to do some customizations. In the background I just let it do the build-out and the virtual stuff. I go to the generated code. I put a little
43:40
bit. This is just markup. Then I have to adjust the Mac interface for the content type where the view should run on. And now I define my schema. I use a little snippet plugin which is also in collective for
44:01
VS code. So you can use this to create XML model definitions. So we basically we add two fields like title for task and status. Now we just
44:22
serve. We also have a link so you can open it. Especially for beginners this is more understandable. We just use the build-in build-out create a clone site, install the add-on, add
44:42
the todos, the app let's say. And we add
45:01
some todos. That's basically what you need. We still have time. Let's add some translations. Some locales.
45:22
All we need to do is we just have to create the locales folder then we use the update locale script. It will generate the files in it. We have to do it twice and then we have to pass
45:41
the locales files and after restarting it I switch the main language or add German in this case.
46:08
This is still the buggy version with the photo contents bug. There you can see a piece of translation.
46:21
That's basically it. Thank you.