Sunday, August 10, 2025

AI dev tools August 2025 update

This is an update to my previous post. Things are moving fast, so I decided to document the state of things after five months.   

This week, OpenAI released their open-weight (Apache 2 licensed) models gpt-oss-20b and gpt-oss-120b. IMO, this is bigger news than their other model release this week, GPT-5. The expert analyses are showing that the 120B and 20B models are very capable while being significantly smaller in parameters compared to the competition. Running an O4-mini or O3-mini level model in a consumer laptop would have been unimaginable a few weeks ago, but here we are.  


The above video shows my experience running gpt-oss-20b on a 2024 M3 MacBook Air with LM Studio. Although the tokens generated per second are quite low, it is still usable. (Also, I've realized that LM-studio with its MLX support is much faster and far superior to Ollama in usability.) Here I'm getting the model to retrieve a live web page (BBC home page) and extract the news headings, all happening locally on a laptop with the help of a code sandbox and an MCP tool invoking playwright. 😅

Microsandbox and coderunner open up lots of possibilities here to make life easier using local models.

Talking about possibilities, Google also released Genie 3, which I believe will have many implications across video game development, filmmaking, robotics, and many other industries. Sadly, it didn't get the attention it deserved in my opinion.

Coding agents are the talk of the town these days. But interestingly, everyone (except Claude Code) is open-sourcing their product, it seems!
In other news, research has challenged the notion that AI tools are significantly improving the productivity of senior OSS developers. However, as explained in this excellent article, the situation is not as straightforward as it seems.

All in all, we may not be any closer to ASI or AGI. But the progress the field has achieved so far is big enough to change the trajectory of lots of careers (and economies too), I think. I wonder what new advancements we'll see in the coming months.

Sunday, March 30, 2025

AI dev tools that I use in March 2025

It's 2025, and LLM-based developer tools have become mainstream, not a novelty. I've been gradually using these tools for coding tasks outside of work. I enjoy using them in two popular ways: for vibe coding, which is all about those fun, low-stakes projects, and in responsible AI-assisted programming. In that latter setting, I take the time to review every line of code it generates, as I have higher security and quality requirements for certain tasks.

Here are the tools I commonly use these days:

  • Co-pilot chat in VS Code: I use it mostly to ask questions about the code base I have open in the editor and for general technical questions regarding the task at hand. Inline chat by highlighting code snippets or adding @workspace as context to the chat works well with my flow. The 50 chat requests/month on the free plan are enough for me. Although it comes with access to both GPT-4o and Claude 3.5 Sonnet models, I'm mostly sticking to GPT-4o here.
  • Cline: This is one of the first VS code extensions I tried for AI-assistance, and I liked it enough to stick with it. There are a few features I enjoy most in Cline:
    • The separation of plan/act modes helps me to mentally track the progress of the task.
    • The pane showing token costs helps to track the API costs in dollars as well as tokens.
    • The diff view clearly shows the proposed changes, so I can approve/disapprove as needed. After the task is completed, I will have a sense of which files of the code base were modified.
  • Claude code: It was somewhat surprising to see a big model provider like Anthropic getting into the application layer by providing an agentic CLI tool for development tasks. I'm sure they have some good reasons to build a CLI tool without going on the IDE extension route like the others. The installation, setting up, and working with it were very smooth. I like that they keep adding new features to it.
  • repomix and llm tool: I use this combination to understand code bases I'm delving into for the first time. I use repomix to first generate an LLM-friendly representation of the code base and then ask LLM to generate an architecture summary of the repo like this: cat repomix-output.xml | llm -m gemini-2.5-pro-exp-03-25 -s 'this file contains all the files in the repository combined into one. provide architectural overview as markdown' | tee architecture.md

Based on the number of input tokens sent to the model, I can clearly see that Cline is a bit more verbose in its prompts than Claude Code. But I guess the additional context helps because I noticed Cline was slightly better when handling complex tasks. So my usage pattern is to first try the task with Claude Code and, if it fails, throw away the generated code to start from scratch with Cline.

In terms of the models, I've moved from Claude 3.5 to Claude 3.7 Sonnet, and I'm paying for the API tokens as needed. Based on some quick experiments via their web interface, I'm also considering moving to Gemini 2.5 Pro (gemini-2.5-pro-exp-03-25 to be exact) because Google's offering a generous API quota in the free tier for this very capable model.

Tools that I want to start using more:

  • OpenHands: I've heard a lot of good things about it since OpenDevin, but I didn't get the time to try it out.
  • Zed: With me trying out Rust development, I wanted to use Zed for my development with all the hype surrounding it. But I could not get into the flow with it.
  • Warp: Same as with Zed, Warp sounded amazing on paper. But I kept going back to the plain old terminal. I should give this another chance.
  • files-to-prompt: I want to use it instead of repomix, but could not get it to work with UV.
  • Cursor, Windsurf, and others: Cline is working well for me for now, but I should try these out to see what's new with them.
  • Ollama: I'm eager to integrate all my tools with a locally hosted model! Unfortunately, the models I've found so far for my hardware (MacBook Air M3 16GB) haven't quite met my needs for coding tasks. I'm really looking forward to that amazing future. If you have any suggestions for models that would work well for me, I'd love to hear them!

PS: I also use Grammarly Premium. I thought I would include it in dev tools because I write a lot in English while coding (in code comments and documentation, and these days, mostly as prompts to the LLMs). So, grammar and spell checking all of this prose is important.

Sunday, June 18, 2023

Playing Warhammer: Vermintide 2 on Steamdeck

Due to this game using Easy Anti-Cheat (EAC) and EAC having limited support for Linux, the game does not work out-of-the-box on the Steamdeck. Here are the tweaks I had to do to get it to work. Before diving in, make sure to read the note at the very end of this post about preserving settings.

  • Delete Vermintide 2 compatdata directory  (It's here: ~/.local/share/Steam/steamapps/compatdata/552500)
  • Do 'Verify game files' using the Steam client
  • Delete WebView2Loader.dll and MicrosoftEdgeWebview2Setup.exe. ( By default they are both here: ~/.local/share/Steam/steamapps/common/Warhammer Vermintide 2/launcher. But the location is slightly different if you have installed the game on an SD card. You can find the exact location using Browse local files option in the Steam client. See the screenshot below.)
  • Then run the game!

Note: The user settings and game saves are at the following locations. Back them up before deleting the compactdata directory if you don't want to lose them.

  • .../steamapps/compatdata/552500/pfx/drive_c/users/steamuser/AppData/Roaming/Fatshark/Vermintide\ 2/user_settings.config
  • ../steamapps/compatdata/552500/pfx/drive_c/users/steamuser/AppData/Roaming/Fatshark/Vermintide\ 2/save_data.sav
You can find more details on the ProtonDB page of the game here.

Monday, February 20, 2023

Fixing SteamDeck Warframe installation (missing executable) error

When I tried installing Warframe on SteamDeck, I encountered this problem. It appeared to download several GBs of content for some time and run Vulcan shaders. However, when the installation finished, the game didn't launch.

When I checked the game directory (~/.local/share/Steam/steamapps/common/Warframe/) it was empty. When the game was launched in Desktop mode, it complained ~/.local/share/Steam/steamapps/common/Warframe/Tools/launcher.exe was missing. (Of course, because the directory is empty.)

'An error occurred while updating Warframe (missing executable)' Photo courtesy: /u/mylastnameschampion (https://www.reddit.com/r/SteamDeck/comments/xwvksm/anyone_have_issues_getting_warframe_to_launch/)

Here's how I fixed it and got Warframe to work on SteamDeck:

I added the game to my library on Epic Games Store. Then, downloaded Warframe using the Heroic Games Launcher. But note that I didn't launch it. (I wanted to run the steam version of the game, not Epic version). Heroic had downloaded several MBs and now there was a Warframe.zip inside ~/Games/Heroic/Warframe/. I then extracted that zip into ~/.local/share/Steam/steamapps/common/Warframe/. Voila! now there's tools/launcher.exe. When you launch the game on Steam now it will start.

The game is very optimized. It ran smoothly. The only minor annoyance is that I have to log in to Warframe account in the launcher every time.

Tuesday, October 25, 2022

Some Tips and Tricks for the Steam Deck

Steam Deck is a remarkable device. In the last few months, I had a delightful time clearing up the backlog of games I had in my Steam library, Epic Games store, EA, and Ubisoft. There were times when I encountered issues, however, and here are some valuable tools that I used to customize the Steam Deck in various ways. I will keep updating the following list as I come across new ones along the way.

How to play non-steam games

For Epic Games and GOG, I had success using Heroic Games Launcher. I heard some positive reviews about Lutris as well. For EA and Ubisoft games, I use the Origin Launcher and Ubisoft Launcher respectively.

Where to find the Origin installer

Since SteamOS is Linux-based the EA website doesn't allow downloading the Origin client from the web browser on Steam. However, you can directly download the original windows client hosted on EA Origin servers from here: https://www.dm.origin.com/download. (Don't use the installers hosted on websites not affiliated with EA Origin due to security risks.)

P.S. EA has now introduced a revamped EA app which can be found here and recommends using it instead. 

How to add non-steam game shortcuts to Steam game mode

Heroic Bash Launcher: Works for games that are installed with Heroic Games Launcher. This needs some command-line experience but conveniently takes care of downloading artwork for the shortcuts as well.

BoilR: Supports multiple game platforms (not only Heroic) but requires a little tweaking to get the artwork downloading to work. (i.e. by adding a SteamGridDB API key)

How to add custom artwork for non-steam games

If you didn't get custom artwork automatically added using the above tools, you can use SteamGridDB in conjunction with the SGDBoop tool. If SGDBoop is not working based on their instructions, you may have to run this command: systemctl restart --user xdg-desktop-portal

Other miscellaneous tips and tricks

  • One of the disadvantages of playing non-steam games over steam games is that non-steam games do not automatically download pre-compiled shader caches. However, to prevent non-steam games from lagging too far behind while shader caches are being compiled during games, you can use the DXVK_ASYNC=1 launcher option.
  • If you are concerned about shader caches taking too much space on the Steam Deck (as observed by the growth of the Other section in storage settings) use shader cache killer to selectively delete the cache directories that are no longer needed.
  • Install ProtonUp-Qt to manage multiple versions of Wine and Proton as needed by different games
  • Install Protontricks to further tweak Proton and install additional libraries required by certain games
  • Install Flatseal to manage Flatpak permissions (e.g., for installing non-steam games to the microSD card)
  • Check out the very helpful r/steamdeck subreddit if you need help with other steam deck issues.

Tuesday, May 26, 2020

Rooting Lenovo TAB 2 A7-20F on Linux

Lenovo TAB 2 A7-20F is a nice sturdy tablet that was very handy for me in the past to read the occasional article or ebook. However, it has been gathering up dust on my desk recently because it was slowing down. So I thought of giving it fresh life, removing the bloatware which came pre-installed with it.

In terms of specs, this comes with Android 4.4 (KitKat) and a Mediatek MT8127 chipset. Not stellar specs, but decent enough to get some work done. For rooting this, I was primarily looking for a way to do it using just a Linux laptop and a USB cable. So here are the steps I followed:
  • Do a hard reset of the tablet
    • For this, you need to restart the device to Bootloader by holding Volume up + Power keys when the tablet is starting. Then you'll come to this menu in Chinese.
      Chinese Bootloader menu of Lenovo TAB2 A7-20F
    • Here you need to select the clear eMMC (清除 eMMC) option by navigating to it via volume down key and selecting it via the power key.
  • Download SP Flash Tool for Linux from here
  • Then follow the steps in this XDA thread to install TWRP. (You'll have to run SP Flash Tool with root privileges.)
  • Copy the SuperSU zip to the tablet via USB.
  • Reboot the table to recovery mode by holding Volume up + Volume Down + Power keys when the tablet is starting. This should boot to TWRP.
  • Take a back up of system, data, and boot partitions via TWRP, just in case if you need to restore the stock ROM in the future.
  • While inside TWRP, install SuperSU by going to 'Install' -> 'Install ZIP' and selecting the copied SuperSU zip.
  • Now when you boot into the normal mode, you'll see SuperSU has been installed.
  • You can verify it by opening a terminal and typing su.
Success! Root access in Tab2 A7-20F
After this, I used Titanium Backup to freeze/uninstall the bloatware.

Here are some other threads if you plan on going beyond the new ROM and installing a new one.

Friday, January 26, 2018

Using Office365 Mail and Calendar in Linux

For some reason, if your school or workplace is using Microsoft Office365/Outlook for all communication, you can configure your Linux e-mail client to support most of those features such as e-mail, calendar, and contacts working. Sometime back, support for Microsoft Exchange-based services was very buggy in open-source e-mail clients like Thunderbird and Evolution. But they have come a long way since then. Here are the steps I followed to get my University e-mail working in Evolution.

Step 1: First install the software needed.
sudo apt-get install evolution evolution-ews 

Step 2: (Optional) If you are not using a GNOME-based Desktop Enivronment you need to install following dependencies as well. (For example, I'm using XFCE with i3WM)
sudo apt-get install gnome-online-accounts gnome-control-center

Step 3: Then start the gnome-contol-center. If you're not on GNOME, you might have to trick the Desktop to make it believe you're on GNOME like this:
env XDG_CURRENT_DESKTOP=GNOME gnome-control-center
 

 Step 4: Click on Online Accounts and add your Microsoft Exchange details. (Here use outlook.office365.com as the server.)

Step 5: Go to Evolution. Add an identity.

Step 6: In Receiving e-mail section, use https://outlook.office365.com/EWS/Exchange.asmx as the Host URL. Then when you click the Fetch URL button, OAB URL should be auto-completed.

Step 7: Once you restart, everything should be synced.
 

Thursday, January 11, 2018

Weather info in i3bar with i3status

Update: wttr.in now has a new one line format. So some of the below logic for parsing the output is no longer required.

I recently started using i3wm because it is light-weight, keyboard-friendly and uses the screen real-estate efficiently.  I customized i3bar and i3status (which came installed with i3) to show system information and date/time. But there was no out-of-the-box feature to get weather information from i3 status.

I wanted a simple solution that does not require installing an external program like i3blocks, conky, dzen2, xmobar or lemonbar. It had to also preserve colors I had configured for the i3bar output. So I came up with this simple solution.

Step 1: Setup a cron job to retrieve weather information every 5 minutes and store it in a temporary file. (This is because wttr.in only allows 1000 API calls per day and the weather information is not frequently updated in the server.)

*/5 * * * * curl -s wttr.in/montreal?T | head -n 7 > ~/.weather.cache

Step 2: Write a shell script to add this information to i3status data.

Step 3: The ~/.config/i3/config file needs to be updated for the status_command to pipe through this script, as follows.

bar {
        status_command .config/i3/weather.sh
        tray_output primary
}


Step 4: The ~/.i3status.conf file should also be updated to change the output to the JSON format.

general {
        output_format = "i3bar"
        colors = true
        interval = 5
}


This is how it looks like in the end.

 You can find more information from the following links.

Tuesday, May 26, 2015

Few tips on tweaking Elementary OS for Crouton

Activating Reverse Scrolling


 If you're a fan of reverse scrolling (or natural scrolling as some people call it) in Mac OS X, you can activate the same in Elementary OS by going to System Settings > Tweaks > General > Miscellaneous, and turn on Natural Scrolling. But I noticed in Elementary OS Luna for crouton, that setting resets to false after restarting. You can fix it by adding the following command as a startup application (System Settings > Startup Applications > Add)
/usr/lib/plugs/pantheon/tweaks/natural_scrolling.sh true


Getting back the minimize button


Method 1: Start dconf-editor and go to org > pantheon > desktop > gala > appearance and change "button layout" to re-order buttons in the window decoration. Eg: "menu:minimize,maximize,close"

Method 2: Run the following command.
gconftool-2 --set /apps/metacity/general/button_layout --type string ":minimize:maximize:close"

Note: To install dconf-editor use the command:
sudo apt-get install dconf-tools

To install elementary-tweaks use the command:
sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily
sudo apt-get update
sudo apt-get install elementary-tweaks

Tuesday, March 4, 2014

Crawljax gets a face lift. Web UI in Crawljax 3.5

Crawljax is an open source tool for crawling Ajax-based modern web applications by analyzing DOM state changes. Latest feature that will be available with Crawljax 3.5 is a Web front end for Crawljax. It supports all the major functionality of crawljax like, adding/editing crawl configurations, installing plugins, viewing crawl logs in real time and displaying plugin output. This is implemented using the common java web application stack and ember.js MVC framework. Kudos to developers, @jeremyhewett and @ryansolid.
To run it, simply unzip the web distribution archive and run the command java -jar crawljax-web-3.5-SNAPSHOT.jar. You can customize the port and output directory using -p and -o arguments. Here are some screen-shots of the web interface in action. More usage tutorials will follow.
Crawljax Web UI Home - You can start by adding a 'New Configuration' as shown

'Edit Configuration' Page
'Add Plugin' Page

Crawl status log with real-time updates
Output of the Crawl Overview plugin
Read the original post at crawljax.com

Related links

Friday, January 24, 2014

Set svn to ignore auxiliary LaTeX files globally

There are certain intemediary files (.aux, .log, etc.) that are best not put under version control because they change very often. In SVN, to stop svn status complain about them, you can add those patterns to the global-ignores property in your ~/.subversion/config file (or "%APPDATA%\Subversion\config" on Windows).

If you just want to set it for one repository, you can use svn propedit svn:ignore . or svn propset as explained here.

PS: Read Configuration Area Layout in the red bean book or this SO question for more information.

Wednesday, January 8, 2014

tcsh/csh tips for the bash user

The official shell in FreeBSD is tcsh/csh, and in Debian/Ubuntu, it's dash or bash. The back-story is, these fall into two families of shells: Ones derived from the original bourne shell (sh) which include bash, ksh etc. and those derived from the C shell which include csh, tsch, etc. These use slightly different commands for setting environment variables etc.
  • You can check the type of shell you are using by the commands echo $shell or echo $0
    Note: $0 is actually the name of the running process. It will return the name of the shell or shell script according to the context. Read more on that here: http://www.tldp.org/LDP/abs/html/othertypesv.html#CHILDREF2
  • You can get a list of all the shells installed on your system by typing
  • cat /etc/shells 
  • ..and also change the default one to a different shell (if you have the permissions) using the command chsh.
  • If you are moving from bash to tcsh, you will find your .bashrc file (or even .bash_profile, .profile) doesn't work anymore. It's the ~/.cshrc file in tcsh instead. And for setting environment variables, rather than the old command.. PATH= $PATH:$HOME/bin; export PATH you will have to use something like.. 
  • setenv PATH ${PATH}:${HOME}/bin
     Note the missing '='.

More related reading:

Tuesday, September 24, 2013

Region & time zone settings in Linux Mint 15 Cinnamon

For some weird reason, in Linux Mint 15 Cinnamon, Region & city selection boxes have been removed from Cinnamon Settings > Calender. You can set your region during installation, but if you make a mistake during installation or travel between timezones with a laptop then indeed there seems to be no easy way to configure this. This issue has been reported already as an issue. In the meantime, you can change it from the command line.
Display available time zone options:
timedatectl list-timezones
Set the time zone:
timedatectl set-timezone
Or you can just use..
sudo dpkg-reconfigure tzdata

Sunday, June 30, 2013

[Quick Tip] BPEL Correlation, Load tests in soapUI and Groovy

In WS-BPEL, the concept of Correlation is used to maintain references to instantiated business process instances with the help of business-application-specific data (like social security numbers, Order IDs) in the exchanged messages. When you're testing these BPEL processes with asynchronous service invocations you might have come across the problem of maintaining a unique correlation value across the multiple test steps of a BPEL process (because the back-end services this asynchronous service calls made to, are not available in the test environment). Here's a quick tip to achieve this via a Groovy script in soapUI. In the beginning of your test case have a Groovy script test step which does the following: It creates a random integer value and assigns it to a property. So you can make use of this property in the SOAP request where the correlation set is initialized, and all the other SOAP request test steps which uses the same correlation set, as follows:

Thursday, May 9, 2013

Namespaces in E4X

ECMAScript for XML (E4X) extends JavaScript with support for XML-based data manipulation by introducing new XPath-like language features. Apache ODE/WSO2 BPS has an E4X Assign activity to ease Rich Data Manipulation in BPEL using E4X. To use namespaces in E4X queries, follow the syntax namespace::localName in place of a normal element specifier. Eg: To extract the hotelRequestId from the variable submitHotelReviewRequest which has a format similar to the following: You can use a js snippet as follows:
Related Links:
https://developer.mozilla.org/en-US/docs/E4X/Processing_XML_with_E4X
http://www.taval.de/publications/INPROC-2009-25/
http://stackoverflow.com/questions/922668/e4x-grab-nodes-with-namespaces

Friday, May 3, 2013

Few tips to setup a Linux UPnP/DLNA Media Server for iPad

For converting files to the Apple compatible format, I use arista-transcode
..or ffmpeg
In AVI/MKV files, sometimes there are AVI files with 2 audio streams,  the first and default track is not in your preferred language, but the second track is. This causes problems when you view it in a player that does not support multiple audio tracks. Here's how to delete the unwanted audio tracks and making one the default audio, using the MKVtoolnix package.

First, get the audio track info so we know which one to keep.
mkvmerge -i input.mkv

Then copy only selected audio tracks to the new file with --atracks option. Here 2 is the Audio Track ID we need to keep.
mkvmerge -o output.mkv --atracks 3 input.mkv

My preferred Media Server is MediaTomb.
mediatomb -e wlan0
Here I have used the wireless network interface to bind to, so all the other devices on the Home WiFi can connect to this server.
It also supports transcoding to perform format conversion of your content on the fly allowing you to view media that is otherwise not supported by your player. If you like to go ahead with tinkering the configuration, find it here: ~/.mediatomb/config.xml and change 'no' to 'yes' on the '<transcoding enabled="no">' line. But for mediatomb and iOS devices it's hard to find the right configuration for live transcoding. So I'm sticking to the above manual conversion.

Sources:
http://superuser.com/a/77582/52620
http://www.videohelp.com/tools/MKVtoolnix
http://www.techradar.com/news/digital-home/media-servers/build-a-transcoding-upnp-media-server-923345

Wednesday, April 17, 2013

How to use Hibernate as the persistence layer for Apache ODE/WSO2 BPS

Note: In order to run ODE/BPS under Hibernate, you will have to include external dependencies (and accept Hibernate LGPL license).

By default, Apache ODE/WSO2 BPS uses OpenJPA as the persistence layer, but also includes implementation for Hibernate as well. For switching to Hibernate add the following system propety. (For WSO2 BPS you can do it via $CARBON_HOME/bin/wso2server.sh)
-Dode.persistence=hibernate \

Make sure you have copied the required Hibernate jar to $CARBON_HOME/repository/components/lib directory.
If you are getting errors at server start up, check whether the necessary tables have been automatically created by Hibernate. If not, you can use a script to manually create the tables (similar to the following used for MySQL DB)  Note Hibernate has slightly different database schemas and also uses "BPEL_" prefix in table names instead of "ODE_" prefix.
If you are using a DB other than Apache Derby, H2, MySQL or Oracle, and having trouble resolving the DB dialect from the database product name, you can manually set the HIBERNATE_DIALECT in org.apache.ode.daohib.bpel.BpelDAOConnectionFactoryImpl class. For implementation details see dao-hibernate and dao-hibernate-db modules in Apache ODE source.

Related discusson on "Switch to the hibernate DAO layer" mail thread.

Wednesday, February 20, 2013

ReplyTo header in Unified Endpoint configuration of WSO2 BPS

In a BPEL process, when there is an invoke to an external synchronus web service, and if you want to send the response of this service to a different endpoint (rather than sending back to the BPEL process), you can use Unified Endpoint configuration of WSO2 BPS 3.0.0 to set the WS:Addressing ReplyTo header as follows:
You can refer to this config file (locatd in registry or in the file system) as follows, inside the deploy.xml file:
There are other use cases of UEP like adding QOS, Security etc. You can read more on that here.

Tuesday, February 19, 2013

Use of 'DynamicImport-Package: *' in OSGi

In OSGi, 'DynamicImport-Package' attribute is used in the MANIFEST.MF file to specify the patterns of packages that are not found in the normal bundle contents or Import-Package field. If the package is not available in the initial resolution process, it will not fail, but will be attempted to resolve every time a class from the package is required.

 'DynamicImport-Package: *' is a trick used by bundles to allow importing client packages which are not known during bundle build time, in addition to its own dependencies, to prevent ClassNotFoundException issues. [i.e. If there are classes which have Class.forName (or other dynamic look up)] This turns OSGi Framework into a very expensive class path for the packages involved and breaks the concept of versions in OSGi. Use of this attribute is said to be a sign of a non-modular design and it might be a good time to revisit the architecture.

To learn more:

Monday, February 11, 2013

How to make use of WS-Addressing ReplyTo header in an Asynchronus BPEL Process


In Apache ODE or WSO2 BPS, if you are looking for a way to asynchronously call back from a BPEL process, after the process is finished, to an reply address dynamically provided in the Request Message with WS-Addressing headers, you can copy the wsa:Address from the ReplyTo header, to the partnerLink related to the final invoke as follows:
If you're testing this with SOAP UI, make sure you include wsa:Action, wsa:To, wsa:ReplyTo and MessageID in the request. Otherwise you will get an error similar to 'org.apache.axis2.AxisFault: A required header representing a Message Addressing Property is not present'
You can read more here about Using WS-Addressing in SOAP UI
Hat-tip: From Apache ODE mail archives, Related question from StackOverflow