Alejandro G. Carlstein Ramos Mejia Blog

 icon-arrow-left Microservices: Brownfield: Transactions

The support reporting for our micro-services architecture system can be a little complex. At difference to a monolithic architecture where you may have a few databases to report from, in the micro-services architecture system, you will have a tons of databases to report from since each micro-service will have its own database.

The report of the data will come from the be split across multiple micro-services and since there is no a central database where you could extract this information you may need to join data across databases. Also, in the micro-service architecture system, reporting can be slow. 

One way to facilitate the reporting is to have a dedicated reporting micro-service which calls all our micro-services and takes care of collecting and consolidate the data. The only disadvantage is when we are reporting large volumes of data or we wish to obtain a report in real-time.


 icon-arrow-left Microservices: Brownfield: Migration: Database | Microservices: Brownfield: Reporting icon-arrow-right 

When moving from a monolithic system to a micro-service architectured system, we need a different approach when dealing with transactions.

Transactions are useful:

  • They ensure data integrity.
  • They allow us to updates several records as part of one transaction.
  • If one or more updates (and/or creates) fails, we can roll the entire transaction back.

In monolithic transactions are simple. We can have one process which is updating and creating records. These records are part of the transaction; therefore, the same process can either commit the transaction or roll it back if there are any issues.


NOTIFICATION: These examples are provided for educational purposes. The use of this code and/or information is under your own responsibility and risk. The information and/or code is given ‘as is’. I do not take responsibilities of how they are used.

Symmetric Encryption

In the symmetric encryption, the same key (normally a single-key) is used to perform the encryption and decryption of the ciphertext.

Symmetric Cipher Model: This model is performed by performing transformations and substitutions on the plaintext. A secret key, independent from the plaintext and the algorithm, is used to cipher the plaintext. After, the ciphertext plus the secret key is used with the decryption algorithm to obtain the original plaintext.


< Previous (Computer Graphics with OpenGL – Part 9)

NOTIFICATION: These notes are published for educational purposes. Using these notes is under your own responsibility and risk. These notes are given ‘as is’. I do not take responsibilities for how you use them.

PDF Content:

  • Curves (continued)
  • Random notes
  • Control points
  • Normal of surface
  • Diffuse reflection



This was a trip I did in 2007-2008 from Florida to Binghamton, NY. After I move to Johnson City, I wait around six month for the warm weather to arrive. I visited my brother family in Florida, fix up my motorcycle and drive it up to here.


NOTIFICATION: These examples are provided for educational purposes. Using this code is under your own responsibility and risk. The code is given ‘as is’. I do not take responsibilities of how they are used.

This tutorial assume that you have some experience with C++ and concepts of Programming Languages.

Basic differences between objective-C and C++:

  1. Keywords begin with the @ character, for example: @class, @try, @catch, etc.
  2. Boolean type is BOOL (instead of bool as in C++). They can be set as YES or NO
  3. Every object is of type id
  4. Classes:
    1. They are objects.
    2. They are instances of a meta-class (root class).
      1. This means that they can be dynamically managed
    3. You can create instances base on the name class
    4. Add classes at run-time
    5. Ask methods from the class
    6. Equivalent to C++ Run-Time Type Information (RTTI) but more powerful and with out the lack of portability issues related with RTTI.
    7. Objective-C defines a root class, NSObject. Every new class should be derived from this class.
    8. Since classes are meta-class instances (objects), it is possible to declare a pointer to them.
  5. nil is the equivalent of NULL in C++ for an object pointer; however, do not interchange nil and NULL
  6. The equivalent of nil for a class pointer is Nil.
  7. Interface code of a class goes in .h files
  8. Implementation code of a class goes in .m files
  9. Implementation code of a class in Objective-C/C++ goes in .mm files
  10. Directive #import replace directive #include.
    1. The directive #importinclude already the compilation guards normally used in C++, example:
      /* code */
      #endif // COMPILATION_GUARD_H
  11. As standard, all class names begin with the prefix NS, example: NSString
  12. Calling a method is done by using the following syntax:
    [my_object do_something]

    instead of using this syntax as in C++:


I found out that trying to find which is the relay that controls the high/low beams in my VW GTI ’98 was going to much work.
I would require to remove the seat since the relays are in a very hard position to access to.
My solution? Take the tester, remove the panel around the steer wheel and check the cables.
I put a regular switch to emulate the relay that take care of the high/low beams. Problem solved.