Giter VIP home page Giter VIP logo

mutex's Introduction

Kamil Dziedzic

Kamil Dziedzic

Go Developer and IT Manager, former PHP and Angular Developer aspiring to become proper Software Engineer.

I'm looking for opportunities to widen my knowledge, experience and expertise in software development alongside with a steady source of income to pursue my dream of building apps for the future.

Feel free to contact me via email [email protected] or LinkedIn

What can I offer?

  • Open mind.
  • Dedication to learn.
  • 14+ years experience in Web App and API Development, Product Building and Team Leading.
  • 12+ years with Agile, Kanban and Scrum (Professional Scrum Master I, 2012).
  • 7+ years experience with Google Go: gRPC, REST, CLI tools, mobile, docker.
  • 10+ years with databases: MySQL, PostgreSQL, Amazon DynamoDB, Memcached and MongoDB.
  • 6+ years with testing, TDD, CI and CD.
  • 1+ year with Elixir.
  • 2+ years with AngularJS and Node.js.
  • 6+ years with developing PHP apps (obsolete).
  • Professional English with Polish accent, elementary Spanish, forgotten German, and non-existing French.
  • A hobbyist photographer, biker, inline skater and swimmer.

Skills and buzzwords

Feel free to use below list to quickly check if I might have desired skills

AWS Agile Methodologies Agile Project Management Agile Amazon DynamoDB Amazon Web Services AngularJS Ansible Azure Azure DevOps Azure Event Hubs Azure Pipelines Backbone.js Bash CI/CD Certified Scrum Master Coaching CoffeeScript Continuous Delivery Continuous Integration DSLR Docker Echo Labstack ElasticSearch FCE Fedora Gin Git Github Github Actions Goland Golang Grafana gRPC HAProxy IT Management IntelliJ IDEA PhpStorm JavaScript Jenkins Jira JSON jQuery kubernetes Linux Mint Linux MacOS Makefile Memcached Microsoft Teams MongoDB MySQL Nagios Node.js OpenSUSE PHPUnit PHP Photography Project Management REST RabbitMQ Revel Rollerblading RPM Scrum Software Development SPEC Splunk Symfony TDD Team Management Test Driven Development Testify TypeScript Ubuntu Unit Testing Travis Web Development webpack WebSockets XML

Demo

Most of my work belongs to my employers.
There are however three exceptions:

  1. Kata 形 is my recent toy project to show of my skills in algorithms and idiomatic Go.
  2. osin-dynamodb is a Go library which implements the storage for OSIN with Amazon DynamoDB using aws-sdk-go. Developed at Uniplaces.
  3. ninja-mutex downloads is a simple to use mutex implementation for php. It supports different adapters (flock, memcache, mysql, redis, ...) so you can set it up as you wish. All adapters (if set up properly) can be used in multiserver environment - in other words lock is shared between web servers. I've created it as a demo of my skills, a demo I could show on job interviews.

All those projects show some of my skills, coding standards and love for testing.

What can you offer me?

  • steady income (to pay rent, read books and support my family and my hobbies)
  • opportunity to learn new programming language
  • opportunity to work and exchange knowledge with a team of specialists
  • opportunity to share knowledge via blogs and talks
  • experience in international product building and team leading
  • experience with technologies you use
  • opportunity to learn new language (e.g. French, Spanish, German, Mandarin or/and proper English)
  • office space
  • opportunities to travel

Interested? Sent me a message!

Do you think my skills could be useful for your company or clients? Can you offer me anything from the list above?

Great! Please contact me via email [email protected]

You might also try to check some of my online profiles:

If you are interested more in my previous adventures please feel free to scroll down for my full work history with referrals.

Work History

Developer at Derivco Sports logo

May 2020 - September 2021 (1 year 5 months), Barcelona, Spain

Certified with Microsoft Azure Fundamentals. Lead Developer of Double-entry Bookkeeping API in Go. Integrations with customers REST APIs. Replaced outdated and inefficient Elixir services with highly efficient and easy to change implementations in Go.

avatar

My experience with Kamil was that of being with a Golang expert. He knew all the greedy details from the language and always had some optimization/refactor suggestions to make. This however, never distracted him from the goal of finishing his tasks on time. Basically speaking, he knew what to do and when - which I think is a great quality many developers I have met missed. He was also very team oriented, and generally speaking an easy person to be with - a developer capable of being in any team thanks to his social skills. I highly recommend him!

Pedro Miguel Pereira Serrano Martins, Senior Elixir Programmer

Software Engineer at Percona logo

