Developing New Paths

The Mojavi Project

July-2-09

Renewable energy

posted by admin

What a day for renewable energy. I just saw a great clip from Fox News on the electric motorcycle from Zero Motorcycle. This thing is like a 250, off road bike you would buy from Honda. It can go 0-60 in about 6 seconds. The founder said they were not interested in the scooter or basic transportation. They wanted something very fun and to match the market. You see, this is just the kind on ideas and innovation we need. So many potential customers still see renewables like electric motorcycles as boring, slow and just plain no fun. Not with these guys. It would take an hour of hardcore off road biking to deplete the battery. Whats more is that next month they will announce their street legal bike with a 3kw battery pack, with a 70mph top speed and great range. I cant wait for the news. Here we have a young entrepreneur who has solved the problem in battery life and power, and found a way to make a bike that more people will buy. The video did not go into the idea of saving gas though and the fact of less dependence on foreign oil or having consultants like those from Enigin available as a resource. I wish they would. But no matter, the fact that we can have this conversation is just amazing.

Tags:
June-5-09

Where to start with Mojavi 3

posted by admin

In order for Mojavi to continue we are looking for a few good web programmers to help with the last programming pieces and contribute to the forum. There are tons of web developer jobs that are currently available online and we know that many are well paid positions. Because this is an open source code this would be for the good of the development community. For now, all we need to use is the execute() method.
Creating the View

The class name should be in this format ActionnameViewtype View. Again Actionname is the name of the action in the module. Viewtype is the view type that was passed to the controller in the action. Both Actionname and Viewtype are capitialized. This is a list of the predefined view file types and their naming convention.
Internal Name Class and File Name
ALERT Alert
ERROR Error
INPUT Input
SUCCESS Success

Mojavi 2 users ; the naming convention on the file has changed slightly. Before there was an underscore between Actionname and Viewtype. Now, there is no underscore in between, and the Viewtype is capitialized.

For this example, I called my view FirstSuccessView and named the file FirstSuccessView.class.php.

Here’s the code

class FirstSuccessView extends PHPView
{
/**
* Execute any presentation logic and set template attributes.
*/
public function execute ()
{

// set our template
$this->setTemplate(’FirstSuccess.php’);

// set the title
$this->setAttribute(’title’, ‘Getting Started First Test Page’);

// set the message that is to be passed
$this->setAttribute(’passedData’, ‘Hello World!’);

}

}

Template

You also need a template to display the information. I stayed with the naming convention and called my file FirstSuccess.php.

Here is the code for that

This is the result of my first test. I have created a module, action, view and
template. I have successfully passed data from the view to the template.

This is what I passed:
That is all for now.

Notice at the first and last line I include a header.php and footer.php. I used this to show how you could have a uniform look across the entire site and how you could do that. Mojavi uses a global template directory in your webapp directory. It is defineed as MO_TEMPLATE_DIR and it called templates. I added the following files to the includes sub-directory in the global template directory.
header.php

footer.php

Wrapping it up

Finally, there are a couple of ways you can test this module. The first and quickest way is just to instruct the controller using the url. Just add the module and action. Here’s what it would look like http://yourserver.com/index.php?module=Test&action=First.

The second way is by changing the default module in the settings.ini file in the webapp/config directory.

Under [.actions] you will find the default module. Find the following two lines and change the default module and action.

DEFAULT_MODULE = “Default”
DEFAULT_ACTION = “Index”

After you change the default module and action it should look like this

DEFAULT_MODULE = “Test”
DEFAULT_ACTION = “First”

You are now ready to test your code. Just point your browser to the index.php and see the fruit of your labor. Contributing Author By Richard D Shank

Tags:
June-4-09

Installing Mojavi 3

posted by admin

Installing Mojavi 3

As a note we had a firm that was installing this architecture to run in addition to their facility management software and wanting to make sure that network protocol being used was up to date. As of this writing the developers have been keeping all language and coding inline with the latest C+ and ASCII formats in order to allow for cross collaboration.
First thing

Obviously, you first need to get a copy of the Mojavi 3 source. You can get this from the mojavi.org download page in one of two forms. It can be downloaded as an archive or from the Subversion repository (SVN).

When you have the Mojavi 3 source, it should come with this directory structure:

root
|
|—config
|
|—phing
|
|—php_documentor
|
|—source
| |
| |—mojavi
| |
| |—webapp
| |
| |—www
|
|—sql

