<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title><![CDATA[FedoraForum.org - Programming & Packaging]]></title>
		<link>https://forums.fedoraforum.org/</link>
		<description>A place to discuss programming and packaging.</description>
		<language>en-US</language>
		<lastBuildDate>Thu, 05 Nov 2026 05:11:30 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://forums.fedoraforum.org/images/vbmobile/misc/rss.png</url>
			<title><![CDATA[FedoraForum.org - Programming & Packaging]]></title>
			<link>https://forums.fedoraforum.org/</link>
		</image>
		<item>
			<title>RUWAC – a Screen-inspired workspace</title>
			<link>https://forums.fedoraforum.org/showthread.php?336723-RUWAC-–-a-Screen-inspired-workspace&amp;goto=newpost</link>
			<pubDate>Tue, 27 Oct 2026 07:40:37 GMT</pubDate>
			<description><![CDATA[Hi friends, 
 
I've been using Linux since Red Hat 6.2 and have stayed with Fedora through the years. For most of that time, GNU Screen has been one of the tools I use practically every day. 
 
I tried switching to tmux several times, but somehow I never got efficient and comfortable with it. I was...]]></description>
			<content:encoded><![CDATA[<div>Hi friends,<br />
<br />
I've been using Linux since Red Hat 6.2 and have stayed with Fedora through the years. For most of that time, GNU Screen has been one of the tools I use practically every day.<br />
<br />
I tried switching to tmux several times, but somehow I never got efficient and comfortable with it. I was so used to simply selecting text with the mouse and pasting it with a middle-click or three-finger tap on the touchpad. And I didn't want to give up my Screen shortcuts either. Maybe it's just years of habit, but I still find them faster.<br />
<br />
So I eventually decided to build something that would work the way I wanted.<br />
<br />
That became RUWAC (Remote Unified Workspace &amp; Agent Cockpit).<br />
<br />
I built it from scratch in Rust, reusing existing open-source components where it made sense, including GTK4/libadwaita and IronRDP. It's not a fork of Screen or Remmina.<br />
<br />
What started as a terminal multiplexer with familiar Screen shortcuts gradually grew into something more. RUWAC now has persistent terminal sessions, tabs and splits, SSH connections, an integrated RDP client, file transfers, clipboard support for text and images, and even a built-in web preview.<br />
<br />
Lately, I've been using it extensively with Codex and Claude. I usually have several sessions running, switch between them while agents are working, and can paste screenshots directly into Codex, even on remote machines. I've actually started using VS Code less and less because of it.<br />
<br />
Development and most testing happen on Fedora, but RUWAC can also be compiled for other Linux distributions. One user already has a working macOS port, which was nice to see! I also have an Android companion app working in alpha, but I'll share more about that later.<br />
<br />
The latest version is 0.4.48, with Fedora 44 x86_64 test RPMs available.<br />
<br />
GitHub: <a href="https://github.com/w3fans/RUWAC" target="_blank" rel="nofollow">https://github.com/w3fans/RUWAC</a><br />
<br />
Releases: <a href="https://github.com/w3fans/RUWAC/releases/latest" target="_blank" rel="nofollow">https://github.com/w3fans/RUWAC/releases/latest</a><br />
<br />
It's still a work in progress. There are things I want to improve, particularly resizing shared terminal sessions when connecting from different computers and some clipboard behavior. There's also a known upstream RSA security advisory in the RDP dependencies, documented in the repository. These are upstream testing packages, not official Fedora packages, so I'd recommend trying them on non-critical systems first.<br />
<br />
Anyway, I thought I'd share it here. If anyone feels like giving it a try, I'd appreciate some feedback, especially from people who use Screen, tmux or remote desktops regularly.<br />
<br />
I'm interested in hearing what works, what doesn't, and what you think is missing. Feel free to comment here or open an issue on GitHub.<br />
Regards,<br />
Denis</div>

]]></content:encoded>
			<category domain="https://forums.fedoraforum.org/forumdisplay.php?27-Programming-amp-Packaging"><![CDATA[Programming & Packaging]]></category>
			<dc:creator>zvegelj</dc:creator>
			<guid isPermaLink="true">https://forums.fedoraforum.org/showthread.php?336723-RUWAC-–-a-Screen-inspired-workspace</guid>
		</item>
		<item>
			<title>Programming Challenge: Create a random league schedule</title>
			<link>https://forums.fedoraforum.org/showthread.php?336716-Programming-Challenge-Create-a-random-league-schedule&amp;goto=newpost</link>
			<pubDate>Sun, 25 Oct 2026 06:24:09 GMT</pubDate>
			<description><![CDATA[This idea came from a local sports league I play in, where there are 10 teams that play once a week for 6 weeks. If the teams are numbered 1 through 10 then a 6-week schedule could look like this: 
 
 
  [tr] 
    [th]Week 1[/th] 
    [th]Week 2[/th] 
    [th]Week 3[/th] 
    [th]Week 4[/th] 
   ...]]></description>
			<content:encoded><![CDATA[<div>This idea came from a local sports league I play in, where there are 10 teams that play once a week for 6 weeks. If the teams are numbered 1 through 10 then a 6-week schedule could look like this:<br />
<br />
<div class="cms_table"><table class="cms_table_grid" align="center"><tr valign="top" class="cms_table_grid_tr"><th class="cms_table_grid_th">Week 1</th>
<th class="cms_table_grid_th">Week 2</th>
<th class="cms_table_grid_th">Week 3</th>
<th class="cms_table_grid_th">Week 4</th>
<th class="cms_table_grid_th">Week 5</th>
<th class="cms_table_grid_th">Week 6</th>
</tr>
<tr valign="top" class="cms_table_grid_tr"><td class="cms_table_grid_td">1 v 2</td>
<td class="cms_table_grid_td">5 v 7</td>
<td class="cms_table_grid_td">6 v 10</td>
<td class="cms_table_grid_td">1 v 9</td>
<td class="cms_table_grid_td">3 v 10</td>
<td class="cms_table_grid_td">4 v 8</td>
</tr>
<tr valign="top" class="cms_table_grid_tr"><td class="cms_table_grid_td">3 v 4</td>
<td class="cms_table_grid_td">6 v 9</td>
<td class="cms_table_grid_td">1 v 8</td>
<td class="cms_table_grid_td">2 v 10</td>
<td class="cms_table_grid_td">4 v 6</td>
<td class="cms_table_grid_td">2 v 9</td>
</tr>
<tr valign="top" class="cms_table_grid_tr"><td class="cms_table_grid_td">5 v 6</td>
<td class="cms_table_grid_td">8 v 10</td>
<td class="cms_table_grid_td">3 v 9</td>
<td class="cms_table_grid_td">4 v 7</td>
<td class="cms_table_grid_td">5 v 9</td>
<td class="cms_table_grid_td">7 v 10</td>
</tr>
<tr valign="top" class="cms_table_grid_tr"><td class="cms_table_grid_td">7 v 8</td>
<td class="cms_table_grid_td">2 v 4</td>
<td class="cms_table_grid_td">2 v 7</td>
<td class="cms_table_grid_td">3 v 5</td>
<td class="cms_table_grid_td">1 v 7</td>
<td class="cms_table_grid_td">1 v 5</td>
</tr>
<tr valign="top" class="cms_table_grid_tr"><td class="cms_table_grid_td">9 v 10</td>
<td class="cms_table_grid_td">1 v 3</td>
<td class="cms_table_grid_td">4 v 5</td>
<td class="cms_table_grid_td">6 v 8</td>
<td class="cms_table_grid_td">2 v 8</td>
<td class="cms_table_grid_td">3 v 6</td>
</tr>
</table></div>
<br />
The rules for the challenge are:<br />
<ol class="decimal"><li style="">All of the 10 teams play 1 game on the same day once a week for 6 weeks.</li><li style="">No team plays the same team more than once during the 6-week season.</li><li style="">The schedule has to be random, so the schedule should be different each time you create it.</li><li style="">Within each week the order of the games doesn't matter.</li></ol><br />
Since there are 10 teams then each team has 9 possible opponents. But since the season is only 6 weeks long then no team will play all its 9 possible opponents (just 6 of them).<br />
<br />
<hr /><br />
Coding this turned out to be a bit trickier than I imagined, especially avoiding duplicate matchups (e.g. if Team 1 plays Team 2 in week 1, then those two teams can't play each other again in the remaining 5 weeks). I tried various things that didn't work, then I finally came up with a sort of brute force solution using Java (CreateTeamSchedule.java):<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">import java.util.ArrayList;<br />
import java.util.Arrays;<br />
import java.util.Collections;<br />
import java.util.HashSet;<br />
import java.util.List;<br />
import java.util.Random;<br />
import java.util.Set;<br />
import java.util.stream.IntStream;<br />
<br />
public class CreateTeamSchedule {<br />
&nbsp; &nbsp; final static int numTeams = 10, numWeeks = 6;<br />
&nbsp; &nbsp; public static void main(String[] args) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Set&lt;Integer&gt;&gt; usedMatchups = new ArrayList&lt;&gt;();<br />
&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 1; i &lt;= numWeeks; i++) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(&quot;Week &quot; + i + &quot;: &quot; + getMatchups(getRandomPermutation(), usedMatchups));<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public static List&lt;Integer&gt; getRandomPermutation() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Integer&gt; perm = new ArrayList&lt;Integer&gt;(Arrays.asList(IntStream.rangeClosed(1, numTeams)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .boxed().toArray(Integer[]::new)));<br />
&nbsp; &nbsp; &nbsp; &nbsp; Collections.shuffle(perm , new Random());<br />
&nbsp; &nbsp; &nbsp; &nbsp; return perm;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public static List&lt;Set&lt;Integer&gt;&gt; getMatchups(List&lt;Integer&gt; list, List&lt;Set&lt;Integer&gt;&gt; usedMatchups) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; List&lt;Set&lt;Integer&gt;&gt; matchups = new ArrayList&lt;&gt;();<br />
&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; numTeams; i += 2) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; matchups.add(new HashSet&lt;&gt;(list.subList(i, i + 2)));<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (Collections.disjoint(usedMatchups, matchups)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; usedMatchups.addAll(matchups);<br />
&nbsp; &nbsp; &nbsp; &nbsp; } else {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; matchups = getMatchups(getRandomPermutation(), usedMatchups);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return matchups;<br />
&nbsp; &nbsp; }<br />
}</code><hr />
</div>Compile and run:<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">$ javac CreateTeamSchedule.java<br />
<br />
$ java CreateTeamSchedule<br />
Week 1: [[7, 10], [2, 9], [4, 8], [1, 6], [3, 5]]<br />
Week 2: [[2, 6], [5, 7], [1, 8], [9, 10], [3, 4]]<br />
Week 3: [[3, 6], [8, 9], [4, 7], [5, 10], [1, 2]]<br />
Week 4: [[1, 10], [2, 3], [6, 9], [7, 8], [4, 5]]<br />
Week 5: [[3, 9], [1, 7], [2, 4], [6, 10], [5, 8]]<br />
Week 6: [[8, 10], [2, 5], [4, 9], [6, 7], [1, 3]]<br />
<br />
$ java CreateTeamSchedule<br />
Week 1: [[1, 8], [2, 4], [3, 10], [6, 9], [5, 7]]<br />
Week 2: [[4, 9], [1, 7], [8, 10], [2, 6], [3, 5]]<br />
Week 3: [[2, 5], [1, 10], [6, 7], [3, 4], [8, 9]]<br />
Week 4: [[1, 9], [5, 6], [2, 10], [3, 7], [4, 8]]<br />
Week 5: [[1, 4], [2, 9], [7, 10], [5, 8], [3, 6]]<br />
Week 6: [[4, 10], [5, 9], [3, 8], [2, 7], [1, 6]]</code><hr />
</div>As you can see, my idea was to randomly permute the numbers 1 through 10, then partition that permutation into pairs from left to right, resulting in 5 matchups for a week, repeating for 6 weeks. If any matchup in a particular week was already used, then it tries again with a new random permutation, doing so recursively until getting 5 matchups with no duplicate matchups from prior weeks. That's likely horribly inefficient, and there might be a more elegant way using combinatorics and set theory, but I couldn't think of one. Anyway, running the program takes only about  0m0.175s, so it's not bad.<br />
<br />
I'm curious to see what other approaches people here can come up with. I will say that you shouldn't just ask AI to do it for you—if I wanted an AI solution then I would have just found one myself. Some programming languages might have a better way of doing all this—I'm thinking R might have a shorter way, and I'm thinking the recursion might lend itself to some Lisp dialect or functional programming in general.</div>

]]></content:encoded>
			<category domain="https://forums.fedoraforum.org/forumdisplay.php?27-Programming-amp-Packaging"><![CDATA[Programming & Packaging]]></category>
			<dc:creator>RupertPupkin</dc:creator>
			<guid isPermaLink="true">https://forums.fedoraforum.org/showthread.php?336716-Programming-Challenge-Create-a-random-league-schedule</guid>
		</item>
	</channel>
</rss>
