Ed Burns's Blog, page 2
May 26, 2023
Deploy Jakarta EE 10 and MicroProfile 6 on Azure with IBM Liberty on Azure Kubernetes Service (AKS)
Cross posted at dev.to.
This self-contained blog post shows how you to quickly and easily deploy a cloud native Java microservice on Azure Kubernetes Service (AKS) directly from the Azure Portal. The app uses a tightly-focused selection of technologies from Jakarta EE 10 and MicroProfile 6 By using a tightly-focused selection of technologies from open standards, developers minimize maintenance cost and time to MVP and maximize skill portability and fun. For more of the benefits, see What are microservices.
For a more full-featured treatment, see this video from my colleague Brian Benz. YouTube link.
Deploy the appThe steps in this section show how to deploy the app from the Azure portal.
Visit https://aka.ms/publicportal and sign in with a sufficiently empowered Azure subscription. If your identity doesn���t have these powers, appeal to your IT department to be granted these powers or use a subscription where you do have those powers. The Azure identity deploying this offer must have one of the following two sets of Azure role-based access control roles: Contributor and User Access Administrator of the current subscription. Owner of the current subscription. In the search box, enter ���websphere liberty��� without the quotes. In the Marketplace section of the search results, select ���IBM WebSphere Liberty and Open Liberty on Azure Kubernete������. Select Create. By the Resource group box, select Create new and enter the name of a new resource group. This must be unique in your subscription. I suggest disambiguating by prefixing a string with your initials and some form of date to the text 01aks. For example, ejb052601aks. Select Next: AKS. Leave the defaults and select Next: Load balancing. Select Yes under Connect to Azure Application Gateway. Leave the remaining values at their defaults. Select Next: Operator and application. Explore the info box next to the text IBM supported. This offer can be covered by full support from IBM and Microsoft. Purchase a support contract from IBM This plus your existing Microsoft support as an Azure customer gives you full coverage. After thinking carefully about the value of buying support, make a note to yourself to ask your IT deparmment about it and select No. Next to Deploy an application?, select Yes. Next to Deploy your own application or a sample application? select The Open Liberty sample image. Select Next: Review + create. When you see Validation passed, select Create.Explore the deployed appThe steps in this section show you how to explore the deployed app
Depending on cloud weather, you will see this screen in about fifteen minutes. Select Outputs as shown here. [image error] Locate the output named appHttpsEndpoint and select the ���copy��� icon beside it. Paste that link in a new browser tab and go to the link. Accept the warning about the self-signed certificate. The offer created this certificate on your behalf. Do not use self-signed certificaties in production. View the app and play around.Verify the app supports Jakarta EE 10 and MicroProfile 6The steps in this section show you how to verify the app supports Jakarta EE 10 and MicroProfile 6.
If you followed the EE 10 and MicroProfile 6 links in the first paragraph, you���ll see a list of technologies included in those two open standards. Because this app is a microservice, and because Liberty is a fully modular microservice platform, the sample app includes only a subset of those two standards.
In the Azure portal, return to the page with the Outputs from the previous section. Locate the output named cmdToConnectToCluster and select the ���copy��� icon beside it. Still in the Azure portal, open an Azure Cloud Shell. Select the icon with >_ in the tool bar at the top of the Azure portal, as shown here. [image error] The Azure Cloud Shell is incredibly powerful and worthy of your time investment to master it. For complete documentation see Overview of Azure Cloud Shell.. You may be asked to create storage. If so, say Yes. In the cloudshell prompt, paste the value for cmdToConnectToCluster you just now copied and press Enter. You should see text similar to Merged "cluster26234e-admin" as current context in /home/edward/.kube/config. Enter alias k=kubectl. This may be useful later. Enter k get pods. Copy either of the two values in the NAME column. Enter k logs <paste value from preceding step> | grep mpHealth | jq . The output should look like the following. { "type": "liberty_message", "host": "app26234e-7bb7bc94f8-7bt7z", "ibm_userDir": "/opt/ol/wlp/usr/", "ibm_serverName": "defaultServer", "message": "CWWKF0012I: The server installed the following features: [cdi-4.0, distributedMap-1.0, jndi-1.0, json-1.0, jsonb-3.0, jsonp-2.1, monitor-1.0, mpConfig-3.0, mpHealth-4.0, mpMetrics-5.0, restfulWS-3.1, restfulWSClient-3.1, ssl-1.0, transportSecurity-1.0].", "ibm_threadId": "0000002a", "ibm_datetime": "2023-05-25T17:05:50.340+0000", "ibm_messageId": "CWWKF0012I", "module": "com.ibm.ws.kernel.feature.internal.FeatureManager", "loglevel": "AUDIT", "ibm_sequence": "1685034350340_0000000000033", "ext_thread": "Default Executor-thread-1"}The value of the message property is your proof that a subset of technologies from both Jakarta EE 10 and MicroProfile 6 are running in the application.
Call to action: To learn more visit https://aka.ms/websphere-on-azure-con... . If you want us to contact you directly, select the Contact Me button and I���ll get in touch directly.
May 18, 2023
One minute video turns into fifteen minutes of WTF?
I strongly prefer Azure DevOps Boards for prodution quality project management, however, it���s very hard to beat gratis. For this reason, the Jakarta EE project is using GitHub Projects & Issues. As the release co-coordinator for Jakarta EE 11, I need to gain mastery of GitHub Projects & Issues. So, I set out to understand this 71 second long video. How hard can it be? It���s only one minute!
I am glad this video exists. I understand the producers get to claim, ���look it���s so easy it fits in a one minute video.��� However, either because the video moves too fast or I move too slowly (I am over fifty years old), it took me fifteen minutes of play/pause/think/repeat to fully absorb the content in a way that I could replicate the steps shown. Is there a video that just runs the full ten minutes and explains it to me rather than this Gen-Z play/pause/think/repeat approach?
In the absence of such a video, here is my second-by-second breakdown of this action packed video.
00:04 an issue exists with a task list from some Investor-type persona.
00:06 using the hover convert technique, convert the three tasks to issues.
00:07 check the three checkboxes to close the newly created issues. (Why? Seems a waste of time. But it���s only one second, so I guess it doesn���t matter.)
00:14 Create a new project.
00:16 Type the octothorpe. (You���re not the only one who can be obtuse, defunkt.) This drops down a repository picker. There are probably some scope limitations here. Perhaps you can only pick repositories in the same Organization?
00:17 Somehow more issues get added to a thing called The Plan, which I don���t recall being explicitly named. Also, the Investor wanted these to be called Epics but I don���t see that term anywhere.
00:21 And now we have a giant flat unordered mess of about 25 issues with no hierarchical structure or organization. Also, there is a Status field, where are the valid values for that field defined? Is that automatic, like The Plan?
00:23 Select (not click) the + icon to the right of the Assignees column. This looks like some crude form of categorization. Apparently you must define your schema for organizing your work on the fly. Apperently they invent the name Area. The Investor wanted these to be called Epics. They will not be happy with you using the wrong term.
Anyhow, the video manually creates three Area values for the three Epics listed by the Investor. Somehow icons are present. Where do these come from?
00:27 Select Apply. Somehow, magically, a new column appears. How is the ordering determined? How are the members for that column decided?
00:31 Apparently the same process used for this Area column is used to create a Milestone column. Again, there are icons, but it���s not clear how they are chosen.
00:33 Each column apparently has a dropdown. However, there appears to be a bug because the dropdown on the Milestone column has Area. But because the video moves so fast I guess it doesn���t matter. Anyhow, they use the Group by values item. This causes expand/collapse sections to appear for all the values of that column, with the member rows that have that value grouped together.
00:41 Now we select the search area at the top of the table. It looks like they are demonstrating some kind of ���filter��� feature. Yes. They are. They are showing how you can make it so the table only shows issues belonging to the specified area.
00:46 Now they use the drop down on the tab labeled The Plan and select Save changes to new view. This creates a new tab. Somehow a title is pre-filled as Game loop Backlog. Why does the word Backlog not appear in the first tab? Is there some convention over configuration thing happening here? The first tab is always called The Plan and the next one Backlog?
00:50 Now we have another tab Standup. Where did that come from? I am guessing it came from using the same process to create the Game loop Backlog? But again, how does it know the tab should be called Standup? Anyhow, here we select the drop down on that tab and select Board.
00:55 you get columns for the Status field. Again, where is the set of valid values for Status defined? How is it that the thing knows that the columns should correspond to the valid values of Status?
0:56 - 01:11 We spend a luxurious fifteen seconds (20% of the total run time of the video) on a silly origami Octocat animation.
February 18, 2023
Notes from watching Ivar Grimstad Devoxx Belgium 2022 Jakarta EE 10 presentation
50 minutes https://www.youtube.com/watch?v=8ke0k...
Simplicity for Modern and Lightweight Cloud Applications
Out on 2022-09-22.
Community driven, modernized, simplified, lightweight.Specs and Impls
Spec, API, TCK
Compatibile Impls
We need at least one open source impl.
Other impls can be fine, not open source.
There is no ���official��� ���reference implementation���
Lots of specs, more than half received updates in EE 10
About half of these have a ���.0��� version number. In our impl ofSemVer, the .0 means it may have potentially breaking changes.
Also a bit of marketing to signal there are big noteworthychanges. (I like this idea)
Authorization 2.1
Activation 2.1
Batch 2.1
Connectors 2.1
Mail 2.1
Messaging 3.1
Authentication 3.0
Concurrency 3.0
CDI 4.0
EL 5.0
CDI 4.0
Faces 4.0
Security 3.0
Servlet 6.0
(J)STL 3.0
(J)SP 3.1
(JPA)Persistence 3.1
WebSocket 2.1
Restful Web Services 3.1
JSONP 2.1
JSONB 3.0
Annotations 2.1
Interceptors 2.1
Net new
But not really new. Because it���s a part of CDI, or a sub spec.
CDI Lite 4.0
Not updated
EJB 4.0
Bean Validation 3.0
Debugging support 2.0
EJB Lite 4.0
Managed Beans 2.0
Transactions 2.0
DI 2.0
We don���t need to update every spec every time.
Ivar subtracts the ���enterprisy��� and you are left with the ���WebProfile���. We���ve had a web profile since EE6. Nothing new.
Useful as a smaller platform.
Auth
Concurrency
CDI
EL
Faces
Security
Servlet
STL
Persistence
JSP
WebSocket
BeanVal
Debugging
EJB lite
Managed beans
JTA
JAX-RS
JSONP
JSONB
Annotations
Interceptors
DI
CDI Lite
Take away the Webby specs, you get Core Profile. Brand new. EE10.
Enables impls to be certified as EE compatible
Headless services, or microservices, if you like.
JAX-RS
JSONP
JSONB
Annotations
Interceptors
DI
CDI Lite 4.0
Raise the API source level from 8 to 11
Why not go further?
There were not many specs that needed Java features beyond SE 11.
This allows us to have a broader appeal.
TCK runs on 11 or 17.
Security 3.0
https://jakarta.ee/specifications/sec...
Add support for OPenID Connect!
Updates to Jakarta Authorization, and Authentication
This is a foundation for future work (Q.2 Should this be in theEE11 talk?)
07:22 Code example for OpenID Connect Authentication. It���s anannotation. OpenIdAuthenticationMechanismDefinition (love thelong name, very precise)
Where do you put the annotation?Persistence 3.1
https://jakarta.ee/specifications/per...
Small work interetsed by the community
Add UUIDs as a basic java data type!
GenerationType=UUIDJAX RS 3.1
https://jakarta.ee/specifications/res...
Community features, requested a long time.
Initially wanted a 4.0 release. But went with 3.1 for now.Planning a 4.0 release for EE 11 (Q.3 this seems definitely likewhat we want in the talk).
Multipart form data support.
RestEASY has this. JAX-RS catches up now.Java SE Bootstrap API
Lets us run JAX-RS outside of an app server. (Q.4: this seemslike a great thing to show with App Service Java SE! What aboutfunctions?)
09:51 Ivar shows a demo https://github.com/ivargrimstad/jakar...
booty-duke https://soundcloud.com/edburns00/boot...
Note that we have explicit dependencies on API andIMPL. There is no concept of ���provided��� scope, where you canjust depend on the API.
Uses Maven Assembly plugin
Needs a main method.
Add some configuration: 11:33. Port and rootpath. That���s the minimum. There are sensible defaults.Other options available.
Instantiate the app.
Start it. 12:21
SeBootstrap.start()
Pass in app and config.
`thenAccept���
Thread.currentThread().join()
Run it locally.
Core Profile
Reason: target smaller runtimes.
Limit the amount of specs required to implement it.
3 compatible impls
Open Liberty
Payara
WildFly
Potentially compatible impls
Helidon
Quarkus
Micronaut
Helidon and Quarkus have said they will apply for core profilecompatibility Q.5: What can I say about this in the talk?)
CDI Lite
Enables CDI to be used in GraalVM.
Make CDI dynamic at build time, not run time.
Create a new extensions API. Portable extensions is too late.
Changes how the empty beans.xml behaves.
Prior: empty beans.xml turns on CDI. Everything is injectable.
Now: beans.xml with only top level XML turns on CDI, butOnly things that that have the Injectable annotation areinjectable.
17:10 Taking a step back.
To EE8, how to get to 9.1 and 10.
If going from 8 to 10, do take the 9 step in between. You don���tneed to go to prod with the 9 version, but it���s good to suss outproblems: new namespace.
8 -> 9 big thing: namespace change
javax.* to jakarta.*
Why do I care? Because all the things: Spring, Tomcat, Jetty,Hibernate, are moving to jakarta namespace.
It���s usually just a import change.
Tools: Changes the bytecode for you. Can use it at build timeor runtime. Not recommended to go to th long time.
Eclipse transformer
Apache Tomcat Migration Tool
Tools: IDE help
IntelliJ Idea has a Java EE to Jakarta EE thing.
A bit smarter than just a regexp action.
Manual 20:26
Update Jakarta EE version in pom.xml
Fix the imports
XML schema namespaces
Rename properties prefixed with javax.
Rename bootstrapping files
Verify data and dynamic content
See https://github.com/ivargrimstad/jakar...
This is a three tier helloworld, to show the migration steps.
Starts with EE and SE 8 apis.
Adds EE 8 and 9 to the classpath. Both of them!
App is the same as the booty-duke.
Rest resource. ���hello��� path, produces message. Is astateless bean. 23:00
Finds first message from injected stateful session bean,if not there, hard codes the message value.Stateful session bean uses the entity manager fromPersistence.
findAll method creates a CriteriaQuery that basicallydoes SELECT * FROM GREETINGTABLE.@Entity DukesGreeting 23:30
There is a CDI extension. @Dukes. DukesExtensionimplements Extension.
processAnnotatedType(@Observes@WithAnnotations(Dukes.class)...
Prints out a message to the logger for every suchannotated class.
24:10 Now does the namespace change
Uses the aforementioned IntelliJ Idea tool support.
This is why he added the EE 9 and EE8 jars both.
Once he ran the tool, he can remove the EE8 jars.
24:50 That���s steps 1 and 2.
If you are using XML config, you have to pay attention to that.
He has a persistence.xml. Uses the JCP namespace.
23:58 Replace jcp.org with jakarta.ee.
Also change the schemaLocation
version number
jcp.org to jakarta.ee
version number in xml version attribute.
Properties he has these in his persistence.xml file. In his casethis is for drop and create of the table. Rename bootstrapping filesCDI bootstrapping fileMETA-INF/services/javax.enterprise.inject.spi.Extension
Rename the file to jakarta.enterprise���.
Verify data and dynamic content. 28:00 Runs it in GlassFish 6(EE9) In his case, it���s the text in the database. He updatesthe database using some table editor in IntelliJ Idea. Reloadsthe page.EE9 supports Java 17.
Updates the pom.
Let���s use some Java 17 features as well.
How about records? 31:27
Lets us avoid exposing our database architecture in theAPI.
Creates DukesGreetingRecord. 31:49
In the business logic, use a mapper, map it from thegreeting to a new DukesGreetingRecord populates usingthe getters.
Are we done? 33:29. No. It��� came up empty. Why?
JSON Binding is expecting a Java Bean.
It must have a getter. Records don���t havegetters. Records are not Java Beans.
Simplest thing is to change the name of the fields inthe record: getDate getMessage.
Let���s upgrade it to EE 10.
Very simple.
Update the pom dependency from 9 to 10.
But is it? No. When running he got a servlet exception.
Has to do with the beans.xml stuff.
Adds a beans.xml. Make sure it���sversion 4. bean-discovery-mode should beannotated. This is the default, so you can removebean-discovory-mode.
Must also update the schema namespace version.
37:44 So great! Can remove the ugly hack we did with the record. Setrecord fields back to message and date.
If you are relying on the ���no beans.xml��� or ���empty beans.xml���behavior, then you must take the action. If you have abeans.xml, have it set at annotated, you���re fine.
38:37 the core profile.
Takes this application, strips away a bit
Removes database
Makes the CDI extension ���build compatibile��� rather than���portable��� extension.
39:12. Implements the spi.Extension interface. HasprocessAnnotatedType method.
New API in core has spi.BuildCompatibileExtension
Annotations for the different lifecycle events.
40:11 Recommendation. If you are running your app in athing that supports full CDI, stick to the portableextension. Only if you are running in a CDI liteenvironment should you consider this kind of extension.
Use the @Enhancement annotation.
HaveMETA-INF/services/jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtensionidentify the extension. This is the package name of theinterface, so you don���t have to remember the long name.
Runs it in WildFly 27.0.0.Alpha1
Payara Cloud 42:07
Upload the application, run it.
Gives the PaaS value prop: someone else manages the complexity ofKubernetes.
44:30 We���re now thinking of Jakarta EE 11 Q.6
Discussion: what Java SE level should we base Jakarta EE 11 on?
Raise to 17?
Raise to 21?
How to handle the removal of the SecurityManager.
Users will not notice.
Impls will have to change.
New spec: Jakarta Config (finally!)
https://jakarta.ee/specifications/con...
More or less based on MicroProfile Config. Will becompatible with it.
When Jakarta Config comes out, MicroProfile Config willprobably be retired.
@ConfigProperty
Possible New spec: Jakarta MVC
https://jakarta.ee/specifications/mvc/
Server side rendering
Runs on WildFly, GlassFish, anything with Jersey
Possible new spec: Jakarta NoSQL
https://jakarta.ee/specifications/nosql/Possible new spec: Jakarta RPC
Standardizes gRPC within Jakarta EE
https://jakarta.ee/specifications/rpc/
Possible new spec: Jakarta Data
Standardizes the repository pattern for data access
Spring Data, but for Jakarta EE
Cloud functions?
Summary 48:00
July 19, 2022
Using git worktree and a script to copy commits from one branch to another in the same repo
This brief post shows how to use git worktree to perform development work multiple branches of your local clone of a remote git repository, such as a repository on GitHub.
The worktree git sub-command allows you to ���Manage multiple working trees���. If you want to know everything there is to know about worktree, you can view the manual page by doing man git-worktree. Yes, that���s right, the literal string git-worktree. All git sub-commands have their own manual page which you can access with man git-subcommandname. Try it with man git-branch, for example.
The post assumes makes the following assumptions.
You have already done git clone of the remote repository on your local environment. For discussion, this local clone is called myrepo. Within myrepo you already have three branches: main, myfeature, and myotherfeature. The main branch is currently checked out. This is the default behavior when you do git clone.Check out myfeature using git worktree add cd myrepogit status
You should see the following.
git worktree list
You should see something similar to the following.
Now, it���s time to check out your myfeature branch using git worktree.
git worktree add --track -b myfeature ../myrepo-01 origin/myfeaturegit worktree listYou should see something similar to the following.
/home/edburns/workareas/myrepo 5bb3c2a [main]/home/edburns/workareas/myrepo-01 49336e1 [myfeature]IMPORTANT: With git worktree, you only have one .git directory, in this case myrepo/.git. If you do ls -la in myrepo-01, you will see a .git file. It���s name the same, but it is a file, not a directory. So, even though you have two checked out branches you are not using twice as much disk space because the myrepo-01 directory only has the most recent files of the checked out branch.
Check out myotherfeature using git worktree add cd myrepoNow, it���s time to check out your myotherfeature branch using git worktree.
git worktree add --track -b myotherfeature ../myrepo-02 origin/myotherfeaturegit worktree listYou should see something similar to the following.
/home/edburns/workareas/myrepo 5bb3c2a [main]/home/edburns/workareas/myrepo-01 49336e1 [myfeature]/home/edburns/workareas/myrepo-02 52059ba [myotherfeature] Copy commits from myotherfeature to myfeatureNow comes the interesting part, how to to copy commits from myotherfeature to myfeature.
The following script, which I suggest you save as ~/bin/copyLastNWorktreeCommits.sh, copies the last N commits from one worktree branch to another. The script makes the simplifying assumption that the commits you want to copy are the most recent N commits. If the commits you want to copy are not the most recent N commits, you can use git rebase -i to re-order the commits as described in this decent tutorial from Atlassian.
# pwd has the dest branch checked out# first argument is relative path to source branch, checked out with worktree# second argument is dest branch# third argument is num commitsontoValue=`git rev-parse HEAD`sourceBranch=$1destBranch=$2numLastCommitsOnPrivateBranch=$3pushd .cd $1startingCommit=`git rev-parse HEAD`endingCommit=`git rev-parse HEAD~${numLastCommitsOnPrivateBranch}`popdgit rebase --onto ${ontoValue} ${endingCommit} ${startingCommit}git rebase HEAD ${destBranch}Let���s say we want to copy the last 3 commits from myotherfeature to myfeature. Assuming copyLastNWorktreeCommits.sh is in your ~/bin directory and is on your path, as described in the appendix, the following commands will accomplish this.
cd myrepo-01git status
You should see something similar to the following.
On branch myfeatureYour branch is up to date with 'origin/myfeature.nothing to commit, working tree cleanVerify that you are in the correct directory. The script treats the current directory as the destination directory.
copyLastNWorktreeCommits.sh ../myrepo-02 myfeature 3
You should see output similar to the following.
First, rewinding head to replay your work on top of it...Applying: my change 01Applying: my change 02Applying: my change 03First, rewinding head to replay your work on top of it...Fast-forwarded main to HEAD.Verify that the commits have been copied.
git log -3You should see output similar to the following.
commit 9f1116063f0ce1c097e3118fc096a764d678798e (HEAD -> main)Author: Ed Burns <email@address.com>Date: Tue Jul 19 14:23:41 2022 -0400 my change 03commit 072da86c6b8e360120aab1f2a6fd87368c64fc3dAuthor: Ed Burns <email@address.com>Date: Tue Jul 19 14:23:27 2022 -0400 my change 02commit 38036c3d4a4597b2ac070d32c236adc7b6106ae2Author: Ed Burns <email@address.com>Date: Tue Jul 19 14:23:16 2022 -0400 my change 01Verify that the commits are ready to be pushed.
git statusOn branch myfeatureYour branch is ahead of 'origin/myfeature' by 3 commits. (use "git push" to publish your local commits)nothing to commit, working tree cleanDon���t be thrown off by the ���nothing to commit���. Yes, it���s true, you have nothing to commit to myfeature, because those three changes were already committed on myotherfeature. So while you have nothing to commit, you do have something to push.
If you want, you can push those changes now, but doing so is an exercise for the reader.SummaryIn this post we learned how to use git worktree to have three branches checked out at the same time, each in their own directories, conveniently located as siblings in the filesystem. We learned how to copy commits from one branch to another in this arranchement.
Appendix: bash basics preconditionsThis appendix describes how to make it so you can call the script shown in the post from the command line. As with everything in GNU/Linux, there is more than one way to do it. I���m not even sure this is the best way. This is just how I do it.
Make sure you have a bin directory in your home directory. Save the script to a file in that bin directory. As stated in the post, I recommend naming the file copyLastNWorktreeCommits.sh. Make sure the file has executable permissions.chmod ugo+x ~/bin/copyLastNWorktreeCommits.sh. Make sure your bin directory in your home directory is in your $PATH environment variable. There are lots of ways to do this. This one seems pretty reasonable: https://linuxize.com/post/how-to-add-directory-to-path-in-linux/.
February 15, 2022
Ed���s JavaLand 2022 Session Picks (Updated)
Cross posted at dev.to.
In my previous ���session picks��� post I lamented, ���Ever since the end of in-person events, I have not bothered to do my traditional session picks posts���. Well, with JavaLand 2022 fast approaching, the time has come to resume the practice.
All times in local timezone in JavaLand. See the program for more details on each session.
Monday, 14 March 202217:00 - 19:00 Dambali (Matamba) - Pattern matching mit JavaThe day before JavaLand is usually reserved for JavaLand kids activities, but with Coronavirus I have not heard about any such plans. What I do see on the schedule is one talk from German Java conference veteran Falk Sippach and newcomer Merlin B��gershausen about pattern matching in Java. Nope, it���s not regular expressions they���re talking about. They are talking about language level features such as pattern matching in switch statements, records, and arrays, as described in this authoritative blog post from Andrew Binstock. The talk is in German, but well worth a look. It���s also the only scheduled talk on Monday.
Tuesday, 15 March 202208:30 - 09:10 Schauspielhaus - Unittesting f��r Jakarta EE - das vernachl��ssigte WesenAfter many years of working mainly with the arrangement of boxes on architecture diagrams, and the JSON it takes to connect those boxes, I look forward to looking deep inside a single box at the humble Unit Test. Join Gunnar Hilling for this Jakarta EE focused look at this neglected discipline.
I also close out my conference picks with a talk about assertions.
09:30 - 10:00 - Silverado - Begr����ungI���ve been to every JavaLand ever, and I can attest that Fried���s energetic greetings are not to be missed. I am sure it will be especially emotional after we���ve all been through two years of pandemic hardship. If you are interested in my take on being thankful to be at a conference after two years of pandemic hardship, check out this previous post.
10:00 - 10:40 - Silverado - Common Misunderstandings in Software ArchitectureI am unfamiliar with Dr. Carola Lilienthal, but her book ���Sustainable Software Architecture��� looks excellent. This talk is likely a distillation of the lessons in the book.
11:00 - 10:40 - Schauspielhaus - Quarkus: a Bliss for DevelopersAlex Soto Bueno is delivering a talk on Red Hat���s flagship, post-monolith,cloud-native, enterprise Java developer runtime. I���m confident it willbe true to the legacy of excellent talks from the legendary BurrSutter. Even though this talk competes with Ivar Grimstad���s JakartaEE 10 talk, I prioritize this one because I see Quarkus as deliveryvehicle for some Jakarta EE specs. Look at it this way: EE10 is thefuture, and some of the EE10 specs will eventually show up in Quarkus.
12:00 - 12:40 - Wintergarden - Low Cost, Cloud Native, Open Standard Java on Azure Kubernetes ServiceMy biased opinion recommends my own session. Emily Jiang and will observe that customers have made it clear: they want Kubernetes, but they want it easy and affordable. It is possible to address these two competing concerns by using open source runtimes on commodity hardware. This lecture shows how to use the EPLv1 licensed Open Liberty runtime on vanilla Azure Kubernetes Service.
If I wasn���t giving this talk, I would attend Johan Janssen���s���Why and How to Upgrade to Java 17��� in Silverado. I find an in-person conference is really great for these ���one stop shop��� sessions.
13:00 - 13:40 - Silverado - The Project that Changed my Mind on Java ModulesJava modules is the feature that should have been in JDK 1.0, but formany extremely valid reasons did not show up until eleven yearslater. Most of the trouble people have had using Java modules inpractice can be traced to necessary decisions projects have had tomake in the absence of such a core feature in the JDK. The problem ofmodularity is fundamental to computer science, and the Java modulesystem is one answer to that problem for the Java platform. Theabstract for Jaap Coomans���s talkstates, ���That���s when the box of Pandora really opened up.��� Yep, thatis the most common experience of people trying to use Java modules inpractice. I am very curious to see Jaap���s answer.
14:00 - 14:40 - Silverado - Debugging Distributed SystemsThis topic is solid gold. In my lexicon ���debugging��� is the same thingas ���deeply understanding���. If you can���t debug a system, you can���tclaim to deeply understand it. I expect Java Champion Bert JanSchrijver will leave you withactionable lessons on this essential skill.
15:00 - 15:40 - Rotunde - JVM Ergonomics and the Container: Deep DiveThe first thing that popped into my mind when reading Sascha Selzer���s abstract for ���JVM Ergonomics and the Container: Deep Dive��� was Martin Thompson���s 2017 JavaLand Keynote about Mechanical Sympathy. Martin���s concept is all about understanding the relationship between the hardware and the software running on top of it. Given the complete centrality of containerized workloads to our current practice, this talk seems essential.
16:00 - 16:40 - Rotunde - Observing Cloud Native Java Apps Using OpenTelemetry on AWS, GCP and AzureSticking with the operations angle, this talk covers OpenTelemetry. I���d say that OpenTelemetry will do for observability what the Servlet API did for CGI-BIN: make it standard for all Java apps. Check this talk by Bernhard Lubomski out.
17:00 - 17:40 - Wintergarten - OpenId Connect Support in Jakarta EE 10Rudy De Bunsscher is a drivingforce behind Payara and also an active Jakarta EE contributor. Thistalk demonstrates the continued vitality of Jakarta EE by showing howthe OpenId Connect standard is supported in Jakarta EE 10. From ahistorical perspective, the Security API, introduced by David Blevinsin Jakarta EE 8, is a great foundation for OpenId Connect. I am curious to see if Spring adopts the Security spec or continues in theirgo your own wayapproach when it comes to the ���invent vs adopt��� decision.
18:00 - 18:40 - Silverado - How to Survive a Live Coding SessionI have observed the world-master of live coding, Dr. VenkatSubramaniam, and wondered, ���how does he do it?��� This meta-sessionabout live coding sessions from JacekKunicki offers, ���tips and tricks [to] helpyou feel more comfortable and prepared for (almost)everything. Real-life horror stories included!��� Sounds great!
19:00 - 19:40 - Quantum 1+2 - Die neue Gespr��chskultur: ganz wie in PanamaI���m glad to see my JSF expert group old colleague Bernd M��ller is still doing new and exciting different things in the Java world. This particular topic of native-Java interaction (but not the GraalVM kind) is close to my heart, having worked with JNI over 20 years ago.
Wednesday, 16 March 202209:00 - 09:40 - Wintergarden - Java at Microsoft - Behind the scenesWhen I first published this post, I had recommended Fabian���s talktitled ���State of the Java Metrics Libraries��� in Rotunde. I still wantto see this talk, but I must recommend you attend my colleaguesMartijn Verburg and GeorgeAdams���s talk about the latest entrant inthe OpenJDK ecosystem, Microsoft. You can read more about it in thisblog post announcing Microsoft joining the JCP.
10:00 - 10:40 - Wintergarten - Increase Your Productivity with IntelliJMy own interviews with Rockstar Programmers support the observation that mastery of tools is the single most important skill in the Rockstar programmer���s toolbox. This session from Bouke Nijhuis, gives you tips for mastery of the most masterful Java IDE.
11:00 - 11:40 - Wintergarten - From Zero to Spring Boot Hero with GitHub CodespacesHave you heard of GitHub codespaces? Well, Sandra Ahlgrimm is a past master of this transformative developer technology. She joins forces with Martin Lippert to show how to become super productive with CodeSpaces and Spring Boot.
12:00 - 12:40 - Stock���s - Der Application Server ist tot (?) - es lebe Jakarta EE!My main job at Microsoft is to ensure Java EE application serverworkloads have a great home on Azure. I have seen irrefutable Azurerevenue numbers that prove the Java EE app server is far from dead.I���m looking forward to an outside perspective from Dirk Weil on this same question.
13:00 - 13:40 - Wintergarten - Die All-Stars der Software-Bugs ��� und was wir von ihnen lernen k��nnenI have seen many different anthropomorphisms for software bugs, but ���all star team��� is a new one. Christian Seifert brings this entertaining perspective on a fact of life for practicing developers.
14:00 - 14:40 - Schauspielhaus - Feminism for Geeks ��� A Gentle IntroductionI vehemently challenge anyone who asserts that being ���woke��� or���anti-fascist��� is a bad thing. The same thing goes for anyone whofeels that masculinity is somehow under attack. It���s not, and if youbelieve it is, you believe so in spite of reams of empirical evidence.I applaud the conference committee for accepting this talk from WennySusanto-Berky and urge you not to miss it.
15:00 - 15:40 - Silverado - Hilfe, ich will meinen Monolithen zur��ck!Here we are, roughly seven years since Sam Newman���s seminal book���Building Microservices��� and I���m starting to see talks like Lars R��wekamp���s ���Help, I want mymonolith back���. This view is not mere contrarianism. There aredefinitely aspects of the monolith that should be preserved, even in amicroservices based architecture. I���m sure Lars will break it downfor us.
16:00 - 16:40 - Schauspielhaus - Der Java-Werkzeugkasten ��� Die praktischen Kommandozeilentools des JDKAll of us have been installing JDKs on machines for years and years, but how many know about all the command line tools that get installed in that package? Michael Hunger shows you how to get more from what you already have.
17:00 - 17:40 - Quantum 3+4 - Im Dutzend billiger. Kann���s eine Assertion mehr sein? Mit AssertJ zum TesterfolgThere is a whole track on testing at JavaLand, but this is only the second testing talk I���ve selected. I assure you, this is not because testing is unimportant. Rather, my role as Principal Architect at Microsoft has me working at a higher level of abstraction. However, I am fascinated by the journey of the humble assertion over time. The assert keyword was added to Java in 2002, but since then the entire practice of CI/CD has evolved. This talk from Birgit Kratz shows how the concept of assertions is compatible with our contemporary highly-automated development practice.
Thursday, 17 March 202209:00 - 17:00 - Bambuti (Matamba) - Modern Jakarta EE and Microprofile on Azure: Open Liberty, JBoss EAP, and WebLogicI���m just going to recommend my own workshop with Sandra Ahlgrimm.Here���s the snappy abstract I wrote.
You may have heard of the saying, ���software is eating theworld���. You may have heard of the concept of ���digitaltransformation���. You may be, or know, someone who must implementboth of these things by moving an existing system to a public cloud.Talk about a full stack job! Join Java veteran Ed Burns and SeniorDevelopor Advocate Sandra Ahlgrimm for an educational andinformative deep dive into how to build for Microsoft Azure. Thisworkshop will teach Azure concepts by the example of how to easilystand up an Azure Kubernetes Service (AKS) and run a Java EEapplication inside of it.
Participants will explore Oracle WebLogic Server, IBM Open Libertyand JBoss EAP as the Java EE runtimes. We will run the first two ofthese Java EE environments on AKS and the third on Azure AppService. As we go along, we will look under the hood at theMicrosoft, Oracle IBM and Red Hat technologies that enable it all towork.
November 22, 2021
Innovation, Gratitude, Compassion and the Cloud - Workshop-Tage Keynote Summary Document
This document captures the essence of my keynote talk, ���Innovation,Gratitude, Compassion and the Cloud���.
[image error]
Every one of us hearing this speech is fortunate enough to work in theIT industry and can improve the quality of our individual and groupinnovations by being thankful for prior innovations and aware of thetradeoffs that made them succeed over time. Let���s go through eachsection of the speech and see how I expanded on that theme.
IntrospectionHere, I set the message: ���take some time to think about how we got towhere we are and be thankful for it, and find a way to give back���. Iused a Global -> Local progression.
I���m thankful to be here, especially in the face of COVID-19. Yes, Iwant to say the usual, and appropriate, thanks to Marcus and the team,and I���m honored to help celebrate 30 years of Workshoptage. Let���stake a moment to recognize some big things that had to happen to bringus to this point:
mRNA vaccines: an idea more than 30 years in the making. If you aresuspicious about how such a big idea can be developed so quickly,rest assured it hasn���t been developed quickly. The mRNA vaccinetechnique started being worked on in earnest in the late 1990s.
Moderna was not the only one working on an mRNA approach to vaccines. BioNTech is a German company established to work on immunotherapies in 2008 by a Turkish couple, who immigrated to Germany.
On top of this, insights from the fight against flu and HIV were crucial creating an effective vaccine for COVID-19.
It is also important to recognize the brave human volunteers who accepted the call when governments took the unprecedented action of relaxing the pace at which human trials can take place.
Functioning government based on expertise: The indisputable fact that viruses do not respect national borders demonstrated the importance of nation-states having functional government based on expertise, rather than just political expedience. In addition to providing fiscal and legal accelerators for vaccine development and distribution, governments also took historically unprecedented fiscal stimulus actions. I argued that these were and are helpful.
Businesses adapting to life with COVID-19: In-person conferences are business-travel. International conferences interact with all sectors of the travel industry, all of whom have had major adjustments due to COVID-19. For example, consider the airline I always fly to visit Europe:
���Lufthansa���s ���9bn ($9.8bn) bail-out allows it to buy 80 new fuel-efficient planes, but it took more money than it needed to preserve its position as a global airline.���
Source: The Economist 2021-08-01
Commemoration is also a kind of thankfulness. Let us remember those who died due to COVID-19, even as we are fortunate to be here at this event.
���The standard method of tracking changes in total mortality is ���excess deaths���. This number is the gap between how many people died in a given region during a given time period, regardless of cause, and how many deaths would have been expected if a particular circumstance (such as a natural disaster or disease outbreak) had not occurred. Although the official number of deaths caused by covid-19 is now 4.5m, our single best estimate is that the actual toll is 15.2m people. We find that there is a 95% chance that the true value lies between 9.3m and 18.1m additional deaths.���
Source: The Economist 2021-10-19
ReflectionIn the middle section, I looked at a few technology domains thatenable today���s public cloud and asked about the tradeoffs that wereconsciously made by the stewards of that domain to bring thetechnology to its present state. Here are some points that guide theexamination of each domain and its tradeoffs.
Making the technology gain popularity, but often at the expense ofcorrectness and quality
Consider technologies that solve the harder problems, problems thatmost users don���t have or don���t know they have. The complexityrequired to solve these harder problems often limits reach.
Simpler technologies usually win, even if they don���t solve theharder problems.
But after they win, is too late to revise the technology to fix theharder problems.
Security Vulnerability to ransomeware Spam PhishingHere I mention my former colleague at Sun Microsystems Dick Gabriel,and his brief essay Worse is Better.Very interestingly, he mentions the legendary Jamie Zawinski, whom I have always esteemed but never managed to meet.
My premise for the middle section is that the technologies that enablethe cloud were built and are continually developed using ���Worse isBetter���, but we insiders have a responsibility to question that wayand try to at least understand the tradeoffs.
NetworkingThe packet switched networking underpins the entire Internet and allpublic clouds was a radical idea when it first emerged. You mustremember that the telephone industry came from telegrams, thenswitchboards for voice, but all of it was connection oriented.
The concept of breaking a message up into little chunks and then puttingthem back together when all of them arrive was a radical idea.
Networks, and the companies that ran them, were accustomed toconnection-oriented designs.
Practical capitalism, the kind one which one can build a stablecareer, tends to have a problem with radical ideas: They would rathernot be disrupted by them. Even so, the benefits of packet switchednetworking, in terms of cost, resiliency, and flexibility could not bedenied.
Networking is where the idea of interoperability is essential. Forthat you need standards. This gives me an opportunity to riff on theheroes of standards.
Working on standards bodies is thankless work.
Company shareholders want to maximize their investment. Sharing isanathema to maximizing profit. Standards are formalized sharing.
Individuals that work for corporations, but which support standards,often have to fight to prove the business case for standards.
Because networking is so fundamental to the cloud, many of the termsfrom networking have seeped into general IT usage, such as ���controlplane��� ���Day minus one, day zero, day one, day two, day N operations���,���North-south��� ���East-west��� on diagrams.
I ended the section with a survey of WAN, LAN, and Consumer services,showing the winners and losers in each section, and also having anopportunity to drop some fun old names that no-one hears about anymore. BITNet, DECnet, Toekn Ring, Minitel and Prodigy for example.
Here are some assorted links of interest for this section.
https://networkencyclopedia.com/netwo...
https://www.wired.com/2012/09/what-do...
https://spectrum.ieee.org/osi-the-int...
Information representationIn this section I talked about how information is represented.
Just as with the networking world, there was a lot of debate about howresponsibilities should be broken down.
Earlier attempts were informed by our existing thinking of informationbeing in centralized libraries that are indexed and connected. Thislead to the creation of distributed index technologies such as Archieand Gopher. Each node was responsible for indexing the information ithosted, and sharing the ability to search that index with other nodes.
Then Tim Berners Lee comes along and says
YAGNI (you ain���t gonna need it), just give me two things:
The ability to fetch a text file from one computer to anotherwithout authentication.
HTTP GET. The whole method, noun, verb, thing came later.Some way to look through that text file to find other text files.
Centralized indexing and imparting semantics to larger collections oftext files is outside the scope of his problem.
With centralized indexing, Each server had to know about the others.When you say YAGNI to this idea, lots of magic happens.
This turned out to be really popular. It lowered the barriers toentry, and also discarded a lot of the semantic richness of the othersystems. In the end mass market wins. Worse is better, right?
However, notice that since the early Web deprioritized the semanticrichness of centralized indexing in favor of ease of authoring andhosting, there have been numerous efforts to put it back. Remember���the semantic web���? Technorati tags? One could argue that GooglePage Rank, utm tags, and SEO is a way to associate semanticrichness with web pages, but it does so in a completely propietaryway, optimized more for revenue creation than user value.
Much older historical aside: Minitelhttps://www.computerhistory.org/timel...
In 1981, France Telecom offers free Minitel terminals to every phone subscriber, launching the first mass ���Web.��� Minitel will have tens of millions of users by 1990 and online services such as newspapers, train schedules, tax filing, and erotic classified ads as well as email and chat. The ���80s Minitel boom heavily foreshadows the dot-com boom. But the business model is different. Customers pay by the minute for access to Minitel services (sites), charged on their phone bills; France Telecom keeps about a third and passes on the rest to the service provider. As in the later Web, Minitel service providers run their own servers. But they also pay France Telecom a fee to connect to its network. Despite major efforts in the US, Canada, and Europe, similar videotex systems will fizzle outside France.
Minitel and other systems needed to have some kind of system to authorcontent on the system. Such systems had many of the attributes ofearly HTML, but were propietary and did not benefit from economicnetwork effects for tools and talent.
MonetizationIn this section I recounted my early direct experiences with the weband two important developments.
the invention of the <IMG> tag: NCSA Mosaic. the invention of CGI-BIN.[image error]
These two inventions, combined with the ease of authoring forcross-device reach, even in the early web, attracted the attention ofventure capital. When VC gets involved, the pressure to follow ���Worseis Better��� becomes even stronger. The growth boom of the early Webspilled over to other technologies as well. Consider UNIX SMTP basedemail. The protocols that enabled UNIX email to grow and becomewidespread did not have any strong concept of aggregatedauthentication. The absence of such capability haunts us to this day,and has created the SPAM and phishing industries. Perhaps if moretime had been invested making email more authenticated and secure whenemail was new, we would not have had as many hacks as we have thatstarted with phishing.
Cloud economics forces on computing hardware.My time at Sun Microsystems coincided with the introduction of���Utility Computing���, in 2004. This was an idea before its time, andalso at the wrong home. As I explore in the next section, cloud scalecan only be possible with commodity everything, and Sun was a boutiquehardware company. The early efforts at cloud were also stymied by thelack of a concept of containers, though Solaris did have Zones. Dockeritself started in a similar way, with LXC, but now usinglibcontainer. Happily, the best parts of Solaris are now inGNU/Linux, such as ZFS and DTrace (shout out to Brian Cantrill).
With these economic forces, we can now have an enormously powerful andencompassing IT estate managed by a single pane of glass, as shown inthis prophetic video.
Your browser does not support the video tag.Commoditization of all aspects of IT infrastructureAll of the forces building in the preceding sections created theconditions for the public clouds to emerge. The commoditization ofthese aspects, are particularly important.
Networking (software defined and otherwise) Compute Persistent storage Memory Platform servicesI also observed that the ability for new innovations to build on (withgratitude) old ones has accelerated. Consider the anology ofarcheology. New cities are built on top of old ones, that���s whyarcheologists always have to dig to find the old stuff. We do thesame thing with the cloud.
Look at the layer upon layer of software alone that now exists to runyour Java servlet.
[image error]
Another example, the design of HTTP/2. It borrows ideas from thesession, transport and network layers of the OSI protocol stack, butis itself an application layer protocol.
[image error]
At this point, I pause to ask the audience to take some time to lookinto the history of the technologies you are using now? What are theideas on which it is built? What ideas did your current thing rejectas YAGNI? Was there any part of that rejected idea that you wish hadnot been rejected?
ProjectionI closed the keynote with a look forward, taking Philip Armour���s fiveitem list of knowledge representation media as a jumping off point.
DNA Brains Hardware design Books/Photos/Videos SoftwareBut I asked what���s next after software? Perhaps it is just moresoftware, but this time software that explains itself. Indeed, thisis at the heart of machine learning modelexplainability. Formore on this topic see Interpretable MachineLearning byChristoph Molnar.
Finally, I ask the audience a final question.
Is Worse is Better driving the development of today���s world changing technologies, such as AI and nano technology, as it did for the Web, Email, and Social networks?If you were in the position to make a Worse is better choice, which would you choose?
November 19, 2021
Keynote Summary Documents: Is Paul Hughes right?
I was blessed with the opportunity to take full advantage of the briefwindow of COVID-19 pandemic relaxation in early September 2021 andaccepted the opportunity to deliver thekeynote at the 30thAnniversary of Workshop-Tage in Z��rich, Switzerland. I decided tofollow the advice of this guy, Paul Hughes. He advises: After aKeynote Speech: Avoid this Common Mistake: Do not shareslides.Mr. Hughes���s blog post is targeted at the party hiring the keynotespeaker, but with the keynote speaker themselves as a secondarytarget.
Life being what it is, I���m still working on the summary document,three months later, but have the second draft up at mygist.I intend to post the actual summary document as my next post here.
May 19, 2021
Ed���s Microsoft Build May 2021 Session Picks
Cross posted at dev.to.
Ever since the end of in-person events I have not bothered to do my traditional ���Ed���s session picks��� posts, as I have so often in the past. (These posts are a ride through memory lane: 2008, 2011, 2011, 2014, 2014, 2015, 2017, 2017, 2017, 2017, 2019, 2019, 2019 ). Now that Microsoft is focusing so heavily on making Java run great on Azure, it���s time to survey what Build 2021 has to offer Java developers.
The traditional audience for Microsoft Build is less technical andmore business focused than the audience for the conferences I usuallyattend. But at this point in my career, I���m ok with that. I am awarethat success with Java on Azure means influencing that audience. SoI���m very excited to highlight these exciting Java related sessions atMicrosoft Build.
Tuesday, 25 May 202105:00 EDT Java Champions talk Java at Microsoft: Interstitial ProgrammingNote: if you go to the Session scheduler and enter ���java not javascript��� you will see the Java related sessions.
Join Julien Dubois, Jonathan Giles and I for a sevin minuteinterstitial programming segment talking about high velocity cloudnative Java.
Watch on YouTube18:00 EDT Kroger joins Customer Tech Talks to discuss how they are using Java on Azure to manage stock levels across their storesSuccess at Microsoft is all about impact. How much impact does yourwork have? How does it achieve our vision of empowering every personand every organization on the planet to achieve more? This 30 minutecustomer success focused session shows the impact Java has at Kroger, one ofthe leading grocery retailers in the US. They also own Fred Meyer. My colleague Asir Selvasingh is instrumental in the Java work done with Kroger.
Wednesday, 26 May 202118:00 EDT Ask the Java at Microsoft ExpertsReza Rahman, Bruno Borges, Martijn Verburg, Asir Selvasingh and I arein the virtual booth and are excited to take your questions.
Thursday, 26 May 202110:00 EDT Ask the Experts: What���s new for Developers for building Dual Screen Apps for the Surface DuoRemember the Nintendo DS (dual screen)? The Surface Duo also has two screens, but it���s a Microsoft device and it runs Android. That means, you can code for it using Java or Kotlin. This one sounds really fun. I look forward to seeing what Guy Merin has to say.
On Demand SessionsAccelerating enterprise Java workloads on AzureThis is where we get to show off all the things we are doing with Java EE related technologies on Azure. It���s presented by my colleague Reza Rahman.
Run Linux web apps easily and securely on Azure App ServiceAzure App Service and Azure Kubernetes Service are the two workhorseservices of Azure compute. This talk is about the former, whichprovides a much easier to understand model of the cloud to users thanwhat is offered by AKS. App Service offers a wide variety ofpre-configured solution stacks on Java, .NET Core, Python, and Node,including Tomcat and Java EE JBoss EAP. I���m not sure how much Javawill be covered, but App Service definitely supports Java vere well.
Presented by Stefan Schackow.
April 2, 2021
Blurring parts of the screen in OBS Studio, other tips
This blog posts captures some learning I did about OBS recently.
I recently invested a little time in learning the basics of OBS Studio. OBS is one ofthose programs that seems enormously powerful, has a vast user base,and a correspondingly vast amount of content about it on YouTube.There is so much content about OBS it���s hard to tell what���s good.Thankfully, I stumbled upon this 27 minute tutorialfrom Kevin Stratvert.
In addition to Mr. Stratvert���s tutorial, there are some otheressential tips I want to capture.
Blurring during recordingThis video, from a muchmore gamer-focused perspective, did give a practical tip for howselectively blur arbitrary portions of the screen. I���ll outline theprocess next.
Add a new Display capture source.
Arrange it above your ���main��� Display capture source.
Add a Scaling/Aspect Ratio filter to it.
Scale Filtering Point. Resolution 640x360Drag the red grabber handles so that the new Display capturesource completely covers the ���main��� display capture source.
HERE IS THE IMPORTANT STEP: Hold down the alt key and re-sizethe grabbers to cover the area you want to blur. It is veryimportant you don���t move the region by dragging it. Use thealt-resize technique to effectively move the blur zone.
This works because of the low resolution you set.Repeat this process for whatever other parts of the screen you wantto blur. Note that you can blur/un-blur easily with the ���eye��� iconfor htat Display capture source in the Sources screen.
Bluring after recordingI found I missed some things on my first recording and needed to doadditional blurring. No problem, add a Media source and selectthe file from the first recording. You can then play the first recordinginto another recording and add more blurring as desired. I found thisreminded me of some of the performance aspect of real time analog audio mixing because I had to take cues from the media source for when to blur/un-blur certain parts of the screen.
Note, when you add Media source, by default you cannot hear theaudio. Turn it on with these steps.
In the Audio Mixer panel, in the row for Media Source select the cog icon and select Advanced Audio Properties.
In the row for Media Source, in the column for Audio Monitoring, ensure Monitor and Output is selected.
Removing click sounds from your mic while recordingAdd these filters to your Mic/Aux source.
Noise Suppression: RNNoise
Noise Gate
Close Threshold: -54.00 dB
Open Threshold: -39.00 dB
Remainder at defaults.
October 30, 2020
File Explorer and WSL2 PWD
I had long been used to doing open . on macOS to get finder windowopen on the current directory in the shell. I wanted something similarunder WSL2, but this is the best I could come up with. It copies thecurrent working directory to the clipboard such that you can press���ctrl-l crtl-v ret��� in the File Explorer and get the same effect.
function wslpwd() { echo //wsl$/Ubuntu$PWD | sed 's:/:\\:g' | pbcopy}Assumptions
pbcopy is installed WSL distro name is UbuntuIt prepends the special //wsl$/Ubuntu string to the $PWD, then uses sedto transform the forward slashes to backslashes, then uses pbcopy to putthe result on the system clipboard.


