From c6a4c3248d43457c037df4080ec0fdff4e15d731 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 11 Oct 2023 15:34:07 +0000 Subject: [PATCH] generate RSS file --- rss.xml | 7781 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 4707 insertions(+), 3074 deletions(-) diff --git a/rss.xml b/rss.xml index bf96e4fd..9bc3346b 100644 --- a/rss.xml +++ b/rss.xml @@ -1,3306 +1,4939 @@ - Comics - http://github.com/aalu1418/rss + JBoss Tools Aggregated Feed + https://tools.jboss.org - Wed, 11 Oct 2023 12:21:54 +0000 - Wed, 11 Oct 2023 12:21:54 +0000 - - SafelyEndangered: Ep. 923 - Stay-at-home Supervillains - https://www.webtoons.com/en/comedy/safely-endangered/ep-923-stay-at-home-supervillains/viewer?title_no=352&episode_no=923 - - - - - - - - -
- -
- Wed, 11 Oct 2023 01:01:20 +0000 -
- - MonkeyUser: AI Assistant - https://www.monkeyuser.com/2023/ai-assistant/ -

AI Assistant

- https://www.monkeyuser.com/2023/ai-assistant/ - Tue, 10 Oct 2023 00:00:00 +0000 -
- - AwkwardYeti: Bile - https://theawkwardyeti.com/comic/bile/?utm_source=rss&utm_medium=rss&utm_campaign=bile -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19427 - Mon, 09 Oct 2023 20:02:00 +0000 -
- - XKCD: Language Acquisition - https://xkcd.com/2839/ - My first words were 'These were my first words; what were yours?' - https://xkcd.com/2839/ - Mon, 09 Oct 2023 04:00:00 +0000 - - - SafelyEndangered: Ep 922 - Prison Break - https://www.webtoons.com/en/comedy/safely-endangered/ep-922-prison-break/viewer?title_no=352&episode_no=922 - - - - - - - - -
- -
- Mon, 09 Oct 2023 01:01:30 +0000 -
- - ItchyFeet: Straight Forward - http://www.itchyfeetcomic.com/2023/10/straight-forward.html - - tag:blogger.com,1999:blog-6238329353013891803.post-3370096358153134278 - Sun, 08 Oct 2023 10:00:00 +0000 - - - XKCD: Dubious Islands - https://xkcd.com/2838/ - Running for office in Minnesota on the single-issue platform 'dig a permanent channel through the Traverse Gap because it will make this map more satisfying.' - https://xkcd.com/2838/ - Fri, 06 Oct 2023 04:00:00 +0000 - - - XKCD: Odyssey - https://xkcd.com/2837/ - Ugh, it says they attempted delivery but "Nobody was home." - https://xkcd.com/2837/ - Wed, 04 Oct 2023 04:00:00 +0000 - - - SafelyEndangered: Ep. 921 - Submarine - https://www.webtoons.com/en/comedy/safely-endangered/ep-921-submarine/viewer?title_no=352&episode_no=921 - - - - - - - - -
- -
- Wed, 04 Oct 2023 01:01:21 +0000 -
- - ItchyFeet: Fluency Confusion (REMASTER) - http://www.itchyfeetcomic.com/2023/10/fluency-confusion-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-7472010200506270934 - Tue, 03 Oct 2023 14:03:00 +0000 - - - MonkeyUser: Startups - https://www.monkeyuser.com/2023/startups/ -

Startups

- https://www.monkeyuser.com/2023/startups/ - Tue, 03 Oct 2023 00:00:00 +0000 -
- - AwkwardYeti: An Accomplishment - https://theawkwardyeti.com/comic/an-accomplishment/?utm_source=rss&utm_medium=rss&utm_campaign=an-accomplishment -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19423 - Mon, 02 Oct 2023 21:39:58 +0000 -
- - XKCD: A Halloween Carol - https://xkcd.com/2836/ - [after a minute] "Okay, I think I've got it, thanks. Can I--" "oOOOooOOooo!" - https://xkcd.com/2836/ - Mon, 02 Oct 2023 04:00:00 +0000 - - - SafelyEndangered: Ep. 920 - Stay-At-Home Superheroes 2 - https://www.webtoons.com/en/comedy/safely-endangered/ep-920-stay-at-home-superheroes-2/viewer?title_no=352&episode_no=920 - - - - - - - - -
- -
- Mon, 02 Oct 2023 01:01:34 +0000 -
- - ItchyFeet: Endless Circle - http://www.itchyfeetcomic.com/2023/10/endless-circle.html - - tag:blogger.com,1999:blog-6238329353013891803.post-8688156150114854982 - Sun, 01 Oct 2023 10:00:00 +0000 - - - ItchyFeet: Waning Discipline - http://www.itchyfeetcomic.com/2023/09/waning-discipline.html - - tag:blogger.com,1999:blog-6238329353013891803.post-4205965784285786757 - Thu, 28 Sep 2023 11:55:00 +0000 - - - SafelyEndangered: Ep. 919 - Roadtrip - https://www.webtoons.com/en/comedy/safely-endangered/ep-919-roadtrip/viewer?title_no=352&episode_no=919 - - - - - - - - -
- -
- Wed, 27 Sep 2023 01:01:20 +0000 -
- - MonkeyUser: Corporate Policy - https://www.monkeyuser.com/2023/corporate-policy/ -

Corporate Policy

- https://www.monkeyuser.com/2023/corporate-policy/ - Tue, 26 Sep 2023 00:00:00 +0000 -
- - SafelyEndangered: Ep. 918 - Fight - https://www.webtoons.com/en/comedy/safely-endangered/ep-918-fight/viewer?title_no=352&episode_no=918 - - - - - - - - -
- -
- Mon, 25 Sep 2023 01:01:28 +0000 -
- - ItchyFeet: Scheduled Maintenance - http://www.itchyfeetcomic.com/2023/09/scheduled-maintenance.html - - tag:blogger.com,1999:blog-6238329353013891803.post-2506392336079545637 - Sun, 24 Sep 2023 10:00:00 +0000 - - - AwkwardYeti: Nerves - https://theawkwardyeti.com/comic/nerves-2/?utm_source=rss&utm_medium=rss&utm_campaign=nerves-2 -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19418 - Fri, 22 Sep 2023 20:45:43 +0000 -
- - Odd1sout: Senior Discount - https://theodd1sout.com/blogs/comics/senior-discount - - https://theodd1sout.com/blogs/comics/senior-discount - Fri, 22 Sep 2023 18:12:15 +0000 - - - ItchyFeet: Cryptic Sequence (REMASTER) - http://www.itchyfeetcomic.com/2023/09/cryptic-sequence-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-330360003004784298 - Fri, 22 Sep 2023 10:00:00 +0000 - - - SafelyEndangered: Ep. 917 - The Exorcism - https://www.webtoons.com/en/comedy/safely-endangered/ep-917-the-exorcism/viewer?title_no=352&episode_no=917 - - - - - - - - -
- -
- Wed, 20 Sep 2023 01:01:25 +0000 -
- - Odd1sout: Remote Death - https://theodd1sout.com/blogs/comics/remote-death - - https://theodd1sout.com/blogs/comics/remote-death - Tue, 19 Sep 2023 21:49:16 +0000 - - - SafelyEndangered: Ep. 916 - Who's a god boy - https://www.webtoons.com/en/comedy/safely-endangered/ep-916-whos-a-god-boy/viewer?title_no=352&episode_no=916 - - - - - - - - -
- -
- Mon, 18 Sep 2023 01:01:32 +0000 -
- - ItchyFeet: Goodo Hellbye - http://www.itchyfeetcomic.com/2023/09/goodo-hellbye.html - - tag:blogger.com,1999:blog-6238329353013891803.post-3408581571081166123 - Sun, 17 Sep 2023 10:00:00 +0000 - - - AwkwardYeti: Diagnosis - https://theawkwardyeti.com/comic/diagnosis/?utm_source=rss&utm_medium=rss&utm_campaign=diagnosis -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19414 - Fri, 15 Sep 2023 21:41:44 +0000 -
- - AwkwardYeti: Lazy is Free - https://theawkwardyeti.com/comic/lazy-is-free/?utm_source=rss&utm_medium=rss&utm_campaign=lazy-is-free -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19411 - Fri, 15 Sep 2023 21:32:57 +0000 -
- - ItchyFeet: Go Big (REMASTER) - http://www.itchyfeetcomic.com/2023/09/go-big-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-4419988740436695225 - Fri, 15 Sep 2023 16:04:00 +0000 - - - SafelyEndangered: Ep 915 - Afterlife - https://www.webtoons.com/en/comedy/safely-endangered/ep-915-afterlife/viewer?title_no=352&episode_no=915 - - - - - - - - -
- -
- Wed, 13 Sep 2023 01:01:24 +0000 -
- - AwkwardYeti: Ew - https://theawkwardyeti.com/comic/admission/?utm_source=rss&utm_medium=rss&utm_campaign=admission -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19408 - Mon, 11 Sep 2023 21:29:02 +0000 -
- - TheOatmeal: I posted some new animations - http://theoatmeal.com/animations?no_popup=1 - I posted some new animations

I've posted a couple of new animated cartoons about microwaves, cuddling, and wombats.

View on my website

- Mon, 11 Sep 2023 21:34:30 +0100 -
- - SafelyEndangered: Ep. 914 - Shapes and Sizes - https://www.webtoons.com/en/comedy/safely-endangered/ep-914-shapes-and-sizes/viewer?title_no=352&episode_no=914 - - - - - - - - -
- -
- Mon, 11 Sep 2023 01:01:30 +0000 -
- - ItchyFeet: Falso Cognado - http://www.itchyfeetcomic.com/2023/09/falso-cognado.html - - tag:blogger.com,1999:blog-6238329353013891803.post-3768571382229060076 - Sun, 10 Sep 2023 10:00:00 +0000 - - - AwkwardYeti: Heroes Just Know - https://theawkwardyeti.com/comic/heroes-just-know/?utm_source=rss&utm_medium=rss&utm_campaign=heroes-just-know -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19404 - Fri, 08 Sep 2023 20:56:28 +0000 -
- - ItchyFeet: Suspiciously Easy (REMASTER) - http://www.itchyfeetcomic.com/2023/09/suspiciously-easy-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-5283841347164011731 - Thu, 07 Sep 2023 06:17:00 +0000 - - - SafelyEndangered: Ep. 913 - Circle World - https://www.webtoons.com/en/comedy/safely-endangered/ep-913-circle-world/viewer?title_no=352&episode_no=913 - - - - - - - - -
- -
- Wed, 06 Sep 2023 01:01:20 +0000 -
- - SafelyEndangered: Ep. 912 - The Telephone - https://www.webtoons.com/en/comedy/safely-endangered/ep-912-the-telephone/viewer?title_no=352&episode_no=912 - - - - - - - - -
- -
- Mon, 04 Sep 2023 01:01:33 +0000 -
- - ItchyFeet: Potent Malaise - http://www.itchyfeetcomic.com/2023/09/potent-malaise.html - - tag:blogger.com,1999:blog-6238329353013891803.post-6269004794825884544 - Sun, 03 Sep 2023 09:40:00 +0000 - - - Odd1sout: Multiplayer Game - https://theodd1sout.com/blogs/comics/multiplayer-game - - https://theodd1sout.com/blogs/comics/multiplayer-game - Fri, 01 Sep 2023 18:07:19 +0000 - - - ItchyFeet: Look Out (REMASTER) - http://www.itchyfeetcomic.com/2023/08/look-out-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-8108881304597076967 - Thu, 31 Aug 2023 14:03:00 +0000 - - - SafelyEndangered: Ep. 911 - Awoo - https://www.webtoons.com/en/comedy/safely-endangered/ep-911-awoo/viewer?title_no=352&episode_no=911 - - - - - - - - -
- -
- Wed, 30 Aug 2023 01:01:23 +0000 -
- - SafelyEndangered: Ep. 910 - The Pooture - https://www.webtoons.com/en/comedy/safely-endangered/ep-910-the-pooture/viewer?title_no=352&episode_no=910 - - - - - - - - -
- -
- Mon, 28 Aug 2023 01:01:33 +0000 -
- - ItchyFeet: Actual Location - http://www.itchyfeetcomic.com/2023/08/actual-location.html - - tag:blogger.com,1999:blog-6238329353013891803.post-4137765094533958636 - Sun, 27 Aug 2023 10:00:00 +0000 - - - AwkwardYeti: I Go Too - https://theawkwardyeti.com/comic/i-go-too/?utm_source=rss&utm_medium=rss&utm_campaign=i-go-too -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19401 - Fri, 25 Aug 2023 21:41:36 +0000 -
- - AwkwardYeti: Contact - https://theawkwardyeti.com/comic/contact/?utm_source=rss&utm_medium=rss&utm_campaign=contact -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19398 - Fri, 25 Aug 2023 21:29:44 +0000 -
- - ItchyFeet: Laughing Matter (REMASTER) - http://www.itchyfeetcomic.com/2023/08/laughing-matter-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-130367190931908018 - Thu, 24 Aug 2023 10:00:00 +0000 - - - TheOatmeal: How my pets see me - http://theoatmeal.com/blog/how_pets_see_me?no_popup=1 - How my pets see me

I created a little animation about how I see my pets versus how they see me.

View on my website

- Wed, 23 Aug 2023 17:39:22 +0100 -
- - SafelyEndangered: Ep. 909 - Beep - https://www.webtoons.com/en/comedy/safely-endangered/ep-909-beep/viewer?title_no=352&episode_no=909 - - - - - - - - -
- -
- Wed, 23 Aug 2023 01:01:23 +0000 -
- - AwkwardYeti: Pay Day - https://theawkwardyeti.com/comic/pay-day/?utm_source=rss&utm_medium=rss&utm_campaign=pay-day -

-

Click Linktr.ee/theawkwardyeti to support my work on Patreon or check out my newest book
- https://theawkwardyeti.com/?post_type=comic&p=19394 - Mon, 21 Aug 2023 20:08:51 +0000 -
- - SafelyEndangered: Ep. 908 - Sweet Prince - https://www.webtoons.com/en/comedy/safely-endangered/ep-908-sweet-prince/viewer?title_no=352&episode_no=908 - - - - - - - - -
- -
- Mon, 21 Aug 2023 01:01:31 +0000 -
- - ItchyFeet: Cold Opportunism - http://www.itchyfeetcomic.com/2023/08/cold-opportunism.html - - tag:blogger.com,1999:blog-6238329353013891803.post-3514532499930992896 - Sun, 20 Aug 2023 10:00:00 +0000 - - - Odd1sout: Chips - https://theodd1sout.com/blogs/comics/chips-1 - - https://theodd1sout.com/blogs/comics/chips-1 - Fri, 18 Aug 2023 18:21:31 +0000 - - - ItchyFeet: Palm Grease (REMASTER) - http://www.itchyfeetcomic.com/2023/08/palm-grease-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-4181133011647251130 - Thu, 17 Aug 2023 19:53:00 +0000 - - - SafelyEndangered: Ep. 907 - Oh Crab - https://www.webtoons.com/en/comedy/safely-endangered/ep-907-oh-crab/viewer?title_no=352&episode_no=907 - - - - - - - - -
- -
- Wed, 16 Aug 2023 01:01:24 +0000 -
- - TheOatmeal: I made some animated shorts - http://theoatmeal.com/blog/animated_shorts?no_popup=1 - I made some animated shorts

Watch the very first Oatmeal cartoons.

View on my website

- Mon, 14 Aug 2023 17:49:37 +0100 -
- - SafelyEndangered: Ep. 906 - No Secret - https://www.webtoons.com/en/comedy/safely-endangered/ep-906-no-secret/viewer?title_no=352&episode_no=906 - - - - - - - - -
- -
- Mon, 14 Aug 2023 01:01:32 +0000 -
- - ItchyFeet: Speed Bumps - http://www.itchyfeetcomic.com/2023/08/speed-bumps.html - - tag:blogger.com,1999:blog-6238329353013891803.post-2717226556030653542 - Sun, 13 Aug 2023 06:04:00 +0000 - + Wed, 11 Oct 2023 15:34:07 +0000 + Wed, 11 Oct 2023 15:34:07 +0000 - ItchyFeet: Discouraging Skedaddle (REMASTER) - http://www.itchyfeetcomic.com/2023/08/discouraging-skedaddle-remaster.html + JBoss Blogs: Eclipse Vert.x 4.4.6 released! + https://vertx.io/blog/eclipse-vert-x-4-4-6 - tag:blogger.com,1999:blog-6238329353013891803.post-6537134340918560421 - Fri, 11 Aug 2023 14:30:00 +0000 - - - SafelyEndangered: Ep. 905 - Drink - https://www.webtoons.com/en/comedy/safely-endangered/ep-905-drink/viewer?title_no=352&episode_no=905 - - - - - - - - -
- -
- Wed, 09 Aug 2023 01:01:27 +0000 -
- - SafelyEndangered: Ep. 904 - Friends - https://www.webtoons.com/en/comedy/safely-endangered/ep-904-friends/viewer?title_no=352&episode_no=904 - - - - - - - - -
- -
- Mon, 07 Aug 2023 01:01:07 +0000 + https://vertx.io/blog/eclipse-vert-x-4-4-6 + Wed, 11 Oct 2023 00:00:00 +0000
- ItchyFeet: Advantage Point - http://www.itchyfeetcomic.com/2023/08/advantage-point.html + JBoss Blogs: Getting started with API Management + https://www.mastertheboss.com/jboss-frameworks/apigateway/getting-started-with-api-management/ - tag:blogger.com,1999:blog-6238329353013891803.post-1900883132713126231 - Sun, 06 Aug 2023 10:36:00 +0000 + https://www.mastertheboss.com/jboss-frameworks/apigateway/getting-started-with-api-management/ + Tue, 10 Oct 2023 11:02:56 +0000 - TheOatmeal: Good vs Evil - http://theoatmeal.com/blog/good_vs_evil?no_popup=1 - Good vs Evil

I have an update about my Netflix show.

View on my website

- Fri, 04 Aug 2023 19:20:22 +0100 + Red Hat Developer: How custom SELinux policies secure servers and containers + https://developers.redhat.com/articles/2023/10/10/how-custom-selinux-policies-secure-servers-and-containers +

Security-Enhanced Linux (SELinux) is a robust security framework that enforces mandatory fine-grained access controls on Red Hat Enterprise Linux systems. When managing server fleets and running containers, the deployment of customized SELinux policies becomes essential for maintaining a strong security posture.

+ +

Custom SELinux policies empower organizations to customize access controls according to their unique requirements. Although Linux distributions come with default SELinux policies, they may not address all the use cases or applications within an organization's environment. Deploying custom policies allows you to establish precise rules that align with your infrastructure and applications.

+ +

This is the second article in our SELinux series. The first article described SELinux basics. This article demonstrates the creation and deployment of custom SELinux policies across server fleets and containerized environments, emphasizing the associated benefits and best practices.

