Logging AWS ConsoleLogin events
by Sebastien Mirolo on Mon, 6 Jan 2025
As part of continuous Cybersecurity updates, we decided to alert
the Ops team on any successful or unsuccessful attempts to login into
the AWS Console.
read more...
Bringing ESG Survey data to Power BI: A first attempt
by Morgan Shorter on Wed, 16 Oct 2024
Leveraging Power BI to extract insights from ESG data produced by
TSP
is something that several of our customers have expressed interest in.
To facilitate this, we have been working on ways to make that process
easier. Sebastien spent time adjusting the formatting of our datasets
to make it compatible with the widest possible range of Power BI
instances. Meanwhile, I have been working on backend code that will
automatically update models / data views in Power BI as new survey
data comes in.
read more...
Exporting HTTP errors through OpenTelemetry
by Sebastien Mirolo on Thu, 19 Sep 2024
Having gained some insights into OpenTelemetry through
previous
experiments,
we planned to forward 50x nginx log records to an aggregator through
OpenTelemetry.
read more...
Shipping ssh login events through OpenTelemetry
by Sebastien Mirolo on Wed, 18 Sep 2024
Following the failed experiment to ship
OpenTelemetry events to GitLab, we embarked on a smaller project
of creating an HTTP POST request on a homegrown service every time an engineer
ssh into the Cloud infrastructure.
read more...
OpenTelemetry and GitLab (failed experiment)
by Sebastien Mirolo on Mon, 9 Sep 2024
As Web traffic has spiked other the summer, the engineering team is looking
to upgrade the logging infrastructure to have better visibility into
"soft errors" - i.e. 502, 503, 504 and the like.
The team has been more and more relying on a self-hosted GitLab instance
for day-to-day activity, and has seen many new features around Monitoring
coming out of GitLab. Soon the idea of shipping OpenTelemetry events
to GitLab started to look good.
read more...
Auto-update of Letsencrypt Wildcard TLS Certificates
by Sebastien Mirolo on Tue, 16 Jul 2024
Letsencrypt started to issue wildcard certificates in . Verification
of ownership is done through a TXT DNS record, which means for auto-updating,
we need to be able to update DNS entries programmatically. Since the domain
we are planning to use wildcard certificates on is managed by AWS Route53,
this is perfect.
read more...
Upgrading to Amazon Linux 2023
by Sebastien Mirolo on Thu, 4 Jan 2024
Over time we ran production workloads on Fedora, CentOS7, Amazon Linux 2,
and now Amazon Linux 2023 (which means we are back on Fedora I guess).
This post is about the quirks we encountered migrating from Amazon Linux 2
to Amazon Linux 2023.
read more...
Leveraging GPT-4 to Streamline ESG Compliance Audits
by Dima Knivets on Tue, 24 Oct 2023
In today's rapidly evolving corporate landscape, Environmental, Social, and
Governance (ESG)
compliance is more crucial than ever. Auditors specializing in ESG standards
are often burdened with the cumbersome task of manually sifting through
a mountain of company documents to extract relevant information, making
it a significant bottleneck in the auditing workflow.
read more...
Setting up Hubspot
by Sebastien Mirolo on Fri, 25 Aug 2023
We have been using Zendesk for 5 years now. They have made changes recently
that makes it more difficult to respond to tickets quickly and effectively
to the point we decided to look at alternative solutions.
read more...
Generating picture-in-picture of a speaker with Synthesia
by Sebastien Mirolo on Fri, 4 Aug 2023
After experimenting with AI-generated voice over in a previous post,
it was time to amp it up. In this post, we will sign up for
Synthesia and attempt to generate
a picture-in-picture of a AI-generated actor taking us through a video
tutorial.
read more...
Producing Voice Over for Video Tutorials with Open Source
by Sebastien Mirolo on Wed, 26 Jul 2023
The team has embarked on producing a series of video tutorials. Since none
of the team members is a native English speaker and we have been eager
to test some new Artificial Intelligence (AI) tools, we decided to experiment
with Text-to-Speech technologies - Open Source ones of course.
read more...
A stopped EC2 instance that would not start again
by Sebastien Mirolo on Fri, 16 Jun 2023
Many times we stopped an EC2 instance, changed the instance type and started
it again. This time, the instance would just refuse to start again. Let's dive
in how we debugged this issue and fixed it.
read more...
Connecting an AzureAD SAML provider
by Sebastien Mirolo on Wed, 16 Nov 2022
In this post we will delegate user authentication
for a Djaoapp-powered
Software-as-Service (SaaS) product to a SAML provider hosted by AzureAD.
read more...
Upgrading to Java11 on Amazon Linux 2
by Sebastien Mirolo on Wed, 16 Nov 2022
A latest update of Jenkins (version 3.6) triggered an required upgrade
to Java 11. The process to upgrade from Java8 to Java11 on Amazon Linux2
is pretty straightforward.
read more...
Operating a SaaS product through ownership changes
by Sebastien Mirolo on Tue, 30 Aug 2022
Either because you sold the business, or a critical operation engineer
is promoted and/or leaves the company, changes in ownership are inevitable.
To be prepared for it, you should create a business continuity plan
and review it regularly.
read more...
Twelve Transactional E-mails Every SaaS Needs
by Sebastien Mirolo on Wed, 13 Jul 2022
You have decided to launch your SaaS product and are looking forward
to subscribers signing up with their credit card. Congratulations!
Let's now see the transactional e-mails your customers will be expecting.
read more...
Packaging Python Apps
by Morgan Shorter on Mon, 25 Apr 2022
I have never quite understood why Python (or Ruby) packages are
delivered through their own manager (pip, gem) instead of the local system
package manager (apt, yum, etc). It might make sense for pure language packages
but it becomes borderline insane when dealing with bindings to native
libraries.
read more...
Running an Amazon Linux2 virtual machine on your own hardware
by Morgan Shorter on Fri, 21 Jan 2022
I have a prod test-bed with privileged ports, FQDNs, and production configs
running in my home lab. With it, I can test all our apps, proxies, databases,
and unattended install scripts without having to deploy a new instance. In this
article, I'll explain how I set up an Amazon Linux 2 virtual machine
on my headless home server, and how I used WireGuard to elevate that VM
from a handy sandbox to a first-class, low-maintenance development tool.
read more...
Logging Docker containers output through journald to syslog
by Sebastien Mirolo on Fri, 24 Dec 2021
So far the fast path to notify
developers when a logic error (500) appears in production relies on text
files and logrotate. Here we will see how to forward Docker logs through
journald to syslog.
read more...
Triggering a script on uploads to AWS S3
by Sebastien Mirolo on Thu, 23 Dec 2021
The main reason to implement a
fast path to upload logs
is to be able to process them quicker than through the daily batch process.
Fortunately AWS S3 can generate events into a SQS queue and/or trigger
Lambda function when a new file is created in an S3 bucket.
read more...
Logging gunicorn messages through journald to syslog-ng
by Sebastien Mirolo on Wed, 22 Dec 2021
We are interested here to log messages from a gunicorn application
to journald, eventually forwarding the messages to syslog-ng.
read more...
Debugging logrotate scripts
by Sebastien Mirolo on Tue, 21 Dec 2021
Many times debugging logrotate scripts rely on making changes and
waiting for the next day to check the results. Today we will see
how to be more efficient and debug logrotate scripts until they work.
read more...
The MVP is dead
by Sebastien Mirolo on Mon, 16 Aug 2021
A long time ago, around 1999, someone put a few HTML pages together glued with
some logic code; had success with it; wrote a book about it; had more success;
and the Minimum Viable Product (MVP) was born.
read more...
Fast-tracking server errors to a log aggregator on S3
by Morgan Shorter on Tue, 29 Jun 2021
Setting up log monitoring with DjaoDjin is now easier than ever thanks
to the latest logging feature. Integrating alerts into your app configuration
will be supplanted by a more cleanly separated plug-and-play design that handles
log backups, log rotation, and monitoring for server errors without developers
having to worry about setting up and testing email logins.
read more...
The rise of micro-SaaS
by Mark Stansberry on Wed, 2 Jun 2021
Where there used to be a few large SaaS market, we now see hundred of different
micro-markets and micro-SaaS products to address those micro-markets.
Why is that?
read more...
Increasing Your Web Site's Selling Value
by Mark Stansberry on Thu, 27 May 2021
Today many developers are investing their time in increasing a web site’s
selling value. This differs a little from increasing a web sites revenue,
but not its revenue potential.
read more...
Vertical SaaS Market Definition, A Question of Degree
by Mark Stansberry on Thu, 27 May 2021
Some of the largest and fastest growing software development markets are within
the Vertical SaaS market. It is a fragmented market that addresses over 100
different submarkets.
read more...
Starting with a base AMI
by Sebastien Mirolo on Wed, 19 May 2021
Before you start any DevOps workflow, you will need to pick an OS distribution
(and image) to base the servers on.
read more...
Mix Vue.js with Django templates
by Sebastien Mirolo on Thu, 11 Jun 2020
We have an application written in Django that we want to piece-wise migrate
to a Vue and API architecture. This post explores how we managed to combine
Vue development inside a Django project, and all the frustrating dead-end
along the way. Hopefully saving you time in your own process.
read more...
Building Git Pull Requests with Jenkins
by Sebastien Mirolo on Wed, 15 Apr 2020
Through the years and Jenkins releases, we build Jenkins jobs that are able
to run tests on the master branch.
With more and more casual contributors, we want to be able to run tests
on Pull Requests, automatically adding annotations for the test
results.
read more...
In the year ahead 2020
by Sebastien Mirolo on Sat, 21 Mar 2020
In spite of the coronavirus crisis, it is the time of year where accountants
close the books for last year, and for the DjaoDjin team to reflect on what
we did well, what can be improved, and where to take the product forward over
the next months.
read more...
DjaoDjin prices will increase Dec 1st 2019
by Sebastien Mirolo on Mon, 4 Nov 2019
The whole DjaoDjin team wants to thank you for the trust you placed in
us to manage the nuts and bolts of your online product.
read more...
Building CSS/JS static assets and Django
by Sebastien Mirolo on Thu, 4 Jul 2019
In the early days of the Internet, you added your .css and .js files
in a
testing a Django 2.2 website with SQLite3 on CentOS 7
by Sebastien Mirolo on Wed, 8 May 2019
Django 2.2 was released on Apr 1st 2019. Since it is the most recent as well
a Long Term Support (LTS) version, it was time to update the Jenkins bot
infrastructure to include Django 2.2 in the Django versions tested.
read more...
Integrating Django i18n with Jinja2 and Vue.js
by Dima Knivets on Tue, 16 Apr 2019
It is straightforward to add translations to a Django project with built in
Django templates. However, if you are using other template engines like Jinja2,
it might take more effort to make those work together. Things can get tricky if
you want to manage translations for both the frontend and the backend using the
same Django tools. I'm not going to cover the basics of i18n in Django hereas
there is already a great deal of information on the Django website, but
instead talk about the out of the box stuff that is not integrated.
read more...
Forging Ahead 2019!
by Sebastien Mirolo on Mon, 4 Feb 2019
January was a month-long of analyzing feedback and planning for the year ahead.
With Chinese New Year around the corner, it is time to write down the lessons
learned in 2018 and what the DjaoDjin team will work on in 2019.
read more...
2019 Weekly Reading List
by Sebastien Mirolo on Tue, 1 Jan 2019
Short list updated weekly of articles and papers we read and found
worth mentioning in 2019.
read more...
Documenting an API implemented with Django Rest Framework
by Sebastien Mirolo on Wed, 24 Oct 2018
With growth comes many support issues, one of them being able to efficiently
answer questions for developers and prospective customers. The
API doc hosted on Read-the-Docs
were showing their limitations. So we embark onto surveying the landscape for
API documentation, looking for a solution that fits
DjaoApp APIs
implemented with Django Rest Framework.
read more...
First days with Zendesk
by Sebastien Mirolo on Thu, 4 Oct 2018
Adding a thousand users in one day, many of them working across the spectrum
of fortune 500s companies is a strong incentive to build a professional
customer support organization. The first step being to sign up for
Zendesk.
Here was we learned in the first couple weeks.
read more...
Date/time, back and forth between Javascript, Django and PostgreSQL
by Dima Knivets on Tue, 17 Apr 2018
DjaoDjin caters to micro-SaaS products. These are specialized and local
products. As an example, A1Ceus
targets compliance with New York State
professional certification requirements. Usually the teams behind those
websites are small (1-3 people), with their thumb on the pulse on daily
business numbers. Reporting graphs in UTC did not cut it. Questions kept
piling up in the customer support inbox about discrepancies between what
those micro-SaaS entrepreneurs were experiencing and what the report charts
were saying. Reports had to be presented midnight to midnight
local time.
Here is the journey of what that meant technically to show revenue reports in
local time.
read more...
2018 Weekly Reading List
by Sebastien Mirolo on Mon, 1 Jan 2018
Short list updated weekly of articles and papers we read and found
worth mentioning.
read more...
PostgreSQL, encryption and AWS RDS instance
by Sebastien Mirolo on Sat, 19 Aug 2017
Sometime ago, I wrote about
installing postgresql on an encrypted
volume and
Export Python Code Coverage from a Docker Container to Jenkins
by Sebastien Mirolo on Wed, 17 May 2017
The full tests workflow is presented in the diagram below. We presented
the steps to build a Docker container
and upload it to ECR in another post. Here we will focus on generating
Python coverage results and getting the files to be presented into Jenkins.
read more...
Jenkins, Docker build and Amazon EC2 Container Registry
by Sebastien Mirolo on Tue, 16 May 2017
The major features released in Jenkins v2 are Jenkinsfile and Pipelines.
Today, we will see how to create a Jenkins job to build a docker
container out of a source repository then upload it to an Amazon EC2 Container
Registry.
read more...
First day with Docker
by Sebastien Mirolo on Sun, 14 May 2017
(This post was updated for running Docker on Fedora 25)
Since Docker was released as open-source,
it has spread like wildfire. Both Amazon
and Google
have been quick to support Docker on their respective cloud.
read more...
Nginx, Jetty and Jenkins (updated)
by Sebastien Mirolo on Sat, 13 May 2017
It has been a while since we setup Nginx, Jetty and Jenkins together
the first time around. Fedora is on version 25, Jetty on version 9
and Jenkins on version 2.60.
read more...
Vendor Landscape for Enterprise-Ready SaaS
by David Schoenbach on Thu, 6 Apr 2017
Enterprise-ready SaaS: The term suggest feature-rich, scalable, and secure
-- qualities at the core of any cloud-based service for enterprise customers.
But the bar is trending higher, and developers now have greater expectations
to meet as they set their roadmap for enterprise-ready SaaS.
read more...
Create an EC2 AMI with Ansible
by Sebastien Mirolo on Thu, 30 Mar 2017
Time to boot EC2 instances has significantly improved over the years but
it still takes in the order of tens of minutes to do a system update
and configuration. As a result, we always create a base image, fully configure
and that is then instantiated as necessary. Of course, we use
Ansible to setup and register that AMI.
read more...
Elements of a good receipt
by Sebastien Mirolo on Tue, 31 Jan 2017
Charge receipts are an essential part of payments online, both
for selling physical goods (e-commnerce) and subscriptions
for Software-as-a-Service (SaaS).
A good receipt will help customers build trust in your business as well
as avoid chargebacks. In this post, let's review the elements needed
for a good receipt.
read more...
Weekly Reading List
by Sebastien Mirolo on Sun, 1 Jan 2017
Short list updated weekly of articles and papers we read and found
worth mentioning.
read more...
Analysis of Runtime Behavior of Boutique Software-as-a-Service
by Sebastien Mirolo on Mon, 12 Dec 2016
We define a boutique Software-as-a-Service (SaaS) as a business from one
to fifty people, which primarily sells a software product through an online
subscription service. We were curious to find out the technology stacks behind
those businesses, as well as the usage of administrative features
(User profiles, Billing, etc.) that need to be built up as part of running
a Software-as-a-Service but which are not core to the service delivered.
read more...
Porting a Django app to Jinja2 templates
by Sebastien Mirolo on Wed, 26 Oct 2016
Jinja2 has many nice features over native Django templates, one being
a more strict sand-box security model and second template macros.
Fortunately Django 1.8 introduced support for Jinja2 templates.
In this post we will see how we ported our Django code base to Jinja2 templates.
read more...
Resizing an EBS disk
by Sebastien Mirolo on Fri, 21 Oct 2016
Sometimes you underestimated the disk size required to setup and run
a service on AWS. The quickest way to keep moving forward
is to resize the EBS storage associated with the EC2 instance.
read more...
Breaking The Curse of Negative Cashflow in SaaS
by Sebastien Mirolo on Thu, 1 Sep 2016
It has become a custom that a SaaS company will sacrifice its cash flow and
profitability when chasing after revenue growth and growth of the customer base.
This is obviously made possible if a SaaS company is backed by a large amount
of investment, specifically from Venture Capital firms.
read more...
Logrotate, S3 storage, and AWStats
by Sebastien Mirolo on Wed, 24 Aug 2016
Today we are going to push the rotated logs to a S3 bucket,
the download those logs and process them with awstats.
read more...
Boutique entrepreneur, LLC or Corporation?
by Sebastien Mirolo on Mon, 25 Jul 2016
You are starting a Software-as-a-Service business to clinch this nagging pain
you had at the company you just left. Now swimming into the business legal
jargon, you are wondering should I create a LLC or incorporate?
I am neither a lawyer nor a certified accountant. The following blog post
cannot be construed as professional advise. It is merely the thoughts
of a boutique entrepreneur that has spent way too much time reading
through documents available on the Web. None-the-less I hope it helps you.
read more...
SubfieldBase has been deprecated Django warning for DurationField
by Sebastien Mirolo on Sun, 24 Jul 2016
As we are getting ready for a Django 1.10 upgrade,
it is time to take care of one of the most baffling warning in the code base
RemovedInDjango110Warning: SubfieldBase has been deprecated
.
This lead to a long journey through code, documentation, and release notes.
read more...
Hiring a technical co-founder
by Sebastien Mirolo on Sun, 3 Jul 2016
You are starting a Software-as-a-service business to clinch this nagging pain
you had at the company you just left. You have connections and some business
expertise but the only line of code you have ever seen was in an 80s movie
where a kid prevented a nuclear war by having a computer play tic-tac-toe
against itself. You are definitely looking out for a technical co-founder.
read more...
Mental Preparation for the Future CEO
by Aurélie Pérez on Sat, 28 May 2016
Is it time for you to create your own company? Are you ready to begin
the amazing adventure which is entrepreneurship?
Today we are having a guest post from Aurélie Pérez, Advisor about
Happiness At Work on the mental preparation
you will need to become a CEO.
read more...
Django Rest Framework, AngularJS and permissions
by Sebastien Mirolo on Mon, 25 Apr 2016
We are building an AngularJS application that will talk to a backend API
written with Django Rest Framework (DRF for short). Let's see how we do
that nicely and securely.
read more...
In the year ahead
by Sebastien Mirolo on Sat, 23 Jan 2016
Jan 1st 2016, we survived. Bigger fishes didn't make it.
Two customers are going live with their product next week.
Three deals were signed. The quota for January was met. Time to look
at what lies ahead.
read more...
2016 Weekly Reading List
by Sebastien Mirolo on Fri, 1 Jan 2016
Short list updated weekly of articles and papers we read and found
worth mentioning.
read more...
How to set pricing for my subscription business?
by Sebastien Mirolo on Tue, 6 Oct 2015
Getting the perfect pricing will make a huge difference on a business,
from sales velocity (how fast do you sign customers) to free cash flow (how
much can be re-invested quickly into growth). Every market, product
and situation is different. It will take trials and errors to get it right.
Let's just remember rule #1.
read more...
Serving static assets in a micro-services environment
by Sebastien Mirolo on Sat, 5 Sep 2015
While deploying code on a production server can be tricky due to prerequisites,
version drift, etc. Serving static assets, commonly called Plain Old Data (POD)
has its own set of challenges. Often static assets are "compiled"
(gzip, minification), moved around the filesystem and served to a browser
by completely different services (ex: nginx) than during development.
In practice it means a lot of things can potentially go wrong.
read more...
Whitelabel Domain with TLS
by Sebastien Mirolo on Mon, 24 Aug 2015
The first and easiest thing to do to start a business on the Internet
is to register a domain name. There are a few gotchas to be aware
of before you select a DNS provider and hand over the domain name to
your technical team. This post is a little bit more technical than
usual but reading through it will avoid a lot of headaches and frustration
later on.
read more...
A typical day building a boutique hosting platform
by Sebastien Mirolo on Fri, 17 Jul 2015
Mark Suster's blog is always on the edge between a strong opinion
and a pragmatic approach to moving forward. I like it.
Recently Mark wrote "How the Hell do I Prioritize Work, Blog & Find Balance?".
It prompted me to reflect on "What do I myself do in a typical day?".
read more...
Nginx authenticated files access
by Stephane Robino on Tue, 7 Jul 2015
When dealing with large files (2Gb+), we would prefer nginx to serve
those files directly. The trick is we want nginx to serve those files
solely to authenticated users. We will see in this post how to have
nginx serve the files directly, yet keep the authorized access logic
inside our web application.
read more...
How to bring your own service online
by Joe Bonadio on Thu, 11 Jun 2015
There are two opinions when it comes to building a service on the Internet:
if you are willing to work for free for a while, you don’t need much capital
to start a web service - $37 is enough.
On the other hand, the math of SaaS favor large amounts of capital early.
Surprisingly both lines of reasoning are true.
read more...
Browser direct upload to S3
by Sebastien Mirolo on Wed, 10 Jun 2015
Dealing with large files over HTTP has always been challenging, Doing so in
the context of access control and user authentication even more so.
Once faced with that first (too) big file, you will most likely search for
Nginx direct file upload without passing them through backend
or if you rely on AWS, look into S3 direct upload from browser.
We will see in this post how to do the latest.
read more...
Django, Gunicorn and Syslog-ng
by Sebastien Mirolo on Fri, 29 May 2015
As we add more customers, traffic and infrastructure grow, centralized logging
becomes more of a pressing need. We configure the Gunicorn/Django service
to log messages through the local syslog-ng and have syslog-ng forwards logs to
an aggregator machine.
read more...
Jenkins, SELinux and Python Coverage
by Sebastien Mirolo on Thu, 28 May 2015
Time for an upgrade of the Jenkins machine. This time we are setting up
Jenkins with Jetty 9 on Fedora 21 to continuously run CasperJS tests
against the Django web application.
read more...
PostgreSQL, encrypted EBS volume and Key Management Service
by Sebastien Mirolo on Wed, 27 May 2015
A little while ago, I wrote about
installing postgres on an encrypted
volume. The approach is very secure and uses standard Linux tools but
it has two drawbacks.
read more...
How New EC2 Instances Lead to Re-write PDF Tools
by Sebastien Mirolo on Mon, 11 May 2015
Amazon announced new T2 instances
in July 2014.
A little later it became clear that AWS free tier for StartUps was only for T2
instances. The free tier offer did not extend to the previous T1 generation
(We found out on the first bill).
read more...
Two background colors on a nvd3 line chart
by Stephane Robino on Sat, 9 May 2015
NVD3
(running with d3.js) is a great
plug-in to easily create nice chart. Here we will see how to set two different
background colors that visually separate past results and future predictions
on a line chart.
read more...
Organizing Ansible Playbooks
by Sebastien Mirolo on Thu, 2 Apr 2015
In this post I will describe how we organize DjaoDjin Ansible playbooks for
deployment on AWS as well as the rationale that lead to it.
read more...
Single sign-on through OpenLDAP on Fedora 21
by Sebastien Mirolo on Tue, 31 Mar 2015
Whether you work with a lot of contractors that come and go or you are dealing
with the pains of a growing business, there is a point where copying ssh keys
around on your EC2 instances does not cut it anymore. Time for a centralized
login solution.
read more...
Postfix, Dovecot and OpenLDAP on Fedora 21
by Sebastien Mirolo on Mon, 30 Mar 2015
So far we had run the mail server with static hash files. As we add
contributors and machines in the mix, it is about time to introduce
a central account service (i.e. OpenLDAP). Since Rackspace and Amazon
deprecated their first generation instances, re-building the mail
infrastructure from scratch on a new system seemed appropriate - plus,
it is fun!
read more...
StartUp Discussion Panel
by Sebastien Mirolo on Sun, 1 Mar 2015
On February 18th, DjaoDjin organized a discussion panel to the benefit
of 32 students from ESCP visiting diverse companies in San Francisco
for a week.
read more...
Happy New Year 2015!
by Sebastien Mirolo on Sun, 4 Jan 2015
Happy New Year to You! Happy New Year to all those who entrust DjaoDjin
with the technical challenges of running their boutique services online.
Happy New Year to all those who support DjaoDjin with their time and money.
read more...
2015 Weekly Reading List
by Sebastien Mirolo on Thu, 1 Jan 2015
Short list updated weekly of articles and papers we read and found
worth mentioning.
read more...
Where the road leads - Vasilios Pavlounis
by Joe Bonadio on Sun, 2 Nov 2014
A first generation Greek-American born and raised in Halifax, Nova Scotia, San
Francisco Bay Area entrepreneur Vasilios Pavlounis graduated with a business
degree from Dalhousie University in 1986. His life changed course, however,
when he saw an ad for a computer consultant job three years later.
As he recalls, “I literally had to look it up. Once I did, I said ‘I think
this computer stuff is the future.’ ”
read more...
Software-as-a-Service Lighting Talk at Sourcegraph
by Sebastien Mirolo on Mon, 20 Oct 2014
These are the slides about
djaodjin-saas
I presented at Sourcegraph in October.
read more...
Deploying on EC2 with Ansible
by Sebastien Mirolo on Sat, 18 Oct 2014
Ansible is a great piece of software
to write IT automation scripts. The fact that Ansible is written in Python
makes it even sweeter for us.
read more...
Multi-tier Implementation in Django
by Sebastien Mirolo on Thu, 16 Oct 2014
These are the notes from the lightning talk I gave at the
SF Django Meetup
on September 24th.
read more...
jQuery plugin to annotate images
by Stephane Robino on Sun, 31 Aug 2014
For the past months, we have been using a workflow to communicate layout changes
on the site that includes an in-browser screen capture, followed by a
screenshot annotate step and concluded by a todo item in the backend database.
read more...
Back to school: lessons learned this summer
by Sebastien Mirolo on Mon, 25 Aug 2014
Last week, yet another DjaoDjin client processed his first payment through
the DjaoDjin subscription firewall. In this post, I will share what the team learned
completing the DjaoDjin Minimum Viable Product (MVP) over the summer.
read more...
From Cycling to IoT - Eran Frohman
by Joe Bonadio on Mon, 11 Aug 2014
“The reasonable man adapts himself to the world: the unreasonable one
persists in trying to adapt the world to himself. Therefore all progress
depends on the unreasonable man.” - George Bernard Shaw, Man and Superman
read more...
Email Notifications with Amazon SES
by Sebastien Mirolo on Tue, 5 Aug 2014
Today we are setting up email notification for the Django webapp through
Amazon SES,
not to be confused with Amazon SNS (Simple Notification Service)
and Amazon SQS (Simple Queue Service)
which are other useful notification services from Amazon.
read more...
Postgres on an Encrypted EBS Volume
by Sebastien Mirolo on Wed, 30 Jul 2014
There are only two kinds of people, those who encrypt and those who wish
they encrypted. The way EC2 instances boot, it is almost
impossible to do full disk encryption. Here we will store the postgres
database files on a separate encrypted EBS volume, and thus tweak the default
postgres installation along the way.
read more...
Triggering the VersionEye API
by Sebastien Mirolo on Wed, 30 Jul 2014
Today we are going to mechanically upload DjaoDjin's requirements file
to VersionEye through a git
post-update hook.
read more...
Schema Migration with Django
by Sebastien Mirolo on Tue, 29 Jul 2014
Database schema migration is a fact of life and South has imposed itself as
the de facto solution within the Django community
(at least until Django 1.7).
The south docs
are explicit, yet it is good to read the excellent south-explained
post before diving in.
read more...
Docker on Amazon Elastic Beanstalk
by Sebastien Mirolo on Sat, 26 Jul 2014
We have recently played with Docker
on a Fedora 20 Virtual Machine. What we are looking to achieve Today is
to run a Docker container on Amazon Elastic Beanstalk (AEB).
read more...
Resources for SaaS businesses
by Sebastien Mirolo on Fri, 6 Jun 2014
To wrap up, we recently came across some articles providing very insightful angles to running
a SaaS business.
read more...
How we setup pylint on a git pre-receive hook
by Sebastien Mirolo on Wed, 14 May 2014
We have worked as a cohesive team of Python developers for a long time.
Either it is underscore variable names, spacing conventions or the 80-column
rule, most of them had no problem. All the code written could be pretty much
guaranteed to be PEP-8 compliant.
read more...
2014 Weekly Reading List
by Sebastien Mirolo on Wed, 1 Jan 2014
Short list updated weekly of articles and papers we read and found
worth mentioning in 2014.
read more...
Born Entrepreneur - Hasan Mirjan
by Sebastien Mirolo on Sun, 10 Nov 2013
Entrepreneurship is in Hasan Mirjan's genes. His father was a successful
businessman manufacturing insulation material in his native Iraq.
Mirjan’s journey into entrepreneurship began at the age of 20 with a chicken
farm.
read more...
Multiple step form with jQuery validation
by Stephane Robino on Fri, 25 Oct 2013
We will see how we can easily validate a multiple step form thanks to
jQuery and
jQuery validation plugin.
The aim is to validate each step of the form one by one and post a clean form.
read more...
Landing in Silicon Valley - Eric Olivier
by Sebastien Mirolo on Wed, 7 Aug 2013
Fifty-four-year old Eric Olivier is widely traveled and has dabbled
in a wide variety of businesses ranging from hospitality to information
technology.
read more...
Continuous Integration for a Javascript-heavy Django Site
by Sebastien Mirolo on Sat, 25 May 2013
In the popular series on how technical decisions are made,
we will see Today why DjaoDjin picked django-jenkins,
phantomjs,
casperjs
and django-casper
to build its continuous integration infrastructure on.
read more...
RapidSaas Meetup Notes
by Sebastien Mirolo on Fri, 17 May 2013
After all, one of the most compelling arguments for building a SaaS (Software-as-a-Service)
business is that you can do it on a shoestring and be profitable within a few months
- No ‘Angel’, no VC, fully bootstrapped.
read more...
Is baseball the best sports analogy for entrepreneurship?
by Sebastien Mirolo on Sun, 21 Apr 2013
There are a lot of sports metaphors thrown around in business. I have already
written about technology for the sports fan.
Most prevalent in the startup world is the home run hit.
Baseball is a popular sport, and since the San Francisco Giants are at the top
of their game, it is quite understandable that baseball gets thrown around
a lot around in the bay area tech circles.
read more...
How we picked d3js to draw SaaS metrics
by Sebastien Mirolo on Fri, 1 Mar 2013
There are only few webapps that can do without displaying nice looking
charts. This is even more so when you are running a Software-as-a-Service
(SaaS) website. If you believe we are living in a knowledge economy as
I previously described in Open source
business models, this means we must search and are bound to find already
made solutions.
read more...
Business Anatomy
by Sebastien Mirolo on Mon, 7 Jan 2013
[UPDATED] A physical person is made of limbs and organs each with
a dedicated function. Amonst them, the heart, by pulsing blood through the
body at regular intervals,
defines life and death. In a shortcut analogy, bussiness law organize companies
as moral entities with roles and procedures and, if anything, financial
statements and taxes give the pulse of a company.
read more...
2013 Weekly Reading List
by Sebastien Mirolo on Tue, 1 Jan 2013
Short list updated weekly of articles and papers we read and found
worth mentioning in 2013.
read more...
Focus on Profit
by Sebastien Mirolo on Mon, 10 Dec 2012
I had the pleasure of attending Joel Gascoigne’s presentation on
Buffer at a recent San Francisco Financial Startup Meetup. Joel cited some interesting numbers:
- 400,000+ registered users
- 1.7% conversion rate
- $10/month membership
Behavior-Driven Development (BDD) in Python
by Michael Armida on Fri, 12 Oct 2012
We've adopted
Behave
over Lettuce for our BDD needs
here at Djaodjin. Below I'll present a summary of the motivations for this,
and some criticisms of Behave. read more...
Nginx, Gunicorn and Django
by Sebastien Mirolo on Fri, 22 Jun 2012
I decided today to bring a new web stack consisting of nginx, gunicorn and
django on a fedora 17 system. We are also throwing django-registration in the
mix since the service requires authentication.
read more...
Setting-up PAM and LDAP
by Sebastien Mirolo on Tue, 15 May 2012
I wanted to setup my web app to authenticate through PAM as a general
authentication mechanism. Since users are allowed to register and update
password through the web app directly, I indented to use LDAP to hold user
profile information. So I delve into setting-up PAM and LDAP.
read more...
On Startups
by Sebastien Mirolo on Wed, 14 Mar 2012
Between all the overly hyped articles covering launch events,
plancast postmortem
is a refreshing must read.
read more...
The Future of the workplace
by Sebastien Mirolo on Tue, 7 Feb 2012
I work from my house, as well as several coffee shops next door, and client's
labs once in a while. When you are in a software development industry, you can
pretty much work from anywhere as long as you can connect to the Internet.
I recently attended an event at
Rocketspace presented by
Podio
and Liquidspace.
While Podio can feel like a generic tool, check out Screenlight
(featured in Zencoder blog).
Screenlight is a good example of an enabler of distributed workplaces
for a very specific market, in this case the market of video screening.
read more...
The N Rules of something
by Sebastien Mirolo on Sun, 15 Jan 2012
Happy New Year! Big resolutions for 2012? If you haven't picked yours yet,
these lists of rules to live by are always a lot of inspiration. Enjoy!
read more...
Redmine plugins
by Sebastien Mirolo on Tue, 15 Nov 2011Today I browsed through the redmine plugins directory and selected a few that might be fun to use in our projects. read more...
Redmine is very slow
by Sebastien Mirolo on Mon, 14 Nov 2011I setup redmine recently run through thin behind a nginx on a rackspace cloud machine. The interface is great and it seems like a very useful application if it was not so slow to respond. Simple http requests take forever even on a machine that experiences only minor traffic. read more...
Nginx, Jetty, Lift and Scala
by Sebastien Mirolo on Wed, 2 Nov 2011
After setting-up a php stack,
a python stack
and a ruby stack for web applications
in the last couple weeks, I decided to go with
nginx / jetty / Lift / scala next.
read more...
Setting-up Modx CMS
by Sebastien Mirolo on Sun, 16 Oct 2011Modx is a CMS system written in PHP. As a result, unless you install the not-yet-released PHP 5.4, you will need a PHP-enabled front web server. If you planned to use nginx you will have to do so through FastCGI (remember no built-in http server before PHP 5.4) which if, out-of-luck, you are running a PHP version below 5.3 will require a patch in the PHP source tree. Modx supports mysql as a database backend but there are no mention of postgresql. As a result, I have sticked with a "traditional" LAMP stack for now. read more...
Setting-up Redmine
by Sebastien Mirolo on Sun, 9 Oct 2011After a few days battling with trac, I decided to give redmine a shot. read more...
Authentication using OpenLDAP
by Sebastien Mirolo on Sat, 8 Oct 2011In the most part I followed the ubuntu 11.04 openldap tutorial. The wikipedia article is also useful to understand some of the basics. I later stumbled upon LDAP for Rocket Scientists which definitely helped clarify some. read more...
Setting-up Trac
by Sebastien Mirolo on Sun, 2 Oct 2011I needed to setup a forum for developers on a recent project. That included a source control repository (git), a wiki, a blog, a buildbot and an issue tracking system. To provide the last components I decided to setup trac and a few trac plug-ins. read more...
Here Comes Everybody
by Sebastien Mirolo on Thu, 8 Sep 2011
I picked-up "Here Comes Everybody"
from Clay Shirky. It is a very interesting and entertaining read.
read more...
Stubbing Java Classes
by Sebastien Mirolo on Wed, 7 Sep 2011
Many times while validating a software product, you have to substitute a few
parts in order to enable automated testing. This was again the case recently
when I was confronted with a java application built as a jar file. The
application relied on a complex subsystem of components that needed to be
stubbed out in the test runner.
read more...
Continuous builds with Jenkins
by Sebastien Mirolo on Wed, 7 Sep 2011
Jenkins is another continuous integration
server written as a java webapp just like cruisecontrol.
Jenkins seems to be the most popular continuous integration package today.
There is extensive documentation to install it on many different operating
systems and it comes with lots of plugins.
read more...
Books I read this week
by Sebastien Mirolo on Sat, 23 Jul 2011
I picked up "Only the paranoid survive",
"Cowboys and Dragons" and "The Shockwave Rider"
from the library this week.
read more...
Denying comment spam bots
by Sebastien Mirolo on Sat, 23 Apr 2011
It is kind of fun to look through your application logs and find traces of
a hacker trying to break in. It might even be intellectually stimulating to
play this game of hide and seek with another human being. Unfortunately most
malicious attempts hitting your server will come from bots. Those don't get
discouraged. Those don't change tactics. They keep trying to brute force
passwords, even when you only allow private key login in your ssh daemon.
They keep trying to access PHP scripts, even when you do not have any PHP
stack running on your web server. Worse, if you allow people to leave comments
on your web site, you are almost guarantee to attract spam bots that will
waste precious bandwidth and mess up statistics you use to learn about your
audience.
read more...
Startup Sales Meetup
by Sebastien Mirolo on Thu, 31 Mar 2011
Yesterday I attended the Startup Sales Circle Inaugural Meetup
provided by SalesTie. It was a great venue,
with a lot of interesting people to meet and a very informative panel
discussion moderated by Adam Rodnitzky at RelTel Technologies.
That was definitely one of the most professional meetup I went to.
read more...
Summer Readings
by Sebastien Mirolo on Wed, 1 Sep 2010
September is here again. The summer is almost over and as usual the cold and
foggy days have given ways to the warm season here in San Francisco. It is a
good time to compile a list of the articles and books I have read through the
last months that have held my thoughts.
read more...
Open source business models
by Sebastien Mirolo on Fri, 23 Jul 2010
There are many reasons to structure your business as an open source business.
For example, your business largely relies on open source software itself and
it sounds like fair practice to do such yourself. A second example is that your
business is small. It does not have the resources to seek out talents and
knowledge on its own. This is a real problem in a knowledge-based economy
where a business competitive edge relies increasingly on who, what, as much
as when you know something. An open source business can leverage contributions
from diverse relevant sources around the world. In the end though, noble or
practical, a business only survives through sustainable profits. It is thus
important to control costs and setup channels through which revenue can stream
into the business.
read more...
What is the other guy in the office doing?
by Sebastien Mirolo on Tue, 25 May 2010
Coming up with innovative technology is an art. Building an actual
product out of that technology is an art. Making money out of that product
is an art. In every case, there are plenty of opportunities to screw-up along
the way but as the saying goes: "Smithing makes the smith. Sailing makes
the sailor. Cooking makes the cook. Tailoring makes the tailor". At some
point you need to jump in the unknown and start doing; practical experience
will come with the years. Nonetheless, failing because
"we did not know" is not an excuse. The ones that succeed are always
the ones that can draw on the experience of others. When given a situation, they
will obtain the technical advantage from their accumulated knowledge.
Experience is a guide, not a master.
read more...
Technology careers explained to sports fan
by Sebastien Mirolo on Thu, 14 Jan 2010
Most people do not understand the skills that are needed to work
in technology.
The stereotype is that you need to wear glasses and talk in intricate
mathematical formulas. Well, I argue that everyone is fit to work and
have fun in technology, even if you are a sports buff.
read more...