Article Fabian Haupt · Jul 22, 2020 6m read

If you found your way here you’re one of the people who’ve been asked to work from home for the time being. At this point we don’t know how long the crisis is going to last or even how the situation is going to look in a few weeks. Nevertheless you need to get your work done. You rarely worked from home before and now you are faced with a number of challenges. Let’s talk a bit about what’s going to keep you sane on the home front.

Who am I and why should you care about what I have to say?

You shouldn’t. You can. Nobody is forcing you.

1
0 372
Question Fabian Haupt · Dec 1, 2019

Hi folks,

how do people run iris-community edition nowadays? It seems there are some incantations needed that are not documented here: https://hub.docker.com/_/intersystems-iris-data-platform/plans/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions

When I follow these, I am only getting an error:

(tasks)  ⚙ fhaupt@lamia  ~/projects/iris  docker run --name iris --rm  -p 9091:51773 -p 9092:52773 --volume /Users/fhaupt/projects/iris/external:/durable --env ISC_DATA_DIRECTORY=/durable/iris store/intersystems/iris-community:2019.4.0.379.0
[WARNING] No init process detected!
7
0 1086
Article Fabian Haupt · Aug 3, 2017 3m read

In this short article we talk about how to get Yape running in a docker container to avoid having to setup python on your machine.

It's been a while since the last article in this series, so let's recap quickly.

We talked about using matplotlib to create a basic graph. Afterwards we introduced dynamic graphs using bokeh. In the 3rd part we talked about generating heatmaps using monlbl data.

A common theme in the feedback I got over various channels was the difficulty setting up an environment to run any of these.

1
1 1148
Article Fabian Haupt · Apr 19, 2017 2m read

Code coverage and performance optimization of code has come up a bunch of times already, so most of you should already be aware of the SYS.MONLBL utility. Often a visual approach to looking at code is much more intuitive than pure numbers, which is pretty much the whole point of this article series. This time we will take a slight excursion away from python and its tools and are going to explore generating heatmaps from ^%SYS.MONLBL reports.

As a quick reminder a heatmap is just a specific visualization tool, which gives us an overview of data where colors represent a certain value.

0
1 684
Article Fabian Haupt · Feb 10, 2017 6m read

In last week's discussion we created a simple graph based on the data input from one file. Now, as we all know, sometimes we have multiple different datafiles to parse and correlate. So this week we are going to load additional perfmon data and learn how to plot that into the same graph. Since we might want to use our generated graphs in reports or on a webpage, we'll also look into ways to export the generated graphs.

Loading windows perfmon data

The perfmon data extracted from standard pbuttons report is a bit of a peculiar data format. On first glance it is a pretty straightforward csv file.

0
0 1124
Article Fabian Haupt · Jan 20, 2017 8m read

This is the first article of a series diving into visualization tools and analysis of time series data. Obviously we are most interested in looking at performance related data we can gather from the Caché family of products. However, as we'll see down the road, we are absolutely not limited to that. For now we are exploring python and the libraries/tools available within that ecosystem.

The series is closely tying into Murray's excellent series about Caché performance and monitoring (see here) and more specifically this article.

4
1 1809
Article Fabian Haupt · Dec 22, 2016 1m read

Cache rendering of an old classic:

 s enc="dQZ4nK1VzU7DMAy+I/EEveTcCWicpt3UU2VABTRA/AhBeYW+As/U7vE4VNhxypJuoAlhS1vixJ//"_
 "06TNsy5p4TppzRKTNqtMXuXQjSSrdEPSEmmtK1uZssp1l0Z3nHJ9fEQroJURlQLHNE35WPYWx7N3"_
 "YpJYkeRe4mQzkEKuGDwjkHTBP+9JW4oUsB+Y2CVj2JuttlkFAbhbfdIuRU/jhvZkryejtNok7UpO"_
 "Moww3JbdcPifW8APosVi4Q9Otwck5LMojmKOojNnDUIXe0XEvnVrdaEeiF95H8BYgXG38o6i0Vpg"_
 "lhSO00TVkN6VelRPaq1q9ehucnizrGopJ5TY+8zHzOBSPih8jjnLQWbyKSYy25Cpe+JXMTdM2dZS"_
 "cbAu3YP42EQw4GOq1a16VjfEtWoCGHJdS5dAjkPoYgRTCsw8DG4MaSAw2G++KfA6So0v9xTJVmHD"_
11
0 1085
Article Fabian Haupt · Dec 22, 2016 8m read

I was benchmarking the populate utils when I noticed something strange. Consider this simple benchmarking method:

ClassMethod runBench(count As %Integer = 300000)
{
		s types=["name","ssn","company","title","phone","city","street","zip","mission","state","color","product","string","integer","float"]
		//s types=["name","ssn"]
		s iter=types.%GetIterator()
		while iter.%GetNext(.key,.value){
			s start=$P($ZTS,",",2)
			s opt={}
			s opt.type=value
			for i=1:1:count{
				s res=##class(DataGen.Generator).
0
1 524
Article Fabian Haupt · Sep 2, 2016 2m read

By now it's a commonplace how to implement a basic REST API in Caché and there is good documentation about it here: REST in Caché

A question that comes up from time to time is:

How can I make a parameter in my REST url optional?

Simply put, is it possible to create a URL map in Caché that maps a URL like this:

http://server/API/object///old

While this might look odd, this is actually a valid URL. You can read the details in RFC3986 section 3.3.

The framework provided by %CSP.Rest actually allows us to create maps that match the above URL.

1
1 2901
Article Fabian Haupt · Feb 12, 2016 8m read

Intro

Please note, this article is considered deprecated, check out the new revision over here: https://community.intersystems.com/post/tutorial-websockets

The goal of this post is to discuss working with Websockets in a Caché environment. We are going to have a quick discussion of what websockets are and then talk through an example chat application implemented on top of Websockets.

28
4 19464