Mohammad Naghavi


My preferred (integration) testing strategy

Testing and amount of effort put on testing a system or just a piece of code is the most important factor implying the quality of resulting software. Here I want to give some insight into what has worked very well for me in the past few years of managing, heading and participating in software development teams.

دامین دریون دیزاین، انتیتی ها و ولیوآبجکتها

در درون هر دامنه ایی، دامین مدل قلب یک نرم افزار طراحی شده به روش ددد می باشد جایی که تمام عملکرد و مدل اصلی نرم افزار در آن پیاده سازی میشود. به همین دلیل شناخت برخی الگوهای طراحی و مفاهیمی که در این لایه بسیار مورد استفاده قرار میگیرد از اهمیت بالایی برخوردار است. در این نوشتار به تشریح دو مورد از مهمترین این مفاهیم می پردازم که در پست های قبلی هم جسته و گریخته به آنها اشاره شده.

دامین دریون دیزاین، معماری لایه ایی

در قسمت اول و دوم این نوشتار،‌ بیشتر به تشریح کلی مفاهیم بنیادی ددد مثل زبان فراگیر، دامنه و مترجم ها پرداخته شد. در این قسمت آغاز به تشریح و توضیح تکنیک هایی می کنم که درون یک دامنه به کار میروند. به ویژه به اصول طراحی لایه ایی و اساس آن.

دامین دریون دیزاین، مفهوم دامنه ها

در قسمت اول این نوشتار به برخی مفاهیم پایه ایی ددد اشاره کردم. در این قسمت بیشتر به بررسی دامنه ها و روش های داکیومنت کردن آنها می پردازیم.

دامین دریون دیزاین، طراحی مشتق شده از واقعیت

ددد متدی از طراحی نرم افزار است که طرفداران خاص خود را دارد. در این روش از طراحی نرم افزار اهمیت ویژه ایی به مفاهیمی و روندهایی داده می شود که قرار است توسط نرم افزار مدل و یا جایگزین شوند. این روش در نقطه ی مقابل روش هایی قرار می گیرد که مواردی مثل ابزارهای برنامه نویسی، فریم ورک ها یا حتی تخصص های موجود در میان اعضای تیم را در مرحله ی اول و با اهمیت بالا در تصمیم گیری های مربوط به طراحی نرم افزار دخالت می دهند.

ES7 with express and grunt

I have been recently in process of getting used to fast prototyping using Node.js and Express. One major thing that gets really frustrating when dealing with async calls is the call back hell:

A word or two about OrientDB

I’m writing this note due to the fact that me and my team have wasted hours and days in result of problems that has been built into the OrientDB due to trivial mistakes made in its development process. After years of development in Open Source society, I know that expectations a person may have of an open source and free tool is different to a commercial equivalent but the common practices of same Open Source society persuades that if a tool, application or a piece of code is NOT production ready, at least let the user know so that he decides it by his own where or not to risk using it. Unfortunately OrientDB team goes into the opposite direction. With over 1000 open issues on GitHub, they are all pushing their product as production ready and doing their best to cover bugs and problems. This is not ethical not in the definition of Open Source neither in definition of commercial software.

S3 & CloudFront as complete access controlled file storage

Recently during our project, we needed an access controlled file storage which should have been plugged into our under development system. Problem was that the system we are talking about had already a complicated access control logic and we neither intended to reimplement all that logic in another language nor it fulfilled our intention regarding performance of the file serving system to have any kind of cache, database lookups inside.

Vert.x built with Gradle in Intellij IDEA

If you use Vert.x for development, your preferred build tool is the Gradle and are also in love with excellent Intellij’s IDEA, you would probably like to know how the best they could be wired up together, here you go:

A word about ARM based boards

I have got a bunch of individual emails and comments asking me some questions about my experience with ARM based boards, mini PCs or similar ones. I believe the majority of attention has been drawn here because of the other post I had about MK809III. So here I wanted to do a kind of sum up about what I have experienced may this answer some questions about each which board. Following comes the three major platforms I have gathered some experience with and my comments on them:

Cordova/Phonegap In App Billing Plugin

I have already mentioned the plugin that I have been working on, for cordova/phonegap for the sake of providing in app billing capabilities in hybrid applications on andorid or iOS. As this plugin has reached a good point which can be practically used now, I thought I would give a short intro to it and to its goals.

Use Cordova config values

As I have been working on a iOS/Android in app purchasing plugin for Cordova, ran into the need of making some of the parameters in my code easily adjustable by developer who is going to use the plugin without the need of changing the code itself.

Headless home server on a MK809III

After my raspberry pi went down under the load of OwnCloud and some other applications, I decided to find a more powerful replacement for it. My search came to a MK809III stick featuring a quad core ARM9 known as RK3188 with 2GB RAM and 8GB internal NAND. This HW seemed just brilliant for my headless home server, specially with a price of 35 Euros!

Table of languages meta data

Not sure about you but I have to confess to this shameful fact that I have some times done some redundant work. One of such was finding and preparing a meta data table for (human) languages when ever I needed such thing.

Cordova development with Netbeans

Coding HTML/JavaScript for web is fun. It is fun and it totally rules! but coding with HTML/JS for handhold devices is even more fun. The most exciting part is the large amounts of code which can be reused between different platforms and this is some dream for any developer.

RESTful webservices using CakePHP

Webservices are really important. There are very few cases that web applications does not really need to publish their functionality through API and even in that cases having an API is a positive and nice feature to have. Not too much blah blah, I will dive into how webservice can be done in CakePHP with less effort and using the core functionality. This note is not finished and will be updated for some coming days.

Forgotten land: Private location services vs. public ones

The amount of location aware services has been rising during last years like an explosion. From localized search results up to many other astonishing virtual reality games and augmented reality applications.

Move to Jekyll

Static site hosting may seem now a days a totally outdated way of doing elegant sites, but we have to know that any kind of technology may happen to come back to existence in a new form.

MySql Stored Funcitons and Procedures

Difference between a stored function and a stored procedure:

Get back query of a find

There are times when you have to either query your database multiple time to achive a complex query or you can get back the command from cake and integrate it in another query. This second way will for sure increase your performance dramatically.

Raspberry Pi ($25 Linux Box)

Must of the students who have ever tried to use any variety of micro-controllers should be aware of the problems and the time needed to setup and run even the simplest board. Now however there exists a board which has linux on-board! It can be connected to a monitor with an HDMI connector and manage any hardware you have through a USB interface, and all in one for just $25!

Localizing forms which contain names

This is an interesting study on forms which are designed to target a variety of users from different cultures. At least scroll down to nearly the end of page and read the highlighted implication for field design.

Mutating tables

Mutating tables are the ones under a change, literary to say. In PL/SQL you will face mutating tables error in case you are working on a row level trigger.

Axiom Game Designer

It’s a time that I began to work on a SceneDesigner for Axiom 3D game engine. This project is an Open Source one and will be kept OpenSource for ever. My intention is to keep it portable to Mono to be usable under Linux and Mac Osx too but if it decreases the ability and performance of the program maybe ignore this concept.