What is SemVer or Semantic Versioning?

In the Linux world, kernel releases follow MAJOR.MINOR.PATCH version format.

Semver is a similar concept. It advises to follow a simple set of rules:

  1. Major version is changed for incompatible changes.
  2. Minor versions are changed for new functionality
  3. Patch version is changed after bug fixes.

Versions are always incremented and reset to zero:

  1. Patch version is set to zero if the Minor version is changed
  2. Patch and Minor versions are set to zero if the Major version is changed.

References

https://semver.org/

A Software Design Document Template

The design document is a key piece of a project and used throughout the lifecycle of the product. The following is a sample template for a software design document:

  1. Introduction – A paragraph about project/product
  2. Objective – A paragraph on the problem being solved
  3. Requirements – Specifications, expectations
  4. High-Level Design – How the new product/feature fits/interacts with existing systems
  5. Low-Level Design – Discusses proposed components and their interactions
  6. Implementation Plan – Discusses incremental, phased or any strategy followed for development
  7. Deployment Plan – How the new product/feature deployed, rolled out
  8. Contradictions – Known behavior, exceptions and special situations. Also limitations and boundary conditions

More ideas to enhance the template are welcome.

Reference

Understanding REST (REpresentational State Transfer)

REST is an software architecture pattern and defines a set of constraints for creating web services.

The basic building block of REST are:

The benefits of the above principles are:

  • fault-tolerant systems
  • portable applications
  • scale-out systems
  • isolated components updates

References

https://en.wikipedia.org/wiki/Representational_state_transfer

MVC Explained

MVC is an architecture to separate an application in three cohesive, loosely coupled verticals.

  1. Model: The data of your application and methods to access it.
  2. View: The final output/expected result.
  3. Controller: The interface that handles requests from the model

I’m trying to map it to a Linux Filesystem (e.g. ext2).

Model: The file system block manager and allocator for the storage device.
View: read()/write() methods.
Controller: Maps a file descriptor to file system blocks.

XMPP, Pidgin and Openfire: Capturing a message packet

This weekend Pritam sir and I sat again to nail the problem of hacking chat messages from Openfire server. As expected, we started afresh (our failing memories :D). Here are the takeaways:

  • Our pidgin client (version 2.10) could not connect (error: Not authorized). Add your buddy carefully. Username/ password, domain (IP address of hosting Openfire server) and in advanced setting, enter connect server (IP address of hosting Openfire server) and port 5222/5223 (Check Openfire admin console for confirmation)
  • If still you see the above problem, restart the server.

$ ./bin/openfire stop
$ ./bin/openfire start

  • It is straightforward and easy to create a plugin to play around with Openfire. Our experiment is centred around motd and contentFIlter plugins.
  • We found Interface PacketInterceptor (used in contentFilter) and we plan to exploit it for our devellish purpose.

To Do

  1. Enabling debug messages in Openfire
  2. Learning life cycle of PacketInterceptor

If you wish to refer Part-I: XMPP, Openfire and Pidgin: A weekend buffet.