Blog

Job Seekers: you need to know what recruiters say about Cultural Fit

I’ve been interviewing lately job seeker and recruiters alike, asking questions about the hiring process. Next I want to outline my findings on the topic of Cultural Fit when it comes to hiring people who are not for leadership positions.

First: what is cultural fit? To keep it super short – it is that sweet spot where your personal values fit/go together with the team values you will be working in. Some example of such values:

  • Personal value: I like to work goal oriented -> team value: we do not micromanage
  • Personal value: I like team work -> team value: we work collaboratively and like when people giving input
  • Personal value: I like to learn new things -> team value: learning on the job is expected

To exemplify the hiring process structure of a company, from my job seeker perspective, I super simplified structure is:

  • post job position
  • scan of received CVs
  • interview process
  • hiring offer

So where, in the above mentioned parts, does the company check the cultural fit?

From what I discovered, usually the earliest, cultural fit is checked at the (drum roll) – interview process

So why is this important for you to know and be aware of?

  1. Your SKILLS that you put on the CV are the ones that get you in the door and ONLY those! If there is an automatic process that scans the CVs, the personality is out the window. If a headhunter is handling your job offers, usually only the experienced head hunters (mostly hiring for high level positions) ALSO consider cultural fit.
  2. Your CV structure and the way you write talk about your cultural fit as well. These aspects are 100% checked by every hiring decision maker (once you manage to get them to see it). Typos show you do not care enough about the company.
  3. If anyone uses your picture, or name, or age, or any other such personal information on your CV to check cultural fit -> alert alert you are dealing with unconscious bias, privilege to the point of discrimination. They definitely are doing it WRONG!
  4. The company will ask you so called usual questions like: what is your perfect work environment? I mean I get it BUT can we agree that THESE types of questions are just plain BORING and maybe a more natural flowing conversation is more in the CULTURAL ADD trend? I mean, I personally make a difference between a good recruiting experience and a BAD one based on such questions!
  5. It is mega important that at the interview process you ask YOUR questions to check YOUR cultural fit expectations. And it is ok to ask:
    • Can I talk to an employee that does/has/is in your company? (especially if the people in the interview are not representative enough for you)
    • Do you offer shadowing for this role?
    • Is this a culture in which I can be flexible/mentored/informal/silly/funny/tattooed/be sometimes late to work/work in a quite place/wear only black/take unpaid leave/have pink hair/sporty/not drinking alcohol and so on…
    • Side note: maybe recruiters can even give the interviewee a list of such questions as preparation, so that I know it is ok to ask and I will not be judged or disqualified because of them! (I admit I do not ask candidly all of them because I fear I will be met with a “what you are late to work?” look. Taking about bringing my authentic self to work when I cannot even do that in the interview lol)

And for the go I want to leave you with a quote:

If someone is incompetent it is OK but

if someone is incompatible it is a disaster.

8 times more likely to achieve better business outcomes

Who does not want that?

EVERYONE wants that! And more:

  • twice as likely to meet or exceed financial targets
  • three times as likely to be high-performing
  • six times as likely to be innovative and agile

How does a company achieve this, you may ask? SUPER simple!

By creating an inclusive environment.

And this is where the cookie crumbles!

  • “I do not know what inclusive means”
  • “It is not aligned with business goals”
  • “I do not believe this works”
  • “We do not have time for this right now”

It turns out is is not so hard! Like Marlow’s pyramid you need to start with the pyramid base and add until you reach the TOP. The good news is: it only has 3 steps.

Inclusive culture 3 steps

I worked in IT companies all my professional life (10 years) so here are my suggestions for IT companies:

COMFORTABLE

  • Improve your Performance Interviews to be FAIR (actually helps drive equal pay)
    • fair means: have a worked out mathematical formula. It is not so important what that formula is as much as it is important that YOUR employees knowing there IS ONE!!! (it is a darn good start)

CONNECTION

Only and only if you have worked out the previous point continue working on this one. Remember it is a pyramid.

  • Offer opportunities for different social activities, and NO, going to a beer is not inclusive and soooo not enough.
    • Have you tried: hiking, escape the room, beach volleyball, cooking, helping out at a shelter or volunteering together for a better cause? You get the point…
    • Do not be shy to invite also people from other departments! It really really really helps!

CONTRIBUTION

Only and only if you have worked out the previous point continue working on this one. Remember it is a pyramid.

If you think comfort and connection was hard to achieve, you better give up now.

  • Are employees really involved in your decisions?
    • Have you asked them what would be a good work from home guideline or did you just slap it on them?
    • Have you asked them if the interface makes any sense to a woman? How about a child? How about a visually impaired person?
    • Have you asked them what your company values mean to them? Do you even have any? (NO? perfect! you have the amazing opportunity to make them collaboratively! You have values already? Can you afford to change any or add?)
  • Do you value the people who drive your business?
    • Do you, as the CEO, ever compliment them on a small contribution (in person)?
    • Do you have a down to earth, real life (NOT about business) (ones will say VULNERABLE) conversation with your employees?
    • Do you ever talk about the purpose of a task? Do you listen when they struggle with motivation? Do they even TELL YOU?

These are just some ideas I know would have helped me stay in my work place. Anyway, the more simple ones.

Still skeptical I see… Don’t take my word for it!!! Please read the Deloitte Belonging article. Just hot off the press (15 May 2020).

Make time to understand the implications you read there! If you just plan to skim through then don’t bother.

“8 times more likely to achieve better business outcomes

I really really don’t believe it is so hard. The only reason why I think it is not implemented yet is: “the day to day business is simply done differently in my company”.

Disclosure: quotes are not quotes from people I know. They are just my left shoulder talking to the right shoulder, trying to argument both sides ūüôā

Cookie icon by Icons8

Exclamation Mark icon by Icons8

#hackthecrisisat

This weekend I decided to stop complaining of my throat and head ache over the week. And I stopped feeling useless. And I stopped feeling like work is everything I got. I decided to join an online hackathon!

Yup.. we are in the middle of it. It will finish tomorrow. And it feels great!!! My confidence, chipped away at work, is back! I felt valued and appreciated and grateful that my “generalist” skills (i call it so because I have confidence problems lately (Impostor Syndrome)) are useful to someone ūüôā

My personal goal from the hackathon of learning something new and contributing was already achieved! I did not think it would be so easy actually. I loved to listed to ideas and find out about resources and have the opportunity to meet other people who know and like RDF.

Concretely: what at the beginning was a pile of ideas and wishes and divers points of view, I managed to converge to a concrete goal, a focus in the team. All the great ideas needed to be part of something achievable and deliverable in 2 days. I also jumped on installing SemanticMedaWiki on a EC2 AWS…. much like I learned from hosting my own website. (ieii happy about this one). Yup and I got to learn about SemanticMediaWiki.

The project is not over. Tomorrow is the great showdown with pitching and all… And I really want to get to know the input for the business model and the structure of the pitch. All super cool topics I am interested in lately.

In all this excitement I even forgot to mention what the project is about. Original idea:

Platform Eutopia
There exists no platform where one can get an overview about all the problems or bottlenecks we are facing at the moment in connection with the corona crisis and the possible solutions for those. And also with the people and connections that are already working on the problems.

More about the outcome:

See here the final project pitch presentation I was part of: https://www.youtube.com/watch?v=25yVp74U4ho&feature=youtu.be

Project website: https://evolution-circle.wixsite.com/website and the SemanticMediaWiki: http://54.93.194.43/wiki/Eutopia

Reference: https://hackthecrisis.bubbleapps.io/

P.s There are a bunch of hackathons on this topic all over the world. Not too late to join one, for example the upcoming global one: https://covid-global-hackathon.devpost.com/submissions

And more:

https://wirvsvirushackathon.devpost.com/submissions
https://changemakers-day-hackaton.devpost.com/submissions
https://endcoronavirus-org-hackathon.devpost.com/submissions
https://hackfromhome.devpost.com/submissions
https://freshworks-fights-covid.devpost.com/submissions
https://coronawiki.net/index.php?title=ALL_Projects
https://coronavz.com/

Lets recall transaction processing (Java with Spring) – part 2

So lets get back to the overview of transactions in Java with Spring Framework.

Bean-managed transactions can be:

  • container-managed transactions or declarative transaction management
  • application-managed transactions or programmatic transaction management

Declarative transaction management can be XML-based or annotation-based. A disadvantage of declarative transactions is: when a method is executing, it can be associated either with a single transaction or no transaction at all.

Programmatic transaction management gives more liberty. Take as example this pseudocode from Java EE 6 Tutorial (quite old but makes the point):

begin transaction
...
    update table-a
...
    if (condition-x)
   commit transaction
    else if (condition-y)
   update table-b
   commit transaction
    else
   rollback transaction
   begin transaction
   update table-c
   commit transaction

This fine-grained programmatic dependency of when to commit or rollback can only be achieved without declarative transactions.

Transaction Propagation

Not mentioned so obvious is the fact of what is the DEFAULT propagation in Spring transactions.

  • The default propagation is REQUIRED
Propagation types and their behaviour
PROPAGATION TYPE no current transaction there’s a current transaction
MANDATORY throw exception use current transaction
NEVER don’t create a transaction, run method outside any transaction throw exception
NOT_SUPPORTED don’t create a transaction, run method outside any transaction suspend current transaction, run method outside any transaction
SUPPORTS don’t create a transaction, run method outside any transaction use current transaction
REQUIRED(default) create a new transaction use current transaction
REQUIRES_NEW create a new transaction suspend current transaction, create a new independent transaction
NESTED create a new transaction create a new nested transaction

Table is from ninjalj’s blog.

So lets see what this means in the context of a database connection and what the other propagation types.

And because I never went in too much detail here, I recommend to read Marco Behler’s blog to get the full picture.

A cross-RDF Graph Database investigation: the case of the missing context!

What is a graph in RDF?

RDF Graph Databases, also known as Triplestores, are a subset of Graph Databases where data is represented in triples. A simple triple consists of a subject, a predicate and an object aka subject-predicate-object. The predicate is the edge in the data graph that connects the subject to the object nodes. If we add context or graph information to a triple, we end up having the following structure: graph-subject-predicate-object. And when we talk about a graph in an RDF Graph Database, we always refer to it as the context. This type of triple, in turn, is named a quad.

The graph exists to structure and represent your data better because the triples with the same graph have the same context. The existence of the graph is one of the main differences between a property graph database and an RDF graph database. Yes, you can store your graph information in a property graph database too, but the RDF store is designed from the ground up with this in mind.

In the end, the choice of the database type is a matter of performance and how you want your data to be represented best for your use case.

What happens if there is no graph? 

One can insert data in the RDF Graph Database that does not contain the graph information. These simple triples are stored in the so called ‚Äúunnamed graph‚ÄĚ or ‚Äúdefault graph‚ÄĚ of the database. We want to see how to access this graph and we know that the DEFAULT SPARQL keyword is usually used in such cases.

Now that we specified what the DEFAULT graph is in relation to an RDF Graph Database, we will take a look at different triplestores and their specific implementation of it. We will look at some basic actions like data insert, delete and query. 

The triplestores we evaluated are: RDF4J 2.4, Stardog 6.1.1, GraphDB 8.8, Virtuoso  v7.2.2.1, AllegroGraph  6.4.6, MarkLogic 9.0, Apache JENA TDB, Oracle Spatial and Graph 18c. From now on when we mention one of them, we refer to the versions listed here. We did not change any configurations upon installation, so our observations relate to the default setup. 

Learnings

Data insert observations

The insert data SPARQL query used is

INSERT DATA {

<http://example.org/picasso> <http://example.org/paints> <http://example.org/guernica>

}

This query inserts a triple which has to graph information. The triple is stored in the DEFAULT graph of each RDF Graph Database. However there is a difference from store to store of what the DEFAULT graph represents. 

In Stardog, the DEFAULT graph keywords does not exist and instead one needs to use <tag:stardog:api:context:default>. All triples land here. 

Apache JENA TDB uses <urn:x-arq:DefaultGraph\> as default graph and the triples land here. You can use the DEFAULT keyword to query them.

Virtuoso has an internal default graph but the big difference is that a user cannot access it by using the DEFAULT keyword. The triples without graph information are added to this internal default graph.

Select data observations

The SPARQL query for selecting data used is:

SELECT * WHERE {

?s ?p ?o

}

For most of the triplestores what happens is that the data retrieved is coming from all graphs, including the DEFAULT graph. Basically it does not take into account any specific graph. The exceptions are:

Stradog retrieves data only from its internal default graph <tag:stardog:api:context:default>.

For Virtuoso you always need a graph otherwise you receive: ‚ÄúNo default graph specified in the preamble‚ÄĚ.

Delete data observations

The SPARQL query used to delete a triple is:

DELETE {

?s ?p ?o

} WHERE {

<http://example.org/picasso> <http://example.org/paints> ?o

}

Generally the triples that match the pattern are deleted from ALL graphs it exist in. Exceptions from this behaviour we found in:

Stradog deletes the triple only in the defined default graph. 

MarkLogic and Apache JENA TDB behaves the same. It deletes the triples that match the pattern only from the internal default graph. 

In Virtuoso one always needs to specify a graph to delete data. 

We also want to remark how a SPARQL query looks like when the DEFAULT keyword is present. The query to select data would look like:

SELECT * FROM DEFAULT WHERE {

?s ?p ?o

}

Additional known configurations 

In Stardog there is a configuration property which lets you choose which behaviour you like better. Through the query.all.graphs = true parameter, when you query without a graph, it will look in all graphs – default and named graphs – exactly like in the case of RDF4J. And if the property is set to false, it will only query the internal default graph. 

Additionally, if for some reason, you really need a graph in your SPARQL query even when you only need data from the DEFAULT graph, in Stardog you can write it as: FROM <tag:stardog:api:context:default>. And if you want to query all graphs, you can also do FROM <tag:stardog:api:context:all>.

In Virtuoso we learned that you always need to specify a graph when you query. So how do we work with the DEFAULT graph than?

There is a specific syntax for Virtuoso which lets you define/set your graph at the beginning of the query:

define input:default-graph-uri <graph_name>

INSERT DATA

{<http://example.org/picasso> <http://example.org/paints> <http://example.org/guernica>

}

Read more about it in the Virtuoso documentation.

AllegroGraph also provides some configurations. The defaultDatasetBehavior can be used directly in the SPARQL query to determine if  :all, :default or :rdf should be used when no graphs name is specified in the query. 

Or one can fix the default graph name with the default-graph-uris option (or the default-dataset-behavior) upon the run-sparql command.

In MarkLogic when working with REST or XQuery one has the default-graph-uri and a named-graph-uri parameters available, like mentioned in the SPARQL 1.1 Protocol recommendation to specify the graph.

In Apache JENA TDB all named graphs can be called  with <urn:x-arq:UnionGraph>. The configuration parameter tdb:unionDefaultGraph can be added to switch the default graph to the union of all graphs. And the default graph can be specifically called with <urn:x-arq:DefaultGraph\>

Conclusion

RDF Graph Databases are built from the group up with the context of your data in mind. Knowing your graphs and triplestore setup is, from my point of view, a basic knowledge for both developers but also data engineers. Always start with the question: ‚Äúwhat setup do I need for my use case?‚ÄĚ

Cross-RDF Graph Database behavior Рthe DEFAULT graph 

Triple store behavior on new installWRITE triples without graphSELECT triple without graphDELETE triple without graph
RDF4J 2.4Triples are added to DEFAULT graph.Retrieves data from ALL graphs including the DEFAULT graph.Deletes triples that match the pattern, from ALL graphs.
Stardog 6.1.1Triples are added to <tag:stardog:api:context:default>  graph which acts as the DEFAULT graph.It retrieves data only from the <tag:stardog:api:context:default> graph.It tries to delete the triple in the defined default graph. 
AllegroGraph  6.4.6Triples are added to an internal DEFAULT graph.Retrieves data from ALL graphs including the DEFAULT graph.Deletes triples that match the pattern, from ALL graphs.
MarkLogic 9.0Triples are added to an internal DEFAULT graph.Retrieves data from ALL graphs including the DEFAULT graph.It tries to delete the data in the internal DEFAULT graph.
GraphDB 8.8Triples are added to DEFAULT graph.Retrieves data from ALL graphs including the DEFAULT graph. Deletes triples that match the pattern, from ALL graphs.
Virtuoso v7.2.2.1Triples are added to an internal DEFAULT graph.You always need a graph otherwise you receive: ‚ÄúNo default graph specified in the preamble‚ÄĚYou always need to specify a graph to delete data.
Apache JENA TDBTriples are added to <urn:x-arq:DefaultGraph\>  graph which acts as the DEFAULT graph.It retrieves data only from the <urn:x-arq:DefaultGraph\> graph.It tries to delete the triple in the specified default graph. 
Oracle Spatial and Graph 18cTriples are added to an internal DEFAULT graph.Retrieves data from ALL graphs including the DEFAULT graph.Deletes triples that match the pattern, from ALL graphs.
Triple store behavior on new installWRITE triples without graphSELECT triple without graphDELETE triple without graph

Volunteering & me – part 2

In the previous post about volunteering & me I was mentioning the communities I was part of in the past years and what I was doing there. In this post I want to put down all the training I benefited from (received and given for free) in these communities and more. Here goes:

  1. Leadership & Management 2009 AIESEC
  2. Effective communication 2010 AIESEC
  3. Public speaking 2010 AIESEC
  4. Product Management 2010 AIESEC
  5. Global competency model 2010 AIESEC
  6. Entrepreneurship 2010 AIESEC
  7. Become a trainer 2010 AIESEC
  8. Communication & presentation skills 2010 AIESEC
  9. Audience management 2010 AIESEC
  10. Needs assessment 2010 AIESEC
  11. Delivery methods 2010 AIESEC
  12. Preparing a session 2010 AIESEC
  13. Briefing & debriefing 2010 AIESEC
  14. First given training on “Presentation skills” 2010 AIESEC
  15. Goal setting 2010 AIESEC
  16. Ar of Feedback 2010 AIESEC
  17. All about coaching 2010 AIESEC
  18. Management & leadership 2011 BEST
  19. Effective meetings 2010 BEST
  20. Communication weekend training 2011 BEST
  21. Giving and receiving Feedback 2011 BEST
  22. Knowledge Management training 2011 BEST
  23. Entrepreneurship course 2011 at TU Vienna
  24. Myer-Briggs Type Indicator training 2011 BEST
  25. Strategic planning 2011 BEST
  26. Motivation 2011 BEST
  27. Delegation 2011 BEST
  28. Leadership styles 2011 BEST
  29. Coaching course 2011 TU Vienna
  30. Effective meetings delivered by P&G 2012 BEST
  31. Critical thinking 2012 TU Vienna
  32. Creativity (6 hat concept) 2012 TU Vienna
  33. Startup weekend training – pitch training 2013 Ideen Triebwerk Graz
  34. Growth hacking 2014 ABC BEST
  35. Pitching training 2014 ABC BEST
  36. 360 community management 2014 GDG
  37. Presentation skills GDG
  38. Fund raising BEST
  39. Unconscious bias at Google GDG
  40. Motivation GDG
  41. Design thinking GDG

And then I lost track of them.

I also started delivering on my own on topics that are dear to me: Impostor syndrome and Unconscious bias (and also some technical talks all mentioned in the previous post).

And lately, here in Vienna, I like to go to workshops offered by PWN . I joined so far:

  • Financial sustainability
  • Salary negotiations
  • Finding your purpose

If you look at my list you could say I did an entire school of social skills on the side of university. Well yes. Some of the courses were at university but the most are not offered there, so you gotta do self development somewhere else. This is what organizations are about: self development! Becoming a better you, exchanging ideas, becoming a “change agent”.

During all these training, I got to meet amazing people and I got amazing feedback that helped me improve and have a healthier and open mind, be more tolerant.

So what? you might ask.
Truth is, it is a personal story of how one can make use of such a rich palette of knowledge. Using it in the right moment and in the right way is a challenge for me too at times. This does not mean that the teams I work in always has effective meetings nor that feedback is my main tool to communicate. Not at all! Especially in professional life, where unfortunately, social skills STILL come last, (I am not saying EVERYWHERE but majority) it is much harder to establish yourself as… ultimately as a leader. It all adds up in the end. These training gave me the skills to be a good leader!

I leave a link to an interesting post here as a q.e.d: https://www.inc.com/marcel-schwantes/why-do-people-quit-their-jobs-exactly-heres-entire-reason-in-3-simple-words.html

Volunteering & me

SO lets see… (searching in my memory)

Dry intro

When I sometimes (still) get to talk about my motivation to spend quite a lot of my free time on volunteering I always start with: I’ve been volunteering since I started University. I’ve been involved in different communities since 2007, for more than 11 YEARS!

When I get asked WHY?… Honestly, nowadays, it is simply because: this is what I know to do! In my free time, I am used to. going to organizer meetings, be volunteer responsible at a conference, take care of conference registration, make sure speakers are introduced or evolve partnerships and bring in sponsors and most important mentor/motivate/empower people… (these are the usual, these days).

However, I want to take this opportunity and present my volunteering CV (which I was postponing for years to do) and ALL the trainings and skills I gathered in 11 years. These are points, which in my CV, land under hobbies or I mention only maybe 25% of them as social skills. Why? Because a CV should not be longer than 1-2 pages, maximum 3! Also because, too little, HR people looking for developers/engineers are interested that you live a double life. Usually this is mentioned, by me, in face to face interviews when required. Do you have better suggestions?

My volunteering CV (about my second life) ūüėČ

2012 Nov. – present days – member of GDG Vienna

  • My biggest achievement in GDG Vienna is creating the Women Techmakers Vienna community. This is the 6th year since it exists and a lot of people appreciate us and like what we stand for:
    Equality & diversity in STEM regardless of gender. Community builder, people empowering and networking are key skills that helped me achieve this together with like-minded people I met through GDG (locally and globally).
  • I was organizer of DACH level tech conference DACHfest.
  • I was 6 times organizers of DevFest Vienna.
  • And I organized numerous meetups and delivered tech and social content.

2011 Oct. – 2014 May – member of BEST Vienna

  • Vienna Summer Course 2011 project – I was main organizer of one of the biggest projects which bring, yearly, to Vienna, around 20-25 European students from other different technical universities to share culture and knowledge. I was leading a team of 6 people making sure the event happens on time and in the budget and that team members, participants and professors are happy (all stakeholders).
  • Board member – HR responsible – board membership is a year long engagement. Along with 6 other dedicated persons on dedicates roles, we devised and executed the strategic plan meant to create and leave a local sustainable organization while leading by the European level vision: “Empowered diversity“. My responsibility was recruiting, motivating and empowering community members.
  • I was involved in numerous other local projects over the years and towards the end I was more in a mentor role. Now I am proud BEST Vienna ALUMNA.

2007 Oct. – 2011 June – member of AIESEC Cluj-Napoca

  • IT Challenge project – while in AIESEC I was a participant and main organizer of IT Challenge. The project was bringing technical students closer to tech companies who offered case-studies to be solved by participants. At the 3rd edition of the project I was leading my own team of 5 people and making sure we are reaching our goals. I learned project management, team leading and about motivating volunteering student. It also brought me my first tech internship at NOKIA R&D in Cluj-Napoca.
  • I was also an aspiring trainer and “graduated” while delivering content at the biggest Romanian intercultural preparation seminar conference, which had over 400 participants (if I remember correct, were probably even more..)
  • On my road of becoming a ‘change agent‘ I took part in a AIESEC internship done at the Technical University of Graz, Austria. Which changed my life!
  • Now I am proud ALUMNA of AIESEC Cluj-Napoca

In the next post I will mention the numerous trainings and content I had the opportunity to be exposed to due to these volunteering opportunities.

Lets recall transaction processing (Java with Spring)

Generics about transactions

I am writing a piece about transactions because the subject of transactions sounds so heavy standalone and also because I recently had to recall all the theory from university about it. And surprise surprise, real life software behaves/looks different than in the theory. So, if you are looking to refresh your knowledge and also get the bullet points to simply solidify knowledge keep reading… (at least the bullet points).

Transaction processing¬†is information processing in¬†computer science¬†that is divided into individual, indivisible operations called¬†transactions. Each transaction must succeed or¬†fail¬†as a complete unit; it can never be only partially complete.”

“Transaction processing is designed to maintain a system’s Integrity¬†in a known, consistent state, by ensuring that interdependent operations on the system are either all completed successfully or all canceled successfully.”¬†¬†Wikipedia

Only reading the definition of transactions we are remembered of the correct way of using them and what the goal should be:

  • indivisible operations
  • succeed or fail as a complete unit
  • ¬†maintain a system’s integrity

We got this on our agenda so lets turn to the technicalities of it.

A good example, which occurs most in real life software, is the work with databases. Databases should have a build in mechanism to tap into their transactional usage either automatic – it takes care on its own on these – or more “manual” – it is up to the developer to decide when the transaction starts and ends. Find out in the design and requirements phase, which scenario you need. Set the parameter of the database correct:

  • database auto-commit true or false

I want to focus on the database.autoCommit(false) scenario next because we differentiate between actions. On some actions transactions are not necessary.

Just because I have to mention: a reliable transactional system must comply to the ACID criteria to be good (atomicity, consistency, isolation, and durability). When you use a transactional system you just need to know that you can rely on ADIC criteria but you do not need to be concerned with each one of them in depth. However, the way you use transactions could violate one of the criteria. A misbehavior is not when a database will rollback if you throw an Exception when in fact it should only be a warning. Conclusion is:

  • you can rely on the ACID criteria¬†the transactional system complies to*

Spring Framework transaction abstraction

Lets get specific and take Spring as a framework that can help you take control of the database transactional system. Spring is not the actual transactional system but it exposes an interface, that perfectly integrates with different transactional systems and it is called Spring Framework Transaction abstraction.

To get started you need to:

  • define the correct PlatformTransactionManager implementation (usually through dependency injection)
  • use the TransactionStatus interface to control transaction execution and query transaction status

The Spring transactional abstraction offers a lot of flexibility when it comes to controlling the transactional system. The implementation you choose must be a trade off between how tightly coupled you want/need to be to Spring’s transaction infrastructure and the need to use a non-invasive lightweight container which has less impact on application code. In this regard you need to choose between:

  • programmatic transaction management in Spring
  • declarative¬†transaction management in Spring (XML or annotation based approach)

You can check out the differences in more detail in the Spring documentation. And a few words on how to chose between them is mentioned here.

Some general advice when using Spring transactions:

  • You are strongly encouraged to use the declarative approach to rollback, if at all possible.¬†Spring docu
  • When using proxies, you should apply the¬†@Transactional¬†annotation only to methods with¬†public¬†visibility. If you do so on other access¬†modifiers(protected, private or package-visible) methods, no error is raised but the annotated method does not exhibit the configured transactional settings.¬†Spring docu
  • Spring recommends that you only annotate concrete classes (and methods of concrete classes), as opposed to annotating interfaces.¬†Spring docu
  • @Transactional annotation on the¬†method of the same class takes precedence (are more important) over the transactional settings defined at the class level.¬†Spring docu
* of course, unless you need to debug exactly that and find out an enterprise ready system has bugs – bad luck…

To be continued…

Or just skip to a blog post I found recently written by Marco Behler.

New year new project

It is official: I am a developer, again!!!

Yup and I am very happy about it. The fist month back to code is almost over and I learned quite some stuff, 24 points to be exact,  ’cause I’m keeping track. I should maybe mention some of them in another post. For now, this post is about something else, something I am wanting to pick up since some time but ALWAYS found a reason why not. Well, this time I should be out of ‘why not’ reasons and just do it: work on a personal projects.

Last year I started flirting with Golang, ah… just for the sake of it (another postponed thing). And I actually did some problem solving on HackerRank to get started. Then, I also read a super interesting survey result, also from HackerRank, which talks about what employers want and what developers can do. That is where I got the idea to also go back do some Javascript (also because my project need at least a basic frontend).

Here I am, shaping up a project idea, more useful than fun, more for learning than being useful. But that is to be decided later… what it will become.

Some things are certain:

Functionality

  • search & autocomplete
  • suggest a new entry
  • admin dashboard with CRUD actions
  • 2 types of users: admin and public
  • API (maybe) for further features like – statistics, graphics, similarity…

Stack

  • backend: Golang
  • frontend: Javascript

This is my commitment to see it through basically! I will also soon post my git repo when it is up. Oh oh and did I mention, the topic is: funding and women in STEM!