-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
3069 lines (2625 loc) · 302 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title>meven's blog</title>
<link rel="self" type="application/atom+xml" href="https://meven.github.io/atom.xml"/>
<link rel="alternate" type="text/html" href="https://meven.github.io"/>
<generator uri="https://www.getzola.org/">Zola</generator>
<updated>2024-09-22T14:00:00+00:00</updated>
<id>https://meven.github.io/atom.xml</id>
<entry xml:lang="en">
<title>Dolphin plugins 24.08</title>
<published>2024-09-22T14:00:00+00:00</published>
<updated>2024-09-22T14:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/dolphin-plugins-24-08/"/>
<id>https://meven.github.io/dolphin-plugins-24-08/</id>
<content type="html" xml:base="https://meven.github.io/dolphin-plugins-24-08/"><p>Since dolphin-plugins 24.05, you can <code>git clone</code> from dolphin with dolphin-plugins git plugin.</p>
<p>Once the plugins are installed and <code>Git</code> is enabled in the context menu settings, you have this context menu action available:</p>
<img src="/captures/git-clone-context-menu.png" width="100%"/>
<p>And this shows this git clone dialog (with my french locale):</p>
<img src="/captures/git-clone-dialog.png" width="100%"/>
<p>You can paste a git repository url and it will fetch its branches.
If you happen to have a url in your clipboard or a <code>git clone</code> command line, it will directly extract it as the repository url.</p>
<p>This was <a href="https://invent.kde.org/sdk/dolphin-plugins/-/merge_requests/58">spearheaded</a> by Nikolai Krasheninnikov, thanks.
I participated a bit as well and reviewed it.</p>
<p>There is still opportunity to improve the git implementation, like having a better commit dialog.
That would be a nice and simple new contributor opportunity :)</p>
</content>
</entry>
<entry xml:lang="en">
<title>Berlin Goals sprint 2024</title>
<published>2024-05-05T14:00:00+00:00</published>
<updated>2024-05-05T14:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/berlin-goals-sprint-2024/"/>
<id>https://meven.github.io/berlin-goals-sprint-2024/</id>
<content type="html" xml:base="https://meven.github.io/berlin-goals-sprint-2024/"><p>As you have probably heard, two weeks ago a bunch of KDE contributors gathered in Berlin to attend to a sprint to move forward on <a href="https://kde.org/goals/">current KDE community Goals</a>.</p>
<p>I attended the sprint and it was a pleasure to get together with fellow KDE contributors, and discuss our experiences, our plans and aspirations.</p>
<h1 id="goal-work">Goal Work</h1>
<p>My main objective for this Goal was to get automated GUI testing merged for Dolphin.
This is important as it paves the way to better testing, accessibility improvements and power-usage measurement, making progress towards the three Goals at once.</p>
<p>I wanted to get this done, since last akademy, and I gave it a try but it wasn't fruitful then.
This time with <a href="https://kde.haraldsitter.eu/">Harald</a> around, <a href="https://invent.kde.org/sdk/selenium-webdriver-at-spi/">selenium webdriver at spi</a> author, I would get a chance to poke him to overcome my difficulties.</p>
<p>And indeed Harald was very helpful. It took me a while to setup properly my local testing environment.
But then I could update the existing MR by Marco and iron it up slightly to get <a href="https://invent.kde.org/system/dolphin/-/merge_requests/767">it merged</a>.</p>
<p>Another objective I had coming to Berlin, was improving KIO-'s CI-testing situation.
Currently a bunch of tests are failing and we don't require tests to pass for KIO.
KIO is a very important library for Dolphin, as such I spend an important part of my contributor time on improving it, so this is quite important to me.
I sent a <a href="https://invent.kde.org/frameworks/kio/-/merge_requests/1610">fix for a test</a> but CI can't really run this kind of test.
Those test the launch of programs using systemd, except our tests run inside containers which limits what tests can do at runtime.
We did a little progress, and I learned what needs to be done to fix this case.
We need some work on our dev-ops side of things for those ones.
A bunch other tests still need fixing.</p>
<h1 id="dolphin">Dolphin</h1>
<p>And I got busy doing Dolphin reviews.
A particular one of interests for developpers will be that there will be a <a href="https://invent.kde.org/sdk/dolphin-plugins/-/merge_requests/58">git clone dialog</a> in dolphin-plugins.
Nikolai Krasheninnikov, the feature contributor, and myself are still improving it to be both nice and very practical.</p>
<p>There is another feature I have been reviewing, but it is too early to speak about publicly.</p>
<p>I also for the first time tried out <a href="https://apps.kde.org/fr/neochat/">neochat</a> and I was pleased.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Dolphin 24.02</title>
<published>2024-03-16T10:30:00+00:00</published>
<updated>2024-03-16T10:30:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/dolphin-24-02/"/>
<id>https://meven.github.io/dolphin-24-02/</id>
<content type="html" xml:base="https://meven.github.io/dolphin-24-02/"><p>Since last <a href="https://apps.kde.org/dolphin/">Dolphin</a> version 23.08, I spent a lot of my time making sure the transition to KF6/Qt6 went smoothly for dolphin and its dependencies and plugins and thanks to many others contributions, in particular <a href="https://write.as/alexander-lohnau/">Alexander</a> and <a href="https://nicolasfella.de/">Nicolas</a>, this went well.
The objective being no-one would notice despite much code has changed and this mostly worked out.</p>
<h1 id="changes">Changes</h1>
<p>A few behaviors and default have changed.</p>
<p>Files and folders are now selected with a single-click and opened with a double-click.
This will mainly affect Neon Users, since most distros already had this behavior default.
You can select the single-click-open mode on the first page of systemsettings, as it concerns also Plasma, file/open dialog and other applications.</p>
<p>The extract here option in the menu now has the behavior of the old "extract here and detect subfolders".
This makes the menu less heavy on text while making the action more accessible.</p>
<p>Service menus will need some adaptation unfortunately, you will need to Moving them to a new location.
Usually <code>mv ~/.local/share/kservices5/ServiceMenus/* ~/.local/share/kio/servicemenus</code>. (Ensure to have destination directory created: <code>mkdir -p ~/.local/share/kio/servicemenus</code>)
You can read the <a href="https://develop.kde.org/docs/apps/dolphin/service-menus/">updated documentation</a>.</p>
<p>The <code>F10</code> shortcut now opens the menu, instead of creating a directory. That's an important change to improve accessibility by providing standard shortcuts. You can change it back if you want, and you can also use the the standard shortcut for this action <code>Ctrl+Shift+N</code>.</p>
<h1 id="new-features">New features</h1>
<p>The settings have been reorganized making it easier to find what you are looking for.
The Interface section regroups setitings regarding the UI elements of dolphin, and the view those that influences how the main view will display your files and folders.</p>
<p><a href="/captures/dolphin-24.02-settings.png" title=""><img src="/captures/dolphin-24.02-settings.png" with="100%"/></a></p>
<p>Shoutout to Dimosthenis Krallis for pulling it off, this wasn't an easy task especially for a not yet regular contributor.</p>
<p>Thanks to <a href="https://blogs.kde.org/authors/carlschwan/">Carl</a>, we got a very nice visual improvement to KDE application with breeze. I really enjoy the change to Dolphin.
Looking back at dolphin in plasma5 makes it glaring.</p>
<p>A small new feature, I added, is you can now middle click on a file to open it in the second application associated with its type.
Let's say you have an html file you normally open with your browser, but sometimes you want to edit it. Now instead of going to the open-with menu you can middle-click it. This works for scripts as well, opening them in your default editor instead of the second application assoctiated with their type.</p>
<p><a href="/captures/dolphin-24.02-quick-edit.png" title=""><img src="/captures/dolphin-24.02-quick-edit.png" width="100%"/></a></p>
<p>This was inspired by the fact that folders benefit from middle-click activations to open new tabs.
Making this behavior configurable might make sense, suggestions welcome, but this seems like a sensible default at least.</p>
<p><a href="https://wordsmith.social/felix-ernst/">Felix</a>, my fellow dolphin co-maintainer, did a bunch of ui-refinement, like the free space label in the status bar and some very nice <a href="https://wordsmith.social/felix-ernst/f10-for-accessibility-in-kf6">accessibility improvements</a>, including the <code>F10</code> shorcut change that now triggers the app menu by default.</p>
<p>You can open now open containing folders for <a href="https://invent.kde.org/system/dolphin/-/merge_requests/616">files in the Recent Files</a>.</p>
<h1 id="bug-fixed">Bug fixed</h1>
<p>Akseli Lahtinen made sure to <a href="https://invent.kde.org/system/dolphin/-/merge_requests/675">Resort directory size count after refreshing</a>.</p>
<p>And in total 32 were fixed between Dolphin 23.08.05 and Dolphin 24.02.0.
<a href="https://bugs.kde.org/show_bug.cgi?id=480098">480098</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=441070">441070</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=477897">477897</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=479596">479596</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=478724">478724</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=476670">476670</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=473999">473999</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=478117">478117</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=477607">477607</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=477288">477288</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=476742">476742</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=172967">172967</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=452587">452587</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=475547">475547</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=422998">422998</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=423884">423884</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=440366">440366</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=474951">474951</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=474999">474999</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=393152">393152</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=473775">473775</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=473377">473377</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=473513">473513</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=420870">420870</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=472912">472912</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=468445">468445</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=469354">469354</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=462778">462778</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=417930">417930</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=464594">464594</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=471999">471999</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=47197">47197</a></p>
<h1 id="new-code-new-bugs">New code, new bugs</h1>
<p>Unfortunately whenever you ship new code, you risk introducing new bugs, and even months of testing didn't iron them all.</p>
<p>One I think you could have spotted earlier, was that on X11, <a href="https://bugs.kde.org/show_bug.cgi?id=481952">panels are hidden after minimizing Dolphin window</a>.
Thanks to Nicolas fella, this was swiftly fixed and will reach users in next Dolphin release.
In the meantime, this is a good time to learn about the shortcuts for panels:</p>
<ul>
<li><code>F9</code>: toggle places panel</li>
<li><code>F11</code>: toggle information panel</li>
</ul>
<p>We now have a need process to build packages for Windows and Mac OS, Dolphin has not made the transition though.
I am working on it to bring latest dolphin to its Window and MacOS users.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Dolphin at Akademy 2023</title>
<published>2023-07-22T00:00:00+00:00</published>
<updated>2023-07-22T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/dolphin-at-akademy-2023/"/>
<id>https://meven.github.io/dolphin-at-akademy-2023/</id>
<content type="html" xml:base="https://meven.github.io/dolphin-at-akademy-2023/"><p>I am returning from akademy and I had a great time, meeting new people or people I had already worked with online.</p>
<p>In particular I was very happy to meet Felix, my fellow dolphin co-maintainer.
We get along very well together, this will only make our dolphin work more pleasant and efficient.</p>
<h1 id="dolphin">Dolphin</h1>
<p>We had a <a href="https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force#Organization">Bof</a> about dolphin on Tuesday.</p>
<p>You can have a look at the <a href="https://invent.kde.org/system/dolphin/-/issues/45#note_720629">notes</a> taken by Felix.
Unfortunately we didn't manage to have sufficient audio quality so that people online could properly participate.</p>
<p>Still with the amazing people present, we made some plans to improve dolphin search feature, the possibility of publishing dolphin on Windows Store and more.</p>
<p>I shared my interest in fixing <a href="https://bugs.kde.org/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=CONFIRMED&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Cdupecount%2Cvotes%2Ckeywords&amp;list_id=2409564&amp;product=dolphin&amp;query_format=advanced&amp;resolution=---&amp;resolution=FIXED&amp;resolution=LATER&amp;resolution=REMIND&amp;resolution=DUPLICATE&amp;resolution=WAITINGFORINFO&amp;resolution=BACKTRACE&amp;resolution=UNMAINTAINED">the most popular bugs, by votes or duplicate count</a>.
Those are usually hard but very rewarding to fix.</p>
<p>A perfect area for interested people willing to contribute to dolphin, would be to help on our <a href="https://invent.kde.org/system/dolphin/-/issues/36">setting redesign plans</a>.
If you are interested, you can pick some part of the changes and try to implement them as I did in <a href="https://invent.kde.org/system/dolphin/-/merge_requests/553">this MR</a> and join the <a href="https://go.kde.org/matrix/#/#kde-fm:matrix.org">KDE file management channel</a> to get some help and advice.</p>
<p>With the current KDE goals being Accessibility, Sustainability and Automation, it has made apparent that the <a href="https://invent.kde.org/sdk/selenium-webdriver-at-spi/">selenium-appium-at-spy</a> testing tool can greatly help dolphin in those three regards.
It allows to automate UI tests, by using the accessibility API present in applications (in Qt for instance). So for it to work we need dolphin to have good accessibility support. In turn this allows to automate test scenarios to measure energy consumption and ensure dolphin of its energy-efficiency.
The good news is that it is already in the pipe thanks to the work of <a href="https://notmart.org/blog/">Marco</a>.</p>
<p>Finally, Dolphin 23.08 is close to release, it will feature some bug fix and some small features:</p>
<ul>
<li>when hiding hidden files dolphin will also hide files files whose name ends with "~", ".bak" or "%". Technically files having the "application/x-trash" mimetype. This is configurable by editing mime type either in file association kcm or using the utility command <code>keditfiletype application/x-trash</code>.</li>
<li>Double clicking on a tab will dupicate the tab.</li>
</ul>
<h1 id="akademy">Akademy</h1>
<p>This my fourth akademy, and my second in-person, it has been great.</p>
<p>Conferences were very nice, I learned many new things. The goals are making nice progress and getting traction.</p>
<p>I attended the qml-c++-integration training by Kevin Krammer of <a href="http://kdab.com/">KDAB</a>.
It was an occasion to complete my Qml+C++ knowlegde, now I have a better understanding of <a href="https://doc.qt.io/qt-6/qtqml-syntax-objectattributes.html#attached-properties-and-attached-signal-handlers">attached properties</a>. Kevin told us about use cases for qml without QtQuick, as a scripting language or a to build QWidget interfaces using <a href="https://www.kdab.com/declarative-widgets/">Declarative Widgets</a> for instance.
I was reminded about KDAB's <a href="https://github.com/KDAB/KDToolBox/">KDToolbox</a> a very nice collection of C++ utilities and learned about the nifty NotifyGuard that can help reduce boiler code for instance in KCM when writing c++ objects having many properties. Since it is MIT licensed, it is very easy to reuse.</p>
<p>Now it is time to finish my own planned work for Plasma 6 because it is coming !</p>
<p>Many thanks to every one who made the event possible, the local team, the akademy team, the sponsors and the donators to KDE e.v .</p>
</content>
</entry>
<entry xml:lang="en">
<title>Plasma 6 Sprint 2023</title>
<published>2023-05-12T00:00:00+00:00</published>
<updated>2023-05-12T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/plasma6-sprint-2023/"/>
<id>https://meven.github.io/plasma6-sprint-2023/</id>
<content type="html" xml:base="https://meven.github.io/plasma6-sprint-2023/"><h1 id="plasma-6-sprint">Plasma 6 Sprint</h1>
<p>I was at the Plasma 6 sprint. It took place in Augsburg at <a href="https://www.tuxedocomputers.com/">Tuxedo</a> office, a well-known german company selling computers that offers preinstalled with Gnu/Linux and KDE Plasma. They also are a KDE e.v (i.e foundation) sponsor. I will certainly consider their offers when buying hardware.
Their office were great and very nice people welcomed us.</p>
<p>It was great to get to work in person again with KDE community members, since I wasn't in person at last Akademy in Barcelona.</p>
<p>I am very happy to have met the new contributors that I hadn't met before.</p>
<p>Meetings and discussions were incredibly valuable and galvanizing.</p>
<h2 id="plasma-6">Plasma 6</h2>
<p>After some detour building plasma 6, I am now using Plasma 6 Wayland.
It turns out only Qt 6.5.1 and 6.5.0 are compatible with Plasma 6, not even dev branch (6.6) are compatible with current plasma dev.</p>
<p>The stability is decent but it made a few issues glaring that we can take care of head-on, both visualy and with our development environment.
Qt6 is now 5 years and we never really used it, so a few paper cuts were to-be expected.</p>
<p>Still all in all, everything runs well enough.
Don't do that at home ;)</p>
<p>This relative stability won't last very long as important refactoring is taking place and has not yet reached our main branches.</p>
<p>It seems Qt dev branch currently (to be 6.6) should be preferable to use, because it is expected to be the version Plasma 6.0 will use and it can be contributed to contrary to Qt 6.5 that is in maintenance mode.
An important area for this is Wayland support.</p>
<p>Plasma 6 uses now <a href="https://en.cppreference.com/w/cpp/20">C++20</a> which solves a few shortcomings.
I am especially happy about <a href="https://en.cppreference.com/w/cpp/header/ranges">ranges</a> that is going to make let boiler-plate-y to loop over collections, and c++ modules.</p>
<h2 id="dolphin-kf6">dolphin + kf6</h2>
<p>As dolphin co-maintainer and a KIO framework contributor, I felt the need to have a Dolphin kf6 version to be able to test our work, this is now done.
I made a <a href="https://invent.kde.org/system/dolphin/-/tree/kf6">kf6 branch</a> and it can be installed using <a href="https://nicolasfella.de/posts/building-plasma-against-qt6/">kdesrc-build6</a> dolphin.
I took care first of <a href="https://invent.kde.org/libraries/baloo-widgets/-/merge_requests/52">baloo-widgets</a> and then of <a href="https://invent.kde.org/sdk/dolphin-plugins/-/merge_requests/39">dolphin-plugins</a> along the way.</p>
<p><a href="https://invent.kde.org/network/kio-extras/">kio-extras</a>, the library that provides <code>recentlyused:/</code> protocol and thumbnail generators should soon have a kf6 branck too.</p>
<p>This work took me longer that I would have expected, having to learn the many ways CI tools and cmake can trick you.
Fortunately I had great people around to help me getting through it and iterate faster.
Thank you Nicolas and even more Alexander.</p>
<h2 id="plasma-contributions">Plasma contributions</h2>
<p>Apart from that, I did some work improving plasma dependency declaration so that developers wouldn't miss important runtime dependencies and some warning fix.</p>
<p>I started my self-assigned task for Plasma 6, <a href="https://phabricator.kde.org/T12622">the wallpaper Kcm in systemsettings</a>.
Discussing with <a href="https://notmart.org/blog/author/mart/">Marco</a> gave me the direction to follow it through.</p>
<p>I finished the work initiated by Jonathan Haney to fix <a href="https://bugs.kde.org/show_bug.cgi?id=348529">bug 348529</a>, that was his first contribution !</p>
<p>In plasma 6 when your screen is locked by default it will turn off the screen after 60 seconds by default.</p>
<p>A question I am asking myself is do we want backport to plasma 5.27 ?</p>
<p>Knowing that if we did, we wouldn't have the UI to change the 60 seconds threshold or turn off the feature, we'd have to edit by hand a tricky config file.
It is a high priority feature request that can be considered a bug as without this you might waste energy consumption.
And with Plasma 6 very far off this seems to me reasonable.</p>
<p>Do you think that would be acceptable ?</p>
<p>I should be at <a href="https://akademy.kde.org/2023/">Akademy 2023</a>.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Wayland Goal Virtual Sprint 2021</title>
<published>2021-01-10T00:00:00+00:00</published>
<updated>2021-01-10T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/wayland-goal-virtual-sprint-2021/"/>
<id>https://meven.github.io/wayland-goal-virtual-sprint-2021/</id>
<content type="html" xml:base="https://meven.github.io/wayland-goal-virtual-sprint-2021/"><p>Happy new year everyone !</p>
<p>We will be having a Virtual Sprint for the <a href="https://community.kde.org/Goals/Wayland">Wayland Goal</a> between Saturday 23rd and Sunday 24th January 2021.</p>
<p>This is open to contributors, you can have a look at the current program and more details at <a href="https://community.kde.org/Sprints/Wayland/2020Virtual">Wayland Virtual Sprint</a>.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Wayland Status for Plasma 5.20</title>
<published>2020-11-15T00:00:00+00:00</published>
<updated>2020-11-15T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/wayland-status-plasma-5-20/"/>
<id>https://meven.github.io/wayland-status-plasma-5-20/</id>
<content type="html" xml:base="https://meven.github.io/wayland-status-plasma-5-20/"><p>The KDE community has made some great progress on Plasma Wayland support during this release cycle.
Some people on the Internet have qualified Plasma Wayland session as stable, but I wouldn't go that far yet.
I would qualify Plasma sessions as beta preview, we still have a long way to go.
In some configurations and workflow It might suit you but certainly not all users for now.</p>
<p>I am going to highlight a bit this progress below but first I'd like to explain the technical challenges the KDE Wayland community Goal faces.</p>
<h1 id="why-wayland-migration-takes-time">Why Wayland migration takes time</h1>
<p>Wayland related issues have different origins.
Here are the main ones :</p>
<ul>
<li>
<p>Missing wayland protocol or missing protocol implementation.<br />
Wayland defines a way to exchange data between an application and the compositor (in Plasma that's KWin). Those exchanges are formalized with protocols. Wayland provides quite a few <a href="https://github.com/wayland-project/wayland-protocols">standard ones</a>. For instance we have a protocol for when a GUI Application starts, it will ask the compositor some memory to draw its GUI in, and another for when the compositor gives the application the keyboard focus.
And for each particular window interaction between applications and the compositor we need such a protocol.<br />
Standard protocols are not enough to build a Plasma session upon, it is generic and is meant to be usable by desktop and embed all the same.
So KWin and Plasma have <a href="https://invent.kde.org/libraries/plasma-wayland-protocols">some specific protocols</a>. Those, for instance, allow Plasma taskbar to manage other windows.<br />
Despite Wayland is not anymore a new technology, its protocols mature slowly. Their definition takes time, they are validated through a review process, and are updated as needed. After that step, developers must implement their support in compositors, and sometimes also in applications or frameworks.<br />
If you are interested on this subject, I can recommend again Drew DeVault's <a href="https://wayland-book.com/">the wayland book</a>.<br />
Those are often the cause of missing features whether we a protocol does not exist yet or we lack an implementation. The task manager window thumbnails is in this category.</p>
</li>
<li>
<p>Fill the blank issues: the X.Org Display Server encompasses a lot of things, from keyboard input to screensavers, to screen management. And those features need to be reimplemented somehow whether it is through Wayland protocols or new completely new solutions. We have made good progress on this but a few missing cases remain.</p>
</li>
<li>
<p>Immaturity issues: Wayland implementations and related APIs are relatively young especially when you compare to X.Org Server. And on the desktop those implementation have not been used much, preventing issues to be discovered and fixed. Furthermore clients and compositors especially have a lot more responsibility compared to what they had with X, meaning a lot of new code is written, and new code means less stability.
With <a href="https://www.phoronix.com/scan.php?page=news_item&amp;px=Ajax-On-The-X-Server">X.org display server now abandonware</a>, this should help motivate more users and developers to test and stabilise things.
Those cause crashes, misbehaviour or feature missing.</p>
</li>
<li>
<p>Compatibility issues: Wayland is very different to what we had in X. And we need to adapt to this new paradigm in a lot of places. For instance in plasma, with Xorg the taskbar could simply access Xorg API and manage windows directly. Now it must ask the Compositor to use its Window management API and this is a different API and KWin is the one defining and implementing it. One way to mitigate those issues, is to have a proxy. we try to maintain compatibility with X applications through XWayland notably.</p>
</li>
</ul>
<p>And some issues can be caused by several of those subjective origins.</p>
<h1 id="major-plasma-5-20-wayland-improvements">Major Plasma 5.20 Wayland improvements</h1>
<ul>
<li>
<p>The Task Manager has now window thumbnails Wayland. (Aleix Pol Gonzalez) <a href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/36/">merge request</a></p>
</li>
<li>
<p>Screen recording and screencasting now works on Wayland for compatible applications (e.g. OBS Studio and more to come) (Aleix Pol Gonzalez)
<a href="https://invent.kde.org/libraries/plasma-wayland-protocols/-/merge_requests/1">merge request</a>
<br /> That's a fill the blank issue and missing protocol issue : Xorg allows any program to record the screen with its own API. We needed a new protocol to expose a screencasting feature.</p>
</li>
<li>
<p>Klipper now uses the Wayland clipboard and works as you would expect in a Wayland session (David Edmundson)
<a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1">merge request</a></p>
</li>
<li>
<p>Implemented the Wayland input-method-unstable-v1 protocol, which opens the door for proper virtual keyboard support on Plasma Mobile, among other benefits! (Aleix Pol Gonzalez)
<a href="https://invent.kde.org/plasma/kwin/-/merge_requests/106">merge request</a></p>
</li>
</ul>
<h1 id="bug-fixes">Bug fixes</h1>
<h2 id="stability-improvement">Stability improvement</h2>
<ul>
<li>
<p>In a Plasma Wayland session, XWayland no longer brings down the whole session when it crashes; it just restarts normally (Vlad Zahorodniy, Plasma 5.20) <a href="https://invent.kde.org/plasma/kwin/-/merge_requests/125">merge request</a></p>
</li>
<li>
<p>Clearing the clipboard history on Wayland no longer crashes Plasma (David Edmundson, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=396308">bug</a></p>
</li>
<li>
<p>On Wayland, clicking on a Task Manager entry while that entry’s tooltip is visible no longer crashes Plasma (Vlad Zahorodnii, Plasma 5.20)
<a href="hhttps://bugs.kde.org/show_bug.cgi?id=425869">bug</a></p>
</li>
<li>
<p>KWin no longer sometimes crashes when exiting or re-launching (Vlad Zahorodnii, Plasma 5.20) <a href="https://invent.kde.org/plasma/kwin/-/merge_requests/328">merge request</a></p>
</li>
</ul>
<h2 id="feature-parity">Feature Parity</h2>
<ul>
<li>
<p>On Wayland, context menus on the desktop and throughout Plasma now close when they’re supposed to (Vlad Zahorodnii, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=379635">bug</a></p>
</li>
<li>
<p>On Wayland, Task Manager tooltip window thumbnails are no longer overlapped by the app’s icon (Nate Graham, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=427076">bug</a></p>
</li>
<li>
<p>On Wayland, pressing Ctrl+Alt+Esc twice no longer results in the “Click a window to kill it” message being re-positioned into the top-left corner of the screen (Vlad Zahorodnii, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=400675">bug</a></p>
</li>
<li>
<p>KRunner is now more responsive to typed text on Wayland (Alexander Lohnau, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=426746">bug</a></p>
</li>
<li>
<p>Fixed the initialization of dmabuf textures in KWin on Wayland, which in practical terms should ensure that videos played Firefox no longer sometimes display garbage instead of the video (Vlad Zahorodnii, Plasma 5.20)
<a href="https://invent.kde.org/plasma/kwin/-/merge_requests/323">merge request</a></p>
</li>
<li>
<p>Clicking on a Task Manager thumbnail now activates that window, as you would expect (Marco Martin, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=426925">bug</a></p>
</li>
<li>
<p>the window stacking order is now always correct (Vlad Zahorodnii, Plasma 5.20)
<a href="https://invent.kde.org/plasma/kwin/-/merge_requests/288">merge request</a></p>
</li>
<li>
<p>context menus now always have shadows, as expected (Vlad Zahorodnii, Plasma 5.20)
<a href="https://invent.kde.org/plasma/kwayland-integration/-/merge_requests/3">merge request</a></p>
</li>
<li>
<p>Improved the graphics performance on Wayland (Gang Wu, Plasma 5.20) by allowing KWin not to draw windows placed behind opaque others.
<a href="https://invent.kde.org/plasma/kwin/-/merge_requests/228">merge request</a></p>
</li>
<li>
<p>It’s now possible to drag windows on Wayland from their empty areas, just like on X11 (Vlad Zahorodnii, Plasma 5.20)
<a href="https://invent.kde.org/plasma/breeze/-/merge_requests/8">merge request</a></p>
</li>
<li>
<p>Plasma no longer sometimes crashes when you hover the cursor over an auto-hide Panel (Andreas Haratzis, Plasma 5.20)
<a href="https://invent.kde.org/plasma/kwin/-/merge_requests/83">merge request</a></p>
</li>
<li>
<p>Fixed a case where KWin could crash when logging out of a Wayland session (Andrey Butirsky, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=420077">bug</a></p>
</li>
<li>
<p>Edge swipe gestures and showing a hidden panel by tapping the screen edge now work on Wayland (Xaver Hugl, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=421212">bug</a>
<a href="https://bugs.kde.org/show_bug.cgi?id=423842">bug</a></p>
</li>
<li>
<p>The System Settings Accessibility page is now available (Michael Weghorn, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=414546">bug</a></p>
</li>
<li>
<p>Fixed the “Windows can cover” panel setting on Wayland (Xaver Hugl, Plasma 5.20)
<a href="https://invent.kde.org/plasma/kwayland-server/-/merge_requests/60">merge request</a></p>
</li>
<li>
<p>The last-used keyboard layout is now remembered on Wayland (Andrey Butirsky, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=412101">bug</a></p>
</li>
<li>
<p>Fixed a crash on Wayland when waking up the computer while multiple screens are attached (Andreas Haratzis, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=422460">bug</a></p>
</li>
<li>
<p>you can now enter full screen mode in MPV by double-clicking on the video (Benjamin Port, Plasma 5.20.0)
<a href="https://bugs.kde.org/show_bug.cgi?id=421232">bug</a></p>
</li>
<li>
<p>Previews for cursor themes now correctly display real-time previews as you hover your cursor over them on Wayland (David Redondo, Plasma 5.20)
<a href="https://bugs.kde.org/show_bug.cgi?id=424048">bug</a></p>
</li>
<li>
<p>Spectacle now lets you take a screenshot on Wayland without needing to click first to confirm it (Méven Car, Spectacle 20.12)
<a href="https://invent.kde.org/graphics/spectacle/-/merge_requests/13">merge request</a></p>
</li>
</ul>
<p>Special shoutout to our newest ambitious and prolific KWin contributor Xaver Hugl.</p>
<p>Thanks to <a href="https://pointieststick.com/">Nate blog</a> that makes putting this together so much easier.</p>
<p>We are on <a href="https://t.me/waylandkdegoal">telegram</a> and IRC <em>#kde-wayland-goal</em> on freenode.
More on the community wiki <a href="https://community.kde.org/Goals/Wayland">Wayland Goal</a>.</p>
</content>
</entry>
<entry xml:lang="en">
<title>New Static blog</title>
<published>2020-06-30T00:00:00+00:00</published>
<updated>2020-06-30T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/new-static-blog/"/>
<id>https://meven.github.io/new-static-blog/</id>
<content type="html" xml:base="https://meven.github.io/new-static-blog/"><p>My blog hosting platform was maintained by my domain name provider <a href="https://www.gandi.net/">gandi</a>.
It used the <a href="https://dotclear.org/">dotclear</a> blog CMS.
But gandi has decided to stop maintaining this service at the end of June 2020.</p>
<p>It has served me well over the years but the lack of proper maintenance and support was showing.</p>
<p>As I am very fond of <a href="https://www.rust-lang.org/">Rust</a>, I have written a small Rust program to convert the export of the blog to markdown files, using <a href="https://crates.io/crates/csv">csv</a> and <a href="https://crates.io/crates/regex">regex</a> crates.</p>
<p>I have switched to the <a href="https://www.getzola.org/">zola static site generator</a> hosted by <a href="https://pages.github.com/">github pages</a>.
The good thing is now my blog posts are written in markdown, and I gained a search tool.</p>
<p>Unfortunately all my entrant links will be broken, but all the content is there at least.</p>
<p>And as a souvenir, here is what my old blog looked like, with photos taken in Australia in the header :</p>
<img src="/captures/old_blog_06.2020.png" alt="Old blog look"/>
</content>
</entry>
<entry xml:lang="en">
<title>Wayland Status update for Plasma 5.19</title>
<published>2020-06-02T00:00:00+00:00</published>
<updated>2020-06-02T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/wayland-status-update-plasma-5-19/"/>
<id>https://meven.github.io/wayland-status-update-plasma-5-19/</id>
<content type="html" xml:base="https://meven.github.io/wayland-status-update-plasma-5-19/"><p>We have been busy recently on the Wayland Goal.</p>
<p>A few of those points were already highlight on <a href="https://pointieststick.com/">Nate's excellent blog</a>.
But some were missing, and I wanted to highlight those dedicated to Wayland with more context.</p>
<p>The changes I mention here will be present in Plasma 5.19, but they are not exhaustive.</p>
<h4 id="kwin-and-architecture-changes">KWin and architecture changes</h4>
<p>Thanks to Aleix Pol, KWin Wayland in Plasma 5.19 now has <a href="https://github.com/wayland-project/wayland-protocols/blob/master/unstable/tablet/tablet-unstable-v2.xml">Wayland tablet protocol</a> support meaning we have tablet touch and pen pressure. <a href="https://phabricator.kde.org/D26859">Kwin patch</a> and <a href="https://phabricator.kde.org/D26858">KWayland patch</a></p>
<p>Vlad improved <a href="https://bugs.kde.org/show_bug.cgi?id=387313">subsurface clipping</a>, it means the compositor can do less work and better figure out what to paint and not to paint.
It is most visible for applications like Firefox that uses a lot of Wayland surfaces. <a href="https://phabricator.kde.org/D29131">D29131</a> <a href="https://invent.kde.org/plasma/kwin/-/merge_requests/5">kwin!5</a></p>
<p>With <a href="https://phabricator.kde.org/D29250">D29250</a> the resizing of XWayland windows has become less resource demanding and matches X experience.
This still needs next version of XWayland 1.21 to work though.</p>
<p>And KWin has had more changes under the surface.</p>
<p>The <a href="https://invent.kde.org/frameworks/kwayland">KWayland library</a> has been split library into two libraries.
One KWayland contains the regular @@KWayland::Client@@ stuff but the new <a href="https://invent.kde.org/plasma/kwayland-server">kwayland-server</a> contains now the @@KWayland::Server@@ part.</p>
<p>Because @@KWayland@@ is part of <a href="https://kde.org/products/frameworks/">KDE frameworks</a> it is released monthly, independently of Plasma releases, and we have to care about not breaking the API when making changes.
But on the other hand @@KWayland::Server@@ is only ever used by KWin, so it added some churn to the development of @@KWayland::Server@@ which was not needed.
Now @@KWayland-server@@ will have a Plasma release cycle same as KWin, and will simplify our workflow evolving our Wayland compositor implementation.
New depot is at <a href="https://invent.kde.org/plasma/kwayland-server">https://invent.kde.org/plasma/kwayland-server</a>.</p>
<h4 id="plasma">Plasma</h4>
<p>The global application menu has is now working in Wayland thanks to Carson Black patch serie: <a href="https://phabricator.kde.org/D27464">D27464</a>, <a href="https://phabricator.kde.org/D28168">D28168</a>, <a href="https://phabricator.kde.org/D28150">D28150</a>, <a href="https://phabricator.kde.org/D28112">D28112</a>, <a href="https://phabricator.kde.org/D27959">D27959</a>,
<a href="https://phabricator.kde.org/D27818">D27818</a> and <a href="https://phabricator.kde.org/D28146">D28146</a>, <a href="https://bugs.kde.org/show_bug.cgi?id=385880">bug</a>.
This is typical Wayland work : make new APIs because old ones were X specific or could not work with Wayland, add some wiring code and then use the new one in programs using.
This most often end up in better code architecture, better decoupled.</p>
<p>The task manager can now bring forward multiple windows of the same program and remembering in which order they are stacked together
<a href="https://bugs.kde.org/show_bug.cgi?id=370258">bug</a> <a href="https://phabricator.kde.org/D29054">patch 1</a> <a href="https://phabricator.kde.org/D29054">patch 2</a> <a href="https://phabricator.kde.org/D29055">patch 3</a> and <a href="https://phabricator.kde.org/D29056">patch 4</a>.</p>
<p>KRunner is <a href="https://phabricator.kde.org/D27458">better positioned</a>.</p>
<p>Kscreen Osd are now usable, allowing you to to setup a newly connected screen and identify your plugged-in screen <a href="https://bugs.kde.org/show_bug.cgi?id=385672">bug</a> <a href="https://phabricator.kde.org/D28817">D28817</a><a href="https://phabricator.kde.org/D28818">D28818</a> <a href="https://phabricator.kde.org/D28916">D28916</a></p>
<h4 id="bugfixes">Bugfixes</h4>
<p>Quite a few crash KWin were resolved :<a href="https://phabricator.kde.org/D28668">D28668</a> <a href="https://phabricator.kde.org/D28858">D28858</a> <a href="https://phabricator.kde.org/D28889">D28889</a> <a href="https://phabricator.kde.org/D27536">D27536</a> <a href="https://invent.kde.org/plasma/kwin/-/merge_requests/9">kwin!9</a> <a href="https://invent.kde.org/plasma/kwin/-/merge_requests/8">kwin!8</a></p>
<p>And drkonqi got a couple fix : <a href="https://phabricator.kde.org/D28692">D28692</a> <a href="https://phabricator.kde.org/D28832">D28832</a>.</p>
<h3 id="plasma-wayland-specific-features">Plasma Wayland specific features</h3>
<p><a href="/captures/scroll-speed.png" title=""><img src="/captures/scroll-speed.png" /></a></p>
<p>Thanks to the way Wayland is architectured, we can add features than are impossible with X server.
For instance in plasma 5.19 in Wayland you will be able to setup a scrolling speed for mice and touchpads. <a href="https://phabricator.kde.org/D28331">D28331</a> <a href="https://phabricator.kde.org/D28310">D28310</a></p>
<p><strong>But our journey is far from over.</strong></p>
<p><a href="https://community.kde.org/Goals/Wayland">Our goal</a> is in part to make Plasma run in Wayland by default allowing pixel perfection, real security in the display server, better performance and overall better architecture.</p>
<p>The road is still long to reach feature parity with the venerable X based sessions.
So we need as much people to help whether it is for testing, hacking code or reporting bugs.</p>
<p>There is a Plasma virtual Sprint starting right now spawning two weeks, where a lot of people involved in the Goal will participate.
I invite you to join-in : <a href="https://community.kde.org/Sprints/Plasma/2020Virtual">Plasma virtual sprint 2020</a>.</p>
<p>Also Drew DeVault released a great book about Wayland you can read at <a href="https://wayland-book.com/">https://wayland-book.com/</a> to better understand Wayland inner-workings.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Wayland goal - Call for Action</title>
<published>2019-10-10T00:00:00+00:00</published>
<updated>2019-10-10T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/wayland-goal/"/>
<id>https://meven.github.io/wayland-goal/</id>
<content type="html" xml:base="https://meven.github.io/wayland-goal/"><p>KDE community has <a href="https://phabricator.kde.org/T11081">elected</a> to finalize the transition to Wayland and embrace the future of desktop.</p>
<p>This entails making Plasma running smoothly under Wayland, but also making sure KDE Apps can run without bugs and missing features.
It also means that we want to help the wider Wayland community to fill missing features and fix bugs.</p>
<p>I call App users and developers to try out their favorite app in Wayland and report the issue that may arise. and add wayland as keyword to the bug to keep track on those bugs.</p>
<p>And you don't need a wayland session to test an app, you can do it in wayland within a X session !</p>
<blockquote>
<p>kwin_wayland # start an embed kwind_wayland</p>
<h1 id="in-another-terminal">In another terminal</h1>
<p>gwenview --platform wayland # starts gwenview in the wayland session</p>
</blockquote>
<p><a href="/captures/gwenview_in_wayland_in_X.png" title=""><img src="/captures/gwenview_in_wayland_in_X.png" /></a></p>
<p>We have a page listing <a href="https://community.kde.org/Guidelines_and_HOWTOs/Wayland_Porting_Notes">how to fix a few pitfalls</a> that applications may have in Wayland.</p>
<p>You can also test Plasma Wayland session of course and report the same way issues that may arise.</p>
<p>You can reach us at #kde-devel or #plasma in <a href="https://webchat.kde.org">webchat.kde.org</a> or freenode.</p>
<p>More information on the <a href="https://community.kde.org/Goals/Wayland">Wayland Goal page</a></p>
</content>
</entry>
<entry xml:lang="en">
<title>Recently Used ioslave</title>
<published>2019-10-05T00:00:00+00:00</published>
<updated>2019-10-05T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/recently-used-ioslave/"/>
<id>https://meven.github.io/recently-used-ioslave/</id>
<content type="html" xml:base="https://meven.github.io/recently-used-ioslave/"><p>With <a href="https://phabricator.kde.org/D7446">D7446</a> landing, the new ioslave recentlyused:/ ioslave will become user visible with KDE Frameworks 5.63.
This differential revision adds two entries "Recent Files" and "Recent Locations" to the place panel (in dolphin and open/save dialogs)</p>
<img src="/captures/recently-used.png" alt="Recent screenshot" />
<p>It leverages the ioslave recentlyused:/ introduced in <a href="https://phabricator.kde.org/D22144">D22144</a>, allowing to access KActivity data.
KActivity is the service that provides "recent" elements to kickoff menu and is activity aware as the name suggests.</p>
<p>So now "Recent Files", "Recent Locations" in the places panel share the same underlining data with kickoff.</p>
<p>But recentlyused:/ can be used to create your virtual folders for recent files or folders. For instance</p>
<ul>
<li>
<p>{{recentlyused:/files?type=video/<em>,audio/</em>}}
To filter recently accessed video and audio files.</p>
</li>
<li>
<p>{{recentlyused:/files?path=/home/meven/kde/src/*&amp;type=text/plain}}
To filter recently accessed text files in any subdirectory of /home/meven/kde/src/</p>
</li>
<li>
<p>{{recentlyused:/locations?path=/home/meven/kde/src/*}}
To filter recently accessed folders in any subdirectory of /home/meven/kde/src/</p>
</li>
</ul>
<p>You can read the <a href="https://cgit.kde.org/kio-extras.git/tree/recentlyused/recentlyused.h#n28">documentation</a> for more details.</p>
<p>When working on this new feature, It was a great time to improve KActivity.
So I allowed KActivity to ingest data from gtk applications in <a href="https://phabricator.kde.org/D23112">differential D23112</a>.</p>
<p>I want to thank Ivan Lukić for building KActivity service and library and reviewing most of this work.
And I want to thank all the other reviewers involved.</p>
</content>
</entry>
<entry xml:lang="en">
<title>KDE First Contributions and first sprint</title>
<published>2019-07-26T00:00:00+00:00</published>
<updated>2019-07-26T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/first-contributions-and-first-sprint/"/>
<id>https://meven.github.io/first-contributions-and-first-sprint/</id>
<content type="html" xml:base="https://meven.github.io/first-contributions-and-first-sprint/"><p>I have been a KDE User for more than 10 years.
I really love KDE community, Plasma and its apps.
I have been reading eagerly <a href="https://pointieststick.com/">Nate Graham's blog</a>
He gave me the inspiration to start contributing.</p>
<p>It has been a opportunity to learn some C++, Qt and some Qml.</p>
<p>So far I am very happy to have contributed a few features and bug fixes :</p>
<ul>
<li><a href="https://phabricator.kde.org/D20096">Provide file date creation in KDE Apps</a></li>
<li>Improvements to the KDE Open/Save dialog : <a href="https://phabricator.kde.org/D21459">keeping view settings when changing views</a> <a href="https://phabricator.kde.org/D21315">icons to show view mode</a> <a href="https://phabricator.kde.org/D20838">allow to drop a file or directory on the main file area</a></li>
<li>In Dolphin some improvements to its information panel, in particular an <a href="https://phabricator.kde.org/D19782">auto play feature</a> and some <a href="https://phabricator.kde.org/D19936">smaller</a> <a href="https://phabricator.kde.org/D19843">on</a><a href="https://phabricator.kde.org/D19832">e</a><a href="https://phabricator.kde.org/D19844">s</a></li>
<li><a href="https://phabricator.kde.org/D15739">Do not show the root folder by defaults in places</a></li>
</ul>
<p>And a few less noticeable as well.</p>
<p>And I have quite a lot more in the back of my head.
I am close to completing adding <a href="https://phabricator.kde.org/D22183">click-to-play to video and audio previews</a> in dolphin information panel.</p>
<h2 id="usablity-productivity-sprint-in-valencia">Usablity &amp; Productivity Sprint in Valencia</h2>
<p>I participated last month to the Usablity &amp; Productivity Sprint in Valencia.
I have been very happy to meet some great KDE community members from three continents and 9 countries.</p>
<p>There I improved the kinfocenter consistency thanks to the help of Filip and Marco and added a <a href="https://phabricator.kde.org/D20533">link from the system battery plasmoid to the corresponding kinfocenter kcm</a>.
I started to work on a <a href="https://phabricator.kde.org/D22144">new recently used document ioslave</a> that will match the same feature as in kicker/kickoff.
Adding some consistency and activity awareness to dolphin and KDE Open/Save dialogs.
I learned about Kwin debugging with David Edmundson.
And I had great discussions with the people there.</p>
<h2 id="i-am-going-to-akademy-2019">I am going to Akademy 2019 !</h2>
<p>And since I am a big fan of <a href="https://www.rust-lang.org/">rust-lang</a>, this will be a nice opportunity to debate on the matter and on the future of KDE.
<a href="https://akademy.kde.org/2019">((https://cdn.kde.org/akademy/2019/imgoing/Akademy2019BannerDuomo-wee.png))</a></p>
</content>
</entry>
<entry xml:lang="en">
<title>Appending your website name at the end of its pages titles with middleman and slim</title>
<published>2018-06-27T00:00:00+00:00</published>
<updated>2018-06-27T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/appending-your-website-name-at-the-end-of-its-pages-title-with-middleman-and-slim/"/>
<id>https://meven.github.io/appending-your-website-name-at-the-end-of-its-pages-title-with-middleman-and-slim/</id>
<content type="html" xml:base="https://meven.github.io/appending-your-website-name-at-the-end-of-its-pages-title-with-middleman-and-slim/"><p>If you use <a href="https://github.com/middleman/middleman">middleman</a> and the nice template solution <a href="https://github.com/slim-template/slim">slim</a> you might encounter the same need as I did: appending your site name at the end of your page titles without hardcoding it everywhere.</p>
<p>I found a simple solution, in my layout I added:</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> - if current_page.data.title?
</span><span> title= current_page.data.title + &quot; | My Website&quot;
</span><span> - else
</span><span> title My Website
</span></code></pre>
<p>When in your slim pages you have :</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>---
</span><span>title: My page title
</span><span>---
</span><span>
</span></code></pre>
<p>You end up in your generated code using <a href="https://github.com/middleman/middleman">middleman</a> with the title</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>&lt;title&gt;My page title | My Website&lt;/title&gt;
</span></code></pre>
<p>And if the page has no title it will default to :</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>&lt;title&gt;My Website&lt;/title&gt;
</span></code></pre>
<p>This was found when trying to <a href="https://github.com/sgrif/diesel.rs-website/pull/65">improve diesel documentation</a>.</p>
<p>I hope this can be useful to somebody else.</p>
</content>
</entry>
<entry xml:lang="en">
<title>Yet another sudoku solver, in rust</title>
<published>2017-01-08T00:00:00+00:00</published>
<updated>2017-01-08T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/yet-another-sudoku-solver-this-time-in-rust/"/>
<id>https://meven.github.io/yet-another-sudoku-solver-this-time-in-rust/</id>
<content type="html" xml:base="https://meven.github.io/yet-another-sudoku-solver-this-time-in-rust/"><p>I have been quite interested recently with the new languages <a href="https://golang.org/">Go</a> and <a href="https://www.rust-lang.org/">rust</a>.
Go and rust have some very nice new features and their design and tooling reflects the standards of this days.
So I have been hacking with go and rust.</p>
<p>I share this piece of rust code that solves sudoku, in the hope it will be useful to someone.
It is not very much optimized as the algorithm is naive, but the purpose of this code was to get more comfortable with rust.</p>
<pre data-lang="rust" style="background-color:#2b303b;color:#c0c5ce;" class="language-rust "><code class="language-rust" data-lang="rust"><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">print_grid</span><span>(</span><span style="color:#bf616a;">g</span><span>: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; 81]) {
</span><span>
</span><span> </span><span style="color:#b48ead;">let mut</span><span> cnt = </span><span style="color:#d08770;">0</span><span>;
</span><span> </span><span style="color:#b48ead;">let mut</span><span> line = </span><span style="color:#d08770;">0</span><span>;
</span><span>
</span><span> </span><span style="color:#b48ead;">for </span><span>&amp;x in g.</span><span style="color:#96b5b4;">iter</span><span>() {
</span><span>
</span><span> cnt = cnt + </span><span style="color:#d08770;">1</span><span>;
</span><span>
</span><span> </span><span style="color:#b48ead;">match</span><span> x {
</span><span> Some(i) =&gt; print!(&quot;</span><span style="color:#d08770;">{}</span><span>&quot;, i),
</span><span> None =&gt; print!(&quot;</span><span style="color:#a3be8c;">_</span><span>&quot;),
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">if</span><span> cnt == </span><span style="color:#d08770;">9 </span><span>{
</span><span> line = line + </span><span style="color:#d08770;">1</span><span>;
</span><span> println!(&quot;&quot;);
</span><span> cnt = </span><span style="color:#d08770;">0</span><span>;
</span><span> </span><span style="color:#b48ead;">if</span><span> line == </span><span style="color:#d08770;">3 </span><span>{
</span><span> line = </span><span style="color:#d08770;">0</span><span>;
</span><span> println!(&quot;&quot;);
</span><span> }
</span><span> } </span><span style="color:#b48ead;">else if</span><span> cnt % </span><span style="color:#d08770;">3 </span><span>== </span><span style="color:#d08770;">0 </span><span>{
</span><span> print!(&quot; &quot;);
</span><span>
</span><span> } </span><span style="color:#b48ead;">else </span><span>{
</span><span> print!(&quot; &quot;);
</span><span> }
</span><span> }
</span><span>}
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">check_grid</span><span>(</span><span style="color:#bf616a;">g</span><span>: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; 81]) -&gt; </span><span style="color:#b48ead;">bool </span><span>{
</span><span>
</span><span> </span><span style="color:#65737e;">// check lines
</span><span> </span><span style="color:#b48ead;">for</span><span> x in </span><span style="color:#d08770;">0</span><span>..</span><span style="color:#d08770;">9 </span><span>{
</span><span> </span><span style="color:#b48ead;">let</span><span> i = </span><span style="color:#d08770;">9 </span><span>* x;
</span><span> </span><span style="color:#b48ead;">let</span><span> val = [i, i + </span><span style="color:#d08770;">1</span><span>, i + </span><span style="color:#d08770;">2</span><span>, i + </span><span style="color:#d08770;">3</span><span>, i + </span><span style="color:#d08770;">4</span><span>, i + </span><span style="color:#d08770;">5</span><span>, i + </span><span style="color:#d08770;">6</span><span>, i + </span><span style="color:#d08770;">7</span><span>, i + </span><span style="color:#d08770;">8</span><span>];
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> v in </span><span style="color:#d08770;">0</span><span>..(val.</span><span style="color:#96b5b4;">len</span><span>() - </span><span style="color:#d08770;">1</span><span>) {
</span><span> </span><span style="color:#b48ead;">let</span><span> valv = g[val[v]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valv != None {
</span><span> </span><span style="color:#b48ead;">for</span><span> c in </span><span style="color:#d08770;">1</span><span>..val.</span><span style="color:#96b5b4;">len</span><span>() {
</span><span> </span><span style="color:#b48ead;">let</span><span> valc = g[val[c]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valc != None &amp;&amp; val[v] != val[c] &amp;&amp; valv == valc {
</span><span> </span><span style="color:#65737e;">// println!(&quot;Block false at {}&quot;, x);
</span><span> </span><span style="color:#b48ead;">return </span><span style="color:#d08770;">false</span><span>;
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#65737e;">// check columns
</span><span> </span><span style="color:#b48ead;">for</span><span> x in </span><span style="color:#d08770;">0</span><span>..</span><span style="color:#d08770;">9 </span><span>{
</span><span> </span><span style="color:#b48ead;">let</span><span> val = [x, x + </span><span style="color:#d08770;">9</span><span>, x + </span><span style="color:#d08770;">18</span><span>, x + </span><span style="color:#d08770;">27</span><span>, x + </span><span style="color:#d08770;">36</span><span>, x + </span><span style="color:#d08770;">45</span><span>, x + </span><span style="color:#d08770;">54</span><span>, x + </span><span style="color:#d08770;">63</span><span>, x + </span><span style="color:#d08770;">72</span><span>];
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> v in </span><span style="color:#d08770;">0</span><span>..(val.</span><span style="color:#96b5b4;">len</span><span>() - </span><span style="color:#d08770;">1</span><span>) {
</span><span> </span><span style="color:#b48ead;">let</span><span> valv = g[val[v]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valv != None {
</span><span> </span><span style="color:#b48ead;">for</span><span> c in </span><span style="color:#d08770;">1</span><span>..val.</span><span style="color:#96b5b4;">len</span><span>() {
</span><span> </span><span style="color:#b48ead;">let</span><span> valc = g[val[c]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valc != None &amp;&amp; val[v] != val[c] &amp;&amp; valv == valc {
</span><span> </span><span style="color:#65737e;">// println!(&quot;Block false at {}&quot;, x);
</span><span> </span><span style="color:#b48ead;">return </span><span style="color:#d08770;">false</span><span>;
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#65737e;">// check blocks
</span><span> </span><span style="color:#b48ead;">for</span><span> x in </span><span style="color:#d08770;">0</span><span>..</span><span style="color:#d08770;">9 </span><span>{
</span><span> </span><span style="color:#b48ead;">let mut</span><span> i = </span><span style="color:#d08770;">3 </span><span>* (x % </span><span style="color:#d08770;">3</span><span>);
</span><span> </span><span style="color:#b48ead;">if</span><span> x &gt; </span><span style="color:#d08770;">2 </span><span>{
</span><span> i = i + </span><span style="color:#d08770;">27</span><span>;
</span><span> } </span><span style="color:#b48ead;">else if</span><span> x &gt; </span><span style="color:#d08770;">5 </span><span>{
</span><span> i = i + </span><span style="color:#d08770;">54</span><span>;
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">let</span><span> val = [i, i + </span><span style="color:#d08770;">1</span><span>, i + </span><span style="color:#d08770;">2</span><span>, i + </span><span style="color:#d08770;">9</span><span>, i + </span><span style="color:#d08770;">10</span><span>, i + </span><span style="color:#d08770;">11</span><span>, i + </span><span style="color:#d08770;">18</span><span>, i + </span><span style="color:#d08770;">19</span><span>, i + </span><span style="color:#d08770;">20</span><span>];
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> v in </span><span style="color:#d08770;">0</span><span>..(val.</span><span style="color:#96b5b4;">len</span><span>() - </span><span style="color:#d08770;">1</span><span>) {
</span><span> </span><span style="color:#b48ead;">let</span><span> valv = g[val[v]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valv != None {
</span><span> </span><span style="color:#b48ead;">for</span><span> c in </span><span style="color:#d08770;">1</span><span>..val.</span><span style="color:#96b5b4;">len</span><span>() {
</span><span> </span><span style="color:#b48ead;">let</span><span> valc = g[val[c]];
</span><span> </span><span style="color:#b48ead;">if</span><span> valc != None &amp;&amp; val[v] != val[c] &amp;&amp; valv == valc {
</span><span> </span><span style="color:#65737e;">// println!(&quot;Block false at {}&quot;, x);
</span><span> </span><span style="color:#b48ead;">return </span><span style="color:#d08770;">false</span><span>;
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">return </span><span style="color:#d08770;">true</span><span>;
</span><span>}
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">is_grid_complete</span><span>(</span><span style="color:#bf616a;">g</span><span>: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; 81]) -&gt; </span><span style="color:#b48ead;">bool </span><span>{
</span><span> </span><span style="color:#b48ead;">let mut</span><span> ret = </span><span style="color:#d08770;">true</span><span>;
</span><span> </span><span style="color:#b48ead;">for </span><span>&amp;x in g.</span><span style="color:#96b5b4;">iter</span><span>() {
</span><span> </span><span style="color:#b48ead;">match</span><span> x {
</span><span> Some(_) =&gt; {}
</span><span> None =&gt; {
</span><span> ret = </span><span style="color:#d08770;">false</span><span>;
</span><span> </span><span style="color:#b48ead;">break</span><span>;
</span><span> }
</span><span> }
</span><span> }
</span><span> </span><span style="color:#b48ead;">return</span><span> ret;
</span><span>}
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">clone_grid</span><span>(</span><span style="color:#bf616a;">g</span><span>: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; 81]) -&gt; [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; </span><span style="color:#d08770;">81</span><span>] {
</span><span> </span><span style="color:#b48ead;">let mut</span><span> new_g: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; </span><span style="color:#d08770;">81</span><span>] = [None; </span><span style="color:#d08770;">81</span><span>];
</span><span> </span><span style="color:#b48ead;">for</span><span> x in </span><span style="color:#d08770;">0</span><span>..g.</span><span style="color:#96b5b4;">len</span><span>() {
</span><span> new_g[x] = g[x];
</span><span> }
</span><span> </span><span style="color:#b48ead;">return</span><span> new_g;
</span><span>}
</span><span>
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">solve_grid</span><span>(</span><span style="color:#bf616a;">g</span><span>: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; 81]) -&gt; Option&lt;[Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; </span><span style="color:#d08770;">81</span><span>]&gt; {
</span><span>
</span><span> </span><span style="color:#b48ead;">if </span><span style="color:#96b5b4;">is_grid_complete</span><span>(g) {
</span><span> </span><span style="color:#b48ead;">return </span><span>Some(g);
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> x in </span><span style="color:#d08770;">0</span><span>..g.</span><span style="color:#96b5b4;">len</span><span>() {
</span><span> </span><span style="color:#b48ead;">match</span><span> g[x] {
</span><span> Some(_) =&gt; {}
</span><span> None =&gt; {
</span><span>
</span><span> </span><span style="color:#b48ead;">let mut</span><span> checked: [</span><span style="color:#b48ead;">bool</span><span>; </span><span style="color:#d08770;">9</span><span>] = [</span><span style="color:#d08770;">false</span><span>; </span><span style="color:#d08770;">9</span><span>];
</span><span>
</span><span> </span><span style="color:#b48ead;">for</span><span> v in </span><span style="color:#d08770;">1</span><span>..</span><span style="color:#d08770;">10 </span><span>{
</span><span>
</span><span> </span><span style="color:#b48ead;">let mut</span><span> new_g = </span><span style="color:#96b5b4;">clone_grid</span><span>(g);
</span><span> new_g[x] = Some(v);
</span><span>
</span><span> checked[(v - </span><span style="color:#d08770;">1</span><span>) as </span><span style="color:#b48ead;">usize</span><span>] = </span><span style="color:#d08770;">true</span><span>;
</span><span>
</span><span> </span><span style="color:#b48ead;">if </span><span style="color:#96b5b4;">check_grid</span><span>(new_g) {
</span><span> </span><span style="color:#b48ead;">match </span><span style="color:#96b5b4;">solve_grid</span><span>(new_g) {
</span><span> None =&gt; {
</span><span> </span><span style="color:#b48ead;">if</span><span> checked == [</span><span style="color:#d08770;">true</span><span>; </span><span style="color:#d08770;">9</span><span>] {
</span><span> </span><span style="color:#65737e;">// the path is a dead end
</span><span> </span><span style="color:#b48ead;">return </span><span>None;
</span><span> } </span><span style="color:#b48ead;">else </span><span>{
</span><span> </span><span style="color:#b48ead;">continue</span><span>;
</span><span> }
</span><span> }
</span><span>
</span><span> Some(gx) =&gt; </span><span style="color:#b48ead;">return </span><span>Some(gx),
</span><span> }
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">if</span><span> checked == [</span><span style="color:#d08770;">true</span><span>; </span><span style="color:#d08770;">9</span><span>] {
</span><span> </span><span style="color:#65737e;">// Detected a dead end
</span><span> </span><span style="color:#b48ead;">return </span><span>None;
</span><span> }
</span><span> }
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">return </span><span>None;
</span><span>}
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">parse_grid</span><span>(</span><span style="color:#bf616a;">grid_string</span><span>: &amp;</span><span style="color:#b48ead;">str</span><span>) -&gt; [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; </span><span style="color:#d08770;">81</span><span>] {
</span><span> </span><span style="color:#b48ead;">let mut</span><span> grid = [None; </span><span style="color:#d08770;">81</span><span>];
</span><span>
</span><span> </span><span style="color:#b48ead;">let mut</span><span> i = </span><span style="color:#d08770;">0</span><span>;
</span><span> </span><span style="color:#b48ead;">for</span><span> s in grid_string.</span><span style="color:#96b5b4;">split_whitespace</span><span>() {
</span><span> </span><span style="color:#b48ead;">match</span><span> s {
</span><span> &quot;</span><span style="color:#a3be8c;">_</span><span>&quot; =&gt; {}
</span><span> val =&gt; {
</span><span> grid[i] = Some(val.parse::&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;().</span><span style="color:#96b5b4;">unwrap</span><span>());
</span><span> }
</span><span> }
</span><span> i = i + </span><span style="color:#d08770;">1</span><span>;
</span><span> }
</span><span>
</span><span> </span><span style="color:#b48ead;">return</span><span> grid;
</span><span>}
</span><span>
</span><span style="color:#b48ead;">fn </span><span style="color:#8fa1b3;">main</span><span>() {
</span><span> </span><span style="color:#b48ead;">let</span><span> grid_string = </span><span style="color:#b48ead;">r</span><span>#&quot;
</span><span style="color:#a3be8c;"> 1 _ _ _ _ _ _ _ 3
</span><span style="color:#a3be8c;"> _ 4 _ _ _ 9 2 6 _
</span><span style="color:#a3be8c;"> _ _ _ 7 _ _ _ 5 4
</span><span style="color:#a3be8c;">
</span><span style="color:#a3be8c;"> _ _ _ 1 7 _ 9 _ _
</span><span style="color:#a3be8c;"> _ _ 2 _ _ _ 6 _ _
</span><span style="color:#a3be8c;"> _ _ 3 _ 9 5 _ _ _
</span><span style="color:#a3be8c;">
</span><span style="color:#a3be8c;"> 2 7 _ _ _ 1 _ _ _
</span><span style="color:#a3be8c;"> _ 8 9 3 _ _ _ 7 _
</span><span style="color:#a3be8c;"> 6 _ _ _ _ _ _ _ 2</span><span>&quot;#;
</span><span>
</span><span> </span><span style="color:#b48ead;">let</span><span> grid: [Option&lt;</span><span style="color:#b48ead;">i32</span><span>&gt;; </span><span style="color:#d08770;">81</span><span>] = </span><span style="color:#96b5b4;">parse_grid</span><span>(grid_string);
</span><span>
</span><span> </span><span style="color:#96b5b4;">print_grid</span><span>(grid);
</span><span>
</span><span> </span><span style="color:#b48ead;">match </span><span style="color:#96b5b4;">solve_grid</span><span>(grid) {
</span><span> Some(g) =&gt; {
</span><span> println!(&quot;</span><span style="color:#a3be8c;">Grid complete !</span><span>&quot;);
</span><span> </span><span style="color:#96b5b4;">print_grid</span><span>(g)
</span><span> }
</span><span> None =&gt; println!(&quot;</span><span style="color:#a3be8c;">Couldn&#39;t solve the sudoku</span><span>&quot;),
</span><span> }
</span><span>
</span><span>}
</span><span>
</span></code></pre>
<p>You can just, given you have installed <a href="https://www.rustup.rs/">rust</a>.</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>cargo build
</span></code></pre>
</content>
</entry>
<entry xml:lang="en">
<title>Uluru, Kata Tjula et Kings Canyon</title>
<published>2013-06-30T00:00:00+00:00</published>
<updated>2013-06-30T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://meven.github.io/alice-springs-uluru-kata-tjula-et-kings-canyon/"/>
<id>https://meven.github.io/alice-springs-uluru-kata-tjula-et-kings-canyon/</id>
<content type="html" xml:base="https://meven.github.io/alice-springs-uluru-kata-tjula-et-kings-canyon/"><p>Je suis parti avec un américain et un hong kongais en road trip à la découverte des sites d'intérêt du centre rouge : Uluru, Kata Tjula et Kings canyon.</p>
<p><a href="/Australie/Uluru/IMG_0755.JPG" title="Feu en face de Uluru"><img src="/Australie/Uluru/IMG_0755.JPG" /></a></p>
<p>Notre trip a duré 3 nuits et 4 jours.</p>
<p><a href="/Australie/Uluru/IMG_0616.JPG" title="Arbre en face de Uluru"><img src="/Australie/Uluru/IMG_0616.JPG" /></a></p>
<p><a href="/Australie/Uluru/IMG_0654.JPG" title="Couché de soleil"><img src="/Australie/Uluru/IMG_0654.JPG" /></a></p>
<p>Uluru est très surprenant quand on s'approche, cette grosse masse rocailleuse. Il est beaucoup visité.
Il a une belle marche Uluru à faire.</p>
<p><a href="/Australie/Uluru/IMG_0822.JPG" title=""><img src="/Australie/Uluru/IMG_0822.JPG" /></a></p>
<p><a href="/Australie/Uluru/IMG_0698.JPG" title=""><img src="/Australie/Uluru/IMG_0698.JPG" /></a></p>
<p>La marche dans Kata Tjuta est très sympas.
Le trip a été excellent, J'ai adoré déguster un verre de vin devant un feu en face de Uluru.
Les petits ennuis mécaniques ne faisant qu'ajouter du charme et du suspens au périple.</p>
<p><a href="/Australie/Uluru/IMG_0740.JPG" title=""><img src="/Australie/Uluru/IMG_0740.JPG" /></a></p>
<p><a href="/Australie/Uluru/IMG_0794.JPG" title="Arbre dans le canyon"><img src="/Australie/Uluru/IMG_0794.JPG" /></a></p>
<p><a href="/Australie/Uluru/IMG_0810.JPG" title=""><img src="/Australie/Uluru/IMG_0810.JPG" /></a></p>
<p>En circulant dans le red centre, on s'attend surtout à voir des kangooroos.