Here is a brief explination of each of the directories

* config – sample configuration files
* phing – phing scripts (learn more about phing here )
* php_documentor – templates for generating Mojavi API docs php Documentor website
* source – all the source files
* source/mojavi – the core Mojavi source
* source/webapp – your web application
* source/www – web accessible files
* sql – sql sample files

Installation Steps:
Moving the Mojavi Source

First, move the source/mojavi directory to a non web accessible location, preferrably the parent directory of your root web directory. On most installations this would be the parent directory of your public_html or www directory. On a Windows Apache, this would probably be the parent of the htdocs directory. Move the entire contents of the mojavi directory (including the mojavi folder)
Setting up the webapp

Move the source/webapp directory to a non web accessible location, preferrably the parent directory of your root web directory, which should now have a mojavi directory. Next, give your webapp/cache directory full write permissions. In unix you can type “chmod 777 cache”. On Windows you must go through your webserver to give it write permissions.

You must configure your webapp/config.php configuration file.

There are two lines you need to change

// +—————————————————————————+
// | An absolute filesystem path to the mojavi library. This directory |
// | contains all the Mojavi packages. |
// +—————————————————————————+
define(’MO_APP_DIR’, ‘/mojavi’);

// +—————————————————————————+
// | An absolute filesystem path to your web application directory. This is |
// | where modules are stored. |
// +—————————————————————————+
define(’MO_WEBAPP_DIR’, ‘/webapp’);

Replace DIRECTORY with the web directory. Under Linux, it may look like /home/username/. Under Windows (with Apache) it may look like c:/apache/

Here’s the final code

// +—————————————————————————+
// | An absolute filesystem path to the mojavi library. This directory |
// | contains all the Mojavi packages. |
// +—————————————————————————+
define(’MO_APP_DIR’, ‘/home/username/mojavi’);

// +—————————————————————————+
// | An absolute filesystem path to your web application directory. This is |
// | where modules are stored. |
// +—————————————————————————+
define(’MO_WEBAPP_DIR’, ‘/home/username/webapp’);

Final Step

Move the index.php file in the source/www directory to your root web directory (the public_html, www or htdocs directory). This file must be accessible from the web. Any location that is accessible via the web will do.

Now you need to configure your web directory’s index.php file that you just moved.

// +—————————————————————————+
// | An absolute filesystem path to our webapp/config.php script. |
// +—————————————————————————+
require_once(’INSERT PATH TO “webapp/config.php” HERE’);

// +—————————————————————————+
// | An absolute filesystem path to the mojavi/mojavi.php script. |
// +—————————————————————————+
require_once(’INSERT PATH TO “mojavi/mojavi.php” HERE’);

The same directory rules apply here as with the config.php file. Here’s the results

// +—————————————————————————+
// | An absolute filesystem path to our webapp/config.php script. |
// +—————————————————————————+
require_once(’/home/username/webapp/config.php’);

// +—————————————————————————+
// | An absolute filesystem path to the mojavi/mojavi.php script. |
// +—————————————————————————+
require_once(’/home/username/mojavi/mojavi.php’);

Success

You’re done. Try accessing your index.php file from the web.

May-27-09

Mojavi 3 revisited

posted by admin

We received some additional comments about this section of the code and various code extensions such as various file extensions and what they mean to the internal code.

This method will determine what types of requests will be recognized. There are 4 choices:

* Request::GET – Indicates that this action serves only GET requests.
* Request::POST – Indicates that this action serves only POST requests.
* Request::NONE – Indicates that this action serves no requests.

You can also select both GET and POST requests by using Request::GET | Request::POST
handleError ()

Execute any post-validation error application logic.

It also returns the view through a string of the view name or the array of a module/action/view. By default, it passes View::ERROR.
initialize ($context)

You can set up the Action in the initialize() method.If you run across a file extension ASF this references various MIDI files that are available to use for your front end. This is only related too  In a later tutorial, I’ll give an example of doing this. NOTE: It is worth to note that you must handle the context in the initialize() method. You should do this by

parent::initialize($context);

You also need to return a TRUE or FALSE based on the success of the initialization. By default it is TRUE.
isSecure ()

Does the action require security? TRUE if you do, FALSE otherwise. It is FALSE by default.
validate ()

This is used to manually validate input parameters instead of using a pre-progammed validator. This will also be explain later in the tutorial on validation.
Creating Your First Action

