Frequently Asked Questions

Why is the stack called Pogo?

Just like other stacks (for example LAMP or MEAN), Pogo is an abbreviation. "Po" stands for PostgreSQL and "go" stands for Golang.

What is Pogo? Is it a framework or a library or something else?

Pogostack is a stack for full stack development :-)

What is Pogo good for?

Pogo is very good for data driven web apps, like an online shop, a forum, helpdesk, CRM, ERP, BI, etc.

What languages do I need to know or learn to develop in Pogostack?

The main language is Postgres SQL, known as PL/pgSQL. It is one of the best, if not the best, procedural programming languages of all database languages. It sports reach control structures, implicit cursors, native SQL query execution, and native JSON support, including binary JSON.

Surprisingly, despite Pogo being based on Postgres and Golang, you do not need to know Golang. Pogo compiler and Pogo web server are written in Golang, but they are maintained by us, and are transparent to you.

Knowledge of the usual web development bits is required, the likes of HTML, CSS, JavaScript. Pogo also plays well with various frameworks: Bootstrap, AngularJS, jQuery, and it is entirely up to you which ones to use.

Does Pogostack force us to use vanilla JavaScript and HTML?

While we here at Pogo believe in concise code and zero bloat, there are scenarios where using Bootstrap, Angular, jQuery would provide more benefits than disadvantages. And Pogo is fully compatible with those technologies and frameworks. See our Pogo and Angular example.

How do I get Syntax highlighting for .pogo files in Sublime Text?

If you use Sublime Text, switching to php syntax by hitting CMD + SHIFT + p and typing ss php will syntax highlight .pogo files.

Can I automate compiling in Sublime Text?

You sure can. Here's how you can set up the build scripts to run directly from Sublime Text. You'll need to have a Sublime project set up.

In your .sublime-project file, add the following:

"build_systems":
[
    {
        "name": "pogo",
        "variants":
        [
            {
                "cmd":
                [
                    "./compile-one.sh",
                    "$file"
                ],
                "name": "single"
            },
            {
                "name": "all",
                "shell_cmd": "./compile-all.sh"
            }
        ],
        "working_dir": "${project_path}"
    }
]

Go to Preferences > Key Bindings > User and add:

[
    { "keys": ["ctrl+shift+b"], "command": "build", "args":{"variant": "all"}},
    { "keys": ["ctrl+b"], "command": "build", "args":{"variant": "single"}}
]

(Replace ctrl with command if on a mac.)

Then quit sublime and reopen.

Go to Tools > Build System and select 'pogo'.

CTRL + B should now compile the currently selected/active individual file and CTRL + SHIFT + B should compile all the files including SCSS. (CMD instead of CTRL if you're on a mac and replaced it in the steps above.)


Performance and security

What are the performance and other gains of Pogo?

Compared to a Node.js + AngularJS solution, Pogo was about 7-10 times faster and more resource efficient. When Node took up to a minute to respond, Pogo responded in seconds. When Angular took gigabytes of RAM to render the results, and on some occasions even crash the browser, Pogo used up to 5 times less memory and was silky smooth.

Moreover, the source code was 3-4 times smaller and cleaner in Pogo. Making it easier to maintain and to add new features, as well as significantly reducing number of bugs.

How demanding is Pogo when it comes to server and client resources?

On the client side, by doing a single large DOM replace (unlike frameworks like Angular that do lots of small DOM manipulations), Pogo is very gentle on the browser. Single DOM replaces done by Pogo are performed by the browser natively (compiled machine code), while in other frameworks DOM manupulation depends on much slower interpreted JavaScript executions.

On the server side, Pogo barely uses any resources at all, with only Postgres and Golang running without any middleware or bloatware. You can easily run Pogo servers on smallest Amazon AWS EC2 instances. We do.

What about security?

Unlike other stacks, Pogo takes care of all connections to the database and performs database queries natively, so there's no risk of SQL injection. There's no connection strings stored in the source code, and the source code itself isn't stored in the server's file system.

Also, Pogo has built-in authentication based on the HTTP protocol. You don't need to write any code to authenticate users yourself, Pogo will pass you the ID of the user automatically.


Pogo and PGASP

What is the difference between Pogo Stack and PGASP?

Pogo Stack and PGASP are 100% source code compatible. This means that you can switch between PGASP and Pogo at any time without any need to change a single line of code.

The difference is in how they are implemented and for whom they are more suitable.

Pogo is based on modern cutting edge technology, using Golang for everything. This makes it ideal for startups and individuals.

PGASP is based on very mature technology that has been around for decades, like Linux, Apache, and C. This makes PGASP the platform of choice for larger corporations and enterprises.

Is there any performance difference between Pogo and PGASP?

Virtually no difference. Most of the work is done by Postgres on the server side and the web browser on the client side. The server (Golang vs Apache) is merely passing the data without any processing, transformation, or conversion.

How is Pogo licensed?

Pogostack is open source and free. We also have an enterprise grade stack called PGASP that is 100% source compatible with Pogo.


Error Messages

When I run the compile script I get a message permission denied!

Mac users may need to first need to navigate to the directory containing the compile script in the terminal and run: chmod +x compile-all.sh

When I access localhost:4200 I get this error: pq: function psp_index(unknown, integer) does not exist

Make sure your index file has a .pogo extension not .html, not .pogo.html

When I run export GOPATH=~/gocode ; go run ../pogocore/pogo_server.go I get this error: ../pogocore/pogo_server.go:13:2: cannot find package "github.com/lib/pq" in any of: /.../lib/pq (from $GOROOT) /.../lib/pq (from $GOPATH)

Looks like you missed a step in the installation instructions. Run the following in terminal: export GOPATH=~/gocode ; go get github.com/lib/pq

When I run "psql" in terminal, I get the message: command not found!

You'll need to add psql to your path. To do this on Mac, navigate to your home folder and add the following line to your .bash_profile file (this is typically a hidden file):

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
If the .bash_profile file doesn't exist, create one.