+ +

    How to implement a custom policy

    + +

    Prerequisites:

    + +

    The following example describes the steps to create custom policies for granting dedicated directory and file access to users and how to modify a policy file in the file's permissions and labels or context.

    + +

    1. Install the necessary dependency packages: policycoreutils, policycoreutils-devel, setools-console, setroubleshoot. Additionally, create a private_files directory to consolidate all content in one location.

    + +
    +$mkdir private_files && cd private_files
    +
    +$sudo yum install policycoreutils policycoreutils-devel setools-console setroubleshoot -y
    +Package policycoreutils-2.9-24.el8.x86_64 is already installed.
    +Package policycoreutils-devel-2.9-24.el8.x86_64 is already installed.
    +Package setools-console-4.3.0-3.el8.x86_64 is already installed.
    +Package setroubleshoot-3.3.26-5.el8.x86_64 is already installed.
    +Dependencies resolved.
    +Nothing to do.
    +Complete!
    + +

    2. Create a policy module file called private_files.te, where .te signifies type enforcement. Copy and paste the following content into the terminal to create the private_files.te file.

    + +
    +cat <<'EOF' >> private_files.te
    +policy_module(private_files, 1.0)
    +require {
    +type unconfined_t;
    +type setroubleshootd_t;
    +}
    +type private_files_t;
    +fs_associate(private_files_t);
    +allow unconfined_t private_files_t:{dir file} relabelto;
    +allow setroubleshootd_t private_files_t:{ dir file } getattr;
    +EOF
    + +
    • policy_module: Module name.
    • +
    • require: Specify the domains that must be defined within the policy.
    • +
    • type: Declares new type.
    • +
    • fs_associate: Associate type with filesystem.
    • +
    • allow: Define specific allow rules for permitted actions while blocking all other actions.
    • +

    Establish a symbolic link to the makefile using these commands. This will ensure that the make command references the correct file.

    + +
    +# ln -s /usr/share/selinux/devel/Makefile.
    +# ls -l
    +total 4
    +lrwxrwxrwx. 1 root root  33 Aug 30 11:04 Makefile -> /usr/share/selinux/devel/Makefile
    +-rwxrwxrwx. 1 root root 283 Aug 30 10:59 private_files.te
    + +

    3. Compile the policy files using the make command. This will produce a private_files.pp output file, which reads private_files.te and generates all required dependency files.

    + +
    +# make private_files.pp
    +Compiling targeted private_files module
    +Creating targeted private_files.pp policy package
    +rm tmp/private_files.mod tmp/private_files.mod.fc
    +
    +# ls
    +Makefile  private_files.fc  private_files.if  private_files.pp  private_files.te  tmp
    + +

    4. Install the compiled file using the semodule -i command:

    + +
    +# semodule -i private_files.pp
    + +

    5. Create a file to test the policies and assign full read and write permissions to it.

    + +
    +# mkdir -m 777 /private
    + +

    6. Impose the label to a private directory using the chcon command:

    + +
    +[root@SElinux private_files]# chcon -t private_files_t /private
    +
    +[root@SElinux private_files]# ls -Z /private
    +ls: cannot access '/private': Permission denied
    + +

    Your statement is clear and effectively conveys the expected behavior of the custom policy.

    + +

    Fix the permissions

    + +

    7. Make changes in the policy file to grant access to the file and directory using the getattr (get attribute) syntax.

    + +
    +policy_module(private_files, 1.0)
    +require {
    +type unconfined_t;
    +type setroubleshootd_t;
    +}
    +
    +type private_files_t;
    +fs_associate(private_files_t);
    +allow unconfined_t private_files_t:{dir file} { relabelto getattr };
    +allow setroubleshootd_t private_files_t:{ dir file } getattr;
    + +

    8. As shown below, compile a new policy file with the make command.

    + +
    +[root@SElinux private_files]# make private_files.pp
    +Compiling targeted private_files module
    +Creating targeted private_files.pp policy package
    +rm tmp/private_files.mod tmp/private_files.mod.fc
    + +

    9. Uninstall the previous modules using the following command:

    + +
    +[root@SElinux private_files]# semodule -r private_files
    +libsemanage.semanage_direct_remove_key: Removing last private_files module (no other private_files module exists at another priority).
    + +

    10. Deploy the recently compiled.pp file by utilizing the -i flag.

    + +
    +[root@SElinux private_files]# semodule -i private_files.pp
    + +

    11. To modify the label or context of a private folder, employ the chcon command.

    + +
    +[root@SElinux private_files]# chcon -t private_files_t /private
    + +

    Inspect the labels of the following directory by employing the -Z flag.

    + +
    +[root@SElinux private_files]# ls -Z /private
    +ls: cannot open directory '/private': Permission denied
    + +

    12. Determine the root cause of the issue using the ausearch command, which conducts audits to identify problems and provide resolutions.

    + +
    +[root@SElinux private_files]# ausearch -m avc -ts recent | audit2allow
    +#============= setroubleshootd_t ==============
    +#!!!! This avc is allowed in the current policy
    +allow setroubleshootd_t private_files_t:dir getattr;
    +
    +#============= unconfined_t ==============
    +
    +#!!!! This avc is allowed in the current policy
    +allow unconfined_t private_files_t:dir getattr;
    +allow unconfined_t private_files_t:dir read;
    + +

    13. Transition SELinux to the permissive mode by executing the following command:

    + +
    +[root@SElinux private_files]# setenforce 0
    + +

    14. Develop a bash script to facilitate all filesystem-related tasks seamlessly.

    + +
    +cat << EOF >> test_script.sh
    +ls -lZ /private
    +chmod 1777 /private
    +touch /private/file1
    +echo hello > /private/file1
    +echo hello >> /private/file1
    +chmod o= /private/file1
    +mkdir /private/dir1
    +rmdir /private/dir1
    +rm -f /private/file1
    +chcon -t unconfined_t /private
    +EOF
    + +

    15. Set permissions of the bash script to execute it using the bash command.

    + +
    +[root@SElinux private_files]# chmod 777 test_script.sh
    +[root@SElinux private_files]# bash test_script.sh
    +total 0
    + +

    16. Conduct another audit of the activity within the private directory and determine the resolution.

    + +
    +[root@SElinux private_files]# ausearch -m avc -ts recent | audit2allow
    +#============= unconfined_t ==============
    +allow unconfined_t private_files_t:dir { add_name create open read relabelfrom remove_name rmdir search setattr write };
    +allow unconfined_t private_files_t:file { append create open setattr unlink write };
    +allow unconfined_t self:dir relabelto;
    + +

    17. Apply the policy resolutions to the private_files.te file by executing the following command:

    + +
    +[root@SElinux private_files]# ausearch -m avc -ts recent | audit2allow >> private_files.te
    + +

    18. After updating private_files.te, it will appear as follows:

    + +
    +[root@SElinux private_files]# cat private_files.te
    +policy_module(private_files, 1.0)
    +require {
    +type unconfined_t;
    +type setroubleshootd_t;
    +}
    +
    +type private_files_t;
    +fs_associate(private_files_t);
    +allow unconfined_t private_files_t:{dir file} { relabelto getattr };
    +allow setroubleshootd_t private_files_t:{ dir file } getattr;
    +allow unconfined_t private_files_t:dir { add_name create open read relabelfrom remove_name rmdir search setattr write };
    +allow unconfined_t private_files_t:file { append create open setattr unlink write };
    +allow unconfined_t self:dir relabelto;
    + +

    [Note: Remove the #== unconfined_t == line from the private_files.te file. ]

    + +

    19. Recompile the updated private_file.pp file once more to pull the newly made changes in the system.

    + +
    +[root@SElinux private_files]# make private_files.pp
    +Compiling targeted private_files module
    +Creating targeted private_files.pp policy package
    +rm tmp/private_files.mod tmp/private_files.mod.fc
    + +

    20. Uninstall the previous modules using the semodule -r command.

    + +
    +[root@SElinux private_files]# semodule -r  private_files
    +libsemanage.semanage_direct_remove_key: Removing last private_files module (no other private_files module exists at another priority).
    + +

    21. Apply the latest updates from private_file.pp.

    + +
    +[root@SElinux private_files]# semodule -i private_files.pp
    + +

    22. Attempt to relabel it once more for a private directory.

    + +
    +[root@SElinux private_files]# chcon -t private_files_t /private
    + +

    23. Re-enable the enforcing mode and assess the accessibility of directories and files.

    + +
    +[root@SElinux private_files]# setenforce 1
    + +

    24. Check the file permissions using the following command:

    + +
    +[root@SElinux private_files]# ls -lZd /private
    +drwxrwxrwt. 2 root root unconfined_u:object_r:private_files_t:s0 6 Aug 30 11:44 /private
    + +

    25. As anticipated, we can now access the files and directories and make changes as needed. After manipulating the SELinux policies.

    + +
    +[root@SElinux private_files]# touch /private/file1
    +[root@SElinux private_files]# echo hello > /private/file1
    +[root@SElinux private_files]# cat /private/file1
    +hello
    + +

    Deploy SELinux configurations to multiple systems

    + +

    To uphold the highest level of security practices, it is essential to keep the server updated and maintain consistent security configurations. However, manually performing this process can be time-consuming and labor-intensive. To address the challenges associated with such scenarios, the semanage utility proves invaluable. This utility enables the effortless import and export of configuration files (.mode), simplifying the management of security configurations.

    + +

    1. Before proceeding, please install the following dependency packages.

    + +
    +#yum install policycoreutils-python-utils
    + +

    2. Use semanage to generate the configuration file with a.mod extension.

    + +
    +#semanage export -f./my-selinux-settings.mod
    + +

    3. Use semanage to generate the configuration file with a.mod extension. To transfer.mod files across fleets of servers, various methods such as FTP, SFTP, SCP, and others can be employed. In this instance, we will utilize the scp command.

    + +
    +#scp./my-selinux-settings.mod new-system-hostname:
    +Or
    +#scp -t server_a.pem my-selinux-settings.mod user@servera:/home/user/
    + +

    4. After transferring the files, access the new server using the SSH command.

    + +
    +#ssh root@server_a
    +Or
    +#ssh -i server.pem user@server_a
    + +

    5. Use the semanage command to import the configuration file onto the new system.

    + +
    +#semanage import -f./my-selinux-settings.mod
    + +

    [Note: This shared configuration file is compatible only with specific OS versions, such as RHEL 9 to RHEL 9 and RHEL 8 to RHEL 8.]

    + +

    Apply SELinux to the containers

    + +

    SELinux policies can be generated for containers using the udica package in the UBI8 image. The udica package enables you to create a customized security policy for precise control over a container's access to host system resources, including storage, devices, and the network. This capability helps prevent security violations and simplifies regulatory compliance when deploying containers.

    + +

    1. Before proceeding, please install the necessary dependency packages.

    + +
    +#yum install -y udica
    + +

    2. Install a containerization tool such as Podman or Docker. We will be using Podman as the container tool.

    + +
    +# yum install podman -y
    + +

    3. Launch the container using a UBI8 image with volume mounts for the /home directory (read-only permissions) and the /var/spool directory (read and write permissions). Additionally, expose port 80.

    + +
    +#podman run --env container=podman -v /home:/home:ro -v /var/spool:/var/spool:rw -p 80:80 -dit ubi8 bash
    + +

    4. Inspect the running container using the provided Podman command and collect the CONTAINER ID.

    + +
    +#podman ps
    + +

    5. Gather all running container policies into a .json file.

    + +
    +# podman inspect 567a363etfle > container.json
    +
    +# udica -j container.json my_container
    +Policy my_container with container id 567a363etfle created!
    + +

    6. Load the policy module from the udica output in the previous step.

    + +
    +#semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
    + +

    7. Stop the container using the podman stop command, and then start it again with the --security-opt label=type:my_container.process option.

    + +
    +#podman stop 567a363etfle
    +
    +#podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 80:80 -dit ubi8 bash
    + +

    Validating SELinux in containers

    + +

    8. Verify that the container is running with the my_container.process type, and access the running container using exec.

    + +
    +# ps -efZ | grep my_container.process
    +
    +# podman exec -it 567a363etfle bash
    + +

    9. Verify that SELinux is functioning properly. Proceed to perform vulnerability testing activities within the running container.

    + +

    Install the nmap-ncat package in the container and attempt to redirect port 80 to port 2567.

    + +
    +[root@567a363etfle]# cd /var/spool
    +[root@567a363etfle]# yum install nmap-ncat
    +[root@567a363etfle]# nc -lvp 80
    +...
    +Ncat: Listening on :::80
    +Ncat: Listening on 0.0.0.0:80
    +[root@567a363etfle]# nc -lv- 2567
    +...
    +Ncat: bind to :::2567: Permission denied. QUITTING.
    + +

    As expected, SELinux is successfully preventing security risk activities within the containers as well.

    + +

    Find more resources

    + +

    For a deeper and practical understanding of Red Hat Enterprise Linux, you can engage in thoughtfully curated hands-on labs by Red Hat. Red Hat Universal Base Images (UBI) are container-based and operating system images with complementary runtime languages and packages. Try Red Hat UBI on curated Red Hat UBI hands-on lab.

    + +

    In this article, we have meticulously crafted bespoke SELinux policies and seamlessly deployed them across an extensive fleet of servers. Additionally, we have seamlessly integrated these policies into containers leveraging the UBI8 container image.

    + +

    Furthermore, you have the option to obtain tailored Red Hat Enterprise Linux images designed for AWS, Google Cloud Platform, Microsoft Azure, and VMware, facilitating their seamless deployment on your chosen platform.

    +The post How custom SELinux policies secure servers and containers appeared first on Red Hat Developer. +

    + d6e91ea0-1d78-423b-a69e-d1fcca624933 + Tue, 10 Oct 2023 07:00:00 +0000
    - ItchyFeet: Ample Prefix (REMASTER) - http://www.itchyfeetcomic.com/2023/08/ample-prefix-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-4432261259362977765 - Thu, 03 Aug 2023 14:32:00 +0000 + Red Hat Developer: How to validate GitOps manifests + https://developers.redhat.com/articles/2023/10/10/how-validate-gitops-manifests +

    One of the major challenges of managing a cluster and application resources with GitOps is validating that changes to the GitOps manifests are correct. When making changes to objects directly on the cluster, the user is immediately presented with feedback when issues exist. The user is able to troubleshoot and resolve those issues with the knowledge of the context of the changes they just made. When working with GitOps, that feedback cycle is often delayed and users don't receive feedback on changes until they are applied to the cluster, which could be hours or even weeks depending on the approval lifecycle of a change.

    + +

    To reduce the number of errors in changes to a GitOps manifest and eliminate the dreaded Unknown state in an ArgoCD application, this article will discuss tools and best practices. We will discuss automating these validations with GitHub actions, but all of these validations can be configured with another CI tool of your choice.

    + +

    Using YAML linters

    + +

    YAML is the basis of nearly all GitOps repos. As you would expect, YAML has specific syntax standards for validity. Additionally, there are many recommended best practices that may not be required but can help improve the consistency and readability of the YAML.

    + +

    YAML linters are a great tool to help validate requirements on a repo and enforce consistent style for some of the optional configurations. Many different YAML linter tools exists, but one that I recommend is yamllint. The yamllint is built with Python, making it easy to set up on most Linux and MacOS environments since Python is installed by default and easily installed on any Windows environment.

    + +

    To install yamllint you can run the following command with pip, the Python package management tool:

    + +
    +pip install --user yamllint
    +
    + +

    Once installed, users can use the yamllint cli tool to manually validate individual files:

    + +
    +yamllint my-file.yaml
    +
    + +

    Or an entire directory structure:

    + +
    +yamllint .
    +
    + +

    The yamllint provides a default configuration that may provide warnings for some style standards that you many not wish to enforce. The default options can easily be configured by creating a file called .yamllint in the root of the project. The following is a common configuration used in many GitOps repos:

    + +
    +extends: default
    +
    +rules:
    +  document-start: disable
    +  indentation:
    +    indent-sequences: whatever
    +  line-length: disable
    +  truthy:
    +    ignore: .github/workflows/
    +
    + +

    Automating with GitHub actions

    + +

    Running yamllint locally is a great option for developers to get feedback while making changes to a repo, however running yamllint directly in a CI tool such as GitHub actions can help enforce standards and prevent improperly formatted YAML from ever making it into the main branch.

    + +

    To add a yamllint GitHub action, we can utilize a pre-built GitHub action and create a file called .github/workflows/validate-manifests.yaml in your project containing the following:

    + +
    +name: Validate Manifests
    +on:
    +  push:
    +    branches:
    +      - "*"
    +  pull_request:
    +    branches:
    +      - "*"
    +
    +jobs:
    +  lint-yaml:
    +    runs-on: ubuntu-latest
    +    steps:
    +      - name: Code Checkout
    +        uses: actions/checkout@v3
    +      - name: Validate YAML
    +        uses: ibiqlik/action-yamllint@v3
    +        with:
    +          format: github
    +
    + +

    One great feature of yamllint is that it has native integration with GitHub and can do annotations directly on the lines of code with issues, making it easier for developers to identify problems and resolve them (Figure 1).

    + + +
    +
    + A screenshot of a yamllint error Github annotation. +
    +
    Figure 1: This illustrates a yamllint error GitHub annotation.
    +
    +
    +

    The benefits of YAML linters

    + +

    YAML linters are designed to enforce generic YAML standards and make sure that objects are properly structured based on those generic standards. YAML linters are great for identifying issues with misconfigurations in YAML, such as extra lines in files or incorrect tabbing in objects. YAML linters can be great for catching problems such as objects incorrectly copied and pasted into a repo or a field accidentally duplicated in the same object.

    + +

    YAML linters can also keep GitOps repos more consistent and enforce some chosen standards for all contributors to the repo, making the repo more readable and maintainable. However, YAML linters are generally not able to do any sort of deeper inspection of the objects, and they do not validate the object against the expected schema for that object type.

    + +

    Kustomize validation

    + +

    Kustomize is one of the most common tools found in a GitOps repo for helping to organize and deploy YAML objects. Repos can commonly contain dozen, if not hundreds of kustomization.yaml files that can be incorrectly configured and cause errors when you reach the deployment step if not validated beforehand.

    + +

    A simple validation can be performed using the kustomize CLI tool:

    + +
    +kustomize build path/to/my/folder
    +
    + +

    This command will attempt to render the folder using kustomize and display the final YAML objects. If it successfully renders, the kustomization.yaml file is valid. If it does not, kustomize will display an error to troubleshoot the issue.

    + +

    When making changes in kustomize, it can be easy to cause unforeseen problems. Therefore, it is always recommended to validate all kustomize resources in a repo, even those that you have not directly changed. A script that looks for all kustomization.yaml files in the repo, and attempts to run kustomize build for each folder can help to validate that no unintentional errors have been created. Fortunately, the Red Hat CoP has already created a script to do exactly that. Copy the validate_manifests.sh directly into a GitOps repo. Generally, I store it in a scripts folder, but you can run the script with the following:

    + +
    +./scripts/validate_manifests.sh
    +
    + +

    Automating with GitHub Actions

    + +

    Just like the YAML lint, validating the kustomize in a CI tool is an important step to adding confidence to changes to a repo and ensuring that no errors are introduced into the main branch.

    + +

    Conveniently, GitHub Actions already has the kustomize tool built in so we can create a simple action to run the previously mentioned script by adding a new job to the same validation action we created before:

    + +
    +jobs:
    +  lint-kustomize:
    +    runs-on: ubuntu-latest
    +    steps:
    +      - name: Code Checkout
    +        uses: actions/checkout@v3
    +      - name: Verify Kustomize CLI Installation
    +        run: |
    +          which kustomize
    +          kustomize version
    +      - name: Validate Manifests
    +        run: |
    +          ./scripts/validate_manifests.sh
    +
    + +

    The benefits of Kustomize validation

    + +

    Kustomize is a powerful tool, but one that is easy for human error to cause problems. This simple practice of validating every kustomization.yaml file in a repo can reduce the number of errors created by accidentally misspelling a filename or forgetting to update a filename in the kustomization.yaml file after renaming it. This kustomize check can also identify problems where objects are updated and any patches that impact those objects are no longer valid.

    + +

    Additional, this validation can help to ensure that you don't accidentally break dependencies where another kustomization.yaml file inherits from a folder you did change. You can quickly catch problems before changes are merged into the main branch, such as when an object is removed from a base folder and that same object is being referenced in the overlay.

    + +

    Using the Helm tool

    + +

    Helm is another popular tool that is utilized in GitOps repos for organizing complex applications. Helm is an extremely powerful tool but one that can be prone to errors due to its complex syntax and structure.

    + +

    Fortunately, Helm provides a built in tool to help validate charts within the CLI:

    + +
    +helm lint path/to/my/chart
    +
    + +

    Helm's linting capabilities will help to validate the template code to ensure that it is valid, verify all of the necessary values are present, and emit warnings for other recommendations.

    + +

    As with the kustomize script, we can automate validating all of the charts in the repo by searching for any Chart.yaml files. The following script can be created in a file called validate_charts.sh:

    + +
    +#!/bin/sh
    +
    +for i in `find "${HELM_DIRS}" -name "Chart.yaml" -exec dirname {} \;`;
    +do
    +
    +    echo
    +    echo "Validating $i"
    +    echo
    +
    +    helm lint $i
    +
    +    build_response=$?
    +
    +    if [ $build_response -ne 0 ]; then
    +        echo "Error linting $i"
    +        exit 1
    +    fi
    +
    +done
    +
    +echo
    +echo "Charts successfully validated!"
    +
    + +

    You can easily validate all of the charts in a repository at once by running the following command:

    + +
    +./scripts/validate_charts.sh
    +
    + +

    This new script can be triggered from a GitHub Action just like the previous kustomize check. However in this case, helm is not built into the base action, so it must be installed as follows:

    + +
    +jobs:
    +  helm-lint:
    +    runs-on: ubuntu-latest
    +    env:
    +      HELM_VERSION: 3.12.3
    +      HELM_DIRS: .
    +    steps:
    +      - name: Install Helm
    +        run: |
    +          sudo curl -L -o /usr/bin/helm https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz
    +          sudo chmod +x /usr/bin/helm
    +      - name: Code Checkout
    +        uses: actions/checkout@v3
    +      - name: Validate Charts
    +        run: |
    +            ./scripts/validate_charts.sh
    +
    + +

    The benefits of Helm lint

    + +

    Helm linting can help to catch many issues. Helm is notorious for its complexity and the challenges that the templating language can introduce. You can catch common issues, such as misspelling a value name or incorrectly scoping a variable, with the Helm linting tool. Additionally, a Helm lint can catch other configuration issues in a chart such as an invalid reference in the Chart.yaml file.

    + +

    Helm linting does not do any validation on the YAML from the rendered charts. It only validates that the chart can be rendered. In some cases, it may be beneficial to apply additional validations on the rendered charts themselves.

    + +

    Next steps and limitations

    + +

    The validations discussed are a great first step for improving the confidence of changes in a GitOps repo before deployment. Running these validations can help you avoid common mistakes in GitOps and allow you to catch and resolve problems before they are ever attempted to be validated against the cluster.

    + +

    One major limitation of these checks is the lack of validation of the objects being applied to a cluster. If a field only accepts a value of true or false the validations discussed today will not be able to identify an invalid configuration such as this.

    + +

    More specialized tools such as kubeval and kubeconform can help to validate standard Kubernetes objects, but they lack support for Red Hat OpenShift specific objects or CustomResources from Operators out of the box. Extracting schemas for those objects is possible, which can help to extend validation of objects even beyond standard k8s objects.

    + +

    Additionally, you can perform validations directly against a target cluster itself using the --dry-run=server flag with oc apply. Using the dry-run flag allows the objects to be validated against the cluster itself and provides an even greater degree of confidence that objects applied to the cluster will be successful.

    +The post How to validate GitOps manifests appeared first on Red Hat Developer. +

    + 95d3a2f7-477c-4c56-8894-124fa034c2c2 + Tue, 10 Oct 2023 07:00:00 +0000
    - Odd1sout: Meeting New People - https://theodd1sout.com/blogs/comics/meeting-new-people + JBoss Blogs: A recap of Quarkus Tools for IntelliJ's latest improvements + https://quarkus.io/blog/intellij-quarkus-recap/ - https://theodd1sout.com/blogs/comics/meeting-new-people - Mon, 31 Jul 2023 16:20:09 +0000 + https://quarkus.io/blog/intellij-quarkus-recap/ + Tue, 10 Oct 2023 00:00:00 +0000 - ItchyFeet: En Route - http://www.itchyfeetcomic.com/2023/07/en-route.html + JBoss Blogs: Quarkus Newsletter #37 - October + https://quarkus.io/blog/quarkus-newsletter-37/ - tag:blogger.com,1999:blog-6238329353013891803.post-1484196581744130770 - Sun, 30 Jul 2023 08:57:00 +0000 + https://quarkus.io/blog/quarkus-newsletter-37/ + Tue, 10 Oct 2023 00:00:00 +0000 - ItchyFeet: Deceptively Lovely - http://www.itchyfeetcomic.com/2023/07/deceptively-lovely.html - - tag:blogger.com,1999:blog-6238329353013891803.post-1729923623335600055 - Thu, 27 Jul 2023 16:48:00 +0000 + Quarkus: Quarkus Newsletter #37 - October + https://quarkus.io/blog/quarkus-newsletter-37/ + Read "Integrate your Quarkus application with GPT4All" by Alex Soto Bueno to explore how to integrate GPT4All into a Quarkus application so that you can query this service and return a response without any external resources. Go behind the scenes to learn how to create a CRUD application using virtual... + https://quarkus.io/blog/quarkus-newsletter-37/ + Tue, 10 Oct 2023 00:00:00 +0000 - MonkeyUser: Deprecated - https://www.monkeyuser.com/2023/deprecated/ -

    Deprecated

    - https://www.monkeyuser.com/2023/deprecated/ - Tue, 25 Jul 2023 00:00:00 +0000 + Quarkus: A recap of Quarkus Tools for IntelliJ's latest improvements + https://quarkus.io/blog/intellij-quarkus-recap/ + Quarkus Tools for IntelliJ is a free and open source extension, helping users develop Quarkus applications by providing content-assist, validation, run configurations and many other features right from their favourite IDE. This extension is based on the LSP4MP (i.e. MicroProfile) and its Quarkus add-on, and the Qute language server. These... + https://quarkus.io/blog/intellij-quarkus-recap/ + Tue, 10 Oct 2023 00:00:00 +0000
    - ItchyFeet: Toxic Advice - http://www.itchyfeetcomic.com/2023/07/toxic-advice.html + JBoss Blogs: Meet Keycloak at KubeCon Chicago in Nov 2023 + https://www.keycloak.org/2023/10/keycloak-kubeconf-chicago - tag:blogger.com,1999:blog-6238329353013891803.post-7988578013833928846 - Sun, 23 Jul 2023 10:00:00 +0000 + https://www.keycloak.org/2023/10/keycloak-kubeconf-chicago + Tue, 10 Oct 2023 00:00:00 +0000 - Odd1sout: Have a Bite - https://theodd1sout.com/blogs/comics/have-a-bite - - https://theodd1sout.com/blogs/comics/have-a-bite - Fri, 21 Jul 2023 18:24:59 +0000 - - - ItchyFeet: Startling Sounds (REMASTER) - http://www.itchyfeetcomic.com/2023/07/startling-sounds-remaster.html - - tag:blogger.com,1999:blog-6238329353013891803.post-9076104689801057387 - Thu, 20 Jul 2023 10:00:00 +0000 - - - MonkeyUser: History of Debugging - https://www.monkeyuser.com/2023/history-of-debugging/ -

    History of Debugging

    - https://www.monkeyuser.com/2023/history-of-debugging/ - Tue, 18 Jul 2023 00:00:00 +0000 -
    - - ItchyFeet: Persistent Symptom - http://www.itchyfeetcomic.com/2023/07/persistent-symptom.html - - tag:blogger.com,1999:blog-6238329353013891803.post-3476240783616284649 - Sun, 16 Jul 2023 08:57:00 +0000 - - - Odd1sout: Choke - https://theodd1sout.com/blogs/comics/choke - - https://theodd1sout.com/blogs/comics/choke - Thu, 13 Jul 2023 19:01:01 +0000 - - - Odd1sout: Grimace - https://theodd1sout.com/blogs/comics/grimace - - https://theodd1sout.com/blogs/comics/grimace - Fri, 30 Jun 2023 22:20:46 +0000 - - - Odd1sout: Strong Man - https://theodd1sout.com/blogs/comics/strong-man - - https://theodd1sout.com/blogs/comics/strong-man - Fri, 16 Jun 2023 21:52:41 +0000 - - - Odd1sout: Under the Bed - https://theodd1sout.com/blogs/comics/under-the-bed - - https://theodd1sout.com/blogs/comics/under-the-bed - Fri, 09 Jun 2023 20:56:57 +0000 - - - Odd1sout: Music - https://theodd1sout.com/blogs/comics/music - - https://theodd1sout.com/blogs/comics/music - Mon, 05 Jun 2023 17:23:05 +0000 - - - PersnicketyPets: On A Roll - https://persnicketypets.com/blogs/the-persnickety-pets/on-a-roll - - https://persnicketypets.com/blogs/the-persnickety-pets/on-a-roll - Mon, 29 May 2023 21:00:00 +0000 - - - Odd1sout: Listening Shell - https://theodd1sout.com/blogs/comics/listening-shell - - https://theodd1sout.com/blogs/comics/listening-shell - Fri, 26 May 2023 17:33:56 +0000 - - - Odd1sout: Bigfoot - https://theodd1sout.com/blogs/comics/bigfoot - - https://theodd1sout.com/blogs/comics/bigfoot - Fri, 19 May 2023 18:26:11 +0000 - - - Odd1sout: Play Fetch - https://theodd1sout.com/blogs/comics/play-fetch - - https://theodd1sout.com/blogs/comics/play-fetch - Fri, 12 May 2023 18:13:17 +0000 - - - Odd1sout: Mailman - https://theodd1sout.com/blogs/comics/mailman - - https://theodd1sout.com/blogs/comics/mailman - Fri, 05 May 2023 18:52:32 +0000 - - - PersnicketyPets: A Special Treat - https://persnicketypets.com/blogs/the-persnickety-pets/a-special-treat - - https://persnicketypets.com/blogs/the-persnickety-pets/a-special-treat - Mon, 01 May 2023 21:00:01 +0000 - - - Odd1sout: Superman - https://theodd1sout.com/blogs/comics/superman - - https://theodd1sout.com/blogs/comics/superman - Fri, 28 Apr 2023 22:47:17 +0000 - - - PersnicketyPets: Let It Fly - https://persnicketypets.com/blogs/the-persnickety-pets/let-it-fly - - https://persnicketypets.com/blogs/the-persnickety-pets/let-it-fly - Mon, 24 Apr 2023 21:23:32 +0000 - - - Odd1sout: Cat People - https://theodd1sout.com/blogs/comics/cat-people - - https://theodd1sout.com/blogs/comics/cat-people - Fri, 21 Apr 2023 17:27:54 +0000 - - - TheOatmeal: I'm thinking of a word. Try to guess what it is. - http://theoatmeal.com/blog/wordy_online?no_popup=1 - I'm thinking of a word. Try to guess what it is.

    I coded a daily word-guessing game.

    View on my website

    - Mon, 17 Apr 2023 14:46:51 +0100 -
    - - Odd1sout: Your Fly - https://theodd1sout.com/blogs/comics/your-fly - - https://theodd1sout.com/blogs/comics/your-fly - Fri, 14 Apr 2023 21:25:42 +0000 - - - PersnicketyPets: Pet Maths - https://persnicketypets.com/blogs/the-persnickety-pets/pet-maths - - https://persnicketypets.com/blogs/the-persnickety-pets/pet-maths - Mon, 10 Apr 2023 21:33:55 +0000 - - - Odd1sout: Egg-Spensive - https://theodd1sout.com/blogs/comics/egg-spensive - - https://theodd1sout.com/blogs/comics/egg-spensive - Sat, 08 Apr 2023 04:05:14 +0000 - - - PersnicketyPets: Order of the Subwoofer - https://persnicketypets.com/blogs/the-persnickety-pets/order-of-the-subwoofer - - https://persnicketypets.com/blogs/the-persnickety-pets/order-of-the-subwoofer - Mon, 03 Apr 2023 18:30:00 +0000 - - - MonkeyUser: Double Edged - https://www.monkeyuser.com/2023/double-edged/ -

    Double Edged

    - https://www.monkeyuser.com/2023/double-edged/ - Mon, 03 Apr 2023 00:00:00 +0000 -
    - - Odd1sout: Garlic Bread - https://theodd1sout.com/blogs/comics/garlic-bread - - https://theodd1sout.com/blogs/comics/garlic-bread - Sat, 01 Apr 2023 00:38:45 +0000 - - - Odd1sout: CHOPSTICKS - https://theodd1sout.com/blogs/comics/chopsticks-1 - - https://theodd1sout.com/blogs/comics/chopsticks-1 - Fri, 31 Mar 2023 17:15:45 +0000 - - - Odd1sout: PLAY DEAD - https://theodd1sout.com/blogs/comics/play-dead - - https://theodd1sout.com/blogs/comics/play-dead - Fri, 31 Mar 2023 16:17:59 +0000 - - - Odd1sout: CONCERTS - https://theodd1sout.com/blogs/comics/concerts - - https://theodd1sout.com/blogs/comics/concerts - Fri, 31 Mar 2023 16:17:31 +0000 - - - Odd1sout: BEREAL - https://theodd1sout.com/blogs/comics/bereal - - https://theodd1sout.com/blogs/comics/bereal - Fri, 31 Mar 2023 16:17:01 +0000 - - - Odd1sout: WORST GUY YOU KNOW - https://theodd1sout.com/blogs/comics/worst-guy-you-know - - https://theodd1sout.com/blogs/comics/worst-guy-you-know - Fri, 31 Mar 2023 16:16:23 +0000 - - - PersnicketyPets: Nocturnal Cat Society - https://persnicketypets.com/blogs/the-persnickety-pets/nocturnal-cat-society - - https://persnicketypets.com/blogs/the-persnickety-pets/nocturnal-cat-society - Mon, 06 Mar 2023 22:00:01 +0000 - - - MonkeyUser: Remote Debugging - https://www.monkeyuser.com/2023/remote-deubgging/ -

    Remote Debugging

    - https://www.monkeyuser.com/2023/remote-deubgging/ - Thu, 02 Mar 2023 00:00:00 +0000 -
    - - MonkeyUser: TODO - https://www.monkeyuser.com/2023/todo/ - - https://www.monkeyuser.com/2023/todo/ - Tue, 21 Feb 2023 00:00:00 +0000 - - - PersnicketyPets: Roses Are Red - https://persnicketypets.com/blogs/the-persnickety-pets/roses-are-red - - https://persnicketypets.com/blogs/the-persnickety-pets/roses-are-red - Mon, 13 Feb 2023 21:30:02 +0000 - - - MonkeyUser: Pair Programming Then vs Now - https://www.monkeyuser.com/2023/then-and-now/ -

    Pair Programming Then vs Now

    - https://www.monkeyuser.com/2023/then-and-now/ - Thu, 09 Feb 2023 00:00:00 +0000 -
    - - PersnicketyPets: Charging Station - https://persnicketypets.com/blogs/the-persnickety-pets/charging-station - - https://persnicketypets.com/blogs/the-persnickety-pets/charging-station - Mon, 06 Feb 2023 21:30:00 +0000 - - - MonkeyUser: AIaaS - https://www.monkeyuser.com/2023/aiaas/ -

    AIaaS

    - https://www.monkeyuser.com/2023/aiaas/ - Tue, 31 Jan 2023 00:00:00 +0000 -
    - - PersnicketyPets: Year of the Rabbit - https://persnicketypets.com/blogs/the-persnickety-pets/year-of-the-rabbit - - https://persnicketypets.com/blogs/the-persnickety-pets/year-of-the-rabbit - Mon, 23 Jan 2023 21:00:00 +0000 - - - MonkeyUser: Would You Rather - https://www.monkeyuser.com/2023/would-you-rather/ -

    Idea

    - https://www.monkeyuser.com/2023/would-you-rather/ - Fri, 20 Jan 2023 00:00:00 +0000 -
    - - PersnicketyPets: Yucky, Part 2 - https://persnicketypets.com/blogs/the-persnickety-pets/yucky-part-2 - - https://persnicketypets.com/blogs/the-persnickety-pets/yucky-part-2 - Mon, 16 Jan 2023 22:00:00 +0000 - - - TheOatmeal: Horrible Therapist - Random Comic Generator - http://theoatmeal.com/therapist?no_popup=1 - Horrible Therapist - Random Comic Generator

    The images here are picked randomly, so they might be nonsensical and/or terrible. -

    View on my website

    - Mon, 09 Jan 2023 21:09:46 +0100 -
    - - MonkeyUser: 2022 - Year in review - https://www.monkeyuser.com/2022/2022-year-in-review/ - - https://www.monkeyuser.com/2022/2022-year-in-review/ - Fri, 30 Dec 2022 00:00:00 +0000 - - - PersnicketyPets: Cookie Fiends - https://persnicketypets.com/blogs/the-persnickety-pets/cookie-fiends - - https://persnicketypets.com/blogs/the-persnickety-pets/cookie-fiends - Mon, 19 Dec 2022 23:34:16 +0000 - - - MonkeyUser: Taking Care of Business - https://www.monkeyuser.com/2022/business-care/ -

    Taking Care of Business

    - https://www.monkeyuser.com/2022/business-care/ - Fri, 16 Dec 2022 00:00:00 +0000 -
    - - MonkeyUser: Effort Shift - https://www.monkeyuser.com/2022/effort-shift/ -

    Effort Shift

    - https://www.monkeyuser.com/2022/effort-shift/ - Tue, 13 Dec 2022 00:00:00 +0000 -
    - - PersnicketyPets: Checkboxes - https://persnicketypets.com/blogs/the-persnickety-pets/checkboxes - - https://persnicketypets.com/blogs/the-persnickety-pets/checkboxes - Mon, 12 Dec 2022 20:58:44 +0000 - - - PersnicketyPets: Cat Loaves - https://persnicketypets.com/blogs/the-persnickety-pets/cat-loaves - - https://persnicketypets.com/blogs/the-persnickety-pets/cat-loaves - Mon, 05 Dec 2022 22:30:00 +0000 - - - MonkeyUser: Layoffs - https://www.monkeyuser.com/2022/layoffs/ -

    Layoffs

    - https://www.monkeyuser.com/2022/layoffs/ - Tue, 22 Nov 2022 00:00:00 +0000 -
    - - PersnicketyPets: Style - https://persnicketypets.com/blogs/the-persnickety-pets/style - - https://persnicketypets.com/blogs/the-persnickety-pets/style - Mon, 21 Nov 2022 21:17:44 +0000 - - - TheOatmeal: Rise from the deep - http://theoatmeal.com/comics/rise?no_popup=1 - Rise from the deep

    A comic about Twitter.

    View on my website

    - Sun, 20 Nov 2022 22:43:55 +0100 -
    - - TheOatmeal: How venting is supposed to feel - http://theoatmeal.com/comics/venting?no_popup=1 - How venting is supposed to feel

    A comic about venting to others.

    View on my website

    - Tue, 08 Nov 2022 20:02:52 +0100 -
    - - PersnicketyPets: Inside Job - https://persnicketypets.com/blogs/the-persnickety-pets/inside-job - - https://persnicketypets.com/blogs/the-persnickety-pets/inside-job - Mon, 07 Nov 2022 22:30:02 +0000 - - - PersnicketyPets: Costumes - https://persnicketypets.com/blogs/the-persnickety-pets/costumes - - https://persnicketypets.com/blogs/the-persnickety-pets/costumes - Mon, 31 Oct 2022 20:30:00 +0000 - - - TheOatmeal: Taking selfies from various angles - http://theoatmeal.com/comics/selfie_angles?no_popup=1 - Taking selfies from various angles

    No one out-pizzas the Keith

    View on my website

    - Wed, 26 Oct 2022 16:35:30 +0100 -
    - - PersnicketyPets: Beauty Routine - https://persnicketypets.com/blogs/the-persnickety-pets/beauty-routine - - https://persnicketypets.com/blogs/the-persnickety-pets/beauty-routine - Mon, 24 Oct 2022 21:30:01 +0000 - - - MonkeyUser: AI Care - https://www.monkeyuser.com/2022/ai-care/ -

    AI Care

    - https://www.monkeyuser.com/2022/ai-care/ - Wed, 12 Oct 2022 00:00:00 +0000 -
    - - PersnicketyPets: Open Season - https://persnicketypets.com/blogs/the-persnickety-pets/open-season - - https://persnicketypets.com/blogs/the-persnickety-pets/open-season - Mon, 10 Oct 2022 17:30:00 +0000 - - - MonkeyUser: Cognitive Distortion - https://www.monkeyuser.com/2022/cognitive-distortion/ -

    Cognitive Distortion

    - https://www.monkeyuser.com/2022/cognitive-distortion/ - Fri, 30 Sep 2022 00:00:00 +0000 -
    - - PersnicketyPets: Animals - https://persnicketypets.com/blogs/the-persnickety-pets/animals - - https://persnicketypets.com/blogs/the-persnickety-pets/animals - Tue, 27 Sep 2022 04:00:00 +0000 - - - PersnicketyPets: Cute Kitty Brews - https://persnicketypets.com/blogs/the-persnickety-pets/cute-kitty-brews - - https://persnicketypets.com/blogs/the-persnickety-pets/cute-kitty-brews - Mon, 12 Sep 2022 22:19:08 +0000 - - - MonkeyUser: Smoke Test - https://www.monkeyuser.com/2022/quick-smoke/ -

    Smoke Test

    - https://www.monkeyuser.com/2022/quick-smoke/ - Wed, 07 Sep 2022 00:00:00 +0000 -
    - - PersnicketyPets: Good Dog Brews - https://persnicketypets.com/blogs/the-persnickety-pets/good-dog-brews - - https://persnicketypets.com/blogs/the-persnickety-pets/good-dog-brews - Mon, 22 Aug 2022 21:17:58 +0000 - - - MonkeyUser: Brainstorming - https://www.monkeyuser.com/2022/brainstorming/ -

    Brainstorming

    - https://www.monkeyuser.com/2022/brainstorming/ - Fri, 19 Aug 2022 00:00:00 +0000 -
    - - PersnicketyPets: Marmalade’s Tip #92 - https://persnicketypets.com/blogs/the-persnickety-pets/marmalade-s-tip-92 - - https://persnicketypets.com/blogs/the-persnickety-pets/marmalade-s-tip-92 - Mon, 15 Aug 2022 21:00:00 +0000 - - - MonkeyUser: Automation Struggles - https://www.monkeyuser.com/2022/automation-struggles/ -

    Automation Struggles

    - https://www.monkeyuser.com/2022/automation-struggles/ - Fri, 12 Aug 2022 00:00:00 +0000 -
    - - PersnicketyPets: A New Day - https://persnicketypets.com/blogs/the-persnickety-pets/a-new-day - - https://persnicketypets.com/blogs/the-persnickety-pets/a-new-day - Mon, 08 Aug 2022 20:07:57 +0000 - - - PersnicketyPets: Treasure Hunt - https://persnicketypets.com/blogs/the-persnickety-pets/treasure-hunt - - https://persnicketypets.com/blogs/the-persnickety-pets/treasure-hunt - Mon, 01 Aug 2022 21:00:00 +0000 - - - MonkeyUser: Unit Tests - https://www.monkeyuser.com/2022/unit-tests/ -

    Unit Tests

    - https://www.monkeyuser.com/2022/unit-tests/ - Thu, 28 Jul 2022 00:00:00 +0000 -
    - - PersnicketyPets: Cat Logic - https://persnicketypets.com/blogs/the-persnickety-pets/cat-logic - - https://persnicketypets.com/blogs/the-persnickety-pets/cat-logic - Mon, 25 Jul 2022 21:00:01 +0000 - - - MonkeyUser: Complexity - https://www.monkeyuser.com/2022/complexity/ -

    Joy

    - https://www.monkeyuser.com/2022/complexity/ - Fri, 22 Jul 2022 00:00:00 +0000 -
    - - PersnicketyPets: Plot Twist - https://persnicketypets.com/blogs/the-persnickety-pets/plot-twist - - https://persnicketypets.com/blogs/the-persnickety-pets/plot-twist - Mon, 11 Jul 2022 21:30:01 +0000 - - - PersnicketyPets: Sunday Vibes - https://persnicketypets.com/blogs/the-persnickety-pets/sunday-vibes - - https://persnicketypets.com/blogs/the-persnickety-pets/sunday-vibes - Mon, 04 Jul 2022 21:00:01 +0000 - - - MonkeyUser: Joy - https://www.monkeyuser.com/2022/joy/ -

    Joy

    - https://www.monkeyuser.com/2022/joy/ - Fri, 01 Jul 2022 00:00:00 +0000 -
    - - PersnicketyPets: Around the Campfire - https://persnicketypets.com/blogs/the-persnickety-pets/around-the-campfire - - https://persnicketypets.com/blogs/the-persnickety-pets/around-the-campfire - Mon, 27 Jun 2022 21:04:26 +0000 - - - MonkeyUser: Small Delights - https://www.monkeyuser.com/2022/small-delights/ -

    Small Delights

    - https://www.monkeyuser.com/2022/small-delights/ - Fri, 24 Jun 2022 00:00:00 +0000 -
    - - MonkeyUser: Clutch Save - https://www.monkeyuser.com/2022/clutch-save/ -

    Clutch Save

    - https://www.monkeyuser.com/2022/clutch-save/ - Tue, 14 Jun 2022 00:00:00 +0000 -
    - - PersnicketyPets: One of Us - https://persnicketypets.com/blogs/the-persnickety-pets/one-of-us - - https://persnicketypets.com/blogs/the-persnickety-pets/one-of-us - Mon, 13 Jun 2022 22:00:00 +0000 - - - MonkeyUser: Estimate - https://www.monkeyuser.com/2022/estimate/ -

    Estimate

    - https://www.monkeyuser.com/2022/estimate/ - Tue, 07 Jun 2022 00:00:00 +0000 -
    - - PersnicketyPets: The Best Cat Toys - https://persnicketypets.com/blogs/the-persnickety-pets/the-best-cat-toys - - https://persnicketypets.com/blogs/the-persnickety-pets/the-best-cat-toys - Mon, 06 Jun 2022 21:00:00 +0000 - - - MonkeyUser: Mindlessness - https://www.monkeyuser.com/2022/mindlessness/ -

    Mindlessness

    - https://www.monkeyuser.com/2022/mindlessness/ - Wed, 13 Apr 2022 00:00:00 +0000 -
    - - MonkeyUser: AGI Debate - https://www.monkeyuser.com/2022/agi-debate/ -

    AGI Debate

    + Red Hat Developer: An MIR-based JIT prototype for Ruby + https://developers.redhat.com/articles/2023/10/09/mir-based-jit-prototype-ruby +

    I am a GCC compiler engineer, and for the past 15 years, I have primarily focused on the GCC register allocator and instruction scheduler. The major development of the GCC register allocator and instruction scheduler was completed quite some time ago, and these days, my main responsibility is maintaining these essential GCC components. About six years ago, I began dedicating half of my work time to improving performance of CRuby, the de facto standard Ruby implementation. A significant portion of this effort involved implementing the CRuby just-in-time (JIT) compiler.

    -

    Extra Panel: -

    - https://www.monkeyuser.com/2022/agi-debate/ - Tue, 05 Apr 2022 00:00:00 +0000 -
    - - MonkeyUser: Done Done - https://www.monkeyuser.com/2022/done-done/ -

    Done Done

    - https://www.monkeyuser.com/2022/done-done/ - Tue, 08 Mar 2022 00:00:00 +0000 -
    - - MonkeyUser: Marked - https://www.monkeyuser.com/2022/marked/ -

    Marked

    - https://www.monkeyuser.com/2022/marked/ - Tue, 15 Feb 2022 00:00:00 +0000 -
    - - MonkeyUser: Anticipate - https://www.monkeyuser.com/2022/anticipate/ -

    Anticipate

    - https://www.monkeyuser.com/2022/anticipate/ - Tue, 08 Feb 2022 00:00:00 +0000 -
    - - MonkeyUser: Testing - Hammering Nails (Animated) - https://www.monkeyuser.com/2022/hammering-nails-animated/ - - https://www.monkeyuser.com/2022/hammering-nails-animated/ - Thu, 03 Feb 2022 00:00:00 +0000 - - - MonkeyUser: FOV - https://www.monkeyuser.com/2022/fov/ -

    FOV

    - https://www.monkeyuser.com/2022/fov/ - Tue, 01 Feb 2022 00:00:00 +0000 -
    - - MonkeyUser: Buglog - https://www.monkeyuser.com/2022/buglog/ -

    Buglog

    - https://www.monkeyuser.com/2022/buglog/ - Tue, 25 Jan 2022 00:00:00 +0000 -
    - - MonkeyUser: Idea - https://www.monkeyuser.com/2022/idea/ -

    Idea

    - https://www.monkeyuser.com/2022/idea/ - Tue, 18 Jan 2022 00:00:00 +0000 -
    - - MonkeyUser: Transition to 2022 - https://www.monkeyuser.com/2021/transition-to-2022/ - - https://www.monkeyuser.com/2021/transition-to-2022/ - Fri, 31 Dec 2021 00:00:00 +0000 - - - MonkeyUser: App Types as Homes - https://www.monkeyuser.com/2021/app-types-as-homes/ -

    App Types as Homes

    - https://www.monkeyuser.com/2021/app-types-as-homes/ - Wed, 22 Dec 2021 00:00:00 +0000 -
    - - MonkeyUser: Organic Growth - https://www.monkeyuser.com/2021/organic-growth/ -

    Organic Growth

    - https://www.monkeyuser.com/2021/organic-growth/ - Tue, 14 Dec 2021 00:00:00 +0000 -
    - - MonkeyUser: Specs VS No Specs - https://www.monkeyuser.com/2021/specs-vs-no-specs/ -

    Specs VS No Specs

    - https://www.monkeyuser.com/2021/specs-vs-no-specs/ - Tue, 30 Nov 2021 00:00:00 +0000 -
    - - MonkeyUser: Mixed Feelings - https://www.monkeyuser.com/2021/mixed-feelings/ -

    Mixed Feelings

    - https://www.monkeyuser.com/2021/mixed-feelings/ - Thu, 25 Nov 2021 00:00:00 +0000 -
    - - MonkeyUser: Solution - https://www.monkeyuser.com/2021/solution/ -

    Solution

    - https://www.monkeyuser.com/2021/solution/ - Tue, 16 Nov 2021 00:00:00 +0000 -
    - - MonkeyUser: Career Path - https://www.monkeyuser.com/2021/career-path/ -

    Career Path

    - https://www.monkeyuser.com/2021/career-path/ - Tue, 26 Oct 2021 00:00:00 +0000 -
    - - MonkeyUser: Debate - https://www.monkeyuser.com/2021/debate/ -

    Debate

    - https://www.monkeyuser.com/2021/debate/ - Tue, 19 Oct 2021 00:00:00 +0000 -
    - - MonkeyUser: Seldom - https://www.monkeyuser.com/2021/seldom/ -

    Seldom

    - https://www.monkeyuser.com/2021/seldom/ - Wed, 13 Oct 2021 00:00:00 +0000 -
    - - MonkeyUser: Update - https://www.monkeyuser.com/2021/update/ -

    Update

    - https://www.monkeyuser.com/2021/update/ - Tue, 05 Oct 2021 00:00:00 +0000 -
    - - MonkeyUser: Reusable Components - https://www.monkeyuser.com/2021/reusable-components/ -

    Reusable Components

    - https://www.monkeyuser.com/2021/reusable-components/ - Tue, 07 Sep 2021 00:00:00 +0000 -
    - - MonkeyUser: Meaning - https://www.monkeyuser.com/2021/meaning/ -

    Meaning

    - https://www.monkeyuser.com/2021/meaning/ - Wed, 25 Aug 2021 00:00:00 +0000 -
    - - MonkeyUser: Outcome variables - https://www.monkeyuser.com/2021/outcome-variables/ -

    Outcome variables

    - https://www.monkeyuser.com/2021/outcome-variables/ - Tue, 03 Aug 2021 00:00:00 +0000 -
    - - MonkeyUser: Fill in the gaps - https://www.monkeyuser.com/2021/fill-in-the-gaps/ -

    Fill in the gaps

    - https://www.monkeyuser.com/2021/fill-in-the-gaps/ - Tue, 27 Jul 2021 00:00:00 +0000 -
    - - MonkeyUser: Adventure - https://www.monkeyuser.com/2021/adventure/ -

    Adventure

    - https://www.monkeyuser.com/2021/adventure/ - Wed, 07 Jul 2021 00:00:00 +0000 -
    - - MonkeyUser: Measure Twice, Cut Once - https://www.monkeyuser.com/2021/measure-twice-cut-once/ -

    Measure Twice Cut Once

    - https://www.monkeyuser.com/2021/measure-twice-cut-once/ - Tue, 15 Jun 2021 00:00:00 +0000 -
    - - MonkeyUser: Exposed - https://www.monkeyuser.com/2021/exposed/ -

    Exposed

    - https://www.monkeyuser.com/2021/exposed/ - Tue, 08 Jun 2021 00:00:00 +0000 -
    - - MonkeyUser: Loading Weekend - https://www.monkeyuser.com/2021/loading-weekend/ -

    Loading Weekend

    - https://www.monkeyuser.com/2021/loading-weekend/ - Fri, 04 Jun 2021 00:00:00 +0000 -
    - - MonkeyUser: Observer - https://www.monkeyuser.com/2021/observer/ -

    Observer

    - https://www.monkeyuser.com/2021/observer/ - Tue, 25 May 2021 00:00:00 +0000 -
    - - MonkeyUser: New Library - https://www.monkeyuser.com/2021/new-library/ -

    New Library

    - https://www.monkeyuser.com/2021/new-library/ - Tue, 18 May 2021 00:00:00 +0000 -
    - - MonkeyUser: Confidence - https://www.monkeyuser.com/2021/confidence/ -

    Confidence

    - https://www.monkeyuser.com/2021/confidence/ - Wed, 28 Apr 2021 00:00:00 +0000 -
    - - MonkeyUser: Perfect Fit - https://www.monkeyuser.com/2021/perfect-fit/ -

    Perfect Fit

    - https://www.monkeyuser.com/2021/perfect-fit/ - Fri, 23 Apr 2021 00:00:00 +0000 -
    - - MonkeyUser: Meeting - https://www.monkeyuser.com/2021/meeting/ - - https://www.monkeyuser.com/2021/meeting/ - Thu, 15 Apr 2021 00:00:00 +0000 - - - MonkeyUser: Introduction - https://www.monkeyuser.com/2021/introduction/ -

    Introduction

    - https://www.monkeyuser.com/2021/introduction/ - Tue, 13 Apr 2021 00:00:00 +0000 -
    - - MonkeyUser: Shy Coder - https://www.monkeyuser.com/2021/shy-developer/ - - https://www.monkeyuser.com/2021/shy-developer/ - Thu, 08 Apr 2021 00:00:00 +0000 - - - MonkeyUser: Days - https://www.monkeyuser.com/2021/days/ -

    Days

    - https://www.monkeyuser.com/2021/days/ - Tue, 06 Apr 2021 00:00:00 +0000 -
    - - MonkeyUser: Task Description vs Effort - https://www.monkeyuser.com/2021/task-description-vs-effort/ -

    Task Description vs Effort

    - https://www.monkeyuser.com/2021/task-description-vs-effort/ - Tue, 30 Mar 2021 00:00:00 +0000 -
    - - MonkeyUser: DENVERCODER9 - https://www.monkeyuser.com/2021/denvercoder9/ -

    DENVERCODER9

    +

    My initial attempt to implement a CRuby JIT was MJIT (method based just-in-time compiler). MJIT provided a rapid way to implement JIT for CRuby. It was based on utilizing the GCC compiler, which generated machine code as .so files in the memory file system, subsequently loaded by a dynamic loader for execution. However, GCC proved to be slow as a JIT compiler. To improve MJIT compilation speed, I employed precompiled headers and generated machine code in parallel with Ruby program execution. Takashi Kokubun adopted MJIT, improving it and integrating it into the CRuby release, where he continued to maintain it thereafter.

    -

    - https://www.monkeyuser.com/2021/denvercoder9/ - Tue, 23 Mar 2021 00:00:00 +0000 -
    - - MonkeyUser: Ready for QA - https://www.monkeyuser.com/2021/ready-for-qa/ - - https://www.monkeyuser.com/2021/ready-for-qa/ - Thu, 18 Mar 2021 00:00:00 +0000 - - - MonkeyUser: Trolley Conundrum - https://www.monkeyuser.com/2021/trolley-conundrum/ -

    Trolley Conundrum

    - https://www.monkeyuser.com/2021/trolley-conundrum/ - Tue, 16 Mar 2021 00:00:00 +0000 -
    - - MonkeyUser: Masochism - https://www.monkeyuser.com/2021/masochism/ -

    Masochism

    - https://www.monkeyuser.com/2021/masochism/ - Tue, 09 Mar 2021 00:00:00 +0000 -
    - - MonkeyUser: Promotion - https://www.monkeyuser.com/2021/promotion/ -

    Promotion

    - https://www.monkeyuser.com/2021/promotion/ - Tue, 02 Mar 2021 00:00:00 +0000 -
    - - MonkeyUser: Time To Merge - https://www.monkeyuser.com/2021/time-to-merge/ -

    Time To Merge

    - https://www.monkeyuser.com/2021/time-to-merge/ - Tue, 23 Feb 2021 00:00:00 +0000 -
    - - MonkeyUser: Adoption - https://www.monkeyuser.com/2021/adoption/ -

    Adoption

    - https://www.monkeyuser.com/2021/adoption/ - Tue, 16 Feb 2021 00:00:00 +0000 -
    - - MonkeyUser: Negligible Error - https://www.monkeyuser.com/2021/negligible-error/ -

    Negligible Error

    - https://www.monkeyuser.com/2021/negligible-error/ - Tue, 02 Feb 2021 00:00:00 +0000 -
    - - MonkeyUser: Fullstack Adventure - https://www.monkeyuser.com/2021/fullstack-adventure/ - - https://www.monkeyuser.com/2021/fullstack-adventure/ - Tue, 26 Jan 2021 00:00:00 +0000 - - - MonkeyUser: Pending Approval - https://www.monkeyuser.com/2021/pending-approval/ -

    Pending Approval

    - https://www.monkeyuser.com/2021/pending-approval/ - Tue, 19 Jan 2021 00:00:00 +0000 -
    - - MonkeyUser: Task, Story, Epic, Quest - https://www.monkeyuser.com/2021/task-story-epic-quest/ -

    Task, Story, Epic, Quest

    - https://www.monkeyuser.com/2021/task-story-epic-quest/ - Wed, 13 Jan 2021 00:00:00 +0000 -
    - - MonkeyUser: The Hero - https://www.monkeyuser.com/2021/the-hero/ -

    The Hero

    - https://www.monkeyuser.com/2021/the-hero/ - Mon, 04 Jan 2021 00:00:00 +0000 -
    - - MonkeyUser: Circle of AI Life - https://www.monkeyuser.com/2020/circle-of-ai-life/ -

    Circle of AI Life

    - https://www.monkeyuser.com/2020/circle-of-ai-life/ - Fri, 04 Dec 2020 00:00:00 +0000 -
    - - MonkeyUser: Welcome To Hell - https://www.monkeyuser.com/2020/welcome-to-hell/ -

    Welcome To Hell

    - https://www.monkeyuser.com/2020/welcome-to-hell/ - Fri, 27 Nov 2020 00:00:00 +0000 -
    - - MonkeyUser: Feature Complete - https://www.monkeyuser.com/2020/feature-complete/ -

    Feature Complete

    - https://www.monkeyuser.com/2020/feature-complete/ - Fri, 20 Nov 2020 00:00:00 +0000 -
    - - MonkeyUser: Acceptance - https://www.monkeyuser.com/2020/acceptance/ -

    Acceptance

    - https://www.monkeyuser.com/2020/acceptance/ - Wed, 18 Nov 2020 00:00:00 +0000 -
    - - MonkeyUser: Effort Splitting - https://www.monkeyuser.com/2020/effort-splitting/ -

    Effort Splitting

    - https://www.monkeyuser.com/2020/effort-splitting/ - Tue, 10 Nov 2020 00:00:00 +0000 -
    - - MonkeyUser: Election - https://www.monkeyuser.com/2020/election/ -

    Election

    - https://www.monkeyuser.com/2020/election/ - Tue, 03 Nov 2020 00:00:00 +0000 -
    - - MonkeyUser: Get Funded - https://www.monkeyuser.com/2020/get-funded/ -

    Get Funded

    +

    MJIT notably improved the performance of Optcarrot, a classic Ruby benchmark, by threefold. However, it struggled to enhance performance for many widely-used applications, such as Ruby on Rails.

    + +

    I dedicated a year of work to MJIT, gaining valuable experience and insights into the JIT requirements for CRuby. It became clear that developing an effective JIT for CRuby was a multi-year endeavor requiring dedicated efforts from a select few. Undaunted, I embarked on this ambitious multi-year project.

    + +

    Initially, I decided to create a universal lightweight JIT compiler based on a machine-independent medium internal representation (MIR). This compiler aimed to achieve speeds 100 times faster than GCC and generate code with performance comparable to that produced by GCC with -O2 optimizations. These goals were successfully achieved. While the MIR project has made significant strides and is already employed for JIT implementations in various programming languages, it has yet to reach its culmination. The ultimate objective of the MIR project is to simplify JIT implementation for dynamic programming languages. MIR should facilitate code specialization and execution trace optimizations. The long-term aspiration is to develop a meta-tracing JIT compiler for automatically generating JITs from a C-written interpreter. More detailed information on these objectives can be found in one of my previous blog posts.

    + +

    My intention was to leverage the power of MIR for a new CRuby JIT, forming a part of my long-term strategy.

    + +

    The introduction of Shopify YJIT for CRuby a couple of years ago disrupted my long-standing strategy. In response, I accelerated the process by implementing different specializations at the instruction level of CRuby virtual machine (VM), departing from the singular approach of MIR and incorporating the current state of the MIR JIT compiler. Last year, I introduced specialization at the VM instruction level, introducing a new collection of specialized VM instructions known as SIR (specialized internal representation). Specialization is achieved through basic block versioning invented by Maxime Chevalier-Boisvert and speculative techniques.

    + +

    SIR, in addition to specialization, functions as a register transfer language (RTL), whereas the original VM instructions are stack-based. Employing RTL enhances the interpreter's performance, but it's not actually necessary for improving the performance of the MIR-based JIT.

    + +

    Over the past six months, I have focused on an MIR-based JIT that compiles SIR, already specialized at the interpreter level.

    + +

    The success of YJIT led to a pivotal decision by my management team and me: to discontinue work on the MIR-based JIT for CRuby. The YJIT team has done an exemplary job, and their approach aligns well with the goal of further enhancing JIT performance. They are transitioning from direct machine code generation to generating internal representation (IR) and optimizing it as an intermediate step. Given Shopify's strategic interest in CRuby JIT and the ample resources dedicated to this pursuit, the future of CRuby JIT is in capable hands.

    + +

    This article provides an overview of the MIR-based JIT for CRuby and summarizes the results of the unfinished project, along with my ideas for further improving MIR-based JIT and YJIT performance. I hope this post proves valuable not only to JIT developers at large but also to those specifically involved in Ruby JIT development.

    + +

    MIR-based JIT design

    + +

    Here, I will describe the major features of the MIR-based JIT design and highlighting its differences from YJIT.

    + +

    As I mentioned earlier, the majority of code specialization for the MIR-based JIT occurs at the interpreter level. This specialization encompasses type specialization, method call specialization, array element, and instance variable access specialization. Specialization is achieved through a combination of lazy basic block versioning and speculative techniques. Basic block versioning specialization incurs no additional cost, while speculative specialization requires certain guards to verify assumed specialization conditions. More comprehensive details about the specialized internal representation and this process can be found in my previous blog post.

    + +

    Figure 1 shows a data flow diagram for the MIR-based JIT (all images can be clicked to increase their size):

    + + +
    +
    + MIR-based CRuby JIT data flow +
    +
    +
    Figure 1: MIR-based JIT data flow.

    Components of the universal MIR JIT compiler are highlighted in green.

    + +

    Once the execution count of a basic block version reaches a specific threshold, it is sent to the MIR-based JIT. The behavior of YJIT differs in this aspect. When the call count for a particular method surpasses a threshold, YJIT starts JITting basic block versions of the method in a lazy manner. Essentially, YJIT will not generate machine code for a Ruby code fragment like while i < 1_000_000 do i += 1; end unless it is within a frequently executed method. In contrast, the MIR-based JIT will certainly generate machine code for such a fragment.

    + +

    To provide a more accurate description of basic block generation by the MIR-based JIT, when a loop comprises a single basic block, the generated code incorporates the complete loop rather than solely the basic block of the loop. Similarly, if a basic block contains a method call consisting of only one block, the generated code can inline the entire method.

    + +

    The transition between the interpreter and machine code generated by YJIT comes with a significant cost. Hence, the YJIT team has concentrated on minimizing the frequency of such transitions.

    + +

    Conversely, for the MIR-based JIT, the same transition is virtually cost-free. The CRuby interpreter employs a direct dispatch technique using the GCC extension labels as values. Each CRuby VM instruction carries the address of the label associated with the code responsible for implementing the instruction. Figure 2 illustrates this approach.

    + + +
    +
    + Dispatch. +
    +
    +
    Figure 2: Dispatch.

    When the MIR-based JIT generates machine code for a basic block, it reroutes the first instruction of the basic block to the machine code (see Figure 3).

    + + +
    +
    + Dispatch redirection diagram. +
    +
    +
    Figure 3: Dispatch redirection.

    To improve the interpretation speed, variables that describe the execution context, such as cfp (CRuby VM control frame pointer) or pc (CRuby VM program counter), are allocated to specific machine registers through the use of the GCC extension explicit local register variables.

    + +

    The machine code generated by the MIR-based JIT employs the same registers for the same variables using the GCC extension explicit global register variables, also implemented in MIR. This obviates the need to transfer the execution context state between the interpreter and JITted code and back. The MIR project supports a distinct call ABI, in which the MIR function can be invoked and returned through direct and indirect jumps.

    + +

    YJIT directly generates machine code from VM instructions. Only recently, YJIT's development has shifted towards optimizing an internal representation first, including at least doing register allocation, before generating machine code from that internal representation.

    + +

    The MIR-based JIT generates machine code through a series of steps. First, it generates C code in memory for a basic block version. Next, the C-to-MIR compiler from the MIR project generates MIR code, also in memory. Finally, the MIR code is optimized and compiled into machine code using the MIR-generator from the MIR project. While it is possible to generate MIR code directly, for the prototype, I found it more manageable to generate C code first, as it is more readable.

    + +

    MIR-based JIT performance

    + +

    To assess the performance of the MIR-based JIT, I conducted benchmarks on the following:

    + +
    • base: the base interpreter (miniruby)
    • +
    • sir: the interpreter with specialized internal representation (miniruby --sir)
    • +
    • yjit: YJIT (miniruby --yjit)
    • +
    • mir: MIR-based JIT (miniruby --mirjit)
    • +

    All measurements were conducted on an Intel i5-13600K with 64 GB of memory under x86-64 Fedora Core 36.

    + +

    I employed the following micro-benchmarks (located in the sir-bench directory):

    + +
    • aread: reading an instance variable through attr_reader
    • +
    • aref: reading an array element
    • +
    • aset: assignment to an array element
    • +
    • awrite: assignment to an instance variable through attr_writer
    • +
    • bench: a rendering benchmark
    • +
    • call: empty method calls
    • +
    • complex-mandelbrot: complex number version of mandelbrot
    • +
    • const2: reading Class::Const
    • +
    • const: reading Const
    • +
    • fannk: fannkuch
    • +
    • fib: fibonacci
    • +
    • ivread: reading an instance variable (@var)
    • +
    • ivwrite: assignment to an instance variable
    • +
    • mandelbrot: non-complex version of mandelbrot
    • +
    • meteor: meteor puzzle
    • +
    • nbody: modeling planet orbits
    • +
    • nest-ntimes: nested ntimes loops (6 levels)
    • +
    • nest-while: nested while loops (6 levels)
    • +
    • norm: spectral norm
    • +
    • pent: pentamino puzzle
    • +
    • red-black: red-black trees
    • +
    • sieve: Eratosthenes sieve
    • +
    • trees: binary trees
    • +
    • while: while loop
    • +

    The hot code for each micro-benchmark was encapsulated within a Ruby method, which was invoked sufficiently to trigger machine code generation by YJIT (as previously mentioned, YJIT initiates code generation only from calls to frequently executed methods). Each benchmark was executed three times, and the minimum time (or smallest maximum resident memory) was selected. Figure 4 presents the wall execution time for the micro-benchmarks:

    + + +
    +
    + x86-64 micro-benchmarks. +
    +
    +
    Figure 4: x86-64 micro-benchmarks.

    The CPU time remains consistent, as YJIT and the MIR-based JIT do not operate concurrently with Ruby program execution.

    + +

    Furthermore, Figure 5 illustrates the maximum resident memory increase relative to the base interpreter on the Intel CPU machine.

    + + +
    +
    + Max resident memory. +
    +
    +
    Figure 5: Max resident memory.

    It is apparent that MIR-based JIT consumes more memory than YJIT. MIR-based JIT allocates a substantial amount of memory in advance for basic block versions (BBVs). This primarily contributes to the observed results. While YJIT previously encountered a similar issue, it was recently resolved. This is an aspect where further improvement can be made in the MIR-based JIT.

    -

    Get Funded: Expansion Packs

    - https://www.monkeyuser.com/2020/get-funded/ - Tue, 27 Oct 2020 00:00:00 +0000 -
    - - MonkeyUser: Corporate Solution - https://www.monkeyuser.com/2020/corporate-solution/ -

    Corporate Solution

    - https://www.monkeyuser.com/2020/corporate-solution/ - Fri, 23 Oct 2020 00:00:00 +0000 -
    - - MonkeyUser: Teamwork - https://www.monkeyuser.com/2020/teamwork/ -

    Teamwork

    - https://www.monkeyuser.com/2020/teamwork/ - Fri, 16 Oct 2020 00:00:00 +0000 -
    - - MonkeyUser: Reverse Turing Test - https://www.monkeyuser.com/2020/reverse-turing-test/ -

    Reverse Turing Test

    - https://www.monkeyuser.com/2020/reverse-turing-test/ - Fri, 09 Oct 2020 00:00:00 +0000 -
    - - MonkeyUser: Ahead of its time - https://www.monkeyuser.com/2020/ahead-of-its-time/ -

    Ahead of its time

    - https://www.monkeyuser.com/2020/ahead-of-its-time/ - Tue, 29 Sep 2020 00:00:00 +0000 -
    - - MonkeyUser: Project Setup - https://www.monkeyuser.com/2020/project-setup/ -

    Project Setup

    - https://www.monkeyuser.com/2020/project-setup/ - Tue, 22 Sep 2020 00:00:00 +0000 -
    - - MonkeyUser: Adjustment - https://www.monkeyuser.com/2020/adjustment/ -

    Adjustment

    - https://www.monkeyuser.com/2020/adjustment/ - Tue, 08 Sep 2020 00:00:00 +0000 -
    - - MonkeyUser: New Hire - https://www.monkeyuser.com/2020/new-hire/ -

    New Hire

    - https://www.monkeyuser.com/2020/new-hire/ - Mon, 31 Aug 2020 00:00:00 +0000 -
    - - MonkeyUser: Wish 'Granted' - https://www.monkeyuser.com/2020/wish-granted/ -

    Wish 'Granted'

    - https://www.monkeyuser.com/2020/wish-granted/ - Tue, 25 Aug 2020 00:00:00 +0000 -
    - - MonkeyUser: Code Freeze - https://www.monkeyuser.com/2020/code-freeze/ -

    Code Freeze

    - https://www.monkeyuser.com/2020/code-freeze/ - Tue, 18 Aug 2020 00:00:00 +0000 -
    - - MonkeyUser: Regex Explained - https://www.monkeyuser.com/2020/regex-explained/ -

    Regex Explained

    - https://www.monkeyuser.com/2020/regex-explained/ - Tue, 11 Aug 2020 00:00:00 +0000 -
    - - MonkeyUser: Duplicates - https://www.monkeyuser.com/2020/duplicates/ -

    Duplicates

    - https://www.monkeyuser.com/2020/duplicates/ - Tue, 04 Aug 2020 00:00:00 +0000 -
    - - MonkeyUser: Art Overflow - https://www.monkeyuser.com/2020/art-overflow/ -

    Art Overflow

    - https://www.monkeyuser.com/2020/art-overflow/ - Tue, 28 Jul 2020 00:00:00 +0000 -
    - - MonkeyUser: Side Project Showcase - https://www.monkeyuser.com/2020/side-project-showcase/ -

    Side Project Showcase

    - https://www.monkeyuser.com/2020/side-project-showcase/ - Tue, 21 Jul 2020 00:00:00 +0000 -
    - - MonkeyUser: Schmuck - https://www.monkeyuser.com/2020/schmuck/ -

    Schmuck

    - https://www.monkeyuser.com/2020/schmuck/ - Tue, 23 Jun 2020 00:00:00 +0000 -
    - - MonkeyUser: Release Cycle - https://www.monkeyuser.com/2020/release-cycle/ -

    Release Cycle

    - https://www.monkeyuser.com/2020/release-cycle/ - Tue, 16 Jun 2020 00:00:00 +0000 -
    - - MonkeyUser: Pair Programming - https://www.monkeyuser.com/2020/pair-programming/ -

    Pair Programming

    - https://www.monkeyuser.com/2020/pair-programming/ - Tue, 09 Jun 2020 00:00:00 +0000 -
    - - MonkeyUser: Dev's Journey - https://www.monkeyuser.com/2020/devs-journey/ -

    Dev's Journey

    - https://www.monkeyuser.com/2020/devs-journey/ - Tue, 26 May 2020 00:00:00 +0000 -
    - - MonkeyUser: Code Superheroes - https://www.monkeyuser.com/2020/code-superheroes/ -

    Code Superheroes

    - https://www.monkeyuser.com/2020/code-superheroes/ - Tue, 19 May 2020 00:00:00 +0000 -
    - - MonkeyUser: Diff - https://www.monkeyuser.com/2020/diff/ -

    Diff

    - https://www.monkeyuser.com/2020/diff/ - Tue, 05 May 2020 00:00:00 +0000 -
    - - MonkeyUser: Estimates - https://www.monkeyuser.com/2020/estimates/ -

    Estimates

    - https://www.monkeyuser.com/2020/estimates/ - Tue, 28 Apr 2020 00:00:00 +0000 -
    - - MonkeyUser: Startup Struggles - https://www.monkeyuser.com/2020/startup-struggles/ -

    Startup Struggles

    - https://www.monkeyuser.com/2020/startup-struggles/ - Tue, 21 Apr 2020 00:00:00 +0000 -
    - - MonkeyUser: Async - https://www.monkeyuser.com/2020/async/ -

    Async

    - https://www.monkeyuser.com/2020/async/ - Tue, 14 Apr 2020 00:00:00 +0000 -
    - - MonkeyUser: Err - https://www.monkeyuser.com/2020/err/ -

    Err

    - https://www.monkeyuser.com/2020/err/ - Tue, 07 Apr 2020 00:00:00 +0000 -
    - - MonkeyUser: Acquisition - https://www.monkeyuser.com/2020/acquisition/ -

    Acquisition

    - https://www.monkeyuser.com/2020/acquisition/ - Tue, 24 Mar 2020 00:00:00 +0000 -
    - - MonkeyUser: Levels Of Satisfaction - https://www.monkeyuser.com/2020/levels-of-satisfaction/ -

    Levels Of Satisfaction

    - https://www.monkeyuser.com/2020/levels-of-satisfaction/ - Tue, 17 Mar 2020 00:00:00 +0000 -
    - - MonkeyUser: Early Contributor - https://www.monkeyuser.com/2020/early-contributor/ -

    Early Contributor

    - https://www.monkeyuser.com/2020/early-contributor/ - Tue, 10 Mar 2020 00:00:00 +0000 -
    - - MonkeyUser: Planned vs Budgeted - https://www.monkeyuser.com/2020/planned-vs-budgeted/ -

    Planned vs Budgeted

    - https://www.monkeyuser.com/2020/planned-vs-budgeted/ - Tue, 25 Feb 2020 00:00:00 +0000 -
    - - MonkeyUser: Presale - https://www.monkeyuser.com/2020/presale/ -

    Presale

    - https://www.monkeyuser.com/2020/presale/ - Tue, 18 Feb 2020 00:00:00 +0000 -
    - - MonkeyUser: Minor Change - https://www.monkeyuser.com/2020/minor-change/ -

    Minor Change

    - https://www.monkeyuser.com/2020/minor-change/ - Tue, 11 Feb 2020 00:00:00 +0000 -
    - - MonkeyUser: Next Level - https://www.monkeyuser.com/2020/next-level/ -

    Next Level

    - https://www.monkeyuser.com/2020/next-level/ - Tue, 28 Jan 2020 00:00:00 +0000 -
    - - MonkeyUser: Open Space - https://www.monkeyuser.com/2020/open-space/ -

    Open Space

    - https://www.monkeyuser.com/2020/open-space/ - Tue, 28 Jan 2020 00:00:00 +0000 -
    - - MonkeyUser: User Story - https://www.monkeyuser.com/2020/user-story/ -

    User Story

    - https://www.monkeyuser.com/2020/user-story/ - Tue, 21 Jan 2020 00:00:00 +0000 -
    - - MonkeyUser: Fix - https://www.monkeyuser.com/2020/fix/ -

    Fix

    - https://www.monkeyuser.com/2020/fix/ - Tue, 14 Jan 2020 00:00:00 +0000 -
    - - MonkeyUser: Features - https://www.monkeyuser.com/2020/features/ -

    Features

    - https://www.monkeyuser.com/2020/features/ - Tue, 07 Jan 2020 00:00:00 +0000 -
    - - MonkeyUser: I Am Inevitable - https://www.monkeyuser.com/2019/i-am-inevitable/ -

    I Am Inevitable

    - https://www.monkeyuser.com/2019/i-am-inevitable/ - Tue, 26 Nov 2019 00:00:00 +0000 -
    - - MonkeyUser: New World - https://www.monkeyuser.com/2019/new-world/ -

    New World

    - https://www.monkeyuser.com/2019/new-world/ - Tue, 19 Nov 2019 00:00:00 +0000 -
    - - MonkeyUser: AI Training Datasets - https://www.monkeyuser.com/2019/ai-training-datasets/ -

    AI Training Datasets

    - https://www.monkeyuser.com/2019/ai-training-datasets/ - Tue, 12 Nov 2019 00:00:00 +0000 -
    - - MonkeyUser: Burnout - https://www.monkeyuser.com/2019/burnout/ -

    Burnout

    - https://www.monkeyuser.com/2019/burnout/ - Tue, 05 Nov 2019 00:00:00 +0000 -
    - - MonkeyUser: Cleanup - https://www.monkeyuser.com/2019/cleanup/ -

    Cleanup

    - https://www.monkeyuser.com/2019/cleanup/ - Tue, 29 Oct 2019 00:00:00 +0000 -
    - - MonkeyUser: Everyday Excuses - https://www.monkeyuser.com/2019/everyday-excuses/ -

    Everyday Excuses

    - https://www.monkeyuser.com/2019/everyday-excuses/ - Tue, 22 Oct 2019 00:00:00 +0000 -
    - - MonkeyUser: Edge Cases - https://www.monkeyuser.com/2019/edge-cases/ -

    Edge Cases

    - https://www.monkeyuser.com/2019/edge-cases/ - Tue, 15 Oct 2019 00:00:00 +0000 -
    - - MonkeyUser: S3cur1ty - https://www.monkeyuser.com/2019/s3cur1ty/ -

    S3cur1ty

    - https://www.monkeyuser.com/2019/s3cur1ty/ - Tue, 08 Oct 2019 00:00:00 +0000 -
    - - MonkeyUser: Product Description - https://www.monkeyuser.com/2019/product-description/ -

    Product Description

    - https://www.monkeyuser.com/2019/product-description/ - Tue, 01 Oct 2019 00:00:00 +0000 -
    - - MonkeyUser: v2.0.1 - https://www.monkeyuser.com/2019/v-201/ -

    v2.0.1

    - https://www.monkeyuser.com/2019/v-201/ - Tue, 24 Sep 2019 00:00:00 +0000 -
    - - MonkeyUser: Tribalism - https://www.monkeyuser.com/2019/tribalism/ -

    Tribalism

    - https://www.monkeyuser.com/2019/tribalism/ - Tue, 17 Sep 2019 00:00:00 +0000 -
    - - MonkeyUser: Determinism - https://www.monkeyuser.com/2019/determinism/ -

    Determinism

    - https://www.monkeyuser.com/2019/determinism/ - Tue, 10 Sep 2019 00:00:00 +0000 -
    - - MonkeyUser: Gut Feeling - https://www.monkeyuser.com/2019/gut-feeling/ -

    Gut Feeling

    - https://www.monkeyuser.com/2019/gut-feeling/ - Mon, 02 Sep 2019 00:00:00 +0000 -
    - - MonkeyUser: Applied Scrum - https://www.monkeyuser.com/2019/applied-scrum/ -

    Applied Scrum

    - https://www.monkeyuser.com/2019/applied-scrum/ - Tue, 27 Aug 2019 00:00:00 +0000 -
    - - MonkeyUser: Platypuscorn - https://www.monkeyuser.com/2019/platypuscorn/ -

    Platypuscorn

    - https://www.monkeyuser.com/2019/platypuscorn/ - Tue, 20 Aug 2019 00:00:00 +0000 -
    - - MonkeyUser: Brittle - https://www.monkeyuser.com/2019/brittle/ -

    Brittle

    - https://www.monkeyuser.com/2019/brittle/ - Tue, 13 Aug 2019 00:00:00 +0000 -
    - - MonkeyUser: _ - https://www.monkeyuser.com/2019/_/ -

    _

    - https://www.monkeyuser.com/2019/_/ - Tue, 06 Aug 2019 00:00:00 +0000 -
    - - MonkeyUser: The Superficial High - https://www.monkeyuser.com/2019/the-superficial-high/ -

    The Superficial High

    - https://www.monkeyuser.com/2019/the-superficial-high/ - Tue, 30 Jul 2019 00:00:00 +0000 -
    - - MonkeyUser: PTSD - https://www.monkeyuser.com/2019/ptsd/ -

    PTSD

    - https://www.monkeyuser.com/2019/ptsd/ - Tue, 23 Jul 2019 00:00:00 +0000 -
    - - MonkeyUser: Bug Fixing Ways - https://www.monkeyuser.com/2019/bug-fixing-ways/ -

    Bug Fixing Ways

    - https://www.monkeyuser.com/2019/bug-fixing-ways/ - Tue, 09 Jul 2019 00:00:00 +0000 -
    - - MonkeyUser: MVP - https://www.monkeyuser.com/2019/mvp/ -

    MVP

    - https://www.monkeyuser.com/2019/mvp/ - Tue, 02 Jul 2019 00:00:00 +0000 -
    - - MonkeyUser: Obvious - https://www.monkeyuser.com/2019/obvious/ -

    Obvious

    - https://www.monkeyuser.com/2019/obvious/ - Tue, 25 Jun 2019 00:00:00 +0000 -
    - - MonkeyUser: A QA walks into the office - https://www.monkeyuser.com/2019/a-qa-walks-into-the-office/ -

    A QA walks into the office

    - https://www.monkeyuser.com/2019/a-qa-walks-into-the-office/ - Tue, 18 Jun 2019 00:00:00 +0000 -
    - - MonkeyUser: Exit Condition - https://www.monkeyuser.com/2019/exit-condition/ -

    Exit Condition

    - https://www.monkeyuser.com/2019/exit-condition/ - Tue, 11 Jun 2019 00:00:00 +0000 -
    - - MonkeyUser: UI vs UX - https://www.monkeyuser.com/2019/ui-vs-ux/ -

    UI vs UX

    - https://www.monkeyuser.com/2019/ui-vs-ux/ - Tue, 04 Jun 2019 00:00:00 +0000 -
    - - MonkeyUser: Hack Slash Revert - https://www.monkeyuser.com/2019/hack-slash-revert/ -

    Hack Slash Revert

    - https://www.monkeyuser.com/2019/hack-slash-revert/ - Tue, 28 May 2019 00:00:00 +0000 -
    - - MonkeyUser: everythingyoudosuckscon.io - https://www.monkeyuser.com/2019/everythingyoudosucks/ -

    Everythingyoudosuckscon.io

    - https://www.monkeyuser.com/2019/everythingyoudosucks/ - Tue, 14 May 2019 00:00:00 +0000 -
    - - MonkeyUser: Deja vu - https://www.monkeyuser.com/2019/deja-vu/ -

    Deja vu

    - https://www.monkeyuser.com/2019/deja-vu/ - Tue, 07 May 2019 00:00:00 +0000 -
    - - MonkeyUser: Bug Free - https://www.monkeyuser.com/2019/bug-free/ -

    Bug Free

    - https://www.monkeyuser.com/2019/bug-free/ - Tue, 30 Apr 2019 00:00:00 +0000 -
    - - MonkeyUser: Curiosity - https://www.monkeyuser.com/2019/curiosity/ -

    Curiosity

    - https://www.monkeyuser.com/2019/curiosity/ - Tue, 23 Apr 2019 00:00:00 +0000 -
    - - MonkeyUser: Conflict Management - https://www.monkeyuser.com/2019/conflict-managment/ -

    Conflict Management

    - https://www.monkeyuser.com/2019/conflict-managment/ - Tue, 16 Apr 2019 00:00:00 +0000 -
    - - MonkeyUser: Code Review - https://www.monkeyuser.com/2019/code-review/ -

    Code Review

    - https://www.monkeyuser.com/2019/code-review/ - Tue, 09 Apr 2019 00:00:00 +0000 -
    - - MonkeyUser: End of the line - https://www.monkeyuser.com/2019/end-of-the-line/ -

    End of the line

    - https://www.monkeyuser.com/2019/end-of-the-line/ - Tue, 02 Apr 2019 00:00:00 +0000 -
    - - MonkeyUser: Possible Code Contents - https://www.monkeyuser.com/2019/possible-code-contents/ -

    Possible Code Contents

    - https://www.monkeyuser.com/2019/possible-code-contents/ - Tue, 26 Mar 2019 00:00:00 +0000 -
    - - MonkeyUser: Sprint - https://www.monkeyuser.com/2019/sprint/ -

    Sprint

    - https://www.monkeyuser.com/2019/sprint/ - Tue, 19 Mar 2019 00:00:00 +0000 -
    - - MonkeyUser: New Model - https://www.monkeyuser.com/2019/new-model/ -

    New Model

    - https://www.monkeyuser.com/2019/new-model/ - Tue, 05 Mar 2019 00:00:00 +0000 -
    - - MonkeyUser: YAGNI - https://www.monkeyuser.com/2019/yagni/ -

    YAGNI

    +

    The MIR JIT compiler generates code for x86-64, aarch64, ppc64, riscv64, and s390x architectures. Thus, I also evaluated MIR-based JIT on another architecture. I conducted the benchmarks on aarch64 Fedora Core 34 within a virtual machine (UTM) on an M1 Apple Mac mini with 16 GB memory, operating under macOS. Due to the virtual machine environment, the accuracy of these results might be somewhat diminished. The outcomes are presented in Figure 6.

    -

    Community request (with bugs) -YAGNI

    - https://www.monkeyuser.com/2019/yagni/ - Tue, 26 Feb 2019 00:00:00 +0000 -
    - - MonkeyUser: 9 to 5 - https://www.monkeyuser.com/2019/nine-to-five/ -

    9 to 5

    - https://www.monkeyuser.com/2019/nine-to-five/ - Tue, 19 Feb 2019 00:00:00 +0000 -
    - - MonkeyUser: Quick Fix - https://www.monkeyuser.com/2019/quick-fix/ -

    Quick Fix

    - https://www.monkeyuser.com/2019/quick-fix/ - Tue, 12 Feb 2019 00:00:00 +0000 -
    - - MonkeyUser: Pivoting - https://www.monkeyuser.com/2019/pivoting/ -

    Pivoting

    - https://www.monkeyuser.com/2019/pivoting/ - Tue, 05 Feb 2019 00:00:00 +0000 -
    - - MonkeyUser: Code Entropy - https://www.monkeyuser.com/2019/code-entropy/ -

    Code Entropy

    - https://www.monkeyuser.com/2019/code-entropy/ - Tue, 29 Jan 2019 00:00:00 +0000 -
    - - MonkeyUser: Meeting - https://www.monkeyuser.com/2019/meeting/ -

    Meeting

    - https://www.monkeyuser.com/2019/meeting/ - Tue, 22 Jan 2019 00:00:00 +0000 -
    - - MonkeyUser: Great Expectations - https://www.monkeyuser.com/2019/great-expectations/ -

    Great Expectations

    - https://www.monkeyuser.com/2019/great-expectations/ - Tue, 15 Jan 2019 00:00:00 +0000 -
    - - MonkeyUser: Library Unboxing - https://www.monkeyuser.com/2019/library-unboxing/ -

    Library Unboxing

    - https://www.monkeyuser.com/2019/library-unboxing/ - Tue, 08 Jan 2019 00:00:00 +0000 -
    - - MonkeyUser: Escape The Office (The Game) - https://www.monkeyuser.com/2018/escape-the-office/ -
    Escape the office. Merry X-Mas everybody
    -
    - +
    +
    + ARM64 micro-benchmarks +
    +
    +
    Figure 6: ARM64 micro-benchmarks.

    Additionally, I tested the classical Ruby mid-sized benchmark, Optcarrot, using 3,000 frames. Figure 7 shows the x86-64 results.

    -
    - https://www.monkeyuser.com/2018/escape-the-office/ - Fri, 21 Dec 2018 00:00:00 +0000 -
    - - MonkeyUser: Replace All - https://www.monkeyuser.com/2018/replace-all/ -

    Replace All

    - https://www.monkeyuser.com/2018/replace-all/ - Wed, 12 Dec 2018 00:00:00 +0000 -
    - - MonkeyUser: Trial And - https://www.monkeyuser.com/2018/trial-and/ -

    Trial And

    - https://www.monkeyuser.com/2018/trial-and/ - Tue, 04 Dec 2018 00:00:00 +0000 -
    - - MonkeyUser: Opinions - https://www.monkeyuser.com/2018/opinions/ -

    Opinions

    - https://www.monkeyuser.com/2018/opinions/ - Wed, 14 Nov 2018 00:00:00 +0000 -
    - - MonkeyUser: Last Push - https://www.monkeyuser.com/2018/last-push/ -

    Last Push

    - https://www.monkeyuser.com/2018/last-push/ - Tue, 06 Nov 2018 00:00:00 +0000 -
    - - MonkeyUser: Reminiscing - https://www.monkeyuser.com/2018/reminiscing/ -

    Reminiscing

    - https://www.monkeyuser.com/2018/reminiscing/ - Tue, 30 Oct 2018 00:00:00 +0000 -
    - - MonkeyUser: Test Optimization - https://www.monkeyuser.com/2018/test-optimization/ -

    Test Optimization

    - https://www.monkeyuser.com/2018/test-optimization/ - Wed, 24 Oct 2018 00:00:00 +0000 -
    - - MonkeyUser: Priorities - https://www.monkeyuser.com/2018/priorities/ -

    Priorities

    - https://www.monkeyuser.com/2018/priorities/ - Wed, 17 Oct 2018 00:00:00 +0000 -
    - - MonkeyUser: Architecture - https://www.monkeyuser.com/2018/architecture/ -

    Architecture

    - https://www.monkeyuser.com/2018/architecture/ - Wed, 10 Oct 2018 00:00:00 +0000 -
    - - MonkeyUser: Applied TDD - https://www.monkeyuser.com/2018/applied-tdd/ -

    Applied TDD

    - https://www.monkeyuser.com/2018/applied-tdd/ - Tue, 02 Oct 2018 00:00:00 +0000 -
    - - MonkeyUser: Tech Debt - https://www.monkeyuser.com/2018/tech-debt/ -

    Tech Debt

    - https://www.monkeyuser.com/2018/tech-debt/ - Tue, 25 Sep 2018 00:00:00 +0000 -
    - - MonkeyUser: Compromise - https://www.monkeyuser.com/2018/compromise/ -

    Compromise

    - https://www.monkeyuser.com/2018/compromise/ - Tue, 18 Sep 2018 00:00:00 +0000 -
    - - MonkeyUser: Final Patch - https://www.monkeyuser.com/2018/final-patch/ -

    Final Patch

    - https://www.monkeyuser.com/2018/final-patch/ - Tue, 11 Sep 2018 00:00:00 +0000 -
    - - MonkeyUser: Building a raft - https://www.monkeyuser.com/2018/building-a-raft/ -

    Building a raft

    - https://www.monkeyuser.com/2018/building-a-raft/ - Tue, 28 Aug 2018 00:00:00 +0000 -
    - - MonkeyUser: Implementation - https://www.monkeyuser.com/2018/implementation/ -

    Implementation

    - https://www.monkeyuser.com/2018/implementation/ - Tue, 21 Aug 2018 00:00:00 +0000 -
    - - MonkeyUser: Macro - https://www.monkeyuser.com/2018/macro/ -

    Macro

    - https://www.monkeyuser.com/2018/macro/ - Tue, 14 Aug 2018 00:00:00 +0000 -
    - - MonkeyUser: Blame - https://www.monkeyuser.com/2018/blame/ -

    Blame

    - https://www.monkeyuser.com/2018/blame/ - Tue, 07 Aug 2018 00:00:00 +0000 -
    - - MonkeyUser: Pull Request - https://www.monkeyuser.com/2018/pull-request/ -

    Pull Request

    - https://www.monkeyuser.com/2018/pull-request/ - Tue, 31 Jul 2018 00:00:00 +0000 -
    - - MonkeyUser: Define Madness - https://www.monkeyuser.com/2018/define-madness/ -

    Define Madness

    - https://www.monkeyuser.com/2018/define-madness/ - Wed, 25 Jul 2018 00:00:00 +0000 -
    - - MonkeyUser: Production Ready - https://www.monkeyuser.com/2018/production-ready/ -

    Production Ready

    - https://www.monkeyuser.com/2018/production-ready/ - Tue, 17 Jul 2018 00:00:00 +0000 -
    - - MonkeyUser: Zeno's Progress - https://www.monkeyuser.com/2018/zenos-progress/ -

    Zeno's Progress

    - https://www.monkeyuser.com/2018/zenos-progress/ - Tue, 10 Jul 2018 00:00:00 +0000 -
    - - MonkeyUser: Unfinished Work - https://www.monkeyuser.com/2018/unfinished-work/ -

    Unfinished Work

    - https://www.monkeyuser.com/2018/unfinished-work/ - Tue, 03 Jul 2018 00:00:00 +0000 -
    - - MonkeyUser: Happy Flow - https://www.monkeyuser.com/2018/happy-flow/ -

    Happy Flow

    - https://www.monkeyuser.com/2018/happy-flow/ - Tue, 19 Jun 2018 00:00:00 +0000 -
    - - MonkeyUser: TBD - https://www.monkeyuser.com/2018/tbd/ -

    TBD

    - https://www.monkeyuser.com/2018/tbd/ - Tue, 19 Jun 2018 00:00:00 +0000 -
    - - MonkeyUser: Root Cause - https://www.monkeyuser.com/2018/root-cause/ -

    Root Cause

    - https://www.monkeyuser.com/2018/root-cause/ - Tue, 12 Jun 2018 00:00:00 +0000 -
    - - MonkeyUser: Refactoring - https://www.monkeyuser.com/2018/refactoring/ -

    Refactoring

    - https://www.monkeyuser.com/2018/refactoring/ - Tue, 05 Jun 2018 00:00:00 +0000 -
    - - MonkeyUser: Drive Test - https://www.monkeyuser.com/2018/drive-test/ -

    Drive Test - QA

    - https://www.monkeyuser.com/2018/drive-test/ - Tue, 29 May 2018 00:00:00 +0000 -
    - - MonkeyUser: Reopened - https://www.monkeyuser.com/2018/reopened/ -

    Reopened

    - https://www.monkeyuser.com/2018/reopened/ - Tue, 22 May 2018 00:00:00 +0000 -
    - - MonkeyUser: Workaround - https://www.monkeyuser.com/2018/workaround/ -

    Workaround

    - https://www.monkeyuser.com/2018/workaround/ - Tue, 15 May 2018 00:00:00 +0000 -
    - - MonkeyUser: Code Reuse - https://www.monkeyuser.com/2018/code-reuse/ -

    Code Reuse

    - https://www.monkeyuser.com/2018/code-reuse/ - Tue, 08 May 2018 00:00:00 +0000 -
    - - MonkeyUser: Fixing Unit Tests - https://www.monkeyuser.com/2018/fixing-unit-tests/ -

    Fixing Unit Tests

    - https://www.monkeyuser.com/2018/fixing-unit-tests/ - Wed, 02 May 2018 00:00:00 +0000 -
    - - MonkeyUser: Going Global - https://www.monkeyuser.com/2018/going-global/ -

    Going Global

    - https://www.monkeyuser.com/2018/going-global/ - Tue, 24 Apr 2018 00:00:00 +0000 -
    - - MonkeyUser: everytime - https://www.monkeyuser.com/2018/everytime/ -

    #everytime

    - https://www.monkeyuser.com/2018/everytime/ - Tue, 17 Apr 2018 00:00:00 +0000 -
    - - MonkeyUser: ICO - https://www.monkeyuser.com/2018/ico/ -

    ICO

    - https://www.monkeyuser.com/2018/ico/ - Tue, 03 Apr 2018 00:00:00 +0000 -
    - - MonkeyUser: Sprint Break - https://www.monkeyuser.com/2018/sprint-break/ -

    Sprint Break

    - https://www.monkeyuser.com/2018/sprint-break/ - Tue, 27 Mar 2018 00:00:00 +0000 + +
    +
    + OptCarrot +
    +
    +
    Figure 7: OptCarrot.

    It would be ideal to present performance enhancements for widely used real-world applications here. However, SIR, the foundation on which MIR-based JIT operates, is not yet prepared for such reporting. While the SIR interpreter successfully passes all basic CRuby tests (approximately 2,000 tests), it struggles with a significant number of tests from the extended CRuby test suite (roughly 25,000 tests).

    + +

    9 ideas to improve MIR-based CRuby JIT performance

    + +

    Here are my suggestions for improving the MIR-based JIT, ordered by importance.

    + +

    1. Trace JIT and inlining

    + +

    The MIR-based JIT currently generates code for individual basic blocks (BBs). To enhance performance, we could identify traces of frequently executed BBs and re-jit these traces as a whole. This could substantially enhance code performance by improving code locality and enabling comprehensive optimization by the MIR-generator for the entire trace.

    + +

    Typical Ruby code consists of numerous method calls. To generate longer traces and traces containing loops, call inlining needs to be performed.

    + +

    Many of Ruby's standard methods are implemented in C. To inline them, we must translate this C code into an internal representation, from which the JIT forms traces for optimization. This translation can be achieved by manually converting the C code into the internal representation or employing a C-to-IR translator. For MIR, the existing C-to-MIR translator could be used. For YJIT's internal representation, a new LLVM IR to YJIT IR translator might be necessary. However, this approach would likely require significant restructuring of the existing CRuby code.

    + +

    Another approach to inline standard methods could involve translating the methods implemented in C code into Ruby code. To achieve better performance with the generated code, these methods need to be treated in a way that avoids the creation of CRuby control frames, as this process consumes considerable time. In any case, the second approach to inlining will likely yield worse generated code than the first one.

    + +

    I believe it's worth considering a hybrid approach, wherein widely-used iterator methods are translated into the IR, while less frequently used methods are rewritten in Ruby.

    + +

    2. Polymorhic caches

    + +

    In the current MIR-based JIT, call (or instance variable access) instructions cache only one method (or instance variable). The generated code reverts to the interpreter if the method is not present in the cache. Implementing caching for multiple methods could enhance the performance of machine code produced by the MIR-based JIT. YJIT has already employed this technique, and this is the major reason why YJIT outperforms the MIR-based JIT in benchmarks such as tree, red-black, and optcarrot.

    + +

    3. Optimized local variable handling

    + +

    The current MIR-based JIT always reads and writes CRuby local variable values from the CRuby VM stack. A more efficient approach would be to maintain CRuby local variables in MIR registers, which would likely be assigned to CPU registers. This synchronization between registers and the CRuby VM stack should occur only when there is a genuine transition from generated code to interpretation. This would speed up the generated code by reducing memory access and the notifications sent to CRuby's generational GC about new heap objects.

    + +

    4. Dynamic memory allocation for BBVs

    + +

    Currently, significant memory is allocated ahead for Basic Block Versions (BBVs) of each Ruby method, even when it might not be necessary. While this simplifies MIR-based JIT and SIR interpreter development, a more optimal approach would be to allocate memory for each BBV on a demand basis, akin to YJIT's recently implemented optimization, which notably improved its performance.

    + +

    5. Delayed BBV generation

    + +

    BBVs are re-jitted when changed, which can happen when the destination BBV is generated, and the branch destination in a given BBV is modified. Since BBVs are generated lazily, this process can generate redundant code. Delaying BBV generation until all or most destination BBVs are created could mitigate the need for re-jitting.

    + +

    6. Generated code memory management

    + +

    Presently, there are no constraints on the size of generated BBV code. For large Ruby programs, this could lead to excessive memory consumption for generated code. Implementing a memory limit for generated code size and removing less frequently used generated code when the limit is reached would optimize memory utilization.

    + +

    7. Direct MIR code generation

    + +

    Instead of generating C code for BBVs, the MIR-based JIT could generate MIR code directly. This would enhance compilation speed, reduce memory usage during JIT operation, and decrease the code size of CRuby with MIR-based JIT, albeit only slightly (by around 5%, based on my estimation).

    + +

    8. Floating point calculation optimization

    + +

    While not the typical domain for Ruby applications, performance in floating-point calculations could be improved by eliminating unnecessary transformations of IEEE-doubles to/from CRuby values.

    + +

    CRuby employs tagged values where floating-point values on 64-bit machines have the two least significant bits (a tag) set to '10'. To put IEEE-double into CRuby value, two mantissa bits, used for the tag, are stored in the exponent, thus reducing the exponent range. IEEE-double values that cannot be put into the CRuby value are stored in the heap.

    + +

    Currently, CRuby VM arithmetic instructions unpack IEEE-double operands from CRuby values and pack the result back. Avoiding this packing/unpacking (referred to as boxing/unboxing) for subsequent arithmetic instructions within a basic block could improve the performance of floating point calculations.

    + +

    9. Parallel code generation

    + +

    Presently, Ruby program execution halts when the MIR-based JIT or YJIT commences generating machine code. Enhancing performance could involve generating code in parallel with Ruby program interpretation. While this could improve the wall time of execution for Ruby programs, it could also introduce complexities and might not be beneficial for server-based applications with numerous long-running Ruby instances that fully utilize all available CPUs.

    + +

    Conclusion

    + +

    The MIR-based CRuby JIT can be found in this repository. You are welcome to use the JIT sources for any purpose you desire.

    + +

    Implementing a high-performance CRuby JIT is an exceptionally challenging endeavor. Furthermore, it's a task too immense for a single individual to tackle. Fortunately, Shopify possesses an ample pool of human resources for such an undertaking. The success achieved by the Shopify YJIT team has led to a decision to halt my efforts on the MIR-based JIT for CRuby. However, I have no regrets regarding my work on the MIR-based JIT. The experience gained through this endeavor has enriched my understanding of JITs.

    + +

    My engagement with CRuby JIT has provided valuable insights into ways further to enhance the performance of both YJIT and MIR-based JIT. Foremost among these insights is the optimization of frequently executed traces and the inlining of method calls, including standard Ruby methods written in C.

    + +

    I hope the Shopify YJIT team will implement the tracing JIT or someone within the Ruby community will take on this task someday. The Ruby community is a formidable driving force that contributes to the resilience of the Ruby project!

    +The post An MIR-based JIT prototype for Ruby appeared first on Red Hat Developer. +

    + d1945731-4f23-412d-9e73-1617566944e0 + Mon, 09 Oct 2023 07:00:00 +0000
    - MonkeyUser: Compiler - https://www.monkeyuser.com/2018/compiler/ -

    Compiler

    - https://www.monkeyuser.com/2018/compiler/ - Tue, 20 Mar 2018 00:00:00 +0000 + Red Hat Developer: Load balancing, threading, and scaling in Node.js + https://developers.redhat.com/articles/2023/10/09/load-balancing-threading-and-scaling-nodejs +

    Many applications require more computation than can be handled by a single thread, CPU, process, or machine. This installment of the ongoing Node.js reference architecture series covers the team's experience on how to satisfy the need for larger computational resources in your Node.js application.

    + +

    Follow the series:

    + +

    But Node.js is single threaded?

    + +

    Node.js is said to be single-threaded. While not entirely true, it reflects that most work is done on a single thread running the event loop. The asynchronous nature of JavaScript means that Node.js can handle a larger number of concurrent requests on that single thread. If that is the case, then why are we even talking about threading?

    + +

    While by default a Node.js process operates in a single-threaded model, current versions of Node.js support worker threads that you can use to start additional threads of execution, each with their own event loop.

    + +

    In addition, Node.js applications are often made up of multiple different microservices and multiple copies of each microservice, allowing the overall solution to leverage many concurrent threads available in a single computer or across a group of computers.

    + +

    The reality is that applications based on Node.js can and do leverage multiple threads of execution over one or more computers. How to balance this work across threads, processes, and computers and scale it in times of increased demand is an important topic for most deployments.

    + +

    Keep it simple

    + +

    The team's experience is that, when possible, applications should be designed so that a request to a microservice running in a container will need no more than a single thread of execution to complete in a reasonable time. If that is not possible, then worker threads are the recommended approach versus multiple processes running in a single container as there will be lower complexity and less overhead communicating between multiple threads of execution.

    + +

    Worker threads are also likely appropriate for desktop-type applications where it is known that you cannot scale beyond the resources of a single machine, and it is preferable to have the application show up as a single process instead of many individual processes.

    + +

    Long-running requests

    + +

    The team had a very interesting discussion around longer-running requests. Sometimes, you need to do computation that will take a while to complete, and you cannot break up that work.

    + +

    The discussion centered around the following question: If we have a separate microservice that handles longer running requests and it's okay for all requests of that type to be handled sequentially, can we just run those on the main thread loop?

    + +

    Most often, the answer turns out to be no because even in that case, you typically have other APIs like health and readiness APIs that need to respond in a reasonable amount of time when the microservice is running. If you have any request that is going to take a substantial amount of time versus completing quickly or blocking asynchronously so other work can execute on the main thread, you will need to use worker threads.

    + +

    Load balancing and scaling

    + +

    For requests that are completed in a timely manner, you might still need more CPU cycles than a single thread can provide in order to keep up with a larger number of requests. When implementing API requests in Node.js, they are most often designed to have no internal state, and multiple copies can be executed simultaneously. Node.js has long supported running multiple processes to allow concurrent execution of the requests through the Cluster API.

    + +

    As you have likely read in other parts of the Node.js reference architecture, most modern applications run in containers, and often, those containers are managed through tools like Kubernetes. In this context, the team recommends delegating load balancing and scaling to the highest layer possible instead of using the Cluster API. For example, if you deploy the application to Kubernetes, use the load balancing and scaling built into Kubernetes. In our experience, this has been just as efficient or more efficient than trying to manage it at a lower level through tools like the Cluster API.

    + +

    Threads versus processes

    + +

    A common question is whether it is better to scale using threads or processes. Multiple threads within a single machine can typically be exploited within a single process or by starting multiple processes. Processes provide better isolation, but also lower opportunities to share resources and make communication between threads more costly. Using multiple threads within a process might be able to scale more efficiently within a single process, but it has the hard limit of only being able to scale to the resources provided by a single machine.

    + +

    As described in earlier sections, the team's experience is that using worker threads when needed but otherwise leaving load balancing and scaling to management layers outside of the application itself (for example, Kubernetes) results in the right balance between the use of threads and processes across the application.

    + +

    Learn more about Node.js reference architecture

    + +

    I hope that this quick overview of the load balancing, scaling and multithreading part of the Node.js reference architecture, along with the team discussions that led to that content, has been helpful, and that the information shared in the architecture helps you in your future implementations.

    + +

    We plan to cover new topics regularly for the Node.js reference architecture series. Until the next installment, we invite you to visit the Node.js reference architecture repository on GitHub, where you will see the work we have done and future topics.

    + +

    To learn more about what Red Hat is up to on the Node.js front, check out our Node.js page.

    +The post Load balancing, threading, and scaling in Node.js appeared first on Red Hat Developer. +

    + 13a0b0fc-74fe-4f0a-9a6a-5c3d3a10edd0 + Mon, 09 Oct 2023 07:00:00 +0000
    - MonkeyUser: The Struggle - https://www.monkeyuser.com/2018/the-struggle/ -

    The Struggle

    - https://www.monkeyuser.com/2018/the-struggle/ - Tue, 13 Mar 2018 00:00:00 +0000 + Quarkus: Processing Kafka records on virtual threads + https://quarkus.io/blog/virtual-threads-4/ + In another blog post, we have seen how you can implement a CRUD application with Quarkus to utilize virtual threads. The virtual threads support in Quarkus is not limited to REST and HTTP. Many other parts support virtual threads, such as gRPC, scheduled tasks, and messaging. In this post, we... + https://quarkus.io/blog/virtual-threads-4/ + Mon, 09 Oct 2023 00:00:00 +0000
    - MonkeyUser: Focus - https://www.monkeyuser.com/2018/focus/ -

    Focus

    - https://www.monkeyuser.com/2018/focus/ - Tue, 06 Mar 2018 00:00:00 +0000 + JBoss Blogs: Processing Kafka records on virtual threads + https://quarkus.io/blog/virtual-threads-4/ + + https://quarkus.io/blog/virtual-threads-4/ + Mon, 09 Oct 2023 00:00:00 +0000
    - MonkeyUser: Demo - https://www.monkeyuser.com/2018/demo/ -

    Demo

    - https://www.monkeyuser.com/2018/demo/ - Mon, 19 Feb 2018 00:00:00 +0000 + JBoss Blogs: How to solve the error java.net.SocketException: Connection reset + https://www.mastertheboss.com/java/how-to-solve-the-error-java-net-socketexception-connection-reset/ + + https://www.mastertheboss.com/java/how-to-solve-the-error-java-net-socketexception-connection-reset/ + Fri, 06 Oct 2023 11:40:04 +0000
    - MonkeyUser: Testing during development - https://www.monkeyuser.com/2018/testing-during-development/ -

    Testing during development

    - https://www.monkeyuser.com/2018/testing-during-development/ - Tue, 13 Feb 2018 00:00:00 +0000 + Red Hat Developer: Use fwupd to deploy Linux firmware updates and more + https://developers.redhat.com/articles/2023/10/06/use-fwupd-deploy-linux-firmware-updates-and-more +

    The fwupd project is an open source framework that allows end users to update firmware on thousands of different devices. Although it was initially designed for the laptop and desktop use case, it is now being used on everything from Chromebooks, IoT devices, mobile phones, and headless servers in datacenters.

    + +

    While the desktop UX flow of pop-up notifications, graphical application buttons, and progress bars is fully implemented in Red Hat Enterprise Linux (RHEL), the "embedded" use cases where firmware is being auto-deployed to hundreds of servers in a datacenter, or thousands of edge nodes buried under the ground is less well defined. Rather than trying to cater for every possible use case, we instead made it possible to build a lightweight policy agent written in an existing high-level language with the desired customer business logic. This might include something like "download metadata and updates from a NFS server, deploy the update to 50% of devices on each day."

    + +

    Although updating firmware is the primary focus of fwupd, there is also another equally important task it performs on every machine start: calculating the platform security level. These checks build a Host Security Index ranging from 0 (critically insecure) to 4 (very secure) on supported machines, which allows UI components like gnome-control-center to show high-level translated issues to the end user (as shown in Figure 1)—some of which can be fixed by fwupd automatically. These might include UEFI SecureBoot being turned off, or a misconfiguration of the BootGuard configuration by the OEM. If the Host Security Index changes, for example, from HSI-3 to HSI-0, then this should cause some kind of notification for investigation as the security level of the platform has critically degraded.

    + +
    +
    + GNOME Control Center Device Security panel +
    +
    Figure 1: gnome-control-center Device Security panel.
    +
    +
    +

    Vendor update process

    + +

    The firmware updates themselves are uploaded by the OEM or ODM vendor to the Linux Vendor Firmware Service. There, they are verified, analyzed, checked, signed and then added to a metadata catalog that is downloaded by a fwupd front end (such as gnome-software GUI, or fwupdmgr on the command line) and then sent to the fwupd daemon over a D-Bus socket. The daemon then processes the metadata, calculating any ordering dependencies and checking system requirements before offering the client a list of possible firmware updates for each enumerated device.

    + +

    Each update payload archive is then downloaded by the front-end client at a convenient time, possibly using idle bandwidth. The archive is then sent to the daemon over a socket, where the daemon decompresses the archive, verifies the payload is designed for the target device, re-checks any requirements, and then gets ready to deploy the payload onto the device. The user is notified of any required action. This might be opening the laptop lid or removing then reinserting the USB cable; in most cases, no manual interaction is required. The update is then either deployed to the device "live" (typical for USB devices) or a reboot is scheduled to perform the update "offline"—typically for UEFI updates. The device will return with the new firmware version installed, and fwupd will then record the failure or success in its internal database.

    + +

    Using a service like Ansible and the existing CLI tools like fwupdmgr works well, but sometimes an agent running on the actual machine is a more appropriate method—either from a scalability point of view or so that it can work alongside existing (perhaps proprietary) tools running on the host.

    + +

    Parsing console output

    + +

    The simplest way to interact with fwupd as a developer is to use the existing CLI tools and then scrape the stdout output in JSON format. For example:

    + +
    +$ fwupdmgr get-devices --json
    +{
    +  "Devices": [
    +    {
    +      "Name": "USB2.0 Hub",
    +      "DeviceId": "7622d5fdbf1d1e08138156da7d83bf693986ad16",
    +      "ParentDeviceId" : "b5540761dfe33d9abccd3bb21f1d725f9e69f541",
    +      "CompositeId" : "b5540761dfe33d9abccd3bb21f1d725f9e69f541",
    +      "InstanceIds": [
    +        "USB\\VID_17EF&PID_3080",
    +        "USB\\VID_17EF&PID_3080&REV_5163",
    +        "USB\\VID_17EF&PID_3080&HUB_20",
    +        "USB\\VID_17EF&PID_3080&SPI_C220",
    +        "USB\\VID_17EF&PID_3080&SPI_C220&REV_5163",
    +        "USB\\VID_17EF&PID_3080&DEV_VL820Q7"
    +      ],
    +      "Guid": [
    +        "8ee94f0e-9b44-596a-bdd9-6f90401664cc",
    +        "35199e34-cf82-5b09-9287-622d225056e4",
    +        "0987e3c9-b1ee-5763-ac6e-51329b034e4b",
    +        "163cea66-5a78-58af-80ba-21be960aae5c",
    +        "c7def18d-66ae-5531-924b-2020c3638181"
    +      ],
    +      "Summary": "USB 3.x hub",
    +      "Plugin": "vli",
    +      "Protocol" : "com.vli.usbhub",
    +      "Flags": [
    +        "updatable",
    +        "registered",
    +        "can-verify",
    +        "can-verify-image",
    +        "dual-image",
    +        "self-recovery",
    +        "add-counterpart-guids",
    +        "unsigned-payload"
    +      ],
    +      "Vendor": "VIA Labs, Inc.",
    +      "VendorId" : "USB:0x17EF",
    +      "Version": "51.63",
    +      "VersionFormat" : "bcd",
    +      "VersionRaw": 20835,
    +      "Icons": [
    +        "usb-hub"
    +      ],
    +      "InstallDuration" : 15,
    +      "Created": 1686048073
    +    },
    +…
    + +

    Most of the fwupdmgr commands (e.g., get-releases, get-updates, get-remotes) can display the JSON output like above. The format is API stable and fields will only be added in the future. There are obvious downsides to consuming the information like this; it's not efficient for the application to spawn several new fwupdmgr processes, each of which talks to the daemon using D-Bus and converts the output to JSON for it to be parsed back into memory-loaded objects. We also don't get any information about what the daemon is doing, as it might not already be running. The daemon can also auto-quit on idle, so it might take a few seconds to start.

    + +

    There has to be a much better way to communicate with the daemon directly, perhaps just using D-Bus directly. Using raw D-Bus calls would work very well. However, it would be very verbose and error prone—you'd have to be comfortable unwrapping dictionaries of dictionaries (of dictionaries!) and handling all the type conversions manually. It's also non-trivial to send a file descriptor using raw D-Bus, and that's what we'll have to do when updating the metadata and deploying firmware onto devices.

    + +

    Using higher-level languages

    + +

    With GObject introspection, we can use the libfwupd library (written in C) from any higher-level language like Go, Python, or even JavaScript. The C library carefully defines the memory ownership of each parameter and return value so that the higher-level language can safely call into the C interface. For instance, in Python:

    + +
    +import gi
    +gi.require_version("Fwupd", "2.0")
    +from gi.repository import Fwupd
    +from gi.repository import Gio
    +client = Fwupd.Client.new()
    +client.set_feature_flags(Fwupd.FeatureFlags.NONE)
    +cancellable = Gio.Cancellable.new()
    +for dev in client.get_devices(cancellable):
    +    print(f"{dev.get_id()}: {dev.get_name()}")
    + +

    ...gives us:

    + +
    +$ ./hardware.py
    +7622d5fdbf1d1e08138156da7d83bf693986ad16: USB2.0 Hub
    +b0d4430dfa6bde9f0c22680df36dbc8c15c80753: BootGuard Configuration
    +a45df35ac0e948ee180fe216a5f703f32dda163f: System Firmware
    +362301da643102b9f38477387e2193e57abaa590: UEFI dbx
    + +

    All the data available in the JSON dump is available, as are the same helpers that fwupd uses to filter and query devices. The API docs can be found online with each method, signal, and property documented. Using this API, it is possible to enable remotes, send files using file descriptors, and update device firmware. Signals can be connected using async mainloop code like client.connect("notify::percentage", _percentage_cb), which even allows handling the progress dialogs and interactive user requests.

    + +

    A more useful example is to update the UEFI DBX list to mitigate the BlackLotus security issue:

    + +
    +# the SHA1 is the Device ID for the UEFI dbx device
    +client.install("362301da643102b9f38477387e2193e57abaa590",
    +               "/usr/share/dbxtool/DBXUpdate-20230509-x64.cab",
    +               Fwupd.InstallFlags.ALLOW_REINSTALL,
    +               cancellable)
    +print(dev.get_update_state())
    +#
    + +

    This shows deploying the update onto the local machine and then getting the device update state, which indicates that a reboot is required before the device version is updated to the new value. Notably, before deploying the update, fwupd will also check the contents of the EFI System Partition to ensure the update is safe to apply.

    + +

    Querying platform security attributes

    + +

    Although some fwupd security attribute information is available in Red Hat Insights, it's also available from the JSON output, the D-Bus interface, and using GObject Introspection—just like the device data. For example, on the console, the fwupdmgr security output shows sections for each HSI security level. Each level has attributes, each with a status that indicates either a pass or fail. On most server, desktop, and laptop systems, this would look similar to what is shown in Figure 2.

    + +
    +
    + Screenshot of fwupdmgr security console output +
    +
    Figure 2: Screenshot of fwupdmgr security console output.
    +
    +
    +

    But with fwupdmgr security --json:

    + +
    +…
    +{
    +  "AppstreamId" : "org.fwupd.hsi.EncryptedRam",
    +  "Created": 1686056222,
    +  "HsiLevel": 4,
    +  "HsiResult": "not-supported",
    +  "Name": "Encrypted RAM",
    +  "Description": "Encrypted RAM makes it impossible for information that is stored in device memory to be read if the memory chip is removed and accessed.",
    +  "Plugin": "cpu",
    +  "Uri" : "https://fwupd.github.io/libfwupdplugin/hsi.html#org.fwupd.hsi.EncryptedRam",
    +  "Guid": [
    +    "b9a2dd81-159e-5537-a7db-e7101d164d3f",
    +    "30249f37-d140-5d3e-9319-186b1bd5cac3",
    +    "a45b0522-5722-54bd-b802-86cd044262df",
    +    "7b9b6e8c-226c-5db6-86cb-ea3187578013"
    +  ]
    +}
    +…
    + +

    or with GObject Introspection:

    + +
    +for attr in client.get_host_security_attrs(cancellable):
    +    print(f"{attr.to_string()}")
    + +

    Conclusion

    + +

    The fwupd project is a mature, safe, and reliable service that can easily be integrated into existing security endpoint solutions and deployment agents. Using three different methods, developers can enumerate devices, query security levels, and control the fwupd daemon to deploy firmware updates.

    +The post Use fwupd to deploy Linux firmware updates and more appeared first on Red Hat Developer. +

    + b2def651-6552-4b46-a5f6-ca44020e7973 + Fri, 06 Oct 2023 07:00:00 +0000
    - MonkeyUser: Debugging - https://www.monkeyuser.com/2018/debugging/ -

    When stackoverflow is missing the answer

    + Red Hat Developer: Try Camel on Quarkus in the Developer Sandbox for Red Hat OpenShift + https://developers.redhat.com/articles/2023/10/06/try-camel-quarkus-developer-sandbox-red-hat-openshift +

    You can now try Apache Camel on Quarkus in the Developer Sandbox for Red Hat OpenShift, an OpenShift environment you can access for a no-cost, hands-on experience in building and deploying cloud-native applications quickly. This article will guide you to the Developer Sandbox and through a Camel Quarkus integration in a fully web-based experience—no local installs needed.

    + +

    Camel Quarkus is the latest Camel runtime generation. It allows you to run integration processes with super-low memory usage, fast startup, and outstanding performance. The article Boost Apache Camel performance on Quarkus introduces the topic well.

    + +

    To learn more about the various Camel runtimes available, read the 3-part series article Choose the best Camel for your integration ride.

    + +

    REST and SOAP with Camel on Quarkus

    -
    -
    -
    Created by @spectrekelevra
    - Community edit +

    One recent addition to Camel Quarkus is the ability to perform SOAP operations using Apache CXF, a well-known Java library historically used by Camel but only recently available for Quarkus. 

    + +

    The demo defines a front-facing OpenAPI service called simple, which integrates with a back-end SOAP service. The code also includes the stub to simulate the SOAP endpoint. The flow showcases an adaptation layer from REST to SOAP. It’s a relatively simple use case but very common in the enterprise. It defines a REST API and hides a legacy service behind the scenes (Figure 1).

    + + +
    +
    + Diagram showing the Camel on Quarkus flow from client to SOAP service.
    -
    -
    Suggested by reddit community
    - Community edit +
    +
    Figure 1: The Camel on Quarkus flow.

    Demo highlights

    + +

    The big win for you is the chance to play the demo in a free-to-access environment from your browser and view/edit the code, and build, deploy, and test the application. Regarding Camel on Quarkus, the example stands out on various fronts.

    + +

    First of all, both REST and SOAP interfaces are implemented following a contract-first approach. In essence, we rely on the OpenAPI (REST) and WSDL (SOAP) definitions to auto-generate the application’s input/output interfaces. Figure 2 shows how a contract-first OpenAPI helps the developer; this is also valid for SOAP.

    + + +
    +
    + Figure 2: Contract-first development.
    -
    +
    +
    Figure 2: Contract-first development.

    Another notable feature in the demo is data transformation. JSON input must be mapped to outgoing SOAP during the request flow and perform the reverse operation during the response flow. It is all done in a single transformation stylesheet using XSLTs, as in Figure 3.

    + + +
    +
    + Diagram of the JSON / SOAP data mapping flow.
    -
    - https://www.monkeyuser.com/2018/debugging/ - Tue, 06 Feb 2018 00:00:00 +0000 - - - MonkeyUser: Perspectives - https://www.monkeyuser.com/2018/perspectives/ -

    Perspectives

    - https://www.monkeyuser.com/2018/perspectives/ - Tue, 30 Jan 2018 00:00:00 +0000 -
    - - MonkeyUser: Agile Conspiracy - https://www.monkeyuser.com/2018/agile-conspiracy/ -

    Agile Conspiracy

    - https://www.monkeyuser.com/2018/agile-conspiracy/ - Tue, 23 Jan 2018 00:00:00 +0000 -
    - - MonkeyUser: Release day - https://www.monkeyuser.com/2018/release-day/ -

    Release day

    - https://www.monkeyuser.com/2018/release-day/ - Tue, 16 Jan 2018 00:00:00 +0000 -
    - - MonkeyUser: Santa's Smart Contract - https://www.monkeyuser.com/2017/santas-smart-contract/ -

    Merry X-MAS everybody

    - https://www.monkeyuser.com/2017/santas-smart-contract/ - Sun, 24 Dec 2017 00:00:00 +0000 -
    - - MonkeyUser: (bug)fixing car using - https://www.monkeyuser.com/2017/bugfixing-cars-using/ -

    (bug)fixing car using

    - https://www.monkeyuser.com/2017/bugfixing-cars-using/ - Tue, 12 Dec 2017 00:00:00 +0000 -
    - - MonkeyUser: Compile vs Runtime Error - https://www.monkeyuser.com/2017/compile-vs-runtime-error/ -

    Compile vs Runtime Error

    - https://www.monkeyuser.com/2017/compile-vs-runtime-error/ - Tue, 05 Dec 2017 00:00:00 +0000 -
    - - MonkeyUser: Specs... - https://www.monkeyuser.com/2017/specs/ -

    Specs

    - https://www.monkeyuser.com/2017/specs/ - Tue, 21 Nov 2017 00:00:00 +0000 -
    - - MonkeyUser: Step By Step Debugging - https://www.monkeyuser.com/2017/step-by-step-debugging/ -

    Step Over, Step Over, Step Into, Step Over

    - https://www.monkeyuser.com/2017/step-by-step-debugging/ - Tue, 14 Nov 2017 00:00:00 +0000 -
    - - MonkeyUser: Merging Branches - https://www.monkeyuser.com/2017/merging-branches/ -

    The comic opens depicting clear blue skies with small puffs of white clouds in the distance. In the foreground, a tall castle stands atop a green hill, proudly displaying a blue flag marked with a 'B' from the tallest tower. Down below, simple huts litter the landscape.
-A king is depicted in a throne room wearing a large golden crown, adorning a blue velvet robe with a trident in his left hand. Kneeling before him, holding a scroll marked as 'changelog', is a developer dressed in drab gray garb.
-Developer: "It has taken so much but it is finally complete."
-King: "Very good. Prepare the troops for merge."
-Once again, clear blue skies are depicted. This time, the castle is no longer in view, and the smaller huts from the periphery are now the focus of the panel. These huts wave a white flag marked with an 'M' atop them. Approaching is a large mass of individuals, obfuscated by a cloud of dust that is being kicked up by their approach.
-The simple tribes people, standing together and rubbing their heads in confusion, look upon the mass of approaching soldiers in contemplation of the King's reasoning. They each wear stereotypical caveman clothing: cheetah fur togas and bones through their high ponytails.
-Tribesman 1: "What's that?"
-Tribesman 2: "Oh no! We're getting merged."
-Now the in foreground and taking up most of the image, the soldiers are shown running upon horseback, their faces determined as they approach the tribal gathering.
-Soldiers (in unison): "MERGE!!" Panel 6 A sole onlooker, one of the soldiers from the battle, holds the blue flag of his kingdom which is marked with an engraved 'B'. The mass of soldiers collapse upon the village, the dust cloud consuming the area. In the background, feint images depicting green towers and red huts are displayed, alluding to the conflicts that may arise in a merge. Panel 7 The battle is over, and staring at the viewer in confusion is one of the tribesman, holding his spear with a blank expression. In the background, the tribal village remains unscathed from the battle. Further behind, the kingdom is similarly unscathed save for one change: the proud blue flag that once displayed a valiant 'B' has now been replaced with an 'M'.

    - https://www.monkeyuser.com/2017/merging-branches/ - Tue, 07 Nov 2017 00:00:00 +0000 -
    - - MonkeyUser: Opinions - https://www.monkeyuser.com/2017/opinions/ -

    Don't mess with The Internet

    - https://www.monkeyuser.com/2017/opinions/ - Tue, 24 Oct 2017 00:00:00 +0000 -
    - - MonkeyUser: IT Hell - https://www.monkeyuser.com/2017/it-hell/ -

    Choose your spot

    - https://www.monkeyuser.com/2017/it-hell/ - Tue, 17 Oct 2017 00:00:00 +0000 -
    - - MonkeyUser: Deadline - https://www.monkeyuser.com/2017/deadline/ -

    Agile 101

    - https://www.monkeyuser.com/2017/deadline/ - Tue, 10 Oct 2017 00:00:00 +0000 -
    - - MonkeyUser: Visualized Codebase - https://www.monkeyuser.com/2017/visualized-codebase/ -

    Or how to convince management

    - https://www.monkeyuser.com/2017/visualized-codebase/ - Tue, 03 Oct 2017 00:00:00 +0000 -
    - - MonkeyUser: Design Patterns - Bureaucracy - https://www.monkeyuser.com/2017/design-patterns-bureaucracy/ -

    Code by the rules

    - https://www.monkeyuser.com/2017/design-patterns-bureaucracy/ - Tue, 26 Sep 2017 00:00:00 +0000 -
    - - MonkeyUser: Web App - Visualized - https://www.monkeyuser.com/2017/web-app-visualized/ -

    Now you can explain your grandma what is that you are doing

    - https://www.monkeyuser.com/2017/web-app-visualized/ - Tue, 19 Sep 2017 00:00:00 +0000 -
    - - MonkeyUser: Productive Scrum Meetings - https://www.monkeyuser.com/2017/productive-scrum-meetings/ -

    Time's up

    - https://www.monkeyuser.com/2017/productive-scrum-meetings/ - Tue, 12 Sep 2017 00:00:00 +0000 +
    +
    Figure 3: JSON / SOAP data mapping operations.

    And finally, included in the code, you’ll find a test unit (JUnit) to validate the entire request/response flow (Figure 4). You will discover how to use Camel’s testing framework to dynamically spin up an actual SOAP back end to test against, trigger the processing flow, and tear it all down when done.

    + + +
    +
    + The unit testing flow with Camel and JUnit. +
    +
    +
    Figure 4: Unit testing with Camel.

    What is unique about Camel running on Quarkus, but also true for all runtimes, is how little code is required and how elegantly it is laid out. This simplicity guarantees economical, long-term, and sustainable support for your landscape of implemented Camel services.

    + +

    If you would like to see how all of this is done, jump straight into the Developer Sandbox to explore the code and execute it.

    + +

    Access the Developer Sandbox

    + +

    Follow these instructions to get started in the Developer Sandbox: How to access the Developer Sandbox for Red Hat OpenShift

    + +

    Once you have your browser connected to the Developer Sandbox console, you’ll be all set to start the article’s tutorial.

    + +

    Inside OpenShift Dev Spaces

    + +

    The Developer Sandbox ships with an entire web-based IDE called Red Hat OpenShift Dev Spaces (formerly Red Hat CodeReady Workspaces).

    + +

    Set up your dev environment with the Camel tutorials

    + +

    The animated sequence in Figure 5 illustrates the actions to follow to open your development environment along with your tutorial instructions.

    + + +
    +
    + The steps for setting up your development environment in the OpenShift Dev Spaces user interface. +
    +
    +
    Figure 5: The OpenShift Dev Spaces UI.

    Follow these steps:

    + +
    1. From the web console, click the Applications icon as shown in Figure 5 (marked 1).
    2. +
    3. Select Red Hat OpenShift Dev Spaces (2). You will be prompted to log in and authorize access; select the Allow selected permissions option.
    4. +
    5. +

      When the Create Workspace dashboard in OpenShift Dev Spaces opens, copy the snippet below:

      + +
      +https://github.com/RedHat-Middleware-Workshops/devsandbox-camel.git
      + +

      Then, paste it into the Git Repo URL field (3).

      +
    6. +
    7. Click Create & Open (4).
    8. +
    9. When the workspace finishes provisioning and the IDE opens, click the deployable Endpoints accordion (5).
    10. +
    11. Then, click on the icon (6), which opens the tutorial in a new browser tab.
    12. +
    13. Choose the tutorial indicated in the next section.
    14. +

    Start the Camel Quarkus tutorial

    + +

    Select the Camel Quarkus - Rest/Soap Demo tile, highlighted in Figure 6.

    + + +
    +
    + The Camel Quarkus - Rest/Soap Demo tile highlighted in the Solution Explorer. +
    +
    +
    Figure 6: Locating the Camel Quarkus tutorial.

    When you click on the tile, the Solution Explorer will show the lab introductions and the exercise chapters included, which you should be able to complete in around 15 minutes.

    + +

    Enjoy the Camel ride!

    + +

    More Apache Camel resources

    + +

    This article ends here, but this should only be the start of your journey with Apache Camel. The Developer Sandbox for Red Hat OpenShift gives you the opportunity to play on a Kubernetes-based application platform with an integrated developer IDE (OpenShift Dev Spaces).

    + +

    We encourage you to check out the resources below to learn more about Camel and explore different ways to build applications with Apache Camel:

    + + +The post Try Camel on Quarkus in the Developer Sandbox for Red Hat OpenShift appeared first on Red Hat Developer. +

    + c7e19de1-859c-41da-bf71-75056f779eea + Fri, 06 Oct 2023 07:00:00 +0000 + + + Red Hat Developer: How to migrate server configurations to JBoss EAP 7.4 + https://developers.redhat.com/articles/2023/10/05/how-migrate-server-configurations-jboss-eap-74 +

    Before migrating your application from Red Hat JBoss Enterprise Application Platform (JBoss EAP) 7.1 to the latest version, 7.4, you'll first need to consider how to migrate from one server to the other. One aspect that is often overlooked: migrating the server configurations and all the features installed in the current server to the new one.

    + +

    The JBoss Server Migration Tool helps migrate server configuration files (standalone.xml and domain.xml) to the new installation. This saves precious time manually testing and migrating the server migrations.

    + +

    JBoss EAP versions align with the following subsystem versions:

    + +
    • JBoss EAP 7.4: Enterprise Java Beans (EJB) 3.9 (connectors) and modcluster 5.0 (proxy)
    • +
    • JBoss EAP 7.3: EJB 3.6 (connector-ref) and modcluster 5.0 (proxy)
    • +
    • EJB 7.1: EJB 3.5 (connector-ref) and modcluster 3.0 (mod-cluster-config)
    • +

    When to use the JBoss Server Migration Tool

    + +

    To migrate the server, use the embedded Server Migration Tool in JBoss EAP 7.4. The server migration toolkit is already embedded inside JBoss EAP and it lets you migrate each subsystem and migrate from one version to another (source to target). By embedded, I mean the server migration toolkit is simply a script (jboss-server-migration.sh/jboss-server-migration.bat) that you can use to migrate JBoss EAP configurations and it is found under JBOSS_HOME/bin (aka EAP_HOME).

    + +

    To solve the application migration problem, use Red Hat's migration toolkit for runtimes. The migration toolkit for applications is intended for Red Hat OpenShift Container Platform migrations (cloud-ready applications), not for JBoss EAP server application migrations.

    + +

    Migration output

    + +

    If you experience any problems running the script, you can refer to the $JBOSS_HOME/migration directory that contains the configuration, logs, and reports.

    + +
    +$ cd /home/jboss-eap-7.4/migration
    +$ ls
    +configuration logs README.md reports 
    + +

    Each file's purpose is described below:

    + +
    • Logs: The logs show the migration output, which is the same as you will see on the screen.
    • +
    • Configuration: The configuration is the template used on the report. environment.properties is used for non-interactive mode. logging.properties contains the actual logging properties for the tool.
    • +
    • Reports: The report is generated in HTML/XML, so you can open it in any browser. The report has a simple template with the summary, the environment details, and the successfully executed tasks.
    • +
    • Results: After the migration, you can find the results in the configuration files.
    • +

    An interactive migration example

    + +

    The following example shows how to migrate from JBoss EAP 7.3 to JBoss EAP 7.4. You can also use these steps to migrate from JBoss EAP 7.2 to JBoss EAP 7.4.

    + +

    Why is this migration necessary? The EJB subsystem changed specific features (EJB 3.5 to EJB 3.9), and the MicroProfile subsystem was removed. This breaks the forward compatibility, meaning you cannot start JBoss EAP 7.4 with JBoss EAP 7.3 configurations because it will only work if MicroProfile is removed.

    + +

    Migration steps

    + +

    In this example migration, JBoss EAP 7.4 is the target and JBoss EAP 7.3 is the source. The example uses the interactive mode. If you are not using the interactive mode, the environment.properties file will come in handy.

    + +

    Follow these steps:

    + +
    1. Download the new version, JBoss EAP 7.4.
    2. +
    3. Unzip it and set JBOSS_HOME to JBoss EAP 7.4; this will be your target server.
    4. +
    5. Go to the source directory (i.e., JBoss EAP 7.3) and set export SOURCE_7_3 for that directory; this will be your source server.
    6. +
    7. Go to the JBoss EAP 7.4 directory (cd $JBOSS_HOME/bin) and execute the following script: $./jboss-server-migration.sh --source /SOURCE_7_3
    8. +
    9. This will prompt the standalone migration. Select yes and hit enter.
    10. +
    11. Later on, select yes to migrate all configuration files. You might already have a deployment on the old JBoss EAP 7.0, so select no here to migrate the deployed application. This will not actually migrate the application, but deploy it in the target. Select no for the mode-domain migration. +
      +
      +[user@user jboss-eap-7.4]$ ./bin/jboss-server-migration.sh --source /home/jboss-eap-7.3
      +=JBoss Server Migration Tool= Retrieving servers...
      +15:04:02,128 INFO [logger] SOURCE server name: JBoss EAP, version: 7.3.0.GA. 
      +15:04:02,136 INFO [logger] TARGET server name: JBoss EAP, version: 7.4.0.GA. 
      +# Server migration starting... # 
      +15:04:02,171 INFO [ServerMigrationTask#1:1] --- Migrating modules requested by environment... #
      +15:04:02,171 INFO [ServerMigrationTask#1:1] No modules to migrate. # Migrate the source's standalone server? yes/no? yes # 
      +15:04:05,001 INFO [ServerMigrationTask#1:2] 
      +--- Migrating standalone server... 
      +# # Migrate all configurations? yes/no? no
      +Migrate configuration standalone-cameleon.xml ? yes/no? no 
      +... Migrate configuration standalone_example.xml ? <----------------------- your yes/no? yes 
      +# ... Migration Result: SUCCESS <---- success ... 
      +
    12. +
    13. Wait for the migration to complete.
    14. +
    15. Review the migration output/log. The result file can be found in $JBOSS_HOME/standalone/configuration/standalone_example.xml.beforeMigration | standalone_example.xml.
    16. +
    17. After finishing the process, go to the new JBoss EAP directory and start the instance.
    18. +

    Domain mode migration

    + +

    The following refers to the domain mode migration:

    + +
    +[user@user jboss-eap-7.4]$ cp /home/jboss-eap-7.3/domain/configuration/domain.xml /home/jboss-eap-7.3/domain/configuration/domain_cu.xml
    +[user@user jboss-eap-7.4]$ clear [user@user jboss-eap-7.4]$ ./bin/jboss-server-migration.sh --source /home/jboss-eap-7.3
    +---------------------------------------------------------- ---- JBoss Server Migration Tool ----------------------- ---------------------------------------------------------- Retrieving servers...
    +22:27:38,426 INFO [logger] SOURCE server name: JBoss EAP, version: 7.3.0.GA.
    +22:27:38,434 INFO [logger] TARGET server name: JBoss EAP, version: 7.4.0.GA. ----------------------------------------------------------
    +---------------------------------------------------------- Server migration starting...
    +22:27:38,473 INFO [ServerMigrationTask#1:1] --- Migrating modules requested by environment...
    +22:27:38,473 INFO [ServerMigrationTask#1:1] No modules to migrate.
    +Migrate the source's standalone server? yes/no? no
    +Migrate the source's managed domain? yes/no? yes
    +22:27:40,904 INFO [ServerMigrationTask#1:3] --- Migrating managed domain...
    +22:27:40,933 INFO [ServerMigrationTask#1:3:3] Source's domain configurations found: [domain.xml, domain_cu.xml] Migrate all configurations? yes/no? no
    +Migrate configuration domain.xml ? yes/no? no Migrate configuration domain_cu.xml ? yes/no? yes
    +22:27:44,967 INFO [ServerMigrationTask#1:3:3:1] Migrating domain configuration domain_cu.xml...
    +22:27:45,300 INFO [ServerMigrationTask#1:3:3:1:1] Unsupported extensions removed: [org.wildfly.extension.microprofile.opentracing-smallrye, org.wildfly.extension.microprofile.config-smallrye]
    +22:27:45,555 INFO [ServerMigrationTask#1:3:3:1:2] Unsupported subsystems removed: [urn:wildfly:microprofile-opentracing-smallrye:1.0, urn:wildfly:microprofile-config-smallrye:1.0] 22:27:46,201 INFO [security] ELY00001: WildFly Elytron version 1.15.3.Final-redhat-00001
    +22:27:48,362 INFO [ServerMigrationTask#1:3:3:1:5] Host-excludes configuration added.
    +22:27:48,493 INFO [ServerMigrationTask#1:3:4] Source's host configurations found: [host-master.xml, host-slave.xml, host.xml] Migrate all configurations? yes/no? no
    +Migrate configuration host-master.xml ? yes/no? no
    +Migrate configuration host-slave.xml ? yes/no? no Migrate configuration host.xml ? yes/no? no Server migration done. 22:27:52,744 INFO [logger] --------------------------------------------------------- Task Summary --------------------------------------------------------- server ......................................... SUCCESS domain ........................................ SUCCESS domain-configurations ........................ SUCCESS domain-configuration(source=domain_cu.xml) .. SUCCESS --------------------------------------------------------- Migration Result: SUCCESS --------------------------------------------------------- 
    + +

    A non-interactive migration example

    + +

    For non-interactive migration, enter --interactive=false, setting the properties correctly on the file as follows:

    + +
    +[user@user jboss-eap-7.4]$ ./bin/jboss-server-migration.sh --source /home/jboss-eap-7.3 --interactive=false
    +---------------------------------------------------------- ---- JBoss Server Migration Tool ----------------------- ---------------------------------------------------------- Retrieving servers...
    +22:30:27,884 INFO [logger] SOURCE server name: JBoss EAP, version: 7.3.0.GA.
    +22:30:27,891 INFO [logger] TARGET server name: JBoss EAP, version: 7.4.0.GA. ---------------------------------------------------------- ---------------------------------------------------------- Server migration starting...
    +22:30:27,926 INFO [ServerMigrationTask#1:1] --- Migrating modules requested by environment...
    +22:30:27,926 INFO [ServerMigrationTask#1:1] No modules to migrate. 
    +22:30:27,927 INFO [ServerMigrationTask#1:2] --- Migrating standalone server...
    +22:30:27,953 INFO [ServerMigrationTask#1:2:2] Source's standalone content migrated. 
    +22:30:27,963 INFO [ServerMigrationTask#1:2:3] Source's standalone configurations found: [standalone-cameleon.xml, standalone-full-ha.xml, standalone-full.xml, standalone-ha-cu.xml, standalone-ha.xml, standalone-load-balancer.xml, standalone.xml, standalone_cu.xml] 
    +22:30:27,965 INFO [ServerMigrationTask#1:2:3:1] Migrating standalone configuration standalone-cameleon.xml... 
    +22:30:29,004 INFO [security] ELY00001: WildFly Elytron version 1.15.3.Final-redhat-00001 22:30:29,740 INFO [ServerMigrationTask#1:2:3:1:5] Subsystem health added. 
    +22:30:29,775 INFO [ServerMigrationTask#1:2:3:1:6] Subsystem metrics added. 
    +22:30:29,787 INFO [ServerMigrationTask#1:2:3:1:7] Security realms migrated. 
    +22:30:29,796 INFO [ServerMigrationTask#1:2:3:1:8:2] Non-persistent deployments found in /home/jboss-eap-7.3/standalone/deployments: [security-test.war, jsp_cdi_servlet.war, EjbSecure.jar, jaxrs-client-sources.jar, testservlet.war, EjbPrint.jar, HelloServlet.war, jaxrs-client.war] 
    +22:30:29,833 INFO [ServerMigrationTask#1:2:3:2] Migrating standalone configuration standalone-full-ha.xml... 
    +22:30:29,919 INFO [ServerMigrationTask#1:2:3:2:1] Unsupported extensions removed: [org.wildfly.extension.microprofile.health-smallrye, org.wildfly.extension.microprofile.metrics-smallrye, org.wildfly.extension.microprofile.opentracing-smallrye, org.wildfly.extension.microprofile.config-smallrye] 
    +22:30:29,996 INFO [ServerMigrationTask#1:2:3:2:2] Unsupported subsystems removed: [urn:wildfly:microprofile-opentracing-smallrye:1.0, urn:wildfly:microprofile-health-smallrye:2.0, urn:wildfly:microprofile-metrics-smallrye:2.0, urn:wildfly:microprofile-config-smallrye:1.0] 22:30:30,515 INFO [ServerMigrationTask#1:2:3:2:5] Subsystem health added. 22:30:30,549 INFO [ServerMigrationTask#1:2:3:2:6] Subsystem metrics added. 22:30:30,558 INFO [ServerMigrationTask#1:2:3:2:7] Security realms migrated. 22:30:30,597 INFO [ServerMigrationTask#1:2:3:3] Migrating standalone configuration standalone-full.xml... 
    +22:30:30,673 INFO [ServerMigrationTask#1:2:3:3:1] Unsupported extensions removed: [org.wildfly.extension.microprofile.health-smallrye, org.wildfly.extension.microprofile.metrics-smallrye, org.wildfly.extension.microprofile.opentracing-smallrye, org.wildfly.extension.microprofile.config-smallrye] 
    +22:30:30,751 INFO [ServerMigrationTask#1:2:3:3:2] Unsupported subsystems removed: [urn:wildfly:microprofile-opentracing-smallrye:1.0, urn:wildfly:microprofile-health-smallrye:2.0, urn:wildfly:microprofile-metrics-smallrye:2.0, urn:wildfly:microprofile-config-smallrye:1.0] 
    +22:30:30,923 INFO [ServerMigrationTask#1:2:3:3:5] Subsystem health added.
    +22:30:30,960 INFO [ServerMigrationTask#1:2:3:3:6] Subsystem metrics added.
    +22:30:30,970 INFO [ServerMigrationTask#1:2:3:3:7] Security realms migrated. 
    +22:30:31,002 INFO [ServerMigrationTask#1:2:3:4] Migrating standalone configuration standalone-ha-cu.xml... 
    +22:30:31,088 INFO [ServerMigrationTask#1:2:3:4:1] Unsupported extensions removed: [org.wildfly.extension.microprofile.health-smallrye, org.wildfly.extension.microprofile.metrics-smallrye, org.wildfly.extension.microprofile.opentracing-smallrye, org.wildfly.extension.microprofile.config-smallrye] 22:30:31,169 INFO [ServerMigrationTask#1:2:3:4:2] Unsupported subsystems removed: [urn:wildfly:microprofile-opentracing-smallrye:1.0, urn:wildfly:microprofile-health-smallrye:2.0, urn:wildfly:microprofile-metrics-smallrye:2.0, urn:wildfly:microprofile-config-smallrye:1.0] 22:30:31,192 ERROR [logger] Migration failed: org.jboss.migration.core.ServerMigrationFailureException: java.lang.IllegalStateException: Migration of module com.oracle:main required, but module not found in source server. at org.jboss.migration.wfly10.config.task.module.ConfigurationModulesMigrationTaskFactory$Task.migrateModules(ConfigurationModulesMigrationTaskFactory.java:90) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.jboss.ModulesMigrationTask.run(ModulesMigrationTask.java:67) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.env.SkippableByEnvServerMigrationTask.run(SkippableByEnvServerMigrationTask.java:47) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:169) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.execute(TaskExecutionImpl.java:159) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:68) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:32) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.ServerConfigurationMigration$1.run(ServerConfigurationMigration.java:88) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:169) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.execute(TaskExecutionImpl.java:159) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:68) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:32) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.ServerConfigurationsMigration$Task.migrateConfig(ServerConfigurationsMigration.java:151) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.ServerConfigurationsMigration$Task.migrateAllConfigs(ServerConfigurationsMigration.java:120) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.ServerConfigurationsMigration$Task.run(ServerConfigurationsMigration.java:113) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:169) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.execute(TaskExecutionImpl.java:159) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:68) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:32) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.StandaloneServerMigration$1.run(StandaloneServerMigration.java:61) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.console.UserConfirmationServerMigrationTask.runTask(UserConfirmationServerMigrationTask.java:58) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.console.UserConfirmationServerMigrationTask.run(UserConfirmationServerMigrationTask.java:63) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.env.SkippableByEnvServerMigrationTask.run(SkippableByEnvServerMigrationTask.java:47) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:169) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.execute(TaskExecutionImpl.java:159) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:68) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskContextImpl.execute(TaskContextImpl.java:32) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.ServerMigration.run(ServerMigration.java:45) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.WildFlyServer10.migrate(WildFlyServer10.java:40) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.ServerMigration$1.run(ServerMigration.java:153) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:169) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.ServerMigration.run(ServerMigration.java:160) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at
    +org.jboss.migration.cli.CommandLineServerMigration.main(CommandLineServerMigration.java:131) [jboss-server-migration-cli-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at
    +org.jboss.modules.Module.run(Module.java:353) [jboss-modules.jar:1.11.0.Final-redhat-00001] at org.jboss.modules.Module.run(Module.java:321) [jboss-modules.jar:1.11.0.Final-redhat-00001] at org.jboss.modules.Main.main(Main.java:617) [jboss-modules.jar:1.11.0.Final-redhat-00001] Caused by: java.lang.IllegalStateException: Migration of module com.oracle:main required, but module not found in source server. at org.jboss.migration.core.jboss.ModulesMigrationTask$ModuleMigrator.migrateModule(ModulesMigrationTask.java:128) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.core.jboss.ModulesMigrationTask$ModuleMigrator.migrateModule(ModulesMigrationTask.java:118) [jboss-server-migration-core-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.module.DatasourcesJdbcDriversModulesFinder.processElement(DatasourcesJdbcDriversModulesFinder.java:44) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.module.ConfigurationModulesMigrationTaskFactory$Task.processElement(ConfigurationModulesMigrationTaskFactory.java:101) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] at org.jboss.migration.wfly10.config.task.module.ConfigurationModulesMigrationTaskFactory$Task.migrateModules(ConfigurationModulesMigrationTaskFactory.java:86) [jboss-server-migration-wildfly10.0-1.10.0.Final-redhat-00007.jar:1.10.0.Final-redhat-00007] ... 35 more 
    +22:30:31,196 INFO [logger] ---------------------------------------------------------------------------------------------------------- Task Summary ---------------------------------------------------------------------------------------------------------- server .......................................................................................... FAIL standalone ..................................................................................... FAIL contents.standalone.migrate-content-dir ....................................................... SUCCESS contents.standalone.migrate-content(path=fd/99b2631295d816547650c92b61498cf687bae4/content) .. SUCCESS contents.standalone.migrate-content(path=e4/fc7714c5b1a309a87dbb074a3d7b88fd339d18/content) .. SUCCESS contents.standalone.migrate-content(path=30/9de064883cdf625c997beb8323b5b80dc154bf/content) .. SUCCESS contents.standalone.migrate-content(path=f6/633900183b2cd81cf7d5f7a4d7bbdde96734b9/content) .. SUCCESS contents.standalone.migrate-content(path=5e/bd422eabb65d1f6a56a563294e80d6cf45b1a1/content) .. SUCCESS contents.standalone.migrate-content(path=9b/336f2be3de943dea660245aea239b4791cc48c/content) .. SUCCESS contents.standalone.migrate-content(path=0a/ed60bd9874dee796c3652f117167a51959d0d7/content) .. SUCCESS standalone-configurations ..................................................................... FAIL standalone-configuration(source=standalone-cameleon.xml) ..................................... SUCCESS standalone-configuration(source=standalone-full-ha.xml) ...................................... SUCCESS standalone-configuration(source=standalone-full.xml) ......................................... SUCCESS standalone-configuration(source=standalone-ha-cu.xml) ........................................ FAIL ---------------------------------------------------------------------------------------------------------- Migration Result: FAIL ----------------------------------------------------------------------------------------------------------
    + +

    Tips for migrating files

    + +

    Tip #1: Don't try to migrate a broken file, a file with unparsable content, or files cut in the middle; the parsing process needs to work for the migration to be successful. After the migration, the migration tool will spawn an embedded server and run it to test. Depending on the error, it might generate a partially migrated file, which will not work. The file will have the configuration resulting from the migration.

    + +

    Do not leave the migrated file with the standard names, such as standalone.xml or domain.xml; doing so will overwrite the original files. In this case, use a different name for the migration.

    + +

    Tip #2: After the migration, do a thorough review and test with the resulting configuration to verify it has a similar (expected) behavior.

    + +

    Migrate the data source

    + +

    You will need to migrate the data source, depending on the installation. Bear in mind that Red Hat recommends installing a JDBC driver as a core module instead of directly deploying a driver jar file through the management console. Follow the instructions in the article What is the recommended way to install a JDBC driver in EAP 6/7?

    + +

    Migrating custom scripts

    + +

    Custom scripts will not be migrated; they are basically ignored by the Server Migration Tool, which can only be addressed after the migration. You will need to migrate the custom scripts manually (copy them) and then do the respective due diligence to ensure they still work.

    + +

    Migrating JBoss EAP XP to JBoss EAP

    + +

    It is not possible to directly migrate from JBoss EAP XP to JBoss EAP because they are different products; if you were to migrate anything to JBoss XP, it would have to be from an XP installation. So, we will follow the steps for XP installation and then migrate from XP to another XP.

    + +

    However, you will encounter the following issue:

    + +
    +22:04:05,439 ERROR [logger] Migration failed:
    +org.jboss.migration.core.ServerMigrationFailureException: java.lang.IllegalArgumentException: WFCMTOOL000004: Server name = JBoss EAP XP, version = 7.4.1.GA does not support migration from server name = JBoss EAP, version = 7.3.0.GA. at org.jboss.migration.core.task.TaskExecutionImpl.run(TaskExecutionImpl.java:174) [jboss-s ...
    +Caused by: java.lang.IllegalArgumentException: WFCMTOOL000004: Server name = JBoss EAP XP, version = 7.4.1.GA does not support migration from server name = JBoss EAP, version = 7.3.0.GA. 
    + +

    Troubleshooting the Server Migration Tool

    + +

    Basically, the migration logs will be transparent, which is very helpful for diagnosing specific issues. One of the most common problems is migrating a version that is not supported, such as migrating JBoss EAP 7.0 to JBoss EAP 7.3 (only JBoss EAP 7.2). If in doubt, you can set the logger.level (found in logging.properties).

    + +

    Finally, JBoss EAP 7.4 lets you migrate straight from JBoss EAP 7.1 and JBoss EAP 7.2. This avoids chain scenarios needing subsequent migrations (e.g., JBoss EAP 7.1 to JBoss EAP 7.2 to JBoss EAP 7.3 to JBoss EAP 7.4), which we encountered before this tech preview came along.

    + +

    FAQ

    + +

    Q. Is it possible to keep two JBoss EAP installations at the same time, the new and the old?

    + +

    A. Yes, as long as the installation was done using ZIP. RPM installations do not allow multiple JBoss EAP installations. For running two EAP servers simultaneously verify if they won't have port conflicts.

    + +

    Q. Can I run the migration from JBoss EAP 7.2 to JBoss EAP 7.4?

    + +

    A. Yes, this is available as a feature in JBoss EAP 7.4.2+.

    + +

    Q. Does the migration tool help migrate deployments?

    + +

    A. No, the JBoss Server Migration Tool does not migrate the deployment code; it migrates the deployment in that it copies the deployment from source to target. To migrate the deployment code itself, you must use the migration toolkit for runtimes (or the migration toolkit for applications, for OpenShift Container Platform migrations). 

    + +

    Additional resources

    + +

    To learn more, refer to the JBoss Server Migration Tool migration guide in PDF or HTML formats. Red Hat Support team created the article Using JBoss Server Migration Tool to upgrade from JBoss EAP 7.x to 7.current with several issues and an simple example as I above explain. 

    + +

    Regarding JBoss EAP 7.3 breaking JBoss EAP 7.4, refer to the solution described in Using EAP 7.3 configuration in EAP 7.4 breaks the backward compatibility.

    + +

    For any other specific inquiries, please open a case with Red Hat support. Our global team of experts can help you with any issues.

    +The post How to migrate server configurations to JBoss EAP 7.4 appeared first on Red Hat Developer. +

    + 16dfcff2-b9bc-4c89-bd37-a38408e792e0 + Thu, 05 Oct 2023 07:00:00 +0000
    - MonkeyUser: Testing - in a nutshell - https://www.monkeyuser.com/2017/testing-in-a-nutshell/ -

    Testing - in a nutshell

    - https://www.monkeyuser.com/2017/testing-in-a-nutshell/ - Tue, 22 Aug 2017 00:00:00 +0000 + JBoss Blogs: Quarkus 3.4.2 released - Maintenance release + https://quarkus.io/blog/quarkus-3-4-2-released/ + + https://quarkus.io/blog/quarkus-3-4-2-released/ + Thu, 05 Oct 2023 00:00:00 +0000
    - MonkeyUser: Interview vs. Reality - https://www.monkeyuser.com/2017/interview-vs-reality/ -

    Be careful on the next interview

    - https://www.monkeyuser.com/2017/interview-vs-reality/ - Tue, 15 Aug 2017 00:00:00 +0000 + Quarkus: Quarkus 3.4.2 released - Maintenance release + https://quarkus.io/blog/quarkus-3-4-2-released/ + Today, we released Quarkus 3.4.2, our first maintenance release for our 3.4 release train (we skipped 3.4.0). It includes a bunch of bugfixes, together with documentation improvements. Update To update to Quarkus 3.4.2, we recommend updating to the latest version of the Quarkus CLI and run: quarkus update To migrate... + https://quarkus.io/blog/quarkus-3-4-2-released/ + Thu, 05 Oct 2023 00:00:00 +0000
    - MonkeyUser: Future Self - https://www.monkeyuser.com/2017/future-self/ -

    Be careful with that last commit. Time travel might be just around the corner

    - https://www.monkeyuser.com/2017/future-self/ - Tue, 08 Aug 2017 00:00:00 +0000 + Red Hat Developer: 5 steps to build a self-healing server with Alertmanager + https://developers.redhat.com/articles/2023/10/04/5-steps-build-self-healing-server-alertmanager +

    In today's fast-paced world, server downtime can have severe consequences for businesses. Ensuring high availability and rapid recovery is essential for maintaining uninterrupted services. In this article, we will explore how to create a self-healing server using the event-driven architecture of Red Hat Ansible Automation Platform and integrate it with Alertmanager for efficient monitoring and alerting.

    + +

    Prerequisites

    + +
    • Install Ansible Automation Platform and Ansible Rulebook.
    • +
    • Podman and podman-compose
    • +
    • These ports must be opened on the server side: 5000, 9090, 9093, 22.
    • +

    The concepts of event driven and self healing

    + +

    The event-driven architecture of Ansible Automation Platform enables servers to respond to events and take predefined actions automatically. It utilizes event-driven automation and monitoring to detect and remediate issues in real time, leading to a self-healing infrastructure.

    + +

    To learn more about the concept of Event-Driven Ansible, please read my previous article. You can pull the code from our GitHub repository.

    + +

    1. Install Prometheus and Alertmanager

    + +

    Launching the containers with podman-compose will enable us to install prometheus and Alertmanager, using the following podman-compose.yaml file.

    + +
    +version: '3'
    +
    +services:
    +  prometheus:
    +    image: prom/prometheus:v2.30.3
    +    ports:
    +      - 9090:9090
    +    volumes:
    +      -./prometheus:/etc/prometheus
    +      - prometheus-data:/prometheus
    +    command: --web.enable-lifecycle  --config.file=/etc/prometheus/prometheus.yml
    +
    +  alertmanager:
    +    image: prom/alertmanager:v0.23.0
    +    restart: unless-stopped
    +    ports:
    +      - "9093:9093"
    +    volumes:
    +      - "./alertmanager:/config"
    +      - alertmanager-data:/data
    +    command: --config.file=/config/alertmanager.yml --log.level=debug
    +
    +volumes:
    +  alertmanager-data:
    +
    +  prometheus-data:
    + +

    The Alertmanager for Event-Driven Ansible should be configured in the receiver section, as shown in the alertmanager.yml file. Include the IP address of the server from which the rulebook is triggered in the webhook section. For instance, if you are running rulebooks on your local machine, the time IP should be http://192.168.1.65:5000/alerts, or if you have a remote server, then add the public IP of that server http:// 123.345.9.56:5000/alerts.

    + +

    alertmanager.yml:

    + +
    +route:
    +  group_by: [ alertname ]
    +  receiver: 'EDA' # default receiver
    +  repeat_interval: 24h
    +  routes:
    +
    +receivers:
    +  - name: 'EDA'
    +    webhook_configs:
    +      - url: 'http://172.123.170.87:5000/alerts'
    + +

    To launch the file, use the following command:

    + +
    +podman-compose up -d
    + +

    Check that Alertmanager and Prometheus are running:

    + +
    +podman ps
    + +
    +CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
    +254000d2a108   prom/alertmanager:v0.23.0   "/bin/alertmanager -..."   15 seconds ago   Up 13 seconds   0.0.0.0:9093->9093/tcp, :::9093->9093/tcp   self-healing-server_alertmanager_1
    +277f1c6da0cd   prom/prometheus:v2.30.3     "/bin/prometheus --w..."   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   self-healing-server_prometheus_1
    + +

    Search for the http://192.168.1.22:9090 site and check that prometheus is up and running. After accessing Prometheus, check out the Alertmanager dashboard: http://192.168.1.22:9093

    + +

    2. Write the rulebook

    + +

    The basic principle of any rulebook is source - rule - action. So the following rulebook also contains the same conditions. For a self-healing use case, we will use rules with conditions to trigger rulebooks for specific conditions.

    + +
    +---
    +- name: Automatic Remediation of a webserver
    +  hosts: localhost
    +  sources:
    +    - name: listen for alerts
    +      ansible.eda.alertmanager:
    +        host: 0.0.0.0
    +        port: 5000
    +  rules:
    +    - name: server down
    +      condition: event.alert.labels.job == "server" and event.alert.status == "firing"
    +      action:
    +        run_playbook:
    +          name: remediation-playbooks/server-playbook.yml
    +
    +    - name: Storage full on server
    +      condition: event.alert.labels.job == "storage" and event.alert.status == "firing"
    +      action:
    +        run_playbook:
    +          name: remediation-playbooks/storage-playbook.yml
    +
    +    - name: memory full on server
    +      condition: event.alert.labels.job == "memory" and event.alert.status == "firing"
    +      action:
    +        run_playbook:
    +          name: remediation-playbooks/memory-playbook.yml
    +
    +    - name: ssh server down
    +      condition: event.alert.labels.job == "ssh" and event.alert.status == "firing"
    +      action:
    +        run_playbook:
    +          name: remediation-playbooks/ssh-playbook.yml
    +
    +    - name: CPU full on server
    +      condition: event.alert.labels.job == "cpu" and event.alert.status == "firing"
    +      action:
    +        run_playbook:
    +          name: remediation-playbooks/cpu-playbook.yml
    + +

    For a self-healing server, we must list all conditions or scenarios where we can anticipate the server facing issues like full storage, memory fully utilized, and so on.

    + +

    Accordingly, we have to find the remediation of that issue and create an Ansible Playbook that resolves that issue after triggering that issue without manual intervention.

    + +

    Create the inventory file with localhost as host:

    + +
    +localhost 
    + +

    3. Run Ansible Rulebook

    + +

    Use the ansible-rulebook command to run the rulebook:

    + +
    +ansible-rulebook --rulebook ansible-rulebook.yaml -i inventory -v
    + +
    +05:13:46,294 - ansible_rulebook.app - INFO - Starting sources
    +05:13:46,294 - ansible_rulebook.app - INFO - Starting rules
    +05:13:46,294 - ansible_rulebook.engine - INFO - run_ruleset
    +05:13:47 496 [main] INFO org.drools.ansible.rulebook.integration.api.rulesengine.AbstractRulesEvaluator - Start automatic pseudo clock with a tick every 100 milliseconds
    +05:13:48,402 - ansible_rulebook.engine - INFO - load source filters
    +05:13:48,403 - ansible_rulebook.engine - INFO - loading eda.builtin.insert_meta_info
    +05:13:48,887 - ansible_rulebook.engine - INFO - Calling main in ansible.eda.alertmanager
    +05:13:48,890 - ansible_rulebook.engine - INFO - Waiting for all ruleset tasks to end
    +05:13:48,890 - ansible_rulebook.rule_set_runner - INFO - Waiting for actions on events from Automatic Remediation of a webserver
    +05:13:48,890 - ansible_rulebook.rule_set_runner - INFO - Waiting for events, ruleset: Automatic Remediation of a webserver
    +05:13:48 891 [drools-async-evaluator-thread] INFO org.drools.ansible.rulebook.integration.api.io.RuleExecutorChannel - Async channel connected
    + +

    It will wait for the Alertmanager alert to fire and status changes to firing. Then only the Ansible rule will trigger. Conditions also play a major role. We are using the and functionality of two functions. The first one is for firing status, and the second one is for job label match.

    + +

    We can assign different labels to different applications and we can trigger the rulebook based on status.

    + +

    4. Trigger the alerts of Alertmanager

    + +

    The status of alert changed from stable to firing condition as shown in Figure 1. In labels as a job, we can change the application name and trigger the specific remediation playbook.

    + +
    +
    + A screenshot of the Alertmanager rules dashboard showing triggered rules. +
    +
    Figure 1: The Alertmanager rules dashboard showing triggered rules.
    +
    +
    +

    Go back to the Ansible Rulebook CLI terminal where the rulebook was run. The logs show that the rule was triggered and the remediation playbook was run.

    + +
    +2023-06-20 05:26:46,907 - aiohttp.access - INFO - 4.246.213.96 [20/Jun/2023:05:26:46 +0000] "POST /alerts HTTP/1.1" 202 164 "-" "Alertmanager/0.23.0"
    +2023-06-20 05:26:46,935 - ansible_rulebook.rule_generator - INFO - calling restart web server
    +2023-06-20 05:26:46,938 - ansible_rulebook.rule_set_runner - INFO - call_action run_playbook
    +2023-06-20 05:26:46,938 - ansible_rulebook.rule_set_runner - INFO - substitute_variables
    +2023-06-20 05:26:46,938 - ansible_rulebook.rule_set_runner - INFO - action args: {'name': 'say-what.yml'}
    +2023-06-20 05:26:46,938 - ansible_rulebook.builtin - INFO - running Ansible playbook: say-what.yml
    +2023-06-20 05:26:46,942 - ansible_rulebook.builtin - INFO - ruleset: Automatic Remediation of a webserver, rule: restart web server
    +2023-06-20 05:26:46,942 - ansible_rulebook.builtin - INFO - Calling Ansible runner
    +2023-06-20 05:26:46,943 - aiohttp.access - INFO - 4.246.213.96 [20/Jun/2023:05:26:46 +0000] "POST /alerts HTTP/1.1" 202 164 "-" "Alertmanager/0.23.0"
    + +

    5. Containerize Event-Driven Ansible functionality

    + +

    You can also create containers on Event-Driven Ansible using the following Containerfile:

    + +
    +FROM registry.access.redhat.com/ubi9-minimal
    +RUN microdnf install java-17 python3 gcc python3-devel -y && microdnf clean all && python -m ensurepip --upgrade && pip3 install ansible ansible-rulebook asyncio aiokafka aiohttp aiosignal
    +ENV JAVA_HOME="/usr/lib/jvm/jre-17"
    +RUN mkdir /eda-ansible
    +RUN ansible-galaxy collection install ansible.eda
    +WORKDIR /eda-ansible
    +COPY. /eda-ansible
    +CMD ansible-rulebook -i inventory --rulebook ansible-rulebook.yaml  --verbose
    + +

    Integrate Event-Driven Ansible in the podman-compose file. Compose files will create a container and run it.

    + +
    +version: '3'
    +services:
    +  event-driven:
    +  build:.
    +  ports:
    +    - 5000:5000
    +  depends_on:
    +    - prometheus
    +    - alertmanager
    + +

    To run Prometheus, Alertmanager, and the event-driven rulebook, use the following:

    + +
    +podman-compose up -d
    + +

    You will get the same results.

    + +

    Continue your automation journey with Ansible Automation Platform

    + +

    Get started with Ansible Automation Platform by exploring interactive hands-on labs. Download Ansible Automation Platform at no cost and begin your automation journey.

    +The post 5 steps to build a self-healing server with Alertmanager appeared first on Red Hat Developer. +

    + ed9796c0-ae2f-4035-8f79-cd80e60a3cc1 + Wed, 04 Oct 2023 07:00:00 +0000
    - MonkeyUser: Refactor Man - https://www.monkeyuser.com/2017/refactor-man/ -

    The hero every code deserves

    - https://www.monkeyuser.com/2017/refactor-man/ - Tue, 01 Aug 2017 00:00:00 +0000 + Red Hat Developer: About Argo CD ApplicationSet and SCM Provider generator + https://developers.redhat.com/articles/2023/10/04/about-argo-cd-applicationset-and-scm-provider-generator +

    The ApplicationSet controller is a part of Argo CD that adds support for an ApplicationSet CustomResourceDefinition (CRD). The ApplicationSet controller helps to add Application automation and improve multicluster support and cluster multitenant support within Argo CD.

    + +

    ApplicationSet provides the following benefits:

    + +
    • The ability to use a single Kubernetes manifest to target multiple Kubernetes clusters and deploy multiple applications from one or multiple Git repositories with Argo CD.
    • +
    • Improved support for monorepos. In the context of Argo CD, a monorepo is multiple Argo CD Application resources defined within a single Git repository.
    • +
    • Within multitenant clusters, improves the ability of individual cluster tenants to deploy applications using Argo CD (without needing to involve privileged cluster administrators in enabling the destination clusters/namespaces).
    • +

    You can view all the supported fields for ApplicationSet in the Argo CD documentation.

    + +

    ApplicationSet generators

    + +

    Generators generate parameters and are rendered into the template field of the ApplicationSet resource. ApplicationSet supports a variety of generators, as described below:

    + +
    • List generator: Generates parameters based on an arbitrary list of key/value pairs.
    • +
    • Cluster generator: Allows you to target Argo CD applications to clusters based on the list of clusters defined within (and managed by) Argo CD.
    • +
    • Git generator: Allows you to create applications based on files within a Git repository or based on the directory structure of a Git repository.
    • +
    • Matrix generator: Can be used to combine the generated parameters of two separate generators.
    • +
    • Merge generator: Can be used to merge the generated parameters of two or more generators.
    • +
    • SCM Provider generator: Uses the API of a source code management (SCM) provider (e.g., GitHub) to discover repositories within an organization automatically.
    • +
    • Pull Request generator: Uses the API of a Source-Code-Management-as-a-Service (SCMaaS) provider (e.g., GitHub) to discover open pull requests within a repository automatically.
    • +
    • Cluster Decision Resource generator: Used to interface with Kubernetes custom resources that use custom resource-specific logic to decide which set of Argo CD clusters to deploy to.
    • +
    • Plug-in generator: Makes RPC HTTP requests to provide parameters.
    • +

    This article focuses exclusively on the SCM Provider generator and its use cases.

    + +

    Source code management

    + +

    SCM is used to track modifications to a source code repository. SCM tracks a running history of changes to a code base and helps resolve conflicts when merging updates from multiple contributors. SCM is also synonymous with version control.

    + +

    As software projects grow in lines of code and contributor headcount, the costs of communication overhead and management complexity also grow. SCM is a critical tool to alleviate the organizational strain of growing development costs.

    + +

    SCM Provider generator

    + +

    The SCM Provider generator uses the API of a SCMaaS provider such as GitHub to discover repositories within an organization automatically. This fits well with GitOps layout patterns that split microservices across many repositories.

    + +

    As of Argo CD version 2.8, the supported SCM providers are:

    + +
    • GitHub
    • +
    • GitLab 
    • +
    • Gitea
    • +
    • Bitbucket 
    • +
    • Azure DevOps
    • +
    • Bitbucket Cloud
    • +

    You can configure the ApplicationSet with SCM Provider as follows:

    + +
    +apiVersion: argoproj.io/v1alpha1
    +kind: ApplicationSet
    +metadata:
    +  name: myapps
    +spec:
    +  generators:
    +  - scmProvider:
    +      # Which protocol to clone using.
    +      cloneProtocol: ssh
    +      # See below for provider specific options.
    +      github:
    +        # ...
    + +

    cloneProtocol: defines the protocol to use for the SCM URL. The default is provider-specific, but ssh if possible.

    + +

    The provider's parameters are described in the Argo CD documentation. We will use GitHub for the example in this article.

    + +

    GitHub

    + +

    The GitHub mode uses the GitHub API to scan an organization in either github.com or GitHub Enterprise:

    + +
    +apiVersion: argoproj.io/v1alpha1
    +kind: ApplicationSet
    +metadata:
    +  name: guestbook
    +spec:
    +  generators:
    +  - scmProvider:
    +      github:
    +        organization: argoproj
    +      cloneProtocol: https
    +      filters:
    +      - repositoryMatch: example-apps
    +  template:
    +    metadata:
    +      name: '{{ repository }}-guestbook'
    +    spec:
    +      project: "default"
    +      source:
    +        repoURL: '{{ url }}'
    +        targetRevision: '{{ branch }}'
    +        path: guestbook
    +      destination:
    +        server: https://kubernetes.default.svc
    +        namespace: guestbook
    + +

    The parameters are explained below:

    + +
    • Organization: In the example above, we used argoproj. If you have multiple organizations, use multiple generators.
    • +
    • api: This field is optional; however, if you are using GitHub Enterprise, you will need to specify the URL to access the API. In our example, we are not using GitHub Enterprise.
    • +
    • filters: SCM Provider supports multiple filters. We are using a repositoryMatch filter matching the repository with name example-apps. You can find more filters in the documentation.
    • +

    Use case

    + +

    There is an e-commerce website with multiple services for orders, inventory, payments, etc.; each service is stored in a separate Git repository within the same organization. When we deploy the e-commerce website, we want all the services to be deployed simultaneously for the website to start successfully.

    + +

    In this case, we can use the SCM Provider generator to generate all the services belonging to the same organization. You can configure the ApplicationSet in the following format:

    + +
    +apiVersion: argoproj.io/v1alpha1
    +kind: ApplicationSet
    +metadata:
    +  name: ecommerce-website
    +spec:
    +  generators:
    +  - scmProvider:
    +      github:
    +        organization: ecommerceWebsite
    +      cloneProtocol: https
    +  template:
    +    metadata:
    +      name: '{{ repository }}'
    +    spec:
    +      project: "default"
    +      source:
    +        repoURL: '{{ url }}'
    +        targetRevision: '{{ branch }}'
    +        path: app
    +      destination:
    +        server: https://kubernetes.default.svc
    +        namespace: ecomm
    + +

    The ApplicationSet above will read all the repositories in the GitHub organization ecommerceWebsite and deploy all the services in the repositories within the path app in each repository.

    + +

    Pros

    + +

    Deploying multiple applications and services in the same organization is easy and quick. You can use the SCM Provider generator to allow you to dynamically generate ephemeral environments for testing or prod-like environments easily.

    + +

    Cons

    + +

    Once the entire organization is added to the SCM Provider generator, it will pick all the repositories matching the added filtering conditions. If you want to create a new repository within the same organization and do not want it to be deployed, you would need to ensure that the repository does not match any of the filtering conditions added to the SCM Provider generator. This becomes an additional effort if the SCM generator is not configured properly.

    + +

    Conclusion

    + +

    The ApplicationSet custom resource helps you easily and quickly manage multitenant or cluster application deployment. The SCM Provider generator is helpful when you want to manage all repositories of a known pattern within an organization and deploy resources to Argo CD by automatically identifying changes to any of the repositories in the organization.

    +The post About Argo CD ApplicationSet and SCM Provider generator appeared first on Red Hat Developer. +

    + eb3cab1e-7d1d-407e-815c-071817e984fe + Wed, 04 Oct 2023 07:00:00 +0000
    - MonkeyUser: A Programmer Walks Into A Bar - https://www.monkeyuser.com/2017/programmer-walks-into-bar/ -

    Such waste of empty space

    - https://www.monkeyuser.com/2017/programmer-walks-into-bar/ - Wed, 26 Jul 2017 00:00:00 +0000 + JBoss Blogs: Keycloak 22.0.4 released + https://www.keycloak.org/2023/10/keycloak-2204-released + + https://www.keycloak.org/2023/10/keycloak-2204-released + Wed, 04 Oct 2023 00:00:00 +0000
    - MonkeyUser: Bottom of the backlog - https://www.monkeyuser.com/2017/bottom-of-the-backlog/ -

    If you see this you've gone too far

    - https://www.monkeyuser.com/2017/bottom-of-the-backlog/ - Tue, 18 Jul 2017 00:00:00 +0000 + Red Hat Developer: Beyond Loom: Weaving new concurrency patterns + https://developers.redhat.com/articles/2023/10/03/beyond-loom-weaving-new-concurrency-patterns +

    In this article we're going to discuss some new patterns for concurrent systems that are enabled by the new virtual threads feature from Java 21 and some related new features that "follow on" from virtual threads—​specifically Structured Concurrency (JEP 453) and Scoped Values (JEP 446).

    + +

    Note that as of JDK 21, both Structured Concurrency and Scoped Values are in Preview state and so cannot really be used in production applications.

    + +

    With this limitation in mind, let's start by looking at the patterns that are enabled by virtual threads alone—​which can, therefore, be used without restriction in Java 21 applications.

    + +

    Virtual thread concurrency patterns

    + +

    Virtual threads were introduced in Java 21 as one of the major outputs from Project Loom and are, perhaps, most similar to goroutines from the Go language.

    + +

    The aim of the project was to solve a scalability problem with Java's concurrency model, which was formerly based solely on operating system (a.k.a. platform) threads. This is achieved by introducing a new type of thread, known as a virtual thread (or vthreads for short).

    + +

    Vthreads are managed by the JVM and are not permanently associated with a platform thread. They only use a platform thread (called the carrier) when they are actually running, and they are much cheaper to create and destroy than platform threads.

    + +

    To operate, vthreads automatically unbind from their carrier whenever they encounter a blocking I/O call.

    + +

    One side effect of this, and our first new pattern, is that vthreads should completely remove the need for developers to use the non-blocking form of the NIO APIs directly. Instead, for each task, programs can create a dedicated virtual thread that uses the blocking API and let the runtime sort it out.

    + +

    The intent is that this is essentially the same thing as using non-blocking I/O in terms of performance while providing a simpler programming model.

    + +

    In fact, avoiding more complex programming models that display asynchronous contagion (such as async-await or colored functions) was a major design goal for Project Loom. (Colored functions were named as such in the blog post What Color is Your Function?, although the author incorrectly assumes that Java is planning to support async-await.)

    + +

    At the same time, bringing explicit "reactive approaches" into the JDK was a definite non-goal. The end result was the form of virtual threads that we see in Java 21.

    + +

    This great new language feature opens the door to some interesting new patterns. We've already discussed the possible sunsetting of the direct use of non-blocking I/O, but let's look at some others, starting with one of the most obvious:

    + +

    Just replace some of your program's threads with vthreads.

    + +

    The carrier threads for vthreads come from a ForkJoinPool executor and will yield on (most) blocking operations. This means that for threads that do at least some I/O, then there is a potential performance benefit by switching them to virtual.

    + +

    You should remember that performance depends on a lot of things, and vthread's main advantage is programmer convenience and maintainability. So, if we are able to obtain a performance boost by converting some threads to virtual then we have to test the change—​in a real-world complete system—​to ensure that we actually realize the expected benefit.

    + +

    Also, remember that Java 21 does not automatically make existing code use virtual threads—unless you explicitly construct a virtual thread, you will always get a platform thread.

    + +

    As well as manual creation of virtual threads, there is also a new executor type, which we can get from Executors.newVirtualThreadPerTaskExecutor(). As the name suggests, rather than relying upon a traditional threadpool that is reused for multiple tasks, this executor creates a new virtual thread for each task that is submitted.

    + +

    To accommodate this new executor type, the ExecutorService interface is now AutoCloseable—so it can be used in try-with-resources blocks.

    + +

    This is a great example of a new pattern that is designed specifically for virtual threads. Executors for platform threads are typically long-lived objects—​because they create threads at startup, which is an expensive operation. Therefore, it doesn't make sense to create them as local objects within a method—​they're much more likely to be seen as (possibly static) fields.

    + +

    Virtual threads, on the other hand, are very cheap to create—​they're just Java objects without any permanently allocated native resources. Creating an executor for virtual threads is similarly cheap, and so creating a locally scoped executor avoids a possible performance penalty.

    + +

    This leads to code like this example showing the bare bones of a web server, which makes use of the block-scoped virtual thread executor:

    + +
    +    private volatile boolean isShutdown = false;
    +
    +    void handle(Socket socket) {
    +        // Handle incoming request
    +    }
    +
    +    void serveVT(ServerSocket serverSocket) throws IOException, InterruptedException {
    +        try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    +            try {
    +                while (!isShutdown) {
    +                    var socket = serverSocket.accept();
    +                    executor.submit(() -> handle(socket));
    +                }
    +            } finally {
    +                // If there's been an error, or we're interrupted, we stop accepting
    +                executor.shutdown();
    +            }
    +        }
    +    }
    +
    +    public shutdown() {
    +        isShutdown = true;
    +    }
    + +

    The server socket is passed into the main serveVT() method and handles each incoming request by starting a new virtual thread.

    + +

    Every request is isolated from every other request, so there is no need to share data or context, and the requests will all complete in bounded time (and require network I/O). We can call this type of operation fire-and-forget, and this pattern is very suitable for implementing a simple web server using vthreads.

    + +

    Also note that this code uses the Volatile Shutdown pattern to provide a controlled shutdown of the server—​another thread calls the shutdown() method, and the volatile nature of the boolean ensures that the no more incoming requests will be processed.

    + +

    Let's move on to meet the new Preview APIs that arrived in Java 21 and complement virtual threads.

    + +

    Structured Concurrency

    + +

    The first of the two new APIs is known as Structured Concurrency. This is an API for thread handling, which provides an approach for cooperating tasks (often virtual threads) to be considered and managed collectively as a collection of subtasks.

    + +

    One class of problem in concurrent programming is known as data-parallel problems. These are problems where the same operation is applied to a large amount of data, and the operations are (more or less) independent of each other. This is the domain of applicability of such things as Amdahl's Law, a well-known constraint on the ability of parallel computing to speed up computation.

    + +

    By contrast, Structured Concurrency is designed for task-parallel problems, which involves different but related subtasks that need to proceed in parallel. The API's affinity to virtual threads means it is primarily useful for tasks involving some amount of I/O (especially calls to remote services). However, the approach is much less useful for operations that act solely (or mostly) on in-memory data because virtual threads will contend with each other for CPU time.

    + +

    The general flow for a structured concurrency task looks something like this:

    + +
    1. +

      Create a task scope—​the creating thread owns the scope.

      +
    2. +
    3. +

      Fork concurrent subtasks in the scope (each is a virtual thread).

      +
    4. +
    5. +

      Scope owner joins the scope (all subtasks) as a unit.

      +
    6. +
    7. +

      Scope’s join() method blocks until all subtasks have completed.

      +
    8. +
    9. +

      After joining, owner handles any errors in forks and processes results.

      +
    10. +
    11. +

      Owner closes the scope.

      +
    12. +

    It's worth pointing out that the version of Structured Concurrency that shipped in Java 21 included some minor API changes over Java 20. The main one is that fork() now returns a Subtask (which implements Supplier) instead of a bare Future (as it was in Java 20).

    + +

    The reason for this new interface, rather than just using Future, is that results are only queried after a join(), because Structured Concurrency treats multiple subtasks as single unit of work. As a result, neither blocking calls to get() nor checked exceptions from subtasks are useful, and so Future is something of an awkward interface (Subtask is a checked-exception-free interface).

    + +

    Developers who have previously used the older previews of Structured Concurrency should be aware of this change when upgrading.

    + +

    Let's see this in action in an example using the calculation of a stock tip, a record class that we'll define like this:

    + +
    +record StockTip(String symbol, double sentiment, double delta24) {}
    + +

    We'll assume that the strength of the market's attitude to the stock (the sentiment) and the possible change in price over the next 24 hours (the delta24) are to be calculated by some external process. These elements might take some time to compute, and this is likely to involve network traffic.

    + +

    We can therefore use structured subtasks to compute them, like this:

    + +
    +try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    +    Callable getSentiment = () -> getSentiment(s);
    +    Subtask fSentiment = scope.fork(getSentiment);
    +
    +    Callable getDelta = () -> getDelta24(s);
    +    Subtask fDelta = scope.fork(getDelta);
    +
    +    scope.join();
    +    scope.throwIfFailed();
    +
    +    return new StockTip(s, fSentiment.get(), fDelta.get());
    +} catch (ExecutionException | InterruptedException e) {
    +    throw new RuntimeException(e);
    +}
    + +

    This follows the general flow for structured concurrency that we established above. Note that closing the scope is handled implicitly via the try-with-resources block—​this shuts down the scope and waits for any straggling subtasks to complete.

    + +

    We should also point out a couple of other points.

    + +

    Firstly, joining the subtasks can also be canceled by calling a shutdown() method. Secondly, there is also a timed variant of join(), called joinUntil(), which accepts a deadline (as an Instant parameter).

    + +

    There are two built-in shutdown policies for the scope (and custom shutdown policies are also supported):

    + +
    • +

      Cancel all subtasks if one of them fails (ShutdownOnFailure)

      +
    • +
    • +

      Cancel all subtasks if one of them succeeds (ShutdownOnSuccess)

      +
    • +

    We met the first of these inbuilt options in our first example, and so let's move on to introduce the other.

    + +

    Consider a library method where multiple subtasks are launched (possibly multiple copies of the same subtask), and the first result (from any of the subtasks) will do. The tasks are racing each other to complete, and the rest of the virtual threads should be shut down as soon as the first success occurs, so we should use the ShutdownOnSuccess policy, like this:

    + +
    + T race(List> tasks, Instant deadline)
    +        throws InterruptedException, ExecutionException, TimeoutException {
    +
    +    try (var scope = new StructuredTaskScope.ShutdownOnSuccess()) {
    +        for (var task : tasks) {
    +            scope.fork(task);
    +        }
    +        return scope.joinUntil(deadline)
    +                    .result();  // Throw if none of the subtasks completed successfully
    +    }
    +}
    + +

    This has an obvious dual, i.e., when all tasks must run to completion (and where a failure of any subtask should cancel the entire task, so we'll use ShutdownOnFailure again):

    + +
    + List runAll(List> tasks)
    +        throws InterruptedException, ExecutionException {
    +
    +    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    +        List> handles =
    +            tasks.stream().map(scope::fork).toList();
    +
    +        scope.join()
    +             .throwIfFailed();  // Propagate exception if any subtask fails
    +
    +        // Here, all tasks have succeeded, so compose their results
    +        return handles.stream().map(Subtask::get).toList();
    +    }
    +}
    + +

    Note that this version of the code rematerializes the results into a List, but it's also possible to imagine a version that had a different terminal operation that reduced the results and returned a single value.

    + +

    We can build more complex structures as well—​the subtasks that we created using forks can themselves create scopes (subscopes). This naturally induces a tree structure of scopes and subtasks, which is useful when we want to condense a final value out of a tree of subtasks.

    + +

    If, however, the main point of our code is to operate via side effects, then it is possible to use a StructuredTaskScope—i.e., use a task scope that returns void, such as in this example:

    + +
    +void serveScope(ServerSocket serverSocket) throws IOException, InterruptedException {
    +    try (var scope = new StructuredTaskScope()) {
    +        try {
    +            while (true) {
    +                final var socket = serverSocket.accept();
    +                Callable task = () -> {
    +                    handle(socket);
    +                    return null;
    +                };
    +                scope.fork(task);
    +            }
    +        } finally {
    +            // If there's been an error or we're interrupted, we stop accepting
    +            scope.shutdown();  // Close all active connections
    +            scope.join();
    +        }
    +    }
    +}
    + +

    However, this is arguably often better handled using a fire-and-forget pattern, such as newVirtualThreadPerTaskExecutor(). There are also some small wrinkles with the generics here, ​such as needing to explicitly return null.

    + +

    One recurring theme in all the patterns that we have met so far is that using these techniques requires applying design thinking and knowledge of the domain and context of the problem being solved. There is no software tool that can tell with 100% accuracy whether a thread is a good candidate for being converted to a vthread—​that is a task for a human software engineer.

    + +

    Likewise, the restructuring of a task into subtasks and the definition of the relevant scopes requires the programmer to have a good understanding of the domain and any data dependencies between the subtasks.

    + +

    Let's move on to look at the second of the new APIs that we want to discuss.

    + +

    Scoped Values

    + +

    In addition to Structured Concurrency, the new Scoped Values API arrived in Java 21 as Preview. Red Hat contributes to many projects within OpenJDK, including Project Loom, and we are the main contributors to the Scoped Values API. Andrew Haley, one of our Distinguished Engineers, is the overall lead for the Scoped Values JEP.

    + +

    The Scoped Values API is based on a new class ScopedValue in java.lang, and it represents a binding of a value to a variable within a specific scope. This value is written once and is then immutable on a per-scope basis.

    + +

    The bound value can be retrieved at any point down any call chain within the scope, but only within the scope in which it was set—​this provides robustness and a form of encapsulation. In particular, there is no need to explicitly pass the scoped value down the call chain.

    + +

    Scoped values can be thought of as invisible parameters that go into every method and are, in turn, passed to every method they invoke. We sometimes say they are implicitly available, but this is a much more controlled (and more Java-ish) form than, say, Scala's implicit method parameters.

    + +

    The Scoped Values API can also be thought of as a modern alternative to thread-local variables, but with a number of enhancements, such as immutability. This means that there is no set() method to let faraway code change a scoped value. This also enables possible future runtime optimizations, as the runtime can be certain that a scoped value cannot change.

    + +

    Some goals of the API are:

    + +
    • +

      To share data within a thread and with child threads

      +
    • +
    • +

      Controlled and bounded lifetime of values

      +
    • +
    • +

      Lifetimes visible from the structure of code

      +
    • +
    • +

      Immutability allows sharing by lots of threads

      +
    • +
    • +

      Immutability and explicit lifetime is often a better fit

      +
    • +

    It is not necessary for programmers to move away from ThreadLocal, but scoped values combine well with virtual thread patterns, such as fire-and-forget. It therefore seems quite likely that as scoped values are adopted, then ThreadLocal will be gradually replaced for almost all use cases.

    + +

    Let's rewrite the virtual thread web server to use scoped values:

    + +
    +public class ServerSV {
    +    public final static ScopedValue SOCKETSV = ScopedValue.newInstance();
    +
    +    void serve(ServerSocket serverSocket) throws IOException, InterruptedException {
    +        while (true) {
    +            var socket = serverSocket.accept();
    +            ScopedValue.where(SOCKETSV, socket)
    +                        .run(() -> handle());
    +        }
    +    }
    +
    +    private void handle() {
    +        var socket = SOCKETSV.get();
    +        // handle incoming traffic
    +    }
    +}
    + +

    Note that the handle() method now no longer takes a parameter, and instead, the socket is accessed via the scoped value—​this is the implicit availability we discussed above.

    + +

    This example is very simple, as all we're really doing is to replace the parameter passing with a scoped value—​an almost trivial application. The real power of scoped values is that the call chains and the scoping and subscoping can be arbitrarily complex, and the scoped value will still be available.

    + +

    Overall, the intent of scoped values is to provide a dynamic scope, a concept that has not been seen in Java before. This approach to scopes is similar to that found in some other languages—​such as shells, Lisp dialects, and Perl.

    + +

    We can contrast it with the traditional Java form of scoping—​usually called lexical scoping. This is where the scope of a variable is determined by the structure of the code, usually defined by a matching pair of curly braces.

    + +

    Our dynamic scoping example shows a key pattern in action:

    + +
    • +

      Using a static final field as a holder for a scoped value

      +
    • +
    • +

      Declaring the ScopedValue instance in class scope

      +
    • +
    • +

      Creating the dynamic scope (e.g., runWhere()) within a method

      +
    • +
    • +

      Using a lambda to define the scope body (where the call chains will live)

      +
    • +

    Scoped values are intended to be very useful for passing values like transaction contexts and other examples of ambient context data.

    + +

    Scoped values interact well with structure concurrency, as they can be constructed for scope and then rebound by subscopes. Any values that are not rebound will be inherited by the subscope. This technique allows for upgrading access control and similar patterns, such as in this example, where we will consider two security access levels:

    + +
    +enum SecurityLevel { USER, ADMIN }
    + +

    We'll use a scoped value to hold the current security level and another to hold the current request number:

    + +
    +    private static final ScopedValue securitySV = ScopedValue.newInstance();
    +    private static final ScopedValue requestSV = ScopedValue.newInstance();
    +
    +    private final AtomicInteger req = new AtomicInteger();
    +
    +    public void run() {
    +        ScopedValue.where(securitySV, level())
    +                .where(requestSV, req.getAndIncrement())
    +                .run(() -> process());
    +    }
    + +

    To demonstrate rebinding, let us assume that admin privileges are not available, and so any attempt to use them will result in a fallback to user privileges:

    + +
    +    private void process() {
    +        var level = securitySV.get();
    +        if (level == SecurityLevel.USER) {
    +            System.out.println("User privileges granted for "+ requestSV.get() +" on: "+ Thread.currentThread());
    +        } else {
    +            System.out.println("Admin privileges requested for "+ requestSV.get() +" on: "+ Thread.currentThread());
    +            System.out.println("System is in lockdown. Falling back to user privileges");
    +            ScopedValue.where(securitySV, SecurityLevel.USER)
    +                    .run(() -> process());
    +        }
    +    }
    + +

    To conclude this article, we should also point out that classes that represent continuations and other low-level building blocks for virtual threads and other components do exist in Java 21. However, they are in the package jdk.internal.vm and so are not intended for direct use by Java programmers as of this release.

    +The post Beyond Loom: Weaving new concurrency patterns appeared first on Red Hat Developer. +

    + 887870d2-b12c-413c-bed4-c6040f0b4c21 + Tue, 03 Oct 2023 07:00:00 +0000
    - MonkeyUser: Big Decisions - https://www.monkeyuser.com/2017/big-decisions/ -

    Forget Global Warming

    - https://www.monkeyuser.com/2017/big-decisions/ - Mon, 10 Jul 2017 00:00:00 +0000 + JBoss Blogs: Virtual Threads with Quarkus made easy + https://www.mastertheboss.com/soa-cloud/quarkus/virtual-threads-with-quarkus-made-easy/ + + https://www.mastertheboss.com/soa-cloud/quarkus/virtual-threads-with-quarkus-made-easy/ + Mon, 02 Oct 2023 13:43:50 +0000
    - MonkeyUser: NPM Delivery - https://www.monkeyuser.com/2017/npm-delivery/ -

    Relax, it's NPM

    - https://www.monkeyuser.com/2017/npm-delivery/ - Tue, 04 Jul 2017 00:00:00 +0000 + JBoss Blogs: Testing virtual thread applications + https://quarkus.io/blog/virtual-threads-3/ + + https://quarkus.io/blog/virtual-threads-3/ + Mon, 02 Oct 2023 00:00:00 +0000
    - MonkeyUser: // TODO - https://www.monkeyuser.com/2017/todo/ -

    Memento is a great movie

    - https://www.monkeyuser.com/2017/todo/ - Tue, 27 Jun 2017 00:00:00 +0000 + Quarkus: Testing virtual thread applications + https://quarkus.io/blog/virtual-threads-3/ + In a previous post, we have seen how to implement a CRUD application using virtual threads in Quarkus. The following video shows how to test this application and, specifically, how to detect pinning. The complete code of the application and the tests are available in the virtual threads demos repository.... + https://quarkus.io/blog/virtual-threads-3/ + Mon, 02 Oct 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 30 - https://www.monkeyuser.com/2017/ad-litteram-30/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #29

    - https://www.monkeyuser.com/2017/ad-litteram-30/ - Fri, 23 Jun 2017 00:00:00 +0000 + JBoss Blogs: Live diff and update quarkus deployments in OpenShift using Jetbrains IDEA + https://quarkus.io/blog/live-diff-and-update-using-idea/ + + https://quarkus.io/blog/live-diff-and-update-using-idea/ + Thu, 28 Sep 2023 00:00:00 +0000
    - MonkeyUser: Seeking Answer - https://www.monkeyuser.com/2017/seeking-answer/ -

    The single point of truth is always the source code

    - https://www.monkeyuser.com/2017/seeking-answer/ - Tue, 20 Jun 2017 00:00:00 +0000 + Quarkus: Live diff and update quarkus deployments in OpenShift using Jetbrains IDEA + https://quarkus.io/blog/live-diff-and-update-using-idea/ + Prerequisites OpenShift CLI, oc: installation instructions Kubernetes by Red Hat, Kubernetes Plugin for JetBrains IDEA Marketplace Quarkus CLI, Quarkus: Installation Instructions Optional: Source code for this blog post: https://github.com/adietish/openshift-quickstart IntelliJ Kubernetes Plugin This shows you how the Kubernetes Plugin for Jetbrains IDEA is a great companion when deploying quarkus apps... + https://quarkus.io/blog/live-diff-and-update-using-idea/ + Thu, 28 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 29 - https://www.monkeyuser.com/2017/ad-litteram-29/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #29

    - https://www.monkeyuser.com/2017/ad-litteram-29/ - Fri, 16 Jun 2017 00:00:00 +0000 + JBoss Blogs: Just: a tool to store and execute your project commands + https://www.mastertheboss.com/various-stuff/just-a-tool-to-store-and-execute-your-project-commands/ + + https://www.mastertheboss.com/various-stuff/just-a-tool-to-store-and-execute-your-project-commands/ + Wed, 27 Sep 2023 14:07:46 +0000
    - MonkeyUser: Keep Up To Date - https://www.monkeyuser.com/2017/keep-up-to-date/ -

    And make sure you go to the issues section

    - https://www.monkeyuser.com/2017/keep-up-to-date/ - Tue, 13 Jun 2017 00:00:00 +0000 + JBoss Blogs: Hacktoberfest 2023 + https://wildfly.org//news/2023/09/27/Hacktoberfest-2023/ + + https://wildfly.org//news/2023/09/27/Hacktoberfest-2023/ + Wed, 27 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 28 - https://www.monkeyuser.com/2017/ad-litteram-28/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #28

    - https://www.monkeyuser.com/2017/ad-litteram-28/ - Fri, 09 Jun 2017 00:00:00 +0000 + JBoss Blogs: Mastering Virtual Threads: A Comprehensive Tutorial + https://www.mastertheboss.com/java/mastering-virtual-threads-a-comprehensive-tutorial/ + + https://www.mastertheboss.com/java/mastering-virtual-threads-a-comprehensive-tutorial/ + Mon, 25 Sep 2023 10:54:36 +0000
    - MonkeyUser: Open Source Issues - https://www.monkeyuser.com/2017/open-source-issues/ -

    The oops and downs of open source

    - https://www.monkeyuser.com/2017/open-source-issues/ - Tue, 06 Jun 2017 00:00:00 +0000 + JBoss Blogs: Writing CRUD applications using virtual threads + https://quarkus.io/blog/virtual-threads-2/ + + https://quarkus.io/blog/virtual-threads-2/ + Mon, 25 Sep 2023 00:00:00 +0000
    - MonkeyUser: Angular vs. React - https://www.monkeyuser.com/2017/angular-vs-react/ -

    Programmers need alternatives to argue

    - https://www.monkeyuser.com/2017/angular-vs-react/ - Tue, 30 May 2017 00:00:00 +0000 + Quarkus: Writing CRUD applications using virtual threads + https://quarkus.io/blog/virtual-threads-2/ + Last week, we published a video demonstrating the creation of a CRUD application using virtual threads in Quarkus. It’s as simple as adding the @RunOnVirtualThread annotation on your HTTP resource (or your controller class if you use the Spring compatibility layer). This companion post explains how it works behind the... + https://quarkus.io/blog/virtual-threads-2/ + Mon, 25 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 27 - https://www.monkeyuser.com/2017/ad-litteram-27/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #27

    - https://www.monkeyuser.com/2017/ad-litteram-27/ - Fri, 26 May 2017 00:00:00 +0000 + Quarkus: Observability in Quarkus 3 + https://quarkus.io/blog/quarkus-observability-3-3/ + Observability in Quarkus Observability on a software system can be described as the capability to allow a human to ask and answer questions. To enable developers and support engineers in understanding how their applications behave, Quarkus 3.3 includes many improvements to its main observability related extensions: quarkus-opentelemetry (tracing) quarkus-micrometer (metrics)... + https://quarkus.io/blog/quarkus-observability-3-3/ + Wed, 20 Sep 2023 00:00:00 +0000
    - MonkeyUser: Code Review Stages - https://www.monkeyuser.com/2017/code-review-stages/ -

    kill or be killed

    - https://www.monkeyuser.com/2017/code-review-stages/ - Tue, 23 May 2017 00:00:00 +0000 + JBoss Blogs: Observability in Quarkus 3 + https://quarkus.io/blog/quarkus-observability-3-3/ + + https://quarkus.io/blog/quarkus-observability-3-3/ + Wed, 20 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 26 - https://www.monkeyuser.com/2017/ad-litteram-26/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #26

    - https://www.monkeyuser.com/2017/ad-litteram-26/ - Fri, 19 May 2017 00:00:00 +0000 + Quarkus: Quarkus 3.4.1 released - Redis 7.2 and Flyway changes + https://quarkus.io/blog/quarkus-3-4-1-released/ + It is our pleasure to announce the release of Quarkus 3.4.1. We skipped 3.4.0 as we needed a fix for CVE-2023-4853 in 3.4 too. Major changes are: Support for Redis 7.2 Adjustments on how to enable/activate Flyway This version also comes with bugfixes, performance improvements and documentation improvements. We currently... + https://quarkus.io/blog/quarkus-3-4-1-released/ + Wed, 20 Sep 2023 00:00:00 +0000
    - MonkeyUser: Code Progression - https://www.monkeyuser.com/2017/code-progression/ -

    There is no alien technology - We are living in a computer simulation

    - https://www.monkeyuser.com/2017/code-progression/ - Tue, 16 May 2017 00:00:00 +0000 + JBoss Blogs: Quarkus 3.4.1 released - Redis 7.2 and Flyway changes + https://quarkus.io/blog/quarkus-3-4-1-released/ + + https://quarkus.io/blog/quarkus-3-4-1-released/ + Wed, 20 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 25 - https://www.monkeyuser.com/2017/ad-litteram-25/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #25

    - https://www.monkeyuser.com/2017/ad-litteram-25/ - Fri, 12 May 2017 00:00:00 +0000 + Quarkus: When Quarkus meets Virtual Threads + https://quarkus.io/blog/virtual-thread-1/ + Java 21 offers a new feature that will reshape the development of concurrent applications in Java. For over two years, the Quarkus team explored integrating this new feature to ease the development of distributed applications, including microservices and event-driven applications. This blog post is the first part of a series... + https://quarkus.io/blog/virtual-thread-1/ + Tue, 19 Sep 2023 00:00:00 +0000
    - MonkeyUser: Unit Tests Coverage Degradation - https://www.monkeyuser.com/2017/unit-tests-coverage-degradation/ -

    In the initial phase unit tests covered 110% of code - we tested even the 3rd party libs

    - https://www.monkeyuser.com/2017/unit-tests-coverage-degradation/ - Tue, 09 May 2017 00:00:00 +0000 + JBoss Blogs: When Quarkus meets Virtual Threads + https://quarkus.io/blog/virtual-thread-1/ + + https://quarkus.io/blog/virtual-thread-1/ + Tue, 19 Sep 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 24 - https://www.monkeyuser.com/2017/ad-litteram-24/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #24

    - https://www.monkeyuser.com/2017/ad-litteram-24/ - Fri, 05 May 2017 00:00:00 +0000 + JBoss Blogs: How to upgrade to Quarkus 3 + https://www.mastertheboss.com/soa-cloud/quarkus/how-to-upgrade-to-quarkus-3/ + + https://www.mastertheboss.com/soa-cloud/quarkus/how-to-upgrade-to-quarkus-3/ + Mon, 18 Sep 2023 16:34:53 +0000
    - MonkeyUser: Shady Logic Gates - https://www.monkeyuser.com/2017/shady-logic-gates/ -

    3 IFs

    - https://www.monkeyuser.com/2017/shady-logic-gates/ - Tue, 02 May 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - July 03, 2023 + https://www.jboss.org/posts/weekly-2023-07-03.html + + https://www.jboss.org/posts/weekly-2023-07-03.html + Mon, 03 Jul 2023 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.28.0.Final for Eclipse 2023-03 + https://tools.jboss.org/blog/4.28.0.final.html + Happy to announce 4.28.0.Final build for Eclipse 2023-06. + + + Downloads available at JBoss Tools 4.28.0 Final. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Components Depreciation + + As communicated in a previous blog article, the following components are now deprecated: + + + + + Openshift CDK Tooling + + + Openshift Explorer view (already hidden by default) and wizards, targeting Openshift v3 + + + + + The current openshift Application Explorer view, based on odo v3 is now the default supported tooling. + + Related JIRA: JBIDE-29044 + + + + Hibernate Tools + + Runtime Provider Updates + + The Hibernate 6.2 runtime provider now incorporates Hibernate Core version 6.2.5.Final, Hibernate Ant version 6.2.5.Final and Hibernate Tools version 6.2.5.Final. + + + The Hibernate 5.3 runtime provider now incorporates Hibernate Core version 5.3.30.Final... + https://tools.jboss.org/blog/4.28.0.final.html + Mon, 03 Jul 2023 00:00:00 +0000 + + + JBoss Tools: JBoss Tools for Eclipse 2023-06M2 + https://tools.jboss.org/blog/4.28.0.am1.html + Happy to announce 4.28.0.AM1 (Developer Milestone 1) build for Eclipse 2023-06M2. + + + Downloads available at JBoss Tools 4.28.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Components Depreciation + + Fuse Tooling is now deprecated. More information here. + + + + Components Removal + + As previously announced here, we’ve removed the Central / update tab, SEAM and JSF support from JBossTools. + + + For central update tab, all the existing central extensions can be installed with the marketplace client, using the entries listed here. + + + + + Future releases cadences + + Starting from 4.28.0.Final, there will be no more .AM1 releases. The .Final releases can be now scheduled close to the Eclipse releases. + + + + Hibernate Tools + + Runtime Provider Updates + + The Hibernate... + https://tools.jboss.org/blog/4.28.0.am1.html + Mon, 05 Jun 2023 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - June, 1st 2023 + https://www.jboss.org/posts/weekly-2023-06-01.html + + https://www.jboss.org/posts/weekly-2023-06-01.html + Thu, 01 Jun 2023 00:00:00 +0000 - MonkeyUser: AdLitteram 23 - https://www.monkeyuser.com/2017/ad-litteram-23/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #23

    - https://www.monkeyuser.com/2017/ad-litteram-23/ - Fri, 28 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - May, 15 2023 + https://www.jboss.org/posts/weekly-2023-05-18.html + + https://www.jboss.org/posts/weekly-2023-05-18.html + Thu, 18 May 2023 00:00:00 +0000
    - MonkeyUser: QA Engineer - Bed Shopping - https://www.monkeyuser.com/2017/qa-engineer-buying-bed/ -

    The lion was not hurt

    - https://www.monkeyuser.com/2017/qa-engineer-buying-bed/ - Mon, 24 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - April, 20 2023 + https://www.jboss.org/posts/weekly-2023-04-20.html + + https://www.jboss.org/posts/weekly-2023-04-20.html + Thu, 20 Apr 2023 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.27.0.Final for Eclipse 2023-03 + https://tools.jboss.org/blog/4.27.0.final.html + Happy to announce 4.27.0.Final build for Eclipse 2023-03. + + + Downloads available at JBoss Tools 4.27.0 Final. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + We made several fixes in our server and javaee component to support jakarta namespaces. + + + + Hibernate Tools + + Runtime Provider Updates + + The Hibernate 6.2 runtime provider now incorporates Hibernate Core version 6.2.0.CR4, Hibernate Ant version 6.2.0.CR4 and Hibernate Tools version 6.2.0.CR4. + + + + + And more…​ + + You can find more noteworthy updates in on this page. + + + Enjoy! + + + Stéphane Bouchet + + + + ... + https://tools.jboss.org/blog/4.27.0.final.html + Fri, 07 Apr 2023 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - April, 06 2023 + https://www.jboss.org/posts/weekly-2023-04-06.html + + https://www.jboss.org/posts/weekly-2023-04-06.html + Thu, 06 Apr 2023 00:00:00 +0000 - MonkeyUser: AdLitteram 22 - https://www.monkeyuser.com/2017/ad-litteram-22/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #22

    - https://www.monkeyuser.com/2017/ad-litteram-22/ - Fri, 21 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - March, 23 2023 + https://www.jboss.org/posts/weekly-2023-03-23.html + + https://www.jboss.org/posts/weekly-2023-03-23.html + Thu, 23 Mar 2023 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2023-03M3 + https://tools.jboss.org/blog/4.27.0.am1.html + Happy to announce 4.27.0.AM1 (Developer Milestone 1) build for Eclipse 2023-03M3. + + + Downloads available at JBoss Tools 4.27.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Components Depreciation + + As previously announced here, we’re in the process to remove the Central / update tab from JBossTools in next release. This work can be followed here. + + + That means that all the current extra features that can be installed via this tab needs to be available through a new channel. This channel already exists as p2 repo, but using Eclipse Marketplace Client is more close to what’s existing right now. + + + Most of those additional features... + https://tools.jboss.org/blog/4.27.0.am1.html + Fri, 10 Mar 2023 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 10th March 2023 + https://www.jboss.org/posts/weekly-2023-03-09.html + + https://www.jboss.org/posts/weekly-2023-03-09.html + Thu, 09 Mar 2023 00:00:00 +0000 - MonkeyUser: Easter Eggs - https://www.monkeyuser.com/2017/easter-eggs/ -

    what are the odds to catch them all

    - https://www.monkeyuser.com/2017/easter-eggs/ - Tue, 18 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 24th February 2023 + https://www.jboss.org/posts/weekly-2023-02-24.html + + https://www.jboss.org/posts/weekly-2023-02-24.html + Fri, 24 Feb 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 21 - https://www.monkeyuser.com/2017/ad-litteram-21/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #21

    - https://www.monkeyuser.com/2017/ad-litteram-21/ - Fri, 14 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 26 January 2023 + https://www.jboss.org/posts/weekly-2023-02-08.html + + https://www.jboss.org/posts/weekly-2023-02-08.html + Wed, 08 Feb 2023 00:00:00 +0000
    - MonkeyUser: Steps to reproduce - https://www.monkeyuser.com/2017/steps-to-reproduce/ -

    the result of dumping all sensor data to the bug tracker

    - https://www.monkeyuser.com/2017/steps-to-reproduce/ - Tue, 11 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 26 January 2023 + https://www.jboss.org/posts/weekly-2023-01-26.html + + https://www.jboss.org/posts/weekly-2023-01-26.html + Thu, 26 Jan 2023 00:00:00 +0000
    - MonkeyUser: AdLitteram 20 - https://www.monkeyuser.com/2017/ad-litteram-20/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #20

    - https://www.monkeyuser.com/2017/ad-litteram-20/ - Fri, 07 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - December, 29th 2022 + https://www.jboss.org/posts/weekly-2022-12-29.html + + https://www.jboss.org/posts/weekly-2022-12-29.html + Thu, 29 Dec 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.26.0.Final for Eclipse 2022-12 + https://tools.jboss.org/blog/4.26.0.final.html + Happy to announce 4.26.0.Final build for Eclipse 2022-12. + + + Downloads available at JBoss Tools 4.26.0 Final. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Components removal + + As planned and communicated in a previous blog article, the following components have been + removed from the JBoss Tools distribution: + + + + + Forge + + + Livereload + + + Angular + + + JSDT + + + + + Please note that the following components are obsoleted so they are still part of this JBoss + Tools distribution but they will be removed from the next JBoss Tools release: + + + + + WebServices + + + JSF + + + Seam + + + Batch + + + Visual Page Editor + + + Central installation + + + + + + + OpenShift + + OpenShift Application Explorer view based on odo 3.x + + The OpenShift Application Explorer view based based on odo 2.x in previous versions of + JBoss Tools. It already leverages the power... + https://tools.jboss.org/blog/4.26.0.final.html + Tue, 20 Dec 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - December, 15th 2022 + https://www.jboss.org/posts/weekly-2022-12-15.html + + https://www.jboss.org/posts/weekly-2022-12-15.html + Thu, 15 Dec 2022 00:00:00 +0000 - MonkeyUser: Different Perspectives - https://www.monkeyuser.com/2017/different-perspectives/ -

    This applies for all routing frameworks

    - https://www.monkeyuser.com/2017/different-perspectives/ - Tue, 04 Apr 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - December, 1st 2022 + https://www.jboss.org/posts/weekly-2022-12-01.html + + https://www.jboss.org/posts/weekly-2022-12-01.html + Thu, 01 Dec 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2022-12M2 + https://tools.jboss.org/blog/4.26.0.am1.html + Happy to announce 4.26.0.AM1 (Developer Milestone 1) build for Eclipse 2022-12M2. + + + Downloads available at JBoss Tools 4.26.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Components Removal + + As previously announced, we removed some components in this release : + + + + + Forge + + + Livereload + + + Angular + + + JSDT + + + + + + + Hibernate Tools + + Runtime Provider Updates + + The Hibernate 6.1 runtime provider now incorporates Hibernate Core version 6.1.5.Final, Hibernate Ant version 6.1.5.Final and Hibernate Tools version 6.1.5.Final. + + + The Hibernate 5.6 runtime provider now incorporates Hibernate Core version 5.6.13.Final and Hibernate Tools version 5.6.13.Final. + + + The Hibernate 5.3 runtime provider now incorporates Hibernate Core version 5.3.28.Final and Hibernate Tools version 5.3.28.Final. + + + + + And more…​ + + You can find more noteworthy updates in on this... + https://tools.jboss.org/blog/4.26.0.am1.html + Wed, 23 Nov 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - November, 18 2022 + https://www.jboss.org/posts/weekly-2022-11-18.html + + https://www.jboss.org/posts/weekly-2022-11-18.html + Fri, 18 Nov 2022 00:00:00 +0000 + + + JBoss Tools: Deprecating and removing components from JBoss Tools + https://tools.jboss.org/blog/2022-11-09-component-lifetime-policy.html + JBoss Tools is a set of Eclipse plugins and features that can be installed from the + Eclipse marketplace. + + + It represents a huge code base and is divided into + bigger artificats that are called components. The component grouping of plugins and + features represents major and independant functionnality: there is one component for + OpenShift and another one for Quarkus for example. + + + So there are components that have been started a while ago as the JBoss Tools code base + is quite old and other ones that have been started quite recently (eg Quarkus). + + + So there are components that are related to a technology that is not anymore widely used + so the component... + https://tools.jboss.org/blog/2022-11-09-component-lifetime-policy.html + Wed, 09 Nov 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - November, 4 2022 + https://www.jboss.org/posts/weekly-2022-11-04.html + + https://www.jboss.org/posts/weekly-2022-11-04.html + Fri, 04 Nov 2022 00:00:00 +0000 - MonkeyUser: AdLitteram 19 - https://www.monkeyuser.com/2017/ad-litteram-19/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #19

    - https://www.monkeyuser.com/2017/ad-litteram-19/ - Fri, 31 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 20 October 2022 + https://www.jboss.org/posts/weekly-2022-10-20.html + + https://www.jboss.org/posts/weekly-2022-10-20.html + Thu, 20 Oct 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.25.0.Final for Eclipse 2022-09 + https://tools.jboss.org/blog/4.25.0.final.html + Happy to announce 4.25.0.Final build for Eclipse 2022-09. + + + Downloads available at JBoss Tools 4.25.0.Final. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Java 17 requirement + + Java 17 is now a minimum requirement to run JBoss Tools. + JBoss Tools continues to support running servers and applications with older Java versions. + + + + + Quarkus Tools + + Improvement to the new Quarkus project wizard + + The Quarkus extension ecosystem is composed of extensions that are part of the platform and the others. The Quarkus project wizard has + been extended to allow exclusion of extensions that are not part of the platform. + + + + + + + + + + Hibernate Tools + + New Runtime Provider + + A new runtime provider has been added for Hibernate... + https://tools.jboss.org/blog/4.25.0.final.html + Mon, 17 Oct 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 07 October 2022 + https://www.jboss.org/posts/weekly-2022-10-07.html + + https://www.jboss.org/posts/weekly-2022-10-07.html + Fri, 07 Oct 2022 00:00:00 +0000 + + + JBoss Tools: JBoss Tools for Eclipse 2022-09RC1 + https://tools.jboss.org/blog/4.25.0.am1.html + Happy to announce 4.25.0.AM1 (Developer Milestone 1) build for Eclipse 2022-09RC1. + + + Downloads available at JBoss Tools 4.25.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Java 17 requirement + + Java 17 is now a minimum requirement to run JBoss Tools. + JBoss Tools continues to support running servers and applications with older Java versions. + + + + + Quarkus Tools + + Improvement to the new Quarkus project wizard + + The Quarkus extension ecosystem is composed of extensions that are part of the platform and the others. The Quarkus project wizard has + been extended to allow exclusion of extensions that are not part of the platform. + + + + + + + + + + Hibernate Tools + + New Runtime Provider + + A new runtime provider has... + https://tools.jboss.org/blog/4.25.0.am1.html + Thu, 29 Sep 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 22 September 2022 + https://www.jboss.org/posts/weekly-2022-09-22.html + + https://www.jboss.org/posts/weekly-2022-09-22.html + Thu, 22 Sep 2022 00:00:00 +0000 - MonkeyUser: Product Stages - https://www.monkeyuser.com/2017/product-stages/ -

    At the release point the product already has a quite amount of tech debt

    - https://www.monkeyuser.com/2017/product-stages/ - Tue, 28 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 08 September 2022 + https://www.jboss.org/posts/weekly-2022-09-08.html + + https://www.jboss.org/posts/weekly-2022-09-08.html + Thu, 08 Sep 2022 00:00:00 +0000
    - MonkeyUser: AdLitteram 18 - https://www.monkeyuser.com/2017/ad-litteram-18/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #18

    - https://www.monkeyuser.com/2017/ad-litteram-18/ - Fri, 24 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 25 August 2022 + https://www.jboss.org/posts/weekly-2022-08-25.html + + https://www.jboss.org/posts/weekly-2022-08-25.html + Thu, 25 Aug 2022 00:00:00 +0000
    - MonkeyUser: Testing Vs Production Environment - https://www.monkeyuser.com/2017/testing-vs-prod-env/ -

    The production environment is full of strange people

    - https://www.monkeyuser.com/2017/testing-vs-prod-env/ - Tue, 21 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 11 August 2022 + https://www.jboss.org/posts/weekly-2022-08-11.html + + https://www.jboss.org/posts/weekly-2022-08-11.html + Thu, 11 Aug 2022 00:00:00 +0000
    - MonkeyUser: AdLitteram 17 - https://www.monkeyuser.com/2017/ad-litteram-17/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #17

    - https://www.monkeyuser.com/2017/ad-litteram-17/ - Fri, 17 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - July 28th 2022 + https://www.jboss.org/posts/weekly-2022-07-28.html + + https://www.jboss.org/posts/weekly-2022-07-28.html + Thu, 28 Jul 2022 00:00:00 +0000
    - MonkeyUser: Trivial Bug - https://www.monkeyuser.com/2017/trivial-bug/ -

    Sometimes a trivial bug has deeper roots

    - https://www.monkeyuser.com/2017/trivial-bug/ - Thu, 16 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 15 July 2022 + https://www.jboss.org/posts/weekly-2022-07-14.html + + https://www.jboss.org/posts/weekly-2022-07-14.html + Thu, 14 Jul 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2022-06 + https://tools.jboss.org/blog/4.24.0.final.html + Happy to announce 4.24.0.Final build for Eclipse 2022-06. + + + Downloads available at JBoss Tools 4.24.0.Final. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus Tools + + Improvement to the new Quarkus project wizard + + When the new Quarkus project wizard was initially design, there were a few Quarkus extensions so it was not difficult to find one from the + total list. Now that the Quarkus ecosystem is growing fast, it was difficult even of the extensions were grouped into categories. + + + In order to cope with this issue, the extensions and categories are now displayed in a tree (first level is categories, second level is + extensions). + + + This new tree... + https://tools.jboss.org/blog/4.24.0.final.html + Mon, 04 Jul 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - June 30th 2022 + https://www.jboss.org/posts/weekly-2022-06-30.html + + https://www.jboss.org/posts/weekly-2022-06-30.html + Thu, 30 Jun 2022 00:00:00 +0000 - MonkeyUser: Shared DB - https://www.monkeyuser.com/2017/shared-db/ -

    Sharing the DB with th QA Environment is not caring

    - https://www.monkeyuser.com/2017/shared-db/ - Tue, 14 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - June 16nd 2022 + https://www.jboss.org/posts/weekly-2022-06-16.html + + https://www.jboss.org/posts/weekly-2022-06-16.html + Thu, 16 Jun 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2022-06M2 + https://tools.jboss.org/blog/4.24.0.am1.html + Happy to announce 4.24.0.AM1 (Developer Milestone 1) build for Eclipse 2022-06M2. + + + Downloads available at JBoss Tools 4.24.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus Tools + + Improvement to the new Quarkus project wizard + + When the new Quarkus project wizard was initially design, there were a few Quarkus extensions so it was not difficult to find one from the + total list. Now that the Quarkus ecosystem is growing fast, it was difficult even of the extensions were grouped into categories. + + + In order to cope with this issue, the extensions and categories are now displayed in a tree (first level is categories, second... + https://tools.jboss.org/blog/4.24.0.am1.html + Tue, 14 Jun 2022 00:00:00 +0000 - MonkeyUser: AdLitteram 16 - https://www.monkeyuser.com/2017/ad-litteram-16/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    -
    Suggested by: @jaivalis
    - -

    AdLitteram #16

    - https://www.monkeyuser.com/2017/ad-litteram-16/ - Fri, 10 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - June 2nd 2022 + https://www.jboss.org/posts/weekly-2022-06-02.html + + https://www.jboss.org/posts/weekly-2022-06-02.html + Thu, 02 Jun 2022 00:00:00 +0000
    - MonkeyUser: Bugshots - https://www.monkeyuser.com/2017/bugshots/ -

    We know that tardigrade is not a bug

    - https://www.monkeyuser.com/2017/bugshots/ - Tue, 07 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - May 7th 2022 + https://www.jboss.org/posts/weekly-2022-05-07.html + + https://www.jboss.org/posts/weekly-2022-05-07.html + Sat, 07 May 2022 00:00:00 +0000
    - MonkeyUser: AdLitteram 15 - https://www.monkeyuser.com/2017/ad-litteram-15/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #15

    - https://www.monkeyuser.com/2017/ad-litteram-15/ - Fri, 03 Mar 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 22 April 2022 + https://www.jboss.org/posts/weekly-2022-04-22.html + + https://www.jboss.org/posts/weekly-2022-04-22.html + Fri, 22 Apr 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2022-03 + https://tools.jboss.org/blog/4.23.0.final.html + JBoss Tools 4.23.0 + for Eclipse 2022-03 is here waiting for you. Check it out! + + + We highly recommand to download or update to this latest version. + + + + + Note for Red Hat CodeReady Studio users + + + The Red Hat CodeReady Studio product has reached end of life. The last release for the product was 12.21.3.GA. So there is no equivalent version of + Red Hat CodeReady Studio for this version of JBoss Tools. Existing users of Red Hat CodeReady Studio can upgrade to this version of JBoss Tools. + + + For more information, see this article + + + + + Installation + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.23 (2022-03)... + https://tools.jboss.org/blog/4.23.0.final.html + Fri, 15 Apr 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 07 April 2022 + https://www.jboss.org/posts/weekly-2022-04-07.html + + https://www.jboss.org/posts/weekly-2022-04-07.html + Thu, 07 Apr 2022 00:00:00 +0000 - MonkeyUser: SHA-1 Collision - https://www.monkeyuser.com/2017/sha-1-collision/ -

    SHA-1 Collision

    - https://www.monkeyuser.com/2017/sha-1-collision/ - Tue, 28 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 25 March 2022 + https://www.jboss.org/posts/weekly-2022-03-25.html + + https://www.jboss.org/posts/weekly-2022-03-25.html + Fri, 25 Mar 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools for Eclipse 2022-03RC1 + https://tools.jboss.org/blog/4.23.0.am1.html + Happy to announce 4.23.0.AM1 (Developer Milestone 1) build for Eclipse 2022-03RC1. + + + Downloads available at JBoss Tools 4.23.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Hibernate Tools + + Hibernate Runtime Provider Updates + + A number of additions and updates have been performed on the available Hibernate runtime providers. + + + Runtime Provider Updates + + The Hibernate 6.0 runtime provider (Preview) now incorporates Hibernate Core version 6.0.0.CR1 and Hibernate Tools version 6.0.0.CR1. + + + The Hibernate 5.6 runtime provider now incorporates Hibernate Core version 5.6.5.Final and Hibernate Tools version 5.6.5.Final. + + + + + + And more…​ + + You can find more noteworthy updates in on this page. + + + Enjoy! + + + Jeff Maury + + + + ... + https://tools.jboss.org/blog/4.23.0.am1.html + Thu, 24 Mar 2022 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 11 March 2022 + https://www.jboss.org/posts/weekly-2022-03-11.html + + https://www.jboss.org/posts/weekly-2022-03-11.html + Fri, 11 Mar 2022 00:00:00 +0000 - MonkeyUser: Static vs. Dynamic Linking - https://www.monkeyuser.com/2017/static-vs-dynamic-linking/ -

    Static vs. Dynamic Linking

    - https://www.monkeyuser.com/2017/static-vs-dynamic-linking/ - Mon, 27 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - February 25th 2022 + https://www.jboss.org/posts/weekly-2022-02-25.html + + https://www.jboss.org/posts/weekly-2022-02-25.html + Fri, 25 Feb 2022 00:00:00 +0000
    - MonkeyUser: AdLitteram 14 - https://www.monkeyuser.com/2017/ad-litteram-14/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #14

    - https://www.monkeyuser.com/2017/ad-litteram-14/ - Fri, 24 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - February 10th 2022 + https://www.jboss.org/posts/weekly-2022-02-10.html + + https://www.jboss.org/posts/weekly-2022-02-10.html + Thu, 10 Feb 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-09 + https://tools.jboss.org/blog/12.21.3.ga.html + JBoss Tools 4.21.3 and + Red Hat CodeReady Studio 12.21.3 + for Eclipse 2021-09 are here waiting for you. Check it out! + + + We’ve released new versions of JBoss Tools and Red Hat CodeReady Studio that switches the version of Apache Log4j to 2.17.1. + + + We highly recommand to download or update to this latest version. + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.21 (2021-09) but we recommend + using the latest Eclipse 4.21 2021-09... + https://tools.jboss.org/blog/12.21.3.ga.html + Tue, 08 Feb 2022 00:00:00 +0000 - MonkeyUser: Tales of RegEx: #42 - https://www.monkeyuser.com/2017/tales-of-regex-42/ -

    Tales of RegEx: #42

    - https://www.monkeyuser.com/2017/tales-of-regex-42/ - Tue, 21 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - January 27th 2022 + https://www.jboss.org/posts/weekly-2022-01-27.html + + https://www.jboss.org/posts/weekly-2022-01-27.html + Thu, 27 Jan 2022 00:00:00 +0000
    - MonkeyUser: AdLitteram 13 - https://www.monkeyuser.com/2017/ad-litteram-13/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #13

    - https://www.monkeyuser.com/2017/ad-litteram-13/ - Fri, 17 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - January 13th 2022 + https://www.jboss.org/posts/weekly-2022-01-13.html + + https://www.jboss.org/posts/weekly-2022-01-13.html + Thu, 13 Jan 2022 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-09 security fix release for Apache Log4j CVE-2021-45105 and CVE-2021-44832 + https://tools.jboss.org/blog/12.21.2.ga.html + Apache Log4j CVE-2021-44832 statement + + + A remote code execution vulnerability in the Apache Log4j 2 Java library when using a JDBC Appender with a JNDI LDAP data source URI (see https://logging.apache.org/log4j/2.x/index.html#News or https://nvd.nist.gov/vuln/detail/CVE-2021-44832) has been releaved to the public audience on Tuesday Dec 28th, 2021. + + + + + Apache Log4j CVE-2021-45105 statement + + + A denial of service vulnerability in the Apache Log4j 2 Java library (see https://logging.apache.org/log4j/2.x/index.html#News or https://nvd.nist.gov/vuln/detail/CVE-2021-45105) has been releaved to the public audience on Thursday Dec 30th, 2021. + + + We’ve released new versions of JBoss Tools and Red Hat CodeReady Studio that switches the version of Apache Log4j to 2.17.1. + + + We highly recommand to download or update to... + https://tools.jboss.org/blog/12.21.2.ga.html + Thu, 13 Jan 2022 00:00:00 +0000 + + + JBoss Tools: JBoss Tools 4.21.2.AM1 for Eclipse 2021-09 + https://tools.jboss.org/blog/4.21.2.am1.html + Happy to announce 4.21.2.AM1 (Developer Milestone 1) build for Eclipse 2021-09. + + + Downloads available at JBoss Tools 4.21.2.AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus Tools + + + + + + Quarkus stream selection in the new Quarkus project wizard + + + When a new Quarkus project/module is to be generated, it is now possible to select the Quarkus stream (see this article) on which the generated application will be based on. + + + By default, the recommended (latest release) will be selected but you can choose another one: + + + + + + + + + + Enhanced code completion in Java files + + + When you want to define a fallback method thanks to the @Fallback annotation from MicroProfile Fault Tolerance,... + https://tools.jboss.org/blog/4.21.2.am1.html + Wed, 22 Dec 2021 00:00:00 +0000 - MonkeyUser: DevOps Life - https://www.monkeyuser.com/2017/devops-life/ -

    DevOps Life

    - https://www.monkeyuser.com/2017/devops-life/ - Thu, 16 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 20 December 2021 + https://www.jboss.org/posts/weekly-2021-12-20.html + + https://www.jboss.org/posts/weekly-2021-12-20.html + Mon, 20 Dec 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-09 security fix release for Apache Log4j CVE-2021-44228 + https://tools.jboss.org/blog/12.21.1.ga.html + Apache Log4j CVE-2021-44228 statement + + + A remote code execution vulnerability in the Apache Log4j 2 Java library dubbed Log4Shell (see https://logging.apache.org/log4j/2.x/index.html#News or https://nvd.nist.gov/vuln/detail/CVE-2021-44228) has been releaved to the public audience on Friday Dec 9th, 2021. + + + We’ve released new versions of JBoss Tools and Red Hat CodeReady Studio that switches the version of Apache Log4j to 2.16.0. + + + We highly recommand to download or update to this latest version. + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This... + https://tools.jboss.org/blog/12.21.1.ga.html + Thu, 16 Dec 2021 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 2 December 2021 + https://www.jboss.org/posts/weekly-2021-12-02.html + + https://www.jboss.org/posts/weekly-2021-12-02.html + Thu, 02 Dec 2021 00:00:00 +0000 - MonkeyUser: Hotfix - https://www.monkeyuser.com/2017/hotfix/ -

    Hotfix

    - https://www.monkeyuser.com/2017/hotfix/ - Tue, 14 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 18 November 2021 + https://www.jboss.org/posts/weekly-2021-11-18.html + + https://www.jboss.org/posts/weekly-2021-11-18.html + Thu, 18 Nov 2021 00:00:00 +0000
    - MonkeyUser: AdLitteram 12 - https://www.monkeyuser.com/2017/ad-litteram-12/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #12

    - https://www.monkeyuser.com/2017/ad-litteram-12/ - Fri, 10 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 04 November 2021 + https://www.jboss.org/posts/weekly-2021-11-04.html + + https://www.jboss.org/posts/weekly-2021-11-04.html + Thu, 04 Nov 2021 00:00:00 +0000
    - MonkeyUser: Programming languages as humans - https://www.monkeyuser.com/2017/programming-languages-as-humans/ -

    Programming languages as humans

    - https://www.monkeyuser.com/2017/programming-languages-as-humans/ - Tue, 07 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 21 October 2021 + https://www.jboss.org/posts/weekly-2021-10-21.html + + https://www.jboss.org/posts/weekly-2021-10-21.html + Thu, 21 Oct 2021 00:00:00 +0000
    - MonkeyUser: AdLitteram 11 - https://www.monkeyuser.com/2017/ad-litteram-11/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #11

    - https://www.monkeyuser.com/2017/ad-litteram-11/ - Thu, 02 Feb 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 08 October 2021 + https://www.jboss.org/posts/weekly-2021-10-08.html + + https://www.jboss.org/posts/weekly-2021-10-08.html + Fri, 08 Oct 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-09 + https://tools.jboss.org/blog/12.21.0.ga.html + JBoss Tools 4.21.0 and + Red Hat CodeReady Studio 12.21.0 + for Eclipse 2021-09 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.21 (2021-09) but we recommend + using the latest Eclipse 4.21 2021-09 JEE Bundle + + + since then you get most of the dependencies preinstalled. + + + + + + + + + + Java11 is now required to run Red Hat Developer Studio or JBoss Tools (this is a requirement from Eclipse 4.17). So... + https://tools.jboss.org/blog/12.21.0.ga.html + Tue, 05 Oct 2021 00:00:00 +0000 - MonkeyUser: Technically not a bug - https://www.monkeyuser.com/2017/technically-not-a-bug/ -

    Technically not a bug

    - https://www.monkeyuser.com/2017/technically-not-a-bug/ - Tue, 31 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 23 September 2021 + https://www.jboss.org/posts/weekly-2021-09-23.html + + https://www.jboss.org/posts/weekly-2021-09-23.html + Thu, 23 Sep 2021 00:00:00 +0000
    - MonkeyUser: AdLitteram 10 - https://www.monkeyuser.com/2017/ad-litteram-10/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #10

    - https://www.monkeyuser.com/2017/ad-litteram-10/ - Fri, 27 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 10 September 2021 + https://www.jboss.org/posts/weekly-2021-09-10.html + + https://www.jboss.org/posts/weekly-2021-09-10.html + Fri, 10 Sep 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.21.0.AM1 for Eclipse 2021-09 + https://tools.jboss.org/blog/4.21.0.am1.html + Happy to announce 4.21.0.AM1 (Developer Milestone 1) build for Eclipse 2021-09. + + + Downloads available at JBoss Tools 4.21.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + OpenShift + + Operator based services + + When developing cloud native applications on OpenShift, developer may need to + launch services (databases, messaging system,…​) that the application under + development may need to connect to. The OpenShift tooling allowed to launch such + services but it was based on the service catalog which is not available anymore on OpenShift 4. + + + The new feature is based on operators which is the devops way of installing and + managing software on Kubernetes clusters. So when you want to launch... + https://tools.jboss.org/blog/4.21.0.am1.html + Tue, 07 Sep 2021 00:00:00 +0000 - MonkeyUser: Vim vs Emacs - https://www.monkeyuser.com/2017/vim-vs-emacs/ -

    Vim vs Emacs

    - -

    Special thanks to Fabian for suggesting the topic for this comic.

    - https://www.monkeyuser.com/2017/vim-vs-emacs/ - Tue, 24 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 27 August 2021 + https://www.jboss.org/posts/weekly-2021-08-27.html + + https://www.jboss.org/posts/weekly-2021-08-27.html + Fri, 27 Aug 2021 00:00:00 +0000
    - MonkeyUser: AdLitteram 9 - https://www.monkeyuser.com/2017/ad-litteram-9/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #9

    - https://www.monkeyuser.com/2017/ad-litteram-9/ - Fri, 20 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 11 August 2021 + https://www.jboss.org/posts/weekly-2021-08-11.html + + https://www.jboss.org/posts/weekly-2021-08-11.html + Wed, 11 Aug 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-03 + https://tools.jboss.org/blog/12.19.1.ga.html + JBoss Tools 4.19.1 and + Red Hat CodeReady Studio 12.19.1 + for Eclipse 2021-03 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.19 (2021-03) but we recommend + using the latest Eclipse 4.19 2021-03 JEE Bundle + + + since then you get most of the dependencies preinstalled. + + + + + + + + + + Java11 is now required to run Red Hat Developer Studio or JBoss Tools (this is a requirement from Eclipse 4.17). So... + https://tools.jboss.org/blog/12.19.1.ga.html + Fri, 16 Jul 2021 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 14 July 2021 + https://www.jboss.org/posts/weekly-2021-07-14.html + + https://www.jboss.org/posts/weekly-2021-07-14.html + Wed, 14 Jul 2021 00:00:00 +0000 - MonkeyUser: HTTP Status Codes - Community Suggestions - https://www.monkeyuser.com/2017/http-status-codes-community/ -

    HTTP Status Codes - Community Suggestions

    - -

    var thanks = [‘Jonathan Cary’, ‘Микола Махін’, ‘Maksim Tsvetovat’, ‘Shane Hutter’, ‘/u/GeneReddit123’, ‘Bram Patelski’, ‘Reddit’, ‘Twitter’, ‘Facebook’]

    - -

    Special thanks to: NixCraft ](https://www.facebook.com/nixcraft/) [

    - https://www.monkeyuser.com/2017/http-status-codes-community/ - Thu, 19 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 01 July 2021 + https://www.jboss.org/posts/weekly-2021-07-01.html + + https://www.jboss.org/posts/weekly-2021-07-01.html + Thu, 01 Jul 2021 00:00:00 +0000
    - MonkeyUser: Security - https://www.monkeyuser.com/2017/security/ -

    Security

    - https://www.monkeyuser.com/2017/security/ - Tue, 17 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 18 June 2021 + https://www.jboss.org/posts/weekly-2021-06-18.html + + https://www.jboss.org/posts/weekly-2021-06-18.html + Fri, 18 Jun 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.19.1.AM1 for Eclipse 2021-03 + https://tools.jboss.org/blog/4.19.1.am1.html + Happy to announce 4.19.1.AM1 (Developer Milestone 1) build for Eclipse 2021-03. + + + Downloads available at JBoss Tools 4.19.1 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + OpenShift + + Improved OpenShift Application explorer + + When the OpenShift cluster has no applications or projects, user is required to create them. However, + it may not be obvious for the user that the corresponding function is available from a sub menu of the + New context menu. + + + So now, a link will be provided within the tree with an explanation message. + + + If no projects are available, user will be guided to create one: + + + + + + + + If no applications are available in a project, user will... + https://tools.jboss.org/blog/4.19.1.am1.html + Tue, 15 Jun 2021 00:00:00 +0000 - MonkeyUser: AdLitteram 8 - https://www.monkeyuser.com/2017/ad-litteram-8/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #8

    - https://www.monkeyuser.com/2017/ad-litteram-8/ - Fri, 13 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 31 May 2021 + https://www.jboss.org/posts/weekly-2021-05-31.html + + https://www.jboss.org/posts/weekly-2021-05-31.html + Mon, 31 May 2021 00:00:00 +0000
    - MonkeyUser: HTTP Status Codes - https://www.monkeyuser.com/2017/http-status-codes/ -

    HTTP Status Codes

    - -

    HTTP Status Codes - 418 Thanks Lionel -HTTP Status Codes - 404 Thanks /u/spartaboy -HTTP Status Codes - 429 Thanks @brampatelski -HTTP Status Codes - 410 Thanks @brampatelski

    - https://www.monkeyuser.com/2017/http-status-codes/ - Tue, 10 Jan 2017 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 26 April 2021 + https://www.jboss.org/posts/weekly-2021-04-26.html + + https://www.jboss.org/posts/weekly-2021-04-26.html + Mon, 26 Apr 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2021-03 + https://tools.jboss.org/blog/12.19.0.ga.html + JBoss Tools 4.19.0 and + Red Hat CodeReady Studio 12.19 + for Eclipse 2021-03 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.19 (2021-03) but we recommend + using the latest Eclipse 4.19 2021-03 JEE Bundle + since then you get most of the dependencies preinstalled. + + + + + + + + + + Java11 is now required to run Red Hat Developer Studio or JBoss Tools (this is a requirement from Eclipse 4.17). So... + https://tools.jboss.org/blog/12.19.0.ga.html + Tue, 20 Apr 2021 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 8 April 2021 + https://www.jboss.org/posts/weekly-2021-04-08.html + + https://www.jboss.org/posts/weekly-2021-04-08.html + Thu, 08 Apr 2021 00:00:00 +0000 - MonkeyUser: MonkeyUser in 2016 - https://www.monkeyuser.com/2016/monkeyuser-in-2016/ -

    MonkeyUser in 2016

    - https://www.monkeyuser.com/2016/monkeyuser-in-2016/ - Fri, 23 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 25 March 2021 + https://www.jboss.org/posts/weekly-2021-03-25.html + + https://www.jboss.org/posts/weekly-2021-03-25.html + Thu, 25 Mar 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.19.0.AM1 for Eclipse 2021-03 + https://tools.jboss.org/blog/4.19.0.am1.html + Happy to announce 4.19.0.AM1 (Developer Milestone 1) build for Eclipse 2021-03. + + + Downloads available at JBoss Tools 4.19.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + OpenShift + + Browser based login to an OpenShift cluster + + When it comes to login to a cluster, OpenShift Tools supported two different authentication mechanisms: + + + + + user/password + + + token + + + + + The drawback is that it does not cover clusters where a more enhanced and modern authentication infrastructure is in place. So it is now possible to login to the cluster through an embedded web browser. + + + In order to use it, go to the Login context menu from the Application Explorer view: + + + + + + + + Click on the Retrieve... + https://tools.jboss.org/blog/4.19.0.am1.html + Wed, 24 Mar 2021 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 11 March 2021 + https://www.jboss.org/posts/weekly-2021-03-11.html + + https://www.jboss.org/posts/weekly-2021-03-11.html + Thu, 11 Mar 2021 00:00:00 +0000 - MonkeyUser: Decision Boundary - https://www.monkeyuser.com/2016/decision-boundary/ -

    Decision Boundary

    - https://www.monkeyuser.com/2016/decision-boundary/ - Thu, 22 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 25 February 2021 + https://www.jboss.org/posts/weekly-2021-02-25.html + + https://www.jboss.org/posts/weekly-2021-02-25.html + Thu, 25 Feb 2021 00:00:00 +0000
    - MonkeyUser: Acquisition - https://www.monkeyuser.com/2016/acquisition/ -
    Thanks @i_am_r0by
    - -

    Acquisition

    - https://www.monkeyuser.com/2016/acquisition/ - Tue, 20 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 11 February 2021 + https://www.jboss.org/posts/weekly-2021-02-11.html + + https://www.jboss.org/posts/weekly-2021-02-11.html + Thu, 11 Feb 2021 00:00:00 +0000
    - MonkeyUser: AdLitteram 7 - https://www.monkeyuser.com/2016/ad-litteram-7/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #7

    - https://www.monkeyuser.com/2016/ad-litteram-7/ - Fri, 16 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 28 January 2021 + https://www.jboss.org/posts/weekly-2021-01-28.html + + https://www.jboss.org/posts/weekly-2021-01-28.html + Thu, 28 Jan 2021 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2020-09 + https://tools.jboss.org/blog/12.18.0.ga.html + JBoss Tools 4.18.0 and + Red Hat CodeReady Studio 12.18 + for Eclipse 2020-09 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.17 (2020-09) but we recommend + using the latest Eclipse 4.17 2020-09 JEE Bundle + since then you get most of the dependencies preinstalled. + + + + + + + + + + Java11 is now required to run Red Hat Developer Studio or JBoss Tools (this is a requirement from Eclipse 4.17). So... + https://tools.jboss.org/blog/12.18.0.ga.html + Tue, 26 Jan 2021 00:00:00 +0000 - MonkeyUser: If Buildings Were Built Like Software - https://www.monkeyuser.com/2016/buildings-built-like-software/ -

    If Buildings Were Built Like Software

    - https://www.monkeyuser.com/2016/buildings-built-like-software/ - Thu, 15 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss: 14 January 2021 + https://www.jboss.org/posts/weekly-2021-01-14.html + + https://www.jboss.org/posts/weekly-2021-01-14.html + Thu, 14 Jan 2021 00:00:00 +0000
    - MonkeyUser: Development Platforms - https://www.monkeyuser.com/2016/development-platforms/ -

    Development Platforms

    - https://www.monkeyuser.com/2016/development-platforms/ - Tue, 13 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss: 25 December 2020 + https://www.jboss.org/posts/weekly-2020-12-25.html + + https://www.jboss.org/posts/weekly-2020-12-25.html + Fri, 25 Dec 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.18.0.AM1 for Eclipse 2020-09 + https://tools.jboss.org/blog/4.18.0.am1.html + Happy to announce 4.18.0.AM1 (Developer Milestone 1) build for Eclipse 2020-09. + + + Downloads available at JBoss Tools 4.18.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus + + Support for codestarts in New Quarkus project wizard + + code.quarkus.io has added a new option codestart that allows extension that support + this new feature to contribute sample code in the generated project. It is enabled + by default and is accessible from the second step in the wizard: + + + + + + + + + + OpenShift + + Devfile based deployments + + The Application Explorer view is now based on odo 2.x, which allows deployments + to be based on devfile (developer oriented manifest file). The components from + the default odo registry are listed... + https://tools.jboss.org/blog/4.18.0.am1.html + Tue, 22 Dec 2020 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 17 December 2020 + https://www.jboss.org/posts/weekly-2020-12-17.html + + https://www.jboss.org/posts/weekly-2020-12-17.html + Thu, 17 Dec 2020 00:00:00 +0000 - MonkeyUser: AdLitteram 6 - https://www.monkeyuser.com/2016/ad-litteram-6/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #6

    - https://www.monkeyuser.com/2016/ad-litteram-6/ - Fri, 09 Dec 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 16 September 2020 + https://www.jboss.org/posts/weekly-2020-12-03.html + + https://www.jboss.org/posts/weekly-2020-12-03.html + Thu, 03 Dec 2020 00:00:00 +0000
    - MonkeyUser: Targeted Branding - https://www.monkeyuser.com/2016/targeted-branding/ -

    Targeted Branding

    - https://www.monkeyuser.com/2016/targeted-branding/ - Thu, 08 Dec 2016 00:00:00 +0000 + JBoss Blogs: This week in JBoss - 20th November 2020 + https://www.jboss.org/posts/weekly-2020-11-20.html + + https://www.jboss.org/posts/weekly-2020-11-20.html + Fri, 20 Nov 2020 00:00:00 +0000
    - MonkeyUser: Developer Productivity - https://www.monkeyuser.com/2016/developer-productivity/ -

    Developer Productivity

    - https://www.monkeyuser.com/2016/developer-productivity/ - Tue, 06 Dec 2016 00:00:00 +0000 + JBoss Blogs: This week in JBoss - 6th November 2020 + https://www.jboss.org/posts/weekly-2020-11-06.html + + https://www.jboss.org/posts/weekly-2020-11-06.html + Fri, 06 Nov 2020 00:00:00 +0000
    - MonkeyUser: AdLitteram 5 - https://www.monkeyuser.com/2016/ad-litteram-5/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #5

    - https://www.monkeyuser.com/2016/ad-litteram-5/ - Fri, 02 Dec 2016 00:00:00 +0000 + JBoss Blogs: This week in JBoss - 23rd October 2020 + https://www.jboss.org/posts/weekly-2020-10-23.html + + https://www.jboss.org/posts/weekly-2020-10-23.html + Fri, 23 Oct 2020 00:00:00 +0000
    - MonkeyUser: Everysoft Corporation - https://www.monkeyuser.com/2016/everysoft-inc/ -

    Everysoft Corporation

    - https://www.monkeyuser.com/2016/everysoft-inc/ - Thu, 01 Dec 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2020-09 + https://tools.jboss.org/blog/12.17.0.ga.html + JBoss Tools 4.17.0 and + Red Hat CodeReady Studio 12.17 + for Eclipse 2020-09 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.17 (2020-09) but we recommend + using the latest Eclipse 4.17 2020-06 JEE Bundle + since then you get most of the dependencies preinstalled. + + + + + + + + + + Java11 is now required to run Red Hat Developer Studio or JBoss Tools (this is a requirement from Eclipse 4.17). So... + https://tools.jboss.org/blog/12.17.0.ga.html + Tue, 13 Oct 2020 00:00:00 +0000 +
    + + JBoss Blogs: This week in JBoss - 12th October 2020 + https://www.jboss.org/posts/weekly-2020-10-12.html + + https://www.jboss.org/posts/weekly-2020-10-12.html + Mon, 12 Oct 2020 00:00:00 +0000 - MonkeyUser: CSS Layout - https://www.monkeyuser.com/2016/css-layout/ -

    CSS Layout

    - https://www.monkeyuser.com/2016/css-layout/ - Tue, 29 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 30 September 2020 + https://www.jboss.org/posts/weekly-2020-09-30.html + + https://www.jboss.org/posts/weekly-2020-09-30.html + Wed, 30 Sep 2020 00:00:00 +0000
    - MonkeyUser: AdLitteram 4 - https://www.monkeyuser.com/2016/ad-litteram-4/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #4

    - https://www.monkeyuser.com/2016/ad-litteram-4/ - Fri, 25 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 16 September 2020 + https://www.jboss.org/posts/weekly-2020-09-16.html + + https://www.jboss.org/posts/weekly-2020-09-16.html + Wed, 16 Sep 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.17.0.AM1 for Eclipse 2020-09 + https://tools.jboss.org/blog/4.17.0.am1.html + Happy to announce 4.17.0.AM1 (Developer Milestone 1) build for Eclipse 2020-09. + + + Downloads available at JBoss Tools 4.17.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus + + Support for YAML configuration file + + Quarkus supports configuration through YAML format. For more information, + see the Quarkus documentation + + + In order to use it, follow the steps: + + + + + create a Quarkus project using the new Quarkus wizard + + + create a new application.yaml or application.yml next to the application.properties in src/main/resources + + + + + The editor will open and you will get content assist and syntax validation. + + + + + Hibernate Tools + + A number of additions and updates have been performed on the available Hibernate runtime providers. + + + New Runtime Provider + + A new... + https://tools.jboss.org/blog/4.17.0.am1.html + Tue, 15 Sep 2020 00:00:00 +0000 + + + JBoss Blogs: JBoss Weekly Editorial 27 August 2020 + https://www.jboss.org/posts/weekly-2020-08-27.html + + https://www.jboss.org/posts/weekly-2020-08-27.html + Thu, 27 Aug 2020 00:00:00 +0000 - MonkeyUser: Retrospective Accesories - https://www.monkeyuser.com/2016/retrospective-accesories/ -

    Retrospective Accesories

    - https://www.monkeyuser.com/2016/retrospective-accesories/ - Thu, 24 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 13 August 2020 + https://www.jboss.org/posts/weekly-2020-08-13.html + + https://www.jboss.org/posts/weekly-2020-08-13.html + Thu, 13 Aug 2020 00:00:00 +0000
    - MonkeyUser: Requirements vs. Implementation - https://www.monkeyuser.com/2016/requirements-vs-implementation/ -

    Requirements vs. Implementation

    - https://www.monkeyuser.com/2016/requirements-vs-implementation/ - Tue, 22 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 30th July 2020: No rest for the JBoss community! + https://www.jboss.org/posts/weekly-2020-07-30.html + + https://www.jboss.org/posts/weekly-2020-07-30.html + Thu, 30 Jul 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2020-06 + https://tools.jboss.org/blog/12.16.0.ga.html + JBoss Tools 4.16.0 and + Red Hat CodeReady Studio 12.16 + for Eclipse 2020-06 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.16 (2020-06) but we recommend + using the latest Eclipse 4.16 2020-06 JEE Bundle + since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or "Red Hat CodeReady... + https://tools.jboss.org/blog/12.16.0.ga.html + Tue, 21 Jul 2020 00:00:00 +0000 - MonkeyUser: AdLitteram 3 - https://www.monkeyuser.com/2016/ad-litteram-3/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #3

    - https://www.monkeyuser.com/2016/ad-litteram-3/ - Fri, 18 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss - 9 July 2020: Over the (j)cliff! + https://www.jboss.org/posts/weekly-2020-07-09.html + + https://www.jboss.org/posts/weekly-2020-07-09.html + Thu, 09 Jul 2020 00:00:00 +0000
    - MonkeyUser: Testing: Hammering Nails - https://www.monkeyuser.com/2016/testing-hammering-nails/ -

    Testing: Hammering Nails

    - https://www.monkeyuser.com/2016/testing-hammering-nails/ - Thu, 17 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss: 26 June 2020 + https://www.jboss.org/posts/weekly-2020-06-26.html + + https://www.jboss.org/posts/weekly-2020-06-26.html + Fri, 26 Jun 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.16.0.AM1 for Eclipse 2020-06 + https://tools.jboss.org/blog/4.16.0.am1.html + Happy to announce 4.16.0.AM1 (Developer Milestone 1) build for Eclipse 2020-06. + + + Downloads available at JBoss Tools 4.16.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + OpenShift + + Secure URL support + + It is now possible to create secured URLs in the Application Explorer View. + If you select this option, the created URL will be accessible through https. + + + + + + + + When such an URL is displayed in the tree, the icon now has a secure lock indicator. + + + + + + + + + + Hibernate Tools + + Hibernate Runtime Provider Updates + + A number of additions and updates have been performed on the available Hibernate runtime providers. + + + + Runtime Provider Updates + + The Hibernate 5.4 runtime provider now incorporates Hibernate Core version... + https://tools.jboss.org/blog/4.16.0.am1.html + Wed, 24 Jun 2020 00:00:00 +0000 + + + JBoss Blogs: This Week in JBoss - 11 June 2020 + https://www.jboss.org/posts/weekly-2020-06-11.html + + https://www.jboss.org/posts/weekly-2020-06-11.html + Thu, 11 Jun 2020 00:00:00 +0000 - MonkeyUser: Division - https://www.monkeyuser.com/2016/division/ -

    Division

    - https://www.monkeyuser.com/2016/division/ - Tue, 15 Nov 2016 00:00:00 +0000 + JBoss Blogs: JBoss Weekly Editorial 29 May 2020 + https://www.jboss.org/posts/weekly-2020-05-29.html + + https://www.jboss.org/posts/weekly-2020-05-29.html + Fri, 29 May 2020 00:00:00 +0000
    - MonkeyUser: AdLitteram 2 - https://www.monkeyuser.com/2016/ad-litteram-2/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image. (use the commenting section if you think you know the answer)

    - -

    AdLitteram #2

    - https://www.monkeyuser.com/2016/ad-litteram-2/ - Fri, 11 Nov 2016 00:00:00 +0000 + JBoss Blogs: JBoss Weekly Editorial 14 May 2020 + https://www.jboss.org/posts/weekly-2020-05-14.html + + https://www.jboss.org/posts/weekly-2020-05-14.html + Thu, 14 May 2020 00:00:00 +0000
    - MonkeyUser: Battle of the JS frameworks in 2016 - https://www.monkeyuser.com/2016/battle-of-js-frameworks/ -

    JS Frameworks battle: For recruiters

    - https://www.monkeyuser.com/2016/battle-of-js-frameworks/ - Tue, 08 Nov 2016 00:00:00 +0000 + JBoss Blogs: This Week in JBoss: 1 May 2020 + https://www.jboss.org/posts/weekly-2020-05-01.html + + https://www.jboss.org/posts/weekly-2020-05-01.html + Fri, 01 May 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2020-03 + https://tools.jboss.org/blog/12.15.0.ga.html + JBoss Tools 4.15.0 and + Red Hat CodeReady Studio 12.15 + for Eclipse 2020-03 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.15 (2020-03) but we recommend + using the latest Eclipse 4.15 2020-03 JEE Bundle + since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or "Red Hat CodeReady... + https://tools.jboss.org/blog/12.15.0.ga.html + Tue, 28 Apr 2020 00:00:00 +0000 - MonkeyUser: Open Source: Expectation vs. Reality - https://www.monkeyuser.com/2016/open-source-expectation-vs-reality/ -

    Open Source: Expectation vs. Reality

    - https://www.monkeyuser.com/2016/open-source-expectation-vs-reality/ - Tue, 08 Nov 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools 4.15.0.AM1 for Eclipse 2020-03 + https://tools.jboss.org/blog/4.15.0.am1.html + Happy to announce 4.15.0.AM1 (Developer Milestone 1) build for Eclipse 2020-03. + + + Downloads available at JBoss Tools 4.15.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Please note that a regression has been found in the Fuse Tools. This is going + to be fixed for the release (4.15.0.Final). Please find more information in this + ticket. + + + Quarkus Tools + + Language support for Kubernetes, Openshift, S2i and Docker properties + + There is now completion, hover, documentation and validation for kubernetes., + openshift., s2i., docker. properties + + + + + + + + Enter kubernetes prefix: + + + + + + + + Enter openshift prefix: + + + + + + + + Enter s2i prefix: + + + + + + + + + Language support for MicroProfile REST Client properties + + Likewise, there is now completion, hover, documentation and validation for the + MicroProfile properties from REST... + https://tools.jboss.org/blog/4.15.0.am1.html + Tue, 31 Mar 2020 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2019-12 + https://tools.jboss.org/blog/12.14.0.ga.html + JBoss Tools 4.14.0 and + Red Hat CodeReady Studio 12.14 + for Eclipse 2019-12 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.14 (2019-12) but we recommend + using the latest Eclipse 4.14 2019-12 JEE Bundle + since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or "Red Hat CodeReady... + https://tools.jboss.org/blog/12.14.0.ga.html + Tue, 17 Mar 2020 00:00:00 +0000 - MonkeyUser: AdLitteram 1 - https://www.monkeyuser.com/2016/ad-litteram-1/ -

    Welcome to AdLitteram. The challenge is to guess the programming term that is represented in the image.

    - -

    AdLitteram #1

    - https://www.monkeyuser.com/2016/ad-litteram-1/ - Fri, 04 Nov 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools 4.14.0.AM1 for Eclipse 2019-12 + https://tools.jboss.org/blog/4.14.0.am1.html + Happy to announce 4.14.0.AM1 (Developer Milestone 1) build for Eclipse 2019-12. + + + Downloads available at JBoss Tools 4.14.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Quarkus Tools + + Quarkus Tools added to JBoss Tools + + A new component has been added to JBoss Tools. Quarkus Tools. It aims at providing tools + for Quarkus applications developers. The initial set of features is: + + + + + Wizard for creating Quarkus projects based on code.quarkus.io + + + Code completion and syntax validation on application.properties + + + Launching your Quarkus application in Run/Debug mode + + + + + Quarkus project creation wizard + + A new wizard has been added to create a new Quarkus application project in your workspace. + In order to launch it, first... + https://tools.jboss.org/blog/4.14.0.am1.html + Tue, 28 Jan 2020 00:00:00 +0000
    - MonkeyUser: Java vs. Javascript: For recruiters - https://www.monkeyuser.com/2016/java-vs-javascript-recruiters/ -

    Java vs Javascript: For recruiters

    - https://www.monkeyuser.com/2016/java-vs-javascript-recruiters/ - Thu, 03 Nov 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2019-09 + https://tools.jboss.org/blog/12.13.0.ga.html + JBoss Tools 4.13.0 and Red Hat CodeReady Studio 12.13 for Eclipse 2019-09 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.13 (2019-09) but we recommend + using the latest Eclipse 4.13 2019-09 JEE Bundle since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or... + https://tools.jboss.org/blog/12.13.0.ga.html + Tue, 05 Nov 2019 00:00:00 +0000
    - MonkeyUser: Null Pointer - https://www.monkeyuser.com/2016/null-pointer/ -

    Null Pointer

    - https://www.monkeyuser.com/2016/null-pointer/ - Tue, 01 Nov 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2019-06 + https://tools.jboss.org/blog/12.12.0.ga.html + JBoss Tools 4.12.0 and Red Hat CodeReady Studio 12.12 for Eclipse 2019-06 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar codereadystudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.12 (2019-06) but we recommend + using the latest Eclipse 4.12 2019-06 JEE Bundle since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or... + https://tools.jboss.org/blog/12.12.0.ga.html + Mon, 08 Jul 2019 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools 4.12.0.AM1 for Eclipse 2019-06 + https://tools.jboss.org/blog/4.12.0.am1.html + Happy to announce 4.12.0.AM1 (Developer Milestone 1) build for Eclipse 2019-06. + + + Downloads available at JBoss Tools 4.12.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Server Tools + + Wildfly 17 Server Adapter + + A server adapter has been added to work with Wildfly 17. It adds support for Java EE 8. + + + Enjoy! + + + Jeff Maury + + + + + ... + https://tools.jboss.org/blog/4.12.0.am1.html + Wed, 12 Jun 2019 00:00:00 +0000 + + + JBoss Tools: Integration Tooling for Eclipse 2019-03 + https://tools.jboss.org/blog/integration-stack-4.11.0.Final.html + Check out our new branding for Eclipse 2019-03. We’re now Red Hat CodeReady Studio 12 Integration Stack. + + + + + + + + JBoss Tools Integration Stack 4.11.0.Final / Red Hat CodeReady Studio Integration Stack 12.11.0.GA + + + + + + + + + All of the Integration Stack components have been verified to work with the same dependencies as JBoss Tools 4.11 and Red Hat CodeReady Studio 12. + + + + + + + + What’s new for this release? + + + DataVirtualization support from Teiid Designer is no longer available through the Integration Stack. It can be installed directly from Teiid Designer + + + This release has an updated BPMN2 Modeler and jBPM/Drools/KIE. + + + Released Tooling Highlights + + Business Process and Rules Development + + BPMN2 Modeler Known Issues + + See the BPMN2 1.5.1.Final Known... + https://tools.jboss.org/blog/integration-stack-4.11.0.Final.html + Thu, 30 May 2019 00:00:00 +0000 + + + JBoss Tools: Quarkus + https://tools.jboss.org/blog/quarkus.html + You’ve probably heard about Quarkus, the Supersonic Subatomic Java framework tailored for Kubernetes and containers. + + + We wrote an article on how to create your first Quarkus project in an Eclipse based IDE (like Red Hat CodeReady Studio). + + + You can read it at https://developers.redhat.com/blog/2019/05/09/create-your-first-quarkus-project-with-eclipse-ide-red-hat-codeready-studio/ + ... + https://tools.jboss.org/blog/quarkus.html + Mon, 13 May 2019 00:00:00 +0000 + + + JBoss Tools: JBoss Tools and Red Hat CodeReady Studio for Eclipse 2019-03 + https://tools.jboss.org/blog/12.11.0.ga.html + JBoss Tools 4.11.0 and Red Hat CodeReady Studio 12.11 for Eclipse 2019-03 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat CodeReady Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat CodeReady product page and run it like this: + + + + java -jar devstudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) CodeReady Studio require a bit more: + + + This release requires at least Eclipse 4.11 (2019-03) but we recommend + using the latest Eclipse 4.11 2019-03 JEE Bundle since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or... + https://tools.jboss.org/blog/12.11.0.ga.html + Mon, 01 Apr 2019 00:00:00 +0000 + + + JBoss Tools: Announcing IntelliJ OpenShift Connector + https://tools.jboss.org/blog/ij-openshift-connector.html + We are extremely pleased to announce that the preview release of the Red Hat OpenShift Connector + for JetBrains products (IntelliJ IDEA, WebStorm,…​.) is now available. You can download the + OpenShift Connector plugin from the JetBrains marketplace + or install it directly from the plugins gallery in JetBrains products. + + + This article provides describes the features and benefits of the plugin and provides installation details. + It also provides a demo of how using the plugin improves the end-to-end experience of developing + and deploying Spring Boot applications to your OpenShift cluster. + + + + + Benefits of using the extension + + + Red Hat OpenShift is a container application platform that brings + the power of Kubernetes and containers to... + https://tools.jboss.org/blog/ij-openshift-connector.html + Mon, 11 Mar 2019 00:00:00 +0000 + + + JBoss Tools: JBoss Tools 4.11.0.AM1 for Eclipse 2018-12 + https://tools.jboss.org/blog/4.11.0.am1.html + Happy to announce 4.11.0.AM1 (Developer Milestone 1) build for Eclipse 2018-12. + + + Downloads available at JBoss Tools 4.11.0 AM1. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + Server Tools + + EAP 7.2 Server Adapter + + A server adapter has been added to work with EAP 7.2. + + + + + OpenShift 3 + + New OpenShift connection helper + + When you need to defined a new OpenShift connection, you need to provide the following information: + + + + + cluster URL + + + username and password or token + + + + + If you’ve already logged in your cluster through the OpenShift Web Console, you can copy an oc command + in the clipboard that contains both the cluster URL and your token. + + + So, from now, there is a new... + https://tools.jboss.org/blog/4.11.0.am1.html + Tue, 26 Feb 2019 00:00:00 +0000 - MonkeyUser: Heisenbug - https://www.monkeyuser.com/2016/heisenbug/ -

    Heisenbug

    - https://www.monkeyuser.com/2016/heisenbug/ - Tue, 25 Oct 2016 00:00:00 +0000 + JBoss Tools: We are hiring + https://tools.jboss.org/blog/we-are-hiring - again.html + The Developer Experience and Tooling group, of which JBoss Tools team is part, + is looking for an awesome developer. We are looking to continue + improving the usability for developers around various IDEs including Eclipse, VSCode and IntelliJ and around the Red Hat product line, including JBoss Middleware. + + + Topics range from Java to JavaScript, application servers to containers, source code tinkering to full blown CI/CD setups. + + + If you are into making developers life easier and like to be able to get involved in many different technologies and get them to work great together then do apply. + + + You can also ping me (jeffmaury@redhat.com) for questions. + + + The current list... + https://tools.jboss.org/blog/we-are-hiring - again.html + Thu, 17 Jan 2019 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat Developer Studio for Eclipse 2018-09 + https://tools.jboss.org/blog/12.9.0.html + JBoss Tools 4.9.0 and Red Hat Developer Studio 12.9 for Eclipse 2018-09 are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat Developer Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat Developer product page and run it like this: + + + + java -jar devstudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) Developer Studio require a bit more: + + + This release requires at least Eclipse 4.9 (2018-09) but we recommend + using the latest Eclipse 4.9 2018-09 JEE Bundle since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or... + https://tools.jboss.org/blog/12.9.0.html + Mon, 08 Oct 2018 00:00:00 +0000 + + + JBoss Tools: JBoss Tools 4.9.0.AM3 for Eclipse 2018-09 M2 + https://tools.jboss.org/blog/4.9.0.am3.html + Happy to announce 4.9.0.AM3 (Developer Milestone 3) build for Eclipse 2018-09 M2. + + + Downloads available at JBoss Tools 4.9.0 AM3. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + + + Server Tools + + Wildfly 14 Server Adapter + + A server adapter has been added to work with Wildfly 14. It adds support for Java EE 8. + + + + + Forge Tools + + Forge Runtime updated to 3.9.1.Final + + The included Forge runtime is now 3.9.1.Final. Read the official announcement here. + + + + + Fuse Tooling + + Know issues + + A regression has been introduced touching all functionalities using Jaxb. It includes: + + + + + Variable content display in debug + + + Data Transformation wizard + + + Tracing Camel route via Jolokia Connection + + + + + It may affect other functionalities. In this case, you will have... + https://tools.jboss.org/blog/4.9.0.am3.html + Tue, 11 Sep 2018 00:00:00 +0000 - MonkeyUser: How Project Managers Are Seen By - https://www.monkeyuser.com/2016/how-project-managers-are-seen-by/ -

    ProjectManagers

    - https://www.monkeyuser.com/2016/how-project-managers-are-seen-by/ - Tue, 25 Oct 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools 4.9.0.AM2 for Eclipse 2018-09 M2 + https://tools.jboss.org/blog/4.9.0.am2.html + Happy to announce 4.9.0.AM2 (Developer Milestone 2) build for Eclipse 2018-09 M2. + + + Downloads available at JBoss Tools 4.9.0 AM2. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Eclipse 2018-09 + + JBoss Tools is now targeting Eclipse 2018-09 M2. + + + + + Fuse Tooling + + WSDL to Camel REST DSL improvements + + The version of the library used to generate Camel REST DSL from WSDl files has been updated. It now covers more types of WSDL files. See https://github.com/jboss-fuse/wsdl2rest/milestone/3?closed=1 for the list of improvements. + + + + REST Editor tab improvements + + In the last milestone we began adding editing capabilities to the read-only REST tab to the route editor we added in the previous release.... + https://tools.jboss.org/blog/4.9.0.am2.html + Tue, 21 Aug 2018 00:00:00 +0000
    - MonkeyUser: Bugfixing - for developers - https://www.monkeyuser.com/2016/bugfixing-for-developers/ -

    Bugfixing for developers

    - https://www.monkeyuser.com/2016/bugfixing-for-developers/ - Thu, 20 Oct 2016 00:00:00 +0000 + JBoss Tools: Integration Tooling for Eclipse Photon + https://tools.jboss.org/blog/integration-stack-4.6.0.Final.html + Try our leaner, complete Eclipse Photon and Red Hat Developer Studio 12 compatible integration tooling. + + + + + + + + JBoss Tools Integration Stack 4.6.0.Final / Red Hat Developer Studio Integration Stack 12.0.0.GA + + + + + + + + + All of the Integration Stack components have been verified to work with the same dependencies as JBoss Tools 4.6 and Red Hat Developer Studio 12. + + + + + + + + What’s new for this release? + + + This is the initial release in support of Eclipse Photon. It syncs up with Developer Studio 12.0.0, JBoss Tools 4.6.0 and Eclipse 4.8.0 (Photon). It is also a maintenance release for Teiid Designer and BRMS tooling. + + + Released Tooling Highlights + + Business Process and Rules Development + + BPMN2 Modeler Known... + https://tools.jboss.org/blog/integration-stack-4.6.0.Final.html + Thu, 09 Aug 2018 00:00:00 +0000 +
    + + JBoss Tools: JBoss Tools and Red Hat Developer Studio for Eclipse Photon + https://tools.jboss.org/blog/12.0.0.ga-for-photon.html + JBoss Tools 4.6.0 and Red Hat Developer Studio 12.0 for Eclipse Photon are here waiting for you. Check it out! + + + + + + + + + + Installation + + + Red Hat Developer Studio comes with everything pre-bundled in its installer. Simply download it from our Red Hat Developer product page and run it like this: + + + + java -jar devstudio-.jar + + + + JBoss Tools or Bring-Your-Own-Eclipse (BYOE) Developer Studio require a bit more: + + + This release requires at least Eclipse 4.8 (Photon) but we recommend + using the latest Eclipse 4.8 Photon JEE Bundle since then you get most of the dependencies preinstalled. + + + Once you have installed Eclipse, you can either find us on the Eclipse Marketplace under "JBoss Tools" or... + https://tools.jboss.org/blog/12.0.0.ga-for-photon.html + Tue, 17 Jul 2018 00:00:00 +0000 - MonkeyUser: disaster Scale - https://www.monkeyuser.com/2016/diesaster-scale/ -

    disaster scale

    - https://www.monkeyuser.com/2016/diesaster-scale/ - Mon, 17 Oct 2016 00:00:00 +0000 + JBoss Tools: RHAMT Eclipse Plugin 4.1.0.Final has been released! + https://tools.jboss.org/blog/rhamt_4.1.0.Final_release.html + Happy to announce version 4.1.0.Final of the Red Hat Application Migration Toolkit (RHAMT) is now available. + + + + + Getting Started + + + Downloads available through JBoss Central and from the update site. + + + + + RHAMT in a Nutshel + + + RHAMT is an application migration and assessment tool. The migrations supported include application platform upgrades, + migrations to a cloud-native deployment environment, and also migrations from several commercial products to the + Red Hat JBoss Enterprise Application Platform. + + + + + What is New? + + + Eclipse Photon + + The tooling now targets Eclipse Photon. + + + + + + + + + Ignoring Patterns + + Specify locations of files to exclude from analysis (using regular expressions). + + + + + + + + + External Report + + The generated report has been moved out of Eclipse and into the browser. + + + + + + + + + Improved Ruleset Schema + + The XML ruleset schema has... + https://tools.jboss.org/blog/rhamt_4.1.0.Final_release.html + Tue, 17 Jul 2018 00:00:00 +0000
    - MonkeyUser: Universal Do Not Disturb Indicator - https://www.monkeyuser.com/2016/do-not-disturb-privacy/ -

    Do Not Disturb

    - https://www.monkeyuser.com/2016/do-not-disturb-privacy/ - Thu, 13 Oct 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools 4.6.0.AM3 for Eclipse Photon.0.RC3 + https://tools.jboss.org/blog/4.6.0.am3-for-photon.0.rc3.html + Happy to announce 4.6.0.AM3 (Developer Milestone 3) build for Eclipse Photon.0.RC3. + + + Downloads available at JBoss Tools 4.6.0 AM3. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Eclipse Photon + + JBoss Tools is now targeting Eclipse Photon RC3. + + + + + Fuse Tooling + + + + + + Camel URI completion with XML DSL + + + As announced here, it was already possible to have Camel URI completion with XML DSL in the source tab of the Camel Route editor by installing the Language Support for Apache Camel in your IDE. + + + This feature is now installed by default with Fuse Tooling! + + + + + + + + Now you have the choice to use the properties view with UI help to configure Camel... + https://tools.jboss.org/blog/4.6.0.am3-for-photon.0.rc3.html + Tue, 19 Jun 2018 00:00:00 +0000
    - MonkeyUser: Project Lifecycle - https://www.monkeyuser.com/2016/project-lifecycle/ -

    Project Lifecycle -

    - https://www.monkeyuser.com/2016/project-lifecycle/ - Tue, 11 Oct 2016 00:00:00 +0000 + JBoss Tools: JBoss Tools 4.6.0.AM2 for Eclipse Photon.0.M7 + https://tools.jboss.org/blog/4.6.0.am2-for-photon.0.m7.html + Happy to announce 4.6.0.AM2 (Developer Milestone 2) build for Eclipse Photon.0.M7. + + + Downloads available at JBoss Tools 4.6.0 AM2. + + + + + What is New? + + + Full info is at this page. Some highlights are below. + + + General + + Eclipse Photon + + JBoss Tools is now targeting Eclipse Photon M7. + + + + + OpenShift + + Enhanced Spring Boot support for server adapter + + Spring Boot runtime was already supported by the OpenShift server adapter. However, it has one major limitation: files and + resources were synchronized between the local workstation and the remote pod(s) only for the main project. If your Spring Boot + application had dependencies that were present in the local workspace, any change to a file or resource of one of these dependencies + was... + https://tools.jboss.org/blog/4.6.0.am2-for-photon.0.m7.html + Tue, 29 May 2018 00:00:00 +0000
    \ No newline at end of file