41554 blogs · [ { "id": "01a0821c-adc6-706e-bf29-8a2408e1f831", "title": "How to Make Reviewers Love Your Big Pull Requests", "url": "https://ieftimov.com/posts/how-to-make-reviewers-love-your-big-pull-requests/", "published_at": "2022-07-08T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240955abb8", "title": "Problem Solving Framework & Principles for Software Engineers", "url": "https://ieftimov.com/posts/problem-solving-framework-principles-software-engineers/", "published_at": "2022-06-04T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2409f477a0", "title": "Ditch old tools and habits for the golden tools of your new company", "url": "https://ieftimov.com/posts/ditch-old-tools-habits-for-golden-tools-of-your-new-company/", "published_at": "2022-05-03T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2409fb9b35", "title": "Identify & Escalate Risks: A Practical Framework for Software Engineers", "url": "https://ieftimov.com/posts/identify-escalate-risks-practical-framework-for-software-engineers/", "published_at": "2022-03-18T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240a6ab63e", "title": "How to Make the Step up From Intermediate to Senior Engineer", "url": "https://ieftimov.com/posts/how-to-make-the-step-up-from-intermediate-to-senior-engineer/", "published_at": "2022-02-21T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240b34e08f", "title": "Creating and testing gRPC server interceptors in Ruby", "url": "https://ieftimov.com/posts/creating-testing-grpc-server-interceptors-ruby/", "published_at": "2021-12-12T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240b5eedfd", "title": "Docker Compose, stray PID files, Rails and beyond", "url": "https://ieftimov.com/posts/docker-compose-stray-pids-rails-beyond/", "published_at": "2021-10-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240be149d7", "title": "Conditional HTTP GET: The fastest requests need no response body", "url": "https://ieftimov.com/posts/conditional-http-get-fastest-requests-need-no-response-body/", "published_at": "2021-06-01T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240c6b6365", "title": "Deep dive in CORS: History, how it works, and best practices", "url": "https://ieftimov.com/posts/deep-dive-cors-history-how-it-works-best-practices/", "published_at": "2021-04-12T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240d142ea1", "title": "Testing in Go: Stop Leaking Files", "url": "https://ieftimov.com/posts/testing-in-go-stop-leaking-files/", "published_at": "2020-05-22T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240d5cf0bc", "title": "Four Steps to Daemonize Your Go Programs", "url": "https://ieftimov.com/posts/four-steps-daemonize-your-golang-programs/", "published_at": "2020-05-02T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240de0d774", "title": "Understanding bytes in Go by building a TCP protocol", "url": "https://ieftimov.com/posts/understanding-bytes-golang-build-tcp-protocol/", "published_at": "2020-04-02T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240e810a5f", "title": "Testing in Go: WebSockets", "url": "https://ieftimov.com/posts/testing-in-go-websockets/", "published_at": "2020-03-13T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240f118d10", "title": "Testing in Go: HTTP Servers", "url": "https://ieftimov.com/posts/testing-in-go-testing-http-servers/", "published_at": "2020-03-02T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240f21d2b1", "title": "Testing in Go: Clean Tests Using t.Cleanup", "url": "https://ieftimov.com/posts/testing-in-go-clean-tests-using-t-cleanup/", "published_at": "2020-02-18T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240f30382d", "title": "Testing in Go: Golden Files", "url": "https://ieftimov.com/posts/testing-in-go-golden-files/", "published_at": "2020-02-02T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240f4da0d8", "title": "Make resilient Go net/http servers using timeouts, deadlines and context cancellation", "url": "https://ieftimov.com/posts/make-resilient-golang-net-http-servers-using-timeouts-deadlines-context-cancellation/", "published_at": "2020-01-05T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a240fd3881a", "title": "Testing in Go: Test Doubles by Example", "url": "https://ieftimov.com/posts/testing-in-go-test-doubles-by-example/", "published_at": "2019-12-16T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24104e6f06", "title": "Testing in Go: Dependency Injection", "url": "https://ieftimov.com/posts/testing-in-go-dependency-injection/", "published_at": "2019-12-01T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2410b5108c", "title": "Simple Golang database seeding abstraction for Gorm", "url": "https://ieftimov.com/posts/simple-golang-database-seeding-abstraction-gorm/", "published_at": "2019-11-16T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24115dccff", "title": "Testing in Go: Fixtures", "url": "https://ieftimov.com/posts/testing-in-go-fixtures/", "published_at": "2019-09-16T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2412327720", "title": "Testing in Go: Subtests", "url": "https://ieftimov.com/posts/testing-in-go-subtests/", "published_at": "2019-07-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241305099b", "title": "Testing in Go: Table-Driven Tests", "url": "https://ieftimov.com/posts/testing-in-go-table-driven-tests/", "published_at": "2019-07-10T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2413cfa024", "title": "Testing in Go: go test", "url": "https://ieftimov.com/posts/testing-in-go-go-test/", "published_at": "2019-07-01T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2414c5c340", "title": "Testing in Go: Naming Conventions", "url": "https://ieftimov.com/posts/testing-in-go-naming-conventions/", "published_at": "2019-06-24T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24155232fa", "title": "Testing in Go: Writing Practical Failure Messages", "url": "https://ieftimov.com/posts/testing-in-go-writing-practical-failure-messages/", "published_at": "2019-06-15T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2415ccc3dd", "title": "Testing in Go: Failing Tests", "url": "https://ieftimov.com/posts/testing-in-go-failing-tests/", "published_at": "2019-05-30T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2415fb9144", "title": "Testing in Go: First Principles", "url": "https://ieftimov.com/posts/testing-in-go-first-principles/", "published_at": "2019-05-08T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24166c0a6d", "title": "Deep Dive in the Upcoming Go Error Inspection Changes", "url": "https://ieftimov.com/posts/deep-dive-in-upcoming-go-error-inspection-changes/", "published_at": "2019-04-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24167643cc", "title": "My First dotGo Conference", "url": "https://ieftimov.com/posts/my-first-dotgo-conference/", "published_at": "2019-04-01T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2417553ecb", "title": "Tell your team you are running late using Google Home, Google Cloud Functions, Golang and Twilio", "url": "https://ieftimov.com/posts/tell-team-running-late-google-home-google-functions-golang-twilio/", "published_at": "2019-03-26T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2417ac7330", "title": "Barebones model of Spotify's 'Recently Played' screen using a Least Recently Used (LRU) cache in Golang", "url": "https://ieftimov.com/posts/spotify-recently-played-least-recently-used-cache-golang/", "published_at": "2019-03-11T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2418088f3a", "title": "When and Why to use a Least Frequently Used (LFU) cache with an implementation in Golang", "url": "https://ieftimov.com/posts/when-why-least-frequently-used-cache-implementation-golang/", "published_at": "2019-02-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241846c161", "title": "Golang Datastructures: Trees", "url": "https://ieftimov.com/posts/golang-datastructures-trees/", "published_at": "2019-02-13T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2418be2435", "title": "OTP in Elixir: Learn GenServer by Building Your Own URL Shortener", "url": "https://ieftimov.com/posts/otp-elixir-genserver-build-own-url-shortener/", "published_at": "2019-01-26T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2418fa1716", "title": "Understanding the basics of Elixir's concurrency model", "url": "https://ieftimov.com/posts/understanding-basics-elixir-concurrency-model/", "published_at": "2019-01-15T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24197c0a5d", "title": "A deeper dive in Elixir's Plug", "url": "https://ieftimov.com/posts/a-deeper-dive-in-elixir-plug/", "published_at": "2018-12-31T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241a5ea809", "title": "Validate your passwords using Elixir and haveibeenpwned.com's API", "url": "https://ieftimov.com/posts/haveibeenpwned-password-lookup-elixir/", "published_at": "2018-12-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241b27a975", "title": "Data structures in Go: Stacks and queues", "url": "https://ieftimov.com/posts/golang-datastructures-stacks-queues/", "published_at": "2018-02-24T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241bebbb08", "title": "Data structures in Go: Linked lists", "url": "https://ieftimov.com/posts/golang-datastructures-linked-lists/", "published_at": "2018-02-18T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241cb0f710", "title": "Create and manage MacOS LaunchAgents using Go", "url": "https://ieftimov.com/posts/create-manage-macos-launchd-agents-golang/", "published_at": "2018-01-30T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241d4973c4", "title": "Packing multiple binaries in a Golang package", "url": "https://ieftimov.com/posts/golang-package-multiple-binaries/", "published_at": "2018-01-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241e219efd", "title": "Understanding why and how to add idempotent requests to your APIs", "url": "https://ieftimov.com/posts/understand-how-why-add-idempotent-requests-api/", "published_at": "2017-11-02T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241ee7e07b", "title": "Versioning REST APIs: The Theory and Using Grape in Ruby", "url": "https://ieftimov.com/posts/versioning-ruby-grape-apis/", "published_at": "2017-10-07T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a241fd8d1e6", "title": "What happens when you DELETE a resource?", "url": "https://ieftimov.com/posts/when-you-delete-an-api-resource/", "published_at": "2016-10-29T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242041f572", "title": "Sprinkle some HATEOAS on your Rails APIs", "url": "https://ieftimov.com/posts/sprinkle-some-hateoas-on-rails-apis/", "published_at": "2016-06-26T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24204efb3e", "title": "The practicality of designing and describing your APIs", "url": "https://ieftimov.com/posts/practicality-designing-describing-apis/", "published_at": "2016-06-16T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2420cea70e", "title": "Learn your tools: Navigating your Git History", "url": "https://ieftimov.com/posts/learn-your-tools-navigating-git-history/", "published_at": "2016-06-06T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2421621776", "title": "How Rails handles status codes", "url": "https://ieftimov.com/posts/how-rails-handles-status-codes/", "published_at": "2016-05-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2421a11fa6", "title": "A bit about decorators and presenters", "url": "https://ieftimov.com/posts/decorators-and-presenters/", "published_at": "2016-05-20T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2421afa34b", "title": "Git history is underrated", "url": "https://ieftimov.com/posts/git-history-is-underrated/", "published_at": "2016-04-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2421c6e946", "title": "Write your first Rubygems plugin", "url": "https://ieftimov.com/posts/your-first-rubygem-plugin/", "published_at": "2016-03-31T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24226389fb", "title": "You Can't Rescue Them All", "url": "https://ieftimov.com/posts/you-cant-rescue-them-all/", "published_at": "2016-03-25T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423601f28", "title": "Refactoring in Ruby: Primitive Obsession", "url": "https://ieftimov.com/posts/primitive-obsession-ruby/", "published_at": "2016-03-08T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423904e09", "title": "PostgreSQL Indexes: B-Tree", "url": "https://ieftimov.com/posts/postgresql-indexes-btree/", "published_at": "2016-02-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423bfa735", "title": "PostgreSQL Indexes: First Principles", "url": "https://ieftimov.com/posts/postgresql-indexes-first-principles/", "published_at": "2016-01-30T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423ca5bee", "title": "Building a Weather Widget using RxJS", "url": "https://ieftimov.com/posts/build-weather-widget-rxjs/", "published_at": "2016-01-24T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423d95eac", "title": "Understanding Reactive Programming with RxRuby", "url": "https://ieftimov.com/posts/reactive-programing-rxruby/", "published_at": "2016-01-19T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2423f6a9ba", "title": "Refactoring in Ruby: The right place for a Builder?", "url": "https://ieftimov.com/posts/refactoring-builder-pattern/", "published_at": "2016-01-13T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24245e6e76", "title": "Running a Rails Application on Deis", "url": "https://ieftimov.com/posts/running-rails-app-deis/", "published_at": "2016-01-07T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2425419f29", "title": "Refactoring in Ruby: Smelly Parameters Lists", "url": "https://ieftimov.com/posts/refactoring-smelly-parameters-lists/", "published_at": "2016-01-04T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242613f4f0", "title": "Refactoring in Ruby: TDD your way through Extract Class", "url": "https://ieftimov.com/posts/tdd-extract-class/", "published_at": "2015-12-28T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242647c9ff", "title": "Rails, Secure Cookies, HSTS and friends", "url": "https://ieftimov.com/posts/rails-tls-hsts-cookies/", "published_at": "2015-12-14T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242740bf62", "title": "Why and how to test Rake tasks in your Rails application", "url": "https://ieftimov.com/posts/test-rake-tasks/", "published_at": "2015-12-03T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2427bb0743", "title": "Writing command line apps with Elixir", "url": "https://ieftimov.com/posts/writing-elixir-cli-apps/", "published_at": "2015-11-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24280271fe", "title": "Getting Started with Minitest", "url": "https://ieftimov.com/posts/getting-started-with-minitest/", "published_at": "2015-11-26T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2428ae9aa0", "title": "Testing Ruby Mixins with Minitest in isolation", "url": "https://ieftimov.com/posts/testing-mixins-minitest/", "published_at": "2015-11-04T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242963708d", "title": "Filter request params from Phoenix logs", "url": "https://ieftimov.com/posts/filter-params-phoenix/", "published_at": "2015-10-23T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2429cbe6f6", "title": "How to set tests as pending in your ExUnit suite", "url": "https://ieftimov.com/posts/pending-tests-exunit/", "published_at": "2015-10-18T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2429f2b821", "title": "Write and publish your first Elixir library", "url": "https://ieftimov.com/posts/writing-elixir-library/", "published_at": "2015-10-09T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242a59cb21", "title": "Variable hoisting in Ruby", "url": "https://ieftimov.com/posts/variable-hoisting-ruby/", "published_at": "2015-08-21T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242a86a82a", "title": "TDD Patterns: Humble Object", "url": "https://ieftimov.com/posts/tdd-humble-object/", "published_at": "2015-08-15T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242b583ec4", "title": "Test Doubles: in theory, in Minitest and in RSpec", "url": "https://ieftimov.com/posts/test-doubles-theory-minitest-rspec/", "published_at": "2015-08-05T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242bb172c7", "title": "Exception handling and testing it with Minitest", "url": "https://ieftimov.com/posts/exception-handling-and-testing/", "published_at": "2015-07-29T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242c50d3cd", "title": "Testing Ruby's floats precision", "url": "https://ieftimov.com/posts/testing-floats-in-ruby/", "published_at": "2015-07-21T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242ce216f3", "title": "Migrating a test suite from RSpec to Minitest", "url": "https://ieftimov.com/posts/migrate-rspec-to-minitest/", "published_at": "2015-07-14T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242ce5ac75", "title": "How to write Rails middleware", "url": "https://ieftimov.com/posts/writing-rails-middleware/", "published_at": "2015-07-07T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242d40ff2d", "title": "Rack: Writing middleware", "url": "https://ieftimov.com/posts/writing-rack-middleware/", "published_at": "2015-06-28T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242d595aaf", "title": "Rack: First Principles", "url": "https://ieftimov.com/posts/rack-first-principles/", "published_at": "2015-06-16T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242deb30f9", "title": "In and out of PostgreSQL using COPY", "url": "https://ieftimov.com/posts/postgresql-copy/", "published_at": "2015-06-12T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242e6311df", "title": "Implementing \"the lovely\" Singleton Pattern", "url": "https://ieftimov.com/posts/singleton-pattern/", "published_at": "2015-05-26T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242ed6fe1b", "title": "POV: Startup Weekend Skopje", "url": "https://ieftimov.com/posts/my-swsk-xp/", "published_at": "2015-05-19T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a242f2d78e8", "title": "How to: YourGem.configure", "url": "https://ieftimov.com/posts/how-to-yourgem-configure/", "published_at": "2015-05-18T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24301d2e82", "title": "RailsConf 2015 talks that you should watch", "url": "https://ieftimov.com/posts/railsconf-2015-talks-that-you-should-watch/", "published_at": "2015-05-04T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a243040708d", "title": "How to write RSpec formatters from scratch", "url": "https://ieftimov.com/posts/how-to-write-rspec-formatters-from-scratch/", "published_at": "2015-04-28T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a243101da3b", "title": "Pattern to pattern: Template Method & Strategy", "url": "https://ieftimov.com/posts/pattern-to-pattern-template-method-and-strategy/", "published_at": "2015-04-22T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a24316ca592", "title": "Exploring new methods in Ruby 2.2.0", "url": "https://ieftimov.com/posts/exploring-new-methods-in-ruby-two-point-two/", "published_at": "2015-04-15T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2432333a3e", "title": "Using multiple sources in a Gemfile", "url": "https://ieftimov.com/posts/using-multiple-sources-in-a-gemfile/", "published_at": "2015-04-14T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2432e5b5fa", "title": "Template Method Pattern in Ruby", "url": "https://ieftimov.com/posts/template-method-pattern-in-ruby/", "published_at": "2015-04-06T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2433d32a5f", "title": "AngularJS Services Part 4: Value and Constant", "url": "https://ieftimov.com/posts/angularjs-services-part-4/", "published_at": "2015-03-01T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a243490994b", "title": "AngularJS Services Part 3: Service", "url": "https://ieftimov.com/posts/angularjs-services-part-3/", "published_at": "2015-02-28T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2435361108", "title": "AngularJS Services Part 2: Factory", "url": "https://ieftimov.com/posts/angularjs-services-part-2/", "published_at": "2015-02-27T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2435ed0cf5", "title": "AngularJS Services Part 1: Provider", "url": "https://ieftimov.com/posts/angularjs-services-part-1/", "published_at": "2015-02-25T00:00:00+00:00" }, { "id": "01a0821c-adc6-706e-bf29-8a2435fe0309", "title": "SOLID Principles in Ruby", "url": "https://ieftimov.com/posts/solid-principles-ruby/", "published_at": "2014-06-05T00:00:00+00:00" } ] posts Claim your blog
Back to Ilija Eftimov
Blog · corpus.blog/blogs/ieftimov.com/posts

Ilija Eftimov

ieftimov.com

2022

2021

2020

2019

2018

2017

2016

2015

2014