Sunday, May 1, 2016

Web Responsive, SSL driven Jotiz 4.5

Presenting Jotiz 4.5 ( - a completely revamped astrology software that is Web Responsive. It works on all devices – laptops, tablets, small-footprint smart phones, iPad, iPhone, Samsung… Lots of changes, device friendly and fully secure. Yes – Jotiz uses SSL SHA-2 certificates and the protocol is https – which means your communication with the website is completely secure. It has remained free from the beginning; it will remain free for all users without any advertisements as long as possible.

In an unrented garage in a small town suburban home, Jotiz had a small beginning. It was 1986 and the rains were incessant. Built on C-Language using the most versatile compiler – Borland’s Turbo C, the first application ran in DOS. It had no name I can remember; it was a mere astrology software. A gentleman who by profession was a trader had coerced me into writing a software of which I had very little knowledge. In a book-fair, I found several books by B.V. Raman which became my gospel for many years. With the popularity of Intel 386 processors and the advent of Windows 3.1, the astrology software – Mystic was rebuilt with Borland C++ compiler. I remember the excitement of buttons, windows, scrollbars that appeared in a first ever Windows GUI Vedic Astrology system. In 1994 before the announcement of Windows 95, Borland aggressively announced Delphi and a new breed of Mystic was announced in 1995 overlapping Microsoft Windows 95 announcement. It was revolutionary – menus, dialogs, 256 bit images, panels, Paradox data engine took over the interface of Mystic. For a few years it remained dormant until Internet became mainstream and GoMystic appeared in 1998 as a Java applet with fancy calculations. The GoMystic Prediction Engine was registered with the US Copyright Office in early 2000. From an applet to a PHP server based system in 2003 to a complete web responsive system is what it has become – almost 27 years in the making.
It must be perfect then.

Far from it. I still find holes, panaceas, faulty logic – which tells you how complex the system is. Or is it? Why should nature make such a complex system to describe our Karma, our fate? Here’s my answer – every book, manuscript that I have read is concealed in riddles. Most have been authored mindlessly without any divine knowledge or thought. The last few years have been the true revelation for me – I believe I have finally cracked the code. Here is Jotiz (grown from its “nascent-no-named” humble beginning to later day “Mystic”) and finally AquaPisces (
AquaPisces is yet another story. The teachings and doctrines of Parasara, Charaka, Patanjali, William Lilly, Raphael, Varaha Mihira converge into AquaPisces. 

This is first ever attempt in bringing the concepts of astrology, ayurveda, TCM and American native herbal medicine under one roof. Algorithmically it was a challenge, making it web responsive and device friendly was yet another.

Here’s hoping you enjoy Jotiz and AquaPisces as much I enjoyed and struggled in making it.

Today with 15,000 native data, 13,000 + known users, and approximately 25,000 anonymous users Jotiz has come a long way. The new site contains all the previous versions and the new web responsive site built with Bootstrap, JQuery, PHP, MySQL and a bunch of new algorithms. 

Tuesday, May 12, 2015

DIY - Jotiz CardioMachine with Arduino Due and TI MSP 432 and MSP 430

DIY - Jotiz CardioMachine with Arduino Due and TI MSP 432 and MSP 430

I present here a series of blogs that are intended to enable the use of ‘things’ in the Internet of Things IoT complementing Jotiz.

The idea of a Microcontroller based Cardiogram Reading machine was something I had planned on for quite a while. There is little to doubt that Panchanga and Kaala have a definite influence on a person’s mind, spirit and heart. Based on that key-note, I went about assembling a small machine that could fit into your palm, read EKG through electrodes on your body and correlate heart readings to the Panchanga and Kaala of time.

There were several architectural alternatives, which I went through and I present them all to you.

1. Arduino Mega (8 Bit) MCU with Olimex EKG/EMG front-end shield.
2. Arduino Due (32 Bit SAMX) MCU with Olimex EKG/EMG front end shield
3. TI MSP 430 (16 Bit) Launchpad with SparkFun EKG front end board
4. TI MSP 423 (32 Bit) Launchpad with SparkFun EKG front end board

The TI Launchpads were connected headless to the EKG front ends. The data was collected over the serial port through a program written in Java, which would plot and render the data on the cloud. To the Arduino boards, I added shields I had created which had LCD and OLEDs mounted additional to the EKG front ends.

Links and Bill of Material: 

1. Energia -
2. Arduino -
3. Arduino Mega -
4. Arduino Due -
5. Sainsmart Due -
6. Sintron Mega 2560 R3 ATmega2560 with USB Cable
7. Olimex EKG Frontend -
8. SparkFun AD8232 EKG -
9. Hammond Manufacturing 1553BRDBKBAT Enclosure
10. Gikfun Prototype Shield DIY KIT for Arduino
11. Diymall 0.96" Inch I2c IIC Serial 128x64 OLED
12. SainSmart 1.8" TFT Color LCD Display Module with SPI Interface & MicroSD
13. Radioshack Enclosure Project Skeleton Kit (Two-Tray)
14. TI MSP 430 G2 series -
15. Texas Instruments MSP432 Launchpad -

Three layered Jotiz-Cardio machine on Arduino (Sintron) Mega
with Olimex EKG/EMG Shield and 0.96 inch OLED

Three layered Jotiz-Cardio machine on Arduino (Sainsmart) Due
with Olimex EKG/EMG shield and 0.96 inch OLED on top shield

MSP 432 Launchpad (32 Bit) with Sparkfun AD8232 EKG Board

MSP 430 Launchpad (16 Bit) with Sparkfun AD8232 EKG Board

MSP 430 Launchpad with Sparkfun EKG inside Hammond Enclosure
with three electrodes attached

How the program works:

Arduino 32 Bit (Single channel) with Olimex EKG Shield

  do {
  } while ( screen.nextPage() );

  starttime = millis();
  Serial.println("Vedic Heart Machine");
  Serial.println(">> Please input Time : Example \"21,53,0,25,4,2015,-4\"");
  if (!pTime) {
    pTime = true;
  if (!pDone) {
    pDone = true;

void doPanchanga() {
  Serial.print("PCH, Date ");
  Serial.print(" Hour ");
  Serial.print(" TimeZone ");

  pch.initialize_panchanga(nDD, nMM, nYY, nHour, nMin, nTZ);

  pDone = true;

  // Set the timer for EKG Reading
  // TC1 : timer counter. Can be TC0, TC1 or TC2
  // 0   : channel. Can be 0, 1 or 2
  // TC3_IRQn: irq number.
  // 250 : frequency (in Hz)
  // The interrupt service routine is TC3_Handler.
  startTimer(TC1, 0, TC3_IRQn, 250);

void processTime() {
  nHour = Serial.parseInt();
  nMin = Serial.parseInt();
  nSec = Serial.parseInt();
  nDD = Serial.parseInt();
  nMM = Serial.parseInt();
  nYY = Serial.parseInt();
  nTZ = Serial.parseInt();
  if (nYY == 0) nYY = 2015;
  if (nDD == 0) nDD = 25;
  if (nMM == 0) nMM = 4;
  if (nHour == 0) nHour = 23;
  if (nMin == 0) nMin = 36;
  if (nTZ == 0) nTZ = -4;
  setTime(nHour, nMin, 0, nDD, nMM, nYY);

  activetime = millis() - starttime;
  if (timerInitiated) {
    inADC = analogRead(0);

Arduino 8-Bit Mega with Olimex EKG and OLED

#define SAMPFREQ 256                      // ADC sampling rate 256
#define TIMER2VAL (1024/(SAMPFREQ))       // Set 256Hz sampling frequency                   
volatile unsigned char CurrentCh = 0;     //Current channel being sampled.
volatile unsigned int ADC_Value = 0;             //ADC current value
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

// Needed by Panchanga
uint8_t nDay = 6;
uint8_t nDD = 11;
uint8_t nMM = 4;
unsigned int nYY = 2015;
uint8_t nHour = 23;
uint8_t nMin = 18;
int nTZ = -4;
char buf[2];
char sbuf[15];
Panchanga pch;
  FlexiTimer2::set(TIMER2VAL, Timer2_Overflow_ISR);
  ADC_Value = analogRead(CurrentCh);
  // Spit out the values
  Serial.print("ADC, ");   

MSP 432 with Sparkfun AD8232 EKG

int starttime;
int activetime;
int previoustime = 0;
int cnt = 0;
volatile unsigned int inADC = 0;
  pinMode(2, INPUT); // Setup for leads off detection LO +
  pinMode(3, INPUT); // Setup for leads off detection LO -
  if ((digitalRead(2) == 1) || (digitalRead(3) == 1)) {
    // Leads not connected
    // Serial.println('!');
  } else{
    // send the value of analog input 0:
    inADC = analogRead(A0);  // PIN_06
    // inADC = map(inADC, -4096, 4096, 1024, 1024);
  //Wait for a bit to keep serial data from saturating

Based on the quality of time as determined by the Panchanga many health problems can be determined. Jotiz is being expanded to included uncharted medical astrology.

Read more about this in the upcoming book “Vedic Machine”

TI CC3200 LaunchPad IoT using Jotiz RESTful Services

TI CC3200 LaunchPad IoT with Sharp LCD using Jotiz RESTful Services

I present here a series of blogs that are intended to enable the use of ‘things’ in the Internet of Things IoT complementing Jotiz.

The CC3200 Launchpad from Texas Instruments is new generation 32 bit MCU with SoC and WiFi built it. In this article, I present the CC3200 micro-controller and its ability to read the Jotiz web service which gives the Panchanga. The development board is the size of a credit card and comes as an attractive red PCB. I also attached a Sharp 96x96 LCD booster pack on the MCU board to display the results. All this, I put into an acrylic enclosure with spacers and screws.

The Simplelink WiFi CC3200 Launchpad was connected to a Windows 7 laptop through the USB port. Remember to download the drivers for CC3200 from TI website. To develop the program, the Open Source Energia based on the Arduino IDE was used.


1.      Energia -
2.      Arduino -
3.      Texas Instruments CC3200 Launchpad -

How the program works:

It uses the WiFi library, JSON and the Sharp booster pack libraries. It fetches the Panchanga data from the Jotiz REST service, extracts the relevant information from the encoded JSON and displays on the LCD.

Based on the quality of time as determined by the Panchanga many common day to day decisions like attending an interview, choosing the right moment to discuss an idea or a raise, travelling, buying property, investing can be done with less negative consequences.

Excerpts from the code

  // Initializing the LCD and WiFi
  LCD_SharpBoosterPack_SPI myScreen;
  uint8_t k = 0;
  WiFiClient client;
  char server[] = "";
  boolean offline = false;
  #elif defined(__CC3200R1M1RGC__)
// for __CC3200R1M1RGC__ DIV2 = 4 MHz !

  if (WiFi.status() == WL_NO_SHIELD) {
    myScreen.text(10, 25, "FAIL");

  while (wifiStatus != WL_CONNECTED) {
    wifiStatus = WiFi.begin(WIFI_SSID, WPA_PASSWORD);
    if (wifiStatus == WL_CONNECTED) {
      myScreen.text(10, 25, "Wifi: OK");

  if (!offline) {
    while (WiFi.localIP() == INADDR_NONE) {

    IPAddress ip = WiFi.localIP();

    if (client.connect(server, 80)) {
      client.println("GET /rest/resource.php?method=panch&format=json HTTP/1.1");
      client.println("Content-Type: application/json");
      client.println("Connection: close");

  if (!offline) {
    for (int i=0; i < 47; i++) {
      String jsonstr = "";
      while (client.available()) {
        char c =;
        jsonstr += String(c);
      String js = jsonstr.substring(jsonstr.indexOf("{"));
      char* jstr = strcpy((char*)malloc(js.length()+1), js.c_str());

      aJsonObject* root = aJson.parse((char *)jstr);
      aJsonObject* dd = aJson.getObjectItem(root, "dd");
      aJsonObject* mm = aJson.getObjectItem(root, "mm");
      aJsonObject* yy = aJson.getObjectItem(root, "yy");
      aJsonObject* hh = aJson.getObjectItem(root, "hh");
      aJsonObject* mt = aJson.getObjectItem(root, "mt");
      aJsonObject* dw = aJson.getObjectItem(root, "dw");

      aJsonObject* ui = aJson.getObjectItem(root, "unodeInausp");
      aJsonObject* si = aJson.getObjectItem(root, "saturnInausp");
      aJsonObject* di = aJson.getObjectItem(root, "deathBearing");
      aJsonObject* da = aJson.getObjectItem(root, "directionInausp");

      char buf1[10] = "";
      strcat(buf1, yy->valuestring);
      strcat(buf1, "-");
      strcat(buf1, mm->valuestring);
      strcat(buf1,  "-");
      strcat(buf1, dd->valuestring);

      myScreen.text(10, 25, buf1);
      char buf2[5] = "";

      strcat(buf2, hh->valuestring);
      strcat(buf2,  ":");
      strcat(buf2, mt->valuestring);
      myScreen.text(10, 35, buf2);

      myScreen.text(10, 45, "Rahu");
      myScreen.text(70, 45, ui->valuestring);
      myScreen.text(10, 55, "Saturn");
      myScreen.text(70, 55, si->valuestring);
      myScreen.text(10, 65, "Death");
      myScreen.text(70, 65, di->valuestring);
      myScreen.text(10, 75, "Direction");
      myScreen.text(70, 75, da->valuestring);

      free (jstr);
      delay (500);


MyScreen is the LCD screen - SHARP 96x96 pixels. The board on startup initializes the WiFi client, sends the SSID and Password to authenticate as an user and obtains an IP address. After getting the IP address, it uses the internet to connect to Jotiz and make a RESTful request. The JSON string received is broken up into its elements and displayed. 

Read more about this in the upcoming book “Vedic Machine

DIY - MSP430 Launchpad with BMP180 (A farmer's Almanac) complementing Jotiz

Do it Yourself - MSP430 Launchpad with BMP180 complementing Jotiz

I present here a series of blogs that are intended to enable the use of ‘things’ in the Internet of Things IoT complementing Jotiz.

To start with, I have used a MSP430FR5969(c) Launchpad(c)(r) from Texas Instruments. The development board is the size of a credit card and comes as an attractive red PCB. I also attached a Sharp 96x96 LCD booster pack on the MCU board to display the results and a Bosch BMP180 pressure and temperature sensor from Adafruit. All this, I put into an acrylic enclosure with hex spacers and M3 screws.


1. Energia -
2. Guide to MSP430FR5969 -
3. Arduino -
4. Adafruit -

How the program works:

It uses the wire library, the bmp085 and the Sharp booster pack libraries. It computes the Rahu Kaala, Gullika Kaala, Yamaghantaka and Shoola directions along with the sensors collecting pressure and temperature data from the ambient surroundings.

Based on the quality of time as determined by the Kaala and the pressure and temperature readings, house plants, green house plants and outdoor plants can be watered or checked for damages.

Excerpts from the code

  // Setting the pin modes of the pins connected to the BMP Sensor
  pinMode(P1_6, OUTPUT);
  pinMode(P1_7, OUTPUT);
  digitalWrite(P1_7, LOW);

  // Barometer Sensor
  digitalWrite(P1_7, HIGH);
  // After initializing the sensor, show the pressure and temperature
  // display the results on the LCD
  myScreen.text(10, 5, "Vedic");
  myScreen.text(10, 30, "Jotiz Clock");
  myScreen.text(10, 40, "(c)devb inc");


  // check for quality of time 

  // compute time
void doTime() {
  float h1;
  if (nMin > 59) {
      nMin = 0;
  if (nHour > 23) {
      nHour = 0;
  if (nDay > 6) nDay = 0;
  h1 = nHour + (nMin / 60);

  switch (nDay) {
  case 0:
    if ((h1 >= 16.5) && (h1 <= 18)) showTime("Rahu  ","W","Sun");
    else if (h1 >= 15 && h1 < 16.5) showTime("Gulika","W","Sun");
    else if ((h1 >= 12 && h1 <= 13.5) || (h1 >= 18 && h1 <= 19.5)) 
showTime("Yama  ","W","Sun");
    else showTimeOnly("Sun");
  case 1:
    if (h1 >= 7.5 && h1 <= 9) showTime("Rahu  ","E","Mon");
    else if (h1 >= 13.5 && h1 < 15) showTime("Gulika","E","Mon");
    else if ((h1 >= 10.5 && h1 <= 12) || (h1 >= 3 && h1 <= 4.5)) 
showTime("Yama  ","E","Mon");
    else showTimeOnly("Mon");
  case 2:
    if (h1 >= 15 && h1 <= 16.5) showTime("Rahu  ","N","Tue");
    else if (h1 >= 12 && h1 < 13.5) showTime("Gulika","N","Tue");
    else if ((h1 >= 9 && h1 <= 10.5) || (h1 >= 1.5 && h1 <= 3)) 
showTime("Yama  ","N","Tue");
    else showTimeOnly("Tue");
  case 3:
    if (h1 >= 12 && h1 <= 13.5) showTime("Rahu  ","N","Wed");
    else if (h1 >= 10.5 && h1 < 12) showTime("Gulika","N","Wed");
    else if (h1 >= 7.5 && h1 <= 9) showTime("Yama  ","N","Wed");
    else showTimeOnly("Wed");
  case 4:
    if (h1 >= 13.5 && h1 <= 15) showTime("Rahu  ","S","Thu");
    else if (h1 >= 9 && h1 < 10.5) showTime("Gulika","S","Thu");
    else if ((h1 >= 6 && h1 <= 7.5) || (h1 >= 22 && h1 <= 24)) 
showTime("Yama  ","S","Thu");
    else showTimeOnly("Thu");
  case 5:
    if (h1 >= 10.5 && h1 <= 12) showTime("Rahu  ","W","Fri");
    else if (h1 >= 7.5 && h1 < 9) showTime("Gulika","W","Fri");
    else if ((h1 >= 15 && h1 <= 16.5) || (h1 >= 19.5 && h1 <= 21)) 
showTime("Yama  ","W","Fri");
    else showTimeOnly("Fri");
  case 6:
    if (h1 >= 9 && h1 <= 10.5) showTime("Rahu  ","E","Sat");
    else if (h1 >= 6 && h1 < 7.5) showTime("Gulika","E","Sat");
    else if ((h1 >= 13.5 && h1 <= 15) || (h1 >= 19.5 && h1 <= 21)) 
showTime("Yama  ","E","Sat");
    else showTimeOnly("Sat");

ShowTime has three parameters - the Kaala event, direction to avoid and the weekday.
Read more about this in the upcoming book “Vedic Machine

Friday, March 21, 2014

 Ballad DivineMy book 'Ballad Divine - Bhagavad-Gita' is now available at Amazon. It took a few painstaking years to get there, but every moment was worth it. 

The printed book and Kindle editions are available at Amazon -
You may also review the book. Would love to hear about your reactions to the book. 

Several years back, I spoke to a child about Krishna. The child was so delighted even though she could not pronounce the name properly. I felt if just the lord's name could have such a profound effect, his ballad needed to be re-visited. I went through innumerable books spanning nearly 150 years from Annie Besant, Max Mueller, to Swami Vivekananda, Swami Parmananda, Swami Nikhilananda, S. Radhakrishnan, Srila Prabhupada and Swami Dayananda Saraswati to name a few. Of course, inspired by Chaitanya's Kirtans, I spent many-a-day on Sri Aurobindo's Essays on the Gita, Bankim Chandra's - Krishna Charitra -- and Ballad Divine is the final rendition.

Ballad Divine brings back the Bhagavad-Gita in a very easy to read composition; minus the rhetoric. It is an accurate reference of the original and observed facts and uses the same systemic method to divinity. 

Ballad-Divine is organized around the mainstays of Krishna's doctrines, those of philosophy, action, discipline, concentration, knowledge, meditation, devotion and surrender. These pillars are in turn expounded from smaller building blocks. The theme in the sentences are repeated throughout reinforcing the subject. It is styled mostly as a ballad expressing eighteen different chapters by short stanzas; of which some are metrical.

Excerpt from Chapter 4, Lines 7 and 8

When there is fading of dharma 
And increase in infamy and sloth
Then into birth, 
I loose myself going forth. 

For deliverance of good
For destruction of terror
For enthroning of rights 
I am born from one age to another.

Chapter 18, Lines 69 and 70

No mortal performs 
Service that I value more
No other on earth
Is dear to me than the one I adore.

Judge I will 
Those who study
This sacred discourse of ours
Who offer me sacrifice
By knowledge of course. 

Sunday, September 22, 2013

Mithra - forgotten phenomenon

Rev. Martin Luther King wrote a paper on Mithraism in 1949. He also received an A grade on the essay on his presentation skills on an otherwise difficult concept.

I witnessed Mithraism (worship of Mitra) when I was in Rome, Italy. Mithra (AKA Mitra) is Vedic and Zoroaster's view of the powerful phenomenon that guided Sun to spring.

Yes, from winter to spring - a resurrection, a rebirth of the Sun - the procreator, the God of the yesteryears.  

The Vatican Museums and Basilica of San Clemente offered me direct insights into Mithra worship - a likely predecessor to Christianity - a long forgotten history of reconciliation of a prevailing system to the great spiritual movement that was gaining sturdy influence with its purer conception of God.

You can witness the mercy, the power of the Sol-God only in darkness of the labyrinths in the dungeons at San Clemente.

Mithra is the phenomenon that symbolizes the movement of the Sun away from a Taurus culmination of summer solstice. The slaying of the bull - "taurobolium", is so evident in the sculptures in the dungeons in Saint Clemente's basilica. The presence of Ashvins in the rock sculpture; could also be Gemini twins; Saturn giving out the weapon to destroy the bull; Sol and Luna blessing the act; Sirius the dog, the Lunar nodes shown as a serpent and Scorpion (scorpio) all active participants marked the new epoch - the birth of a new era. 

Sunday, August 4, 2013

Venus, Jupiter and Saturn

A new look at Venus, Jupiter and Saturn.

Sukracharya (related to Venus), son of Brighu was vengeful of Vishnu Vishnu having destroyed their haven and having killed his mother and the ashuras who she had given shelter to. Besides, Brihaspati was the favored one both from his earlier teacher and Brihaspati's father Angiras and the Devas who eventually elected Brihaspati as their own Guru.

Sukracharya, therefore, chose the ashuras (the dark side, if the name permits) as his disciples and being stronger and more powerfully learned than Brihaspati quickly led Ashuras to victory over the Devas.

That was quite a mouthful!

Sukracharya’s progeny became the clan of Purus – Pauravas, the family that fought in the Mahabharata and also Yadus – the dynasty that Lord Krishna belonged to.

Those of us endowed with Venus like features that Sukracharya relates to are – Highly informed and knowledgeable; much better than the competitor but are not always recognized by our managers and tribal leaders, easily capable of winning (victory),  egotist and plagued with vanity and vengeance. The Sukra endowed persons give rise to progenitors that become strong clans. 

Those that fall in line with Jupiter (Brihaspati) get recognition much beyond their worth. Status, favors and recognition come easy compared to other folks who actually deserve it. However, the shortcuts to success only create holes in security; and eventually the downtrend begins to re-instate folks aligned to Sukra (Venus) (who are more hardworking and zealous in their efforts) to take over or rule.

Some victories won by the Venus-driven may also get counteracted by Saturn who is Venus’ friend. It is not unusual to see a strong Venus-Saturn combination leading to Financial and Health problems in a person’s life. It’s a clear indication for those born with strong Venus and Saturn to witness a complete reversal of their fortunes and health two to three times in their lifetime. But, having Sukra as their Guru, these reversals are short-lived and eventually bring forth the victory they deserve.

On the other hand, without a notion of a down trend, Jupiter (Brihaspati) driven persons eventually lose out – either overconfident or too lazy to fight the battles. Jupiter gains in the beginning, the end may be okay with a good Moon combination; but not anywhere close to how it began. Obesity and laziness are Jupiterial trends that can destroy the otherwise spiritually inclined.