January 2017 - November 2018 (1 year 11 months), Remote

Developer of Percona Monitoring and Management - an open source database monitoring, observability and management tool. Works with MySQL, MongoDB, PostgreSQL, MariaDB, Amazon Aurora, Amazon RDS, ProxySQL and Percona XtraDB Cluster.

PMM has complex client-server architecture. Client scrapes prometheus exporters and collects additional metrics with pmm-agent. Server collects metrics for prometheus server and allows management with gRPC API.

Contributed to several open source repositories: prometheus/mysqld_exporter, percona/mysqld_exporter, postgres_exporter, mongodb_exporter, rds_exporter, pmm-client, pmm-server, qan-agent, kardianos-service, percona-toolkit, qan-api, qan-app, pmm-managed.

avatar

Kamil has a great mix of skills as backend, frontend developer as well as understands ops/devops pretty well.
Kamil was a great team player always helping his colleagues when asked.
Kamil has a great ability to find simple practical solutions to complicated problems.

Peter Zaitsev, Founder, CEO

avatar

Kamil is a Senior Backend Engineer, he did a major work in percona-agent and Percona backend layer.
Kamil showed a deep understand of how to design systems and make an implementation.

Vadim Tkachenko, CTO / Co-founder

Senior Software Developer at Uniplaces logo

January 2016 – December 2016 (1 year), Lisbon, Portugal

Developer of REST microservice for booking app.

Developer of OAuth server for a password less authorization.

Developer of Go Mobile library for Android and iOS SDK.

  • Common authorization and application layer for Android and iOS mobile apps.
avatar

I had the pleasure to work with Kamil at Uniplaces.
Soon, I was able to notice that he had a deep knowledge of the most relevant technologies that simply make things work as they should.
Kamil is a very proactive mate that can finish things nicely done within the deadlines agreed.
I believe he is a major addition in any company.

Joao Aguiar, Software Engineer

avatar

Kamil and I worked in the same team at Uniplaces. He started the very first project in Go at Uniplaces.
He is very organized, composed and enthusiastic person who will definitely motivate anyone to be a better programmer.
He is a very versatile technologist, always open to work with cutting edge technology.
He also mentored me and taught me a lot of the concepts of programming.
I wish him all the best and given an opportunity I would like to work with him again.
I highly recommend Kamil.

Ranveer Singh, Software Engineer

Go Developer at Percona logo

January 2014 – July 2015 (1 year 7 months), Remote

Developer of Percona Cloud Tools (a precursor of Percona Monitoring and Management).

  • Revel web framework for simplified routing, parameter parsing and for crash-free request processing.
  • Event based architecture with RabbitMQ for resource-consuming processing, scalability, non-blocking requests, high-load protection and to utilize sharding.
  • WebSockets for real-time server-data analysis.
  • Microservice architecture.
  • Memcached as caching and backend for service discovery.
  • Ubuntu Upstart for spawning and managing workers.
  • Tests written with gocheck and run by Jenkins.

Developer of percona-agent, real-time client-side agent written in golang for Percona Cloud Tools.

avatar

Kamil showed expert level of Go lang knowledge, high quality of work and critical architecture mind.
Beside of that Kamil is 1) showing good skills on debugging problems 2) analytic mind with clear explanation of problem and ability to ask right questions and suggest right solutions on the base of answers 3) very attentive to users of the system and support engineers with helping them to solve problems.
Also Kamil is showing good discipline, very attentive to teammates and giving a hand for everyone who needs his expert view.
And in addition what is most important for manager's view to the team - nice and interesting person.

Nika Krupitskaya, Project Manager

avatar

Kamil is a very talented developer and a good friend.
He has a deep knowledge of Go and other programming languages as well
and that turns him in a good fit for almost any project you can imagine. Careful about details, always trying to reach 110% of test coverage and always willing to help, I've really enjoyed working with him. Kamil is not only talented programming computers, but he is also a very open-minded person; I've enjoyed his code reviews, and the discussions we had about technology and the best way of solving problems.
He is always trying to improve things and pushes others to do the same.

Carlos Salguero, Developer

avatar

Kamil is a great person, and he makes the everyday work easier.
He has great capacity for analysis, and he is always willing to help and learn new things.
His knowledge on backend dev is outstanding.
A definite asset on any company.

Martin Cespedes, Senior QA / Scrum Master

avatar

Kamil is a great developer and an excellent team-mate,
I felt very comfortable working with him as a great backend / frontend team.
He is an excellent professional with great knowledge.

Pablo Penén, Senior Frontend Developer

avatar

Kamil is a very detail-oriented developer with strong technical and analytic skills.
He was the cornerstone of our backend team, he built most of our code base with great speed and quality. He always kept the team focused on what's important leading the technical discussions in the right direction.
He's great to be around, a team player and more importantly an awesome person.

Miguel Paolino, Senior Software Developer

avatar

Kamil is an extremely talented developer, and I was very lucky to work with him.
He's a true hacker and brilliant class A programmer, his style is a pleasure to read.
He is friendly, outgoing and always has a moment to help address customer concerns.

Fabian Vallejos, Senior Frontend Developer

avatar

Just a great developer
and a great team member to work with.

Francisco Guijarro, Javascript Developer

PHP and UI Developer at Percona logo

September 2013 – December 2013 (4 months), Remote

Backend and frontend application for Percona Cloud Tools

Frontend:

Backend:

IT Manager at FarmaProm Polska logo

October 2011 – November 2013 (2 years 2 months), Kraków, Poland

Development of pharmaceutical platform www.FarmaProm.pl and new solutions to pharmaceutical companies.

  • Professional Scrum Master certified on 29th May 2012.
  • Introduced Agile Software Development into the company, with Scrum and Kanban frameworks.
  • Increased employee satisfaction with training opportunities, wider flexibility, more transparency, improved communication, reducing bureaucracy and micromanagement.
  • Greatly reduced risks and software delivery time by familiarizing IT specialist - developers, system administrators, testers - with continuous delivery and implementing the approach.
  • Managing tasks and workflows in Redmine.
  • Evaluating engineering cost for customers.
  • Technical support for sales department in contact with clients (pharmaceuticals companies and wholesales).
  • Emergency contact for any software problem e.g. app crashes.
  • Interviewing and recruiting IT specialists.
avatar

I would like to say that Kamil is a Programming Jesus.
But it might be offensive. Offensive to Kamil.
Because he's not going to wait three days to resurrect your dead code.
If you have Kamil in your team it will be done unto you even before you ask.

Michał Górski, Big Data Developer

Team Lead and Senior PHP Developer at Araneologo

December 2007 – October 2011 (3 years 11 months), Kraków, Poland

Team Lead and Senior PHP Developer for pharmaceutical platform www.FarmaProm.pl: Sales Force Automation, Medical & Pharmaceutical CRM, Manufacturer CRM, Wholesaler CRM.

Team Lead:

  • Leading PHP team.
  • Coordinating work between IT teams: PHP, Front-end, iOS, Android, Windows Mobile, System administrators, Quality assurance.
  • Accepting, pricing and coordinating commissions from clients.
  • Releasing and deploying new software versions.
  • Designing key modifications (from changes in application engine to modifications operating on customers critical data e.g. wholesales financial data).
  • Designing, managing and optimizing large databases (hundreds tables, tens of gigabytes of data, hundreds millions records).

PHP Developer:

avatar

Kamil is well skilled and very sane developer.
At the time he successfully kept restrained our biggest,
really huge project and made sure that his team does the job well.

Krzysztof Kowalik, Hacker, Software Developer

July 2007 – August 2007 (2 months), Kraków, Poland

Summer job and my first professional experience.

Certificates

certificate

certificate

certificate

certificate

Hobbies

Something not right?

This resume is open source - feel free to fork it, make improvements and create a pull request at https://github.com/arvenil/arvenil

mutex's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mutex's Issues

Mutex signals are not preventing concurrent duplicates

Hi. I'm trying ninja-mutex with redis. The execution infrastructure is AWS with elasticache.
Four cron docker containers acquire mutex signal in order to prevent duplicates (to work like in a queue). I mean: two instances cannot process the same object from db because they are creating mutexes with the object ids.

In local environment it works well emulating concurrency with tools like "parallel" from shell. But in AWS environment it is not working well concurrently... duplicate objects are created.

Am I missing something? may I to implement a more advanced locking mechanism like the one described by redis.io? (https://redis.io/topics/distlock)

Thanks in advance

Exception in destructor

I got exceptions like this:

Uncaught exception 'NinjaMutex\UnrecoverableMutexException' with message 'Cannot release lock in Mutex __destruct(): <mutex name> 'in /path/to/vendor/arvenil/ninja-mutex/src/NinjaMutex/Mutex.php:100
Stack trace:
#0 [internal function]: NinjaMutex\Mutex->__destruct()
#1 {main}
  thrown in /path/to/vendor/arvenil/ninja-mutex/src/NinjaMutex/Mutex.php on line 100

My code tries to deal with the exception by using unset manually to trigger the destructor and catch exception that might occur:

$mutex = $mutexFabric->get("<mutex name>");

$lock = $mutex->acquireLock();
if (!$lock) {
    throw new Exception("lock could not be acquired");
}
try {
    // CRITICAL SECTION
    $mutex->releaseLock();
    try {
        unset($mutex);
    } catch (Exception $unsetE) { }
} catch (Exception $e) {
    $mutex->releaseLock();
    try {
        unset($mutex);
    } catch (Exception $unsetE) { }
    throw $e;
}

However this does not work because the fabric stores references to the mutex and therefor the unset has no effect.
Could you introduce a method that forces the destruction of the mutex and throws catchable exceptions? Do you have an explanation on the reason of the exception? I am using memcached as backend.

Expose lock information

I see you collect lock information in LockAbstract it would be nice if there was to publicly get that info. Even as simple as making getLockInfo public. Although, it doesn't look like MySQL supports that. Maybe it could always return an empty array? Or another interface, maybe LockInfoAwareInterface?

FlockLock failed to remove temporary lock file.

Hello,

I'm using FlockLock and after usage i have a lot of .lock file in the working directory.
I tried to look for a cleanup function but i didn't found one, I'm guessing the .lock files should be automatically removed after usage.
I'm using lock like this:

$key = 'some_key';
$value = 'some_value';
$lock = new NinjaMutex\Lock\FlockLock("/tmp");
$mutex = new NinjaMutex\Mutex($key, $lock);
if ($mutex->acquireLock(1000)) {
$mutex->releaseLock();
unset($mutex);
}

After running the code i have "/tmp/some_key.lock" file remaining.
Did I do something wrong or is it a bug ?

I tried on 5.6.17-0+deb8u1 (Debian), 5.6.11-1ubuntu3.1 (Ubuntu) i have the same behaviour.

Thanks!

Any plans to release a new version?

Hi @arvenil,

Thank you for your efforts in creating and maintaining this package!

I use it in one of my packages (dmitry-ivanov/laravel-console-mutex) and was curious - are there any plans to release a new version at some point?

One of the changes I'm interested in is the MySQLPDOLock which was introduced after the 0.6.0 (which is the latest released version now).

Thanks!

Multiple connections MySQL Lock

I wanted to lock a specific record in a data storage which are identified by UUID. To acquire the lock we do it like the following pseudo code:

if ( ! $this->lock->acquireLock($UUID)) {
   //logic
}

However by doing so we create a PDO connection for each UUID we want to lock since the MySqlLock sets up PDO by itself and stores a connection based on the name used for acquiring the lock (the UUID in this use case)

Looking at the other lock adapters we always inject the connection instead, is the mysql different by intention or just something we need to implement differently?

possible to set memcache 'expire' on locks?

Hi, First of all thanks for the great library! Here I have some problems with un-released locks.

I am calling many 3rd party libraries between lock & release. Very occasionally I could get a fatal crash that the lock is never cleaned up.

My process typically takes 3~5 sec to complete, is it possible to set an expire value for the lock?
E.g. 60 sec, so it is not locked forever.

I could see the alternative maybe using flock so file system handles it...

My code is very simple like this:

$mutex = new Mutex('very-critical-stuff', $lock);
if ($mutex->acquireLock(1000)) {
    // calling many 3rd party libraries.
    // !!! Fatal error crash.
    // the lock is never released
    $mutex->releaseLock();
} else {
    throw new Exception('Unable to gain lock!');
}

How can I achieve the same behavior than the MySQL GET_LOCK() command?

For this example, I'm using the Memcached backend, and a timeout value of 0.

With MySQL GET_LOCK(), if a PHP script terminates before releasing explicitely the lock (Fatal Error for example), it is released anyway. However, with your library, if a PHP script terminates before releasing the lock, it can never get it again, because Memcached don't delete the lock automatically.

Redis lock with setnx will lead to deadlocks

Hello,

We used to use the library in one of our applications and we always got deadlocks when under certain load.
Because of the nature of such problems, it was extraordinary difficult to find why this happens, we have changed our code multiple times and never suspected the problem is caused by an underlaying library.

In one of the debug sessions, using strace we could see the process is stuck doing a SETNX command. Reading about the command at https://redis.io/commands/setnx#design-pattern-locking-with-codesetnxcode says it should not be used for this purposes anymore. Digging further to see what piece of code uses this command, we ended up finding https://github.com/arvenil/mutex/blob/master/src/Lock/PredisRedisLock.php#L45

Maybe you should look into it and find a better alternative.
Best.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.