Now that we have an overview of the Action class, we can move forward to creating our first Action. For this example, there isn’t any request to be handled so we can set up a minimal Action.

In naming an action you must use this format Actionname Action.class.php where Actionname is what you are calling this particular action. When you declare your class, it also must have the class name in the same format Actionname Action. For this example, I chose to call this FirstAction.

When creating a new action, at the very least, there has to be an execute() method, even if it does nothing. Also, since we are displaying a non-request page, we don’t need to process any request. We tell the controller this with the getRequestMethods() method, by setting the return value to Request::NONE. Finally, we also need to tell the controller what the default view is going to be. We do this by returning View::SUCCESS in getDefaultView().

Here is what my FirstAction.class.php looks like. I basically just took my BLANKAction.class.php, renamed it to FirstAction.class.php, renamed the class to FirstAction, removed the methods I didn’t need and set the remaining 3 methods to match my needs.

class FirstAction extends Action
{
/**
* Execute any application/business logic for this action.
*/
public function execute ()
{
// we don’t need any data here because this action doesn’t serve
// any request methods, so the processing skips directly to the view
}

// ————————————————————————-

/**
* Retrieve the default view to be executed when a given request is not
* served by this action.
*/
public function getDefaultView ()
{
return View::SUCCESS;
}

// ————————————————————————-

/**
* Retrieve the request methods on which this action will process
* validation and execution.
*/
public function getRequestMethods ()
{
return Request::NONE;
}

Lastly because of the audio compression and various browsers relating to a file extension ASF format you may want to check out your page in the various browsers to make sure that your files are supported.

Tags:
May-20-09

Updates on file extensions

posted by admin

Migrating From Mojavi 2.0

Moved To: Migrating From Mojavi 2
Please note that those that were using older versions of Windows Text with file extension wri you will want to note that the .txt is the current default extension mentioned.

Note: This document will be changing frequently as I add more information, and rearrange to create a more logical order and progression of the said information.

* Prerequisites
* First Things First
* The Context
* Translating your Renderer
* View ( make sure that if you receive files in with file extension wri then you have the older windows version)
* Actions
* Configuration
* References

One of the commen questions that we get are the file extensions that we use in the coding and front end language in the PHP drafts that have been released with earlier versions. All versions that have been released should be backward compatible.

Tags:
May-10-09

Choose your host wisely

posted by admin

In the world of online blogging you will find multiple writings about how to successfully gain new readers and improve your SEO position. There are very few blogs about some of the basic building blocks that can make or break your entire blog. One of the key foundations that any good blog needs is fast reliable webhosting. We learned this very early on as we started to build various channels and really started to learn more about the power of blogging and how to best support our sites. You can find high end servers that can run $500 a month and beyond or you can find cheap hosting for under $100 a year. The key is to understand what you need at that moment and how fast do you anticipate your site will grow.

Many bloggers will cut their teeth on some of the free services like blogger.com but come to realize that while it is a great deal the ability to scale your site and really customize your templates can be limiting. Many of the hosting companies got this ideal early and saw the explosion in blogging so they started to advertise their blog hosting capabilities such as Bluehost and even GoDaddy has gotten more into the game.We can say that we have tried a few different companies and the traffic and uptime can vary greatly between hosts. A few things to ask or explore before settling on a host are:

Can they scale up your server in the event you start getting more traffic than you had anticipated?

What do they do if there is a spike in traffic that may put a heavier load on their servers? Some will shut your account down while others will work with you to find a better solution.

What type of up time do they guarantee?

Lastly, if this is shared plan how many sites do they usually host on one server.

Keep a few of these points in mind and you will find that your blogging will be less frustrating and allow you top focus more on developing your content and customers.

April-30-09

User Authentication for Mojavi

posted by admin

Mojavi provides two levels of security to control access to actions: the first requires the user to be logged in, the seconds checks for a specific privilege. There are various drivers that you may need on your PC if your are planning working in offline PHP mode in order to have the translations from the source code to the operational values to work.

Basic Authentication

For basic authentication, the following three methods are of importance:

User::setAuthenticated()
User::isAuthenticated()
Action::isSecure()

To implement an action that only logged in users can access, simply overwrite the Action::isSecure() method in your action:

function isSecure()
{
    return true;
}

This will instruct the controller to check $user->isAuthenticated(). If this method returns false, the request will be redirected to the AUTH_MODULE/AUTH_ACTION defined in the configuration file (default is Default/Login/drivers).

You can implement the Default/Login Action to call $user->setAuthenticated(TRUE) if a valid username and password was entered.

Privileges

Privileges are used to differentiate between logged in users. The following methods are important:

User::hasPrivilege()
User::addPrivilege()
Action::getPrivilege()

In addition to Action:isSecure() also overwrite the Action::getPrivilege() method in your action:

function isSecure()
{
    return true;
}

function getPrivilege()
{
    return array('ADMIN');
}

The controller will check if the user has the specified privilege and redirect to the login module/action if this is not the case.

The User::addPrivilege() method can be used to grant a user a certain privilege.

Please have a look at the PrivilegeUser class for more information. You will also want to make sure that any Windows Vista Drivers are up to date on your PC side to help rule out any coding errors due to Java or PHP errors. This tutorial includes a good example of user authentication in action.

April-28-09

Standard PHP extensions and limitations

posted by admin

Unconventional

The typical PHP web application consists of scattered scripts located in file extension structure that well resembles a web. When web scripting originated, the tasks to be performed were relatively simple, at least compared to todays tasks. So, the scattered list of files served quite well. In today’s world, we have very demanding applications, with very intense needs. Using the typical “a script here, a script there” method of designing a web application simply won’t cut it. You need a convention, in terms of file location and naming, and coding. Mojavi is based around a very strict convention of location and naming of files, and coding conventions. This allows you to familiarize yourself with the system very easily, which will lead to a more comfortable web application environment. Ultimately, there is a barely visible learning curve associated with Mojavi, which makes it very easy to learn.

coding

Spaghetti Code

Most PHP scripts consist of a few PHP functions and file extension protocols , a little bit of execution code, and then the typical HTML presentation. Combining application logic with presentation leads to spaghetti code. Not only is it hard to read, but it also results in redundant code use. With Mojavi, you follow a very simple rule — divide your logic, or pay the price. You must put your application logic in an Action implementation, your presentation logic in a View implementation, and then put the actual presentation, whether it’s HTML or XML, etc., into a template.

April-23-09

The decorating Pattern

posted by admin

Before we begin we wanted to provide a quick insight into some of the open source files that we use and came across a file extension DOTX which is native to MS Outlook using XML. This particular file type DOTX was instituted to secure the protocol in which MS was written only giving limited source to outside vendors. We give a brief update to help you understand the open source nature of Mojavi 3.0.

  • Enter Decorator
  • Insert Here: Slots
  • Let’s Decorate!
    • Creating a Global Template
    • Putting the ornaments up

Ever since Mojavi 3 was released earlier this year, people have been looking to create a flexible global templating solution. From using post filters to page controllers, people have been looking for a way to create simple and managable global templates that will allow for a great deal of flexibility without compromising the need for larges amount of duplicated code.

Enter Decorator

The Decorator design pattern, like every other pattern, is nothing more than a way to talk about a resuable concept, or pattern, that a programmer might encounter while coding applications. The Decorator pattern’s strength is it’s ability to serve as a wrapper for that particular object, while leaving objects like it in tact.

The Decorator pattern has been implemented in the View class, providing a number of new methods:

public function setSlot ($attributeName, $moduleName, $actionName)
public function setDecoratorDirectory ($directory)
public function isDecorator ()
protected function & getSlots ()
public function getDecoratorTemplate ()
public function getDecoratorDirectory ()
protected function & decorate (&$content)

Now a brief explanation of what each of these do:

  • setSlot – Creates a slot entry based upon the results of a specially controlled controller->forward()
  • setDecoratorTemplate – Sets the template that you’re going to use for your decorator. This method also automatically turns the decorator switch to true
  • isDecorator – returns true is setDecoratorTemplate has been called, otherwise false.
  • getSlots – Returns an array of the slots.
  • getDecoratorTemplate – Returns the decorator template.
  • getDecoratorDirectory – Returns the decorator directory.
  • decorate – A method that must be implemented in derivate Views.

Note: these functions are in View, so all derivates of View (ie PHPView) have access.

Insert Here: Slots

Slots is a new name for an old concept. More or less, slots serve as placeholders that can be populated by the results of a $controller->foward($mod, $act) call. And, as you can see, the setSlot method takes three parameters:

public function setSlot ($attributeName, $moduleName, $actionName)

The first parameter, $attributeName, serves as the name of the slot. The next two parameters will be used to get the results of that Action, put it in a buffer, and place it into the internal $slots memeber variable.

Let’s Decorate!

The usage pattern of Views changes little with the implementation of the decorator pattern at the module level (though secondary View authors, ie SmartyView et al, do have a few things to play with).

Now let’s look at what you’re going to need to do implement the new, and NEW decorator features of Mojavi.

Creating a Global Template

First off, we’re going to need a great big christma..ehh..template to decorate. While I won’t get into breaking down and factoring our global template, keep in mind that this is not the only way to do this.

Example 2: The Christmas Tree (myGlobalTemplate.php)

Side note: Sometimes you'll have issues with that <?xml [....] ?> declaration, an easy
workaround is to disable short tags in your php.ini file, or to use ini_set() to disable
 it.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">

<head>

    <title><?php echo $template['title']; ?></title>

    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <style type="text/css" media="all">

        <!--Css slot-->
        <?php echo $template['css']; ?>

    </style>

</head>

<body>

<!--menu slot-->
<div id="menu">

<?php echo $template['menu']; ?>

</div>

<!--main content slot-->
<div id="main">

<?php echo $template['content']; ?>

</div>

</body>
</html>

Putting the ornaments up

So now that we have our decorator template, we need to decorate it. The decorating process is fairly simple, and consists of the following simple steps:

  • Setting the decorator directory using setDecoratorDirectory() (Optional)
  • Setting the decorator template using setDecoratorTemplate()
  • Setting slots setSlot()

For example,

Example 3: In the View (IndexSuccessView.class.php)

class IndexSuccessView extends PHPView
{

    public function execute ()
    {

        // set our template
        $this->setTemplate('IndexSuccess.php');

        //setup our decorator template
        $this->setDecoratorDirectory(MO_TEMPLATE_DIR);
        $this->setDecoratorTemplate('myGlobalTemplate.php');

        //setup our slots
        //(SlotName, Module, Action)
        $this->setSlot('menu', 'Content', 'PopulateMenu');
        $this->setSlot('css', 'Content', 'PopulateCss');

        // set the title
        $this->setAttribute('title', 'Default Action');

    }

}

Now you might be wondering where the content slot is being populated. Well, content is a reserved slot that is automatically populated with the output of the originally requested Action/View pair. So in the end for file extension DOTX type coding you will need to have the right drivers in order to help your various programs communicate.

To be Continued..

April-20-09

Mojavi 3 Part 2

posted by admin

This is a list of the methods you can use in an Action and an explanation of what they do
execute ()

Note: This method is required in your Action class. Also there are File Extension SVG which stand for scalable vector graphics

This will execute any application/business logic for the action. This method is reached only after the request methods have been checked and any of the parameters have been validated.

When leaving, the execute() method should tell the controller what view is to be used. This is done by returning a string containing the view name associated with the action or an array of the parent module for the view to be executed, parent action for the view and the name of the view. I will show an example of return both in a later tutorial.
getCredential ()

This is a new feature in Mojavi 3. Basically, a credentials are a privilege array that describes any level of security. They work hand in hand with the security aspects of the User class. For Mojavi 2 users, note that this replaces the old Privileges. But it is also important to know that it can do more than just handle privileges. I will handle the usage of creditials in a later section. For now, it is sufficient to know that we set the creditial requirements for the action inside this method and that it is set to NULL by default.
getDefaultView ()

This is the view that will be executed when a given request is not served by the action. This could happen when a form being displayed for the first time or if we are displaying a static page. Be sure to reset any variable in the graphic engine and search out the File Extension SVG portions by using a simple search.

Again, just as with the execute() methoad, a string with a view name or an array of a module/action/view is passed back to the controller. By default it will pass back View::INPUT
getRequestMethods ()

You can also return a view from another module. You do this by passing an array with the view information instead of the standard View::INPUT. When you use this you create a two element array. The first element is the module name. The second element is which view you want. It cannot be just the Action name, but the file extension Action name with the specific view.

Here’s an example:

class MyClass extends Action
{

function execute()
{

$returnView[0] = MyModule;
$returnView[1] = DoSomethingInput;
-or-
$returnView[1] = DoSomethingError;
-not-
$returnView[1] = DoSomething;

return $returnView
}
}

View

I’ll add more to this later, describing the View class.

Tags: