XML Boiler project reached an important milestone

XML Boiler project reached an important milestone: To make the first release it remains to debug it. (Also need to create particular XML processing scripts to make it useful.)

XML Boiler is the implementation of my Automatic transformation of XML namespaces specification, which is going to revolutionarize processing of XML documents both locally and on the Web.

Please donate to porton@narod.ru at PayPal.

Advertisements
Posted in Linux/Unix, Programming, XML | Leave a comment

Dear Martin,

This is a letter to Martin Fowler, which I also publish in my blog.

I am rather wondered why you don’t do any mention in your article

https://www.martinfowler.com/articles/injection.html

about the following problem:

Real classes which use dependency injection very often may need to pass some of their dependencies to implementation classes which they depend on.

This may lead to increase of the number of dependencies and make code somehow hard to write and read. Another problem is that while implementation of a class changes (say to make it more advanced), new dependencies may appear leading to such inconveniences as changing constructors’ signatures.

I feel that one of the best solutions is to group related dependencies into a record (if to use Pascal term) or a structure (if to use C/C++ term), like as this fragment of my ongoing open source project written in Python:

class ExecutionContext(object):
    def __init__(self, logger, translations):
        """
        :param logger: logger
        :param translations: usually should be gettext.GNUTranslations
        """
        self.logger = logger
        self.translations = translations

This way I can pass one object ExecutionContext instead of two objects (the logger and the translations) into constructors. These objects are to be then grouped into even greater objects, etc.

Do you think it is a good idea?

Posted in Programming | Leave a comment

Finished translation of namespace transformer to Python

I originally started to write my XML Boiler software in Ada. Ada compiler has too many bugs.

I switched to Java. I discovered for myself that Java byte arrays are limited to about 4GB of bytes, this makes problematic processing of big XML files. I switched to Python.

Now I have finished translating it from Java to Python. Now I can continue to implement features. Yet much work remains.

Posted in Programming, XML | Leave a comment

Library to spawn a process with given input and receive its output

I have created a C library to span a process with given input and receive its output.

One cannot just write to stdin of a process and then read its stdout through pipes, because this way it may lead to a deadlock.

Instead use my library:

It is an alpha release, tested on Linux.

During its development I managed to crash Linux: https://bugzilla.kernel.org/show_bug.cgi?id=198549

Posted in Linux/Unix, Programming | Tagged , , , , , , , , | Leave a comment

A new problem appeared writing automatic XML transformations

This is about Automatic transformation of XML namespaces.

Previously I divided all transformations into two groups:

  1. with a given source and target namespace (as converting DocBook into HTML);
  2. with only source given but not the target (as for XInclude).

Today I’ve realized that it is a wrong division. Instead we need to split into:

  1. transformations for transforming from a specified source to a specified target;
  2. transformations for which transformation should happen if we have correct source namespaces, not depending on which is the target namespace.

The second kind is some kind of “reducing” as XInclude reduces one XML file to another (and this usually are transformation in “right” direction even if the destination namespace is not in our list of destination namespaces). The “reduce” is defined as an operation which should always happen over an XML file even if the target namespace is not in our set of expected target namespaces.

But “reducing” is not absolute. Sometimes we may want to reduce from a given source namespace and sometimes not. Reduce is some relative property: The same namespace may be considered as a source of reduce and sometimes not. For example one may want to convert XInclude tags and attributes into another XML namespace which describes inclusion (instead of reduce).

We are yet to understand relative of what is the reduce. How we specify when a reduce is in our set of reduces and when no.

Sorry if I explained not quite clearly, this is a work in progress.

This is a new hard (fundamental) problem appeared before me while developing Automatic transformation of XML namespaces. I have solved some other fundamental problems after some despair and hope to solve this problem too.

Posted in XML | Leave a comment

Expired access token in Google OAuth

I sought in Internet how to determine from Google response whether an access token is expired. I found no definitive answer.

So, finally I created an access token and waited for a hour to see the Google response when I try to use this token.

The Google response (with a partial list of HTTP headers) is below:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token
Content-Type: application/json; charset=UTF-8

Username/Password Authentication Failed.

A weird thing is that Google says that it is application/json but the response body is not a JSON.

So the only way is to check whether the response HTTP status is 401.

Posted in Uncategorized | Tagged , , , , , , | Leave a comment

Why Linux is better than Windows

One man asked me: I have heard of Ubuntu Linux, but have never seriously considered using it. What makes it “good”?

Here is my reply (not aspiring for completeness, Linux has other advantages also):

I could say that the “main” advantage over Windows is that the system goes together with applications. You can update ALL installed applications with single command.

You can easily update all programs to the newest version and after this you sometimes may even not reboot.

After my Linux was installed, I had Alt+F4 like Windows to close the current window. I reconfigured it to Ctrl+Esc. Can you do similar key rebinding with Windows?

Also it is more reliable, less affected to trojans.

Linux is faster and requires less resources.

You choose from several windowing systems: including Gnome (which I use), KDE, and others. (In Windows you are limited to user32.dll and nothing other.) In my opinion Gnome is much more convenient than Windows.

When you buy a new computer, you can easily copy the files from the old computer, and there is no need to reinstall Linux or applications anew. (Not so with Windows.)

However, there are some drawbacks:

Not all videocards work, it is difficult (or impossible with some models) to configure an UPS.

I haven’t succeed to configure hibernation of the PC.

There is no PhotoShop or MS Office (however there is Gimp and LibreOffice).

Posted in Hardware, Linux/Unix | Leave a comment