Author Archives: Garry Lachman (Admin)

PHP: Get local ip adresses using ifconfig (linux only)

Written by Garry Lachman (Admin). Filed under PHP + mySQL. Tagged , , , , , , . No comments.

Hi,

I wrote little code to get local machine ip address:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        function get_machine_ips()      {
                $ips = array();
                exec("/sbin/ifconfig", $catch);
                foreach($catch as $line){
                if (eregi('inet addr:', $line)) {
                        $line = str_replace(" ", ":", $line);
                        $line = explode(":", $line);
                        $line = array_filter($line);
                        foreach ($line as $v)   {
                                if (ip2long($v))        {
                                        $ips[] = $v;
                                }
                        }
                }
                }
                return $ips;
        }

have fun
Garry

Share

Requirements Specification for: Advance One Time URL script

Written by Garry Lachman (Admin). Filed under News. Tagged , , , , , , , , . 1 Comment.

Hi,
I`m planning to build new One Time URL script, after i found that the old version is bit problematic, i start to planning Advance One Time URL script.

Requirements Specification:

  1. using mySql as db.
  2. make one time url and store it in db.
  3. option to make few times url with limit.
  4. using http headers to force download – and not redirect as old script.
  5. mod_rewrite mode.
  6. regular link mode.
  7. install script – build the mySql schema.
  8. custom redirection for expired links.
  9. config file (db params, redirection params, default mode, etc…).

 

If you have more ideas, you can write it as comment.

Thanks,
Garry

Share

7 best jQuery charts engines

Written by Garry Lachman (Admin). Filed under JavaScript, jQuery. Tagged , , , , , . No comments.

A chart is a graphical representation of data, in which “the data is represented by symbols, such as bars in a bar chart, lines in a line chart, or slices in a pie chart”.[1] A chart can represent tabular numeric data, functions or some kinds of qualitative structures. [wikipedia]

List of jQuery based Charts



jqPlot

Computation and drawing of lines, axes, shadows even the grid itself is handled by pluggable “renderers”. Not only are the plot elements customizable, plugins can expand functionality of the plot too! There are plenty of hooks into the core jqPlot code allowing for custom event handlers, creation of new plot types, adding canvases to the plot, and more!



Highcharts

Highcharts is a charting library written in pure JavaScript, offering intuitive, interactive charts to your web site or web application. Highcharts currently supports line, spline, area, areaspline, column, bar, pie and scatter chart types.



GraphUp

GraphUp is a very flexible and lightweight jQuery (v1.4+) plugin to spice up your data tables. It visualizes the values using color, bar charts and bubbles.



Flot

Flot is a pure Javascript plotting library for jQuery. It produces graphical plots of arbitrary datasets on-the-fly client-side.
The focus is on simple usage (all settings are optional), attractive looks and interactive features like zooming and mouse tracking.
The plugin works with Internet Explorer 6+, Firefox 2.x+, Safari 3.0+, Opera 9.5+ and Konqueror 4.x+ with the HTML canvas tag



JS Charts

JS Charts is a JavaScript based chart generator that requires little or no coding. With JS Charts drawing charts is a simple and easy task, since you only have to use client-side scripting (i.e. performed by your web browser). No additional plugins or server modules are required. Just include our scripts, prepare your chart data in XML, JSON or JavaScript Array and your chart is ready!



PlotKit

PlotKit is a Chart and Graph Plotting Library for Javascript. It has support for HTML Canvas and also SVG via Adobe SVG Viewer and native browser support.



Emprise JavaScript Charts

EJSChart has been fully tested and verified to work properly in the following browsers. This list covers roughly 95% of browser market share



Have Fun ;)
Garry

Share

PHP+REGEX – URL validation & split to elements

Written by Garry Lachman (Admin). Filed under PHP + mySQL. Tagged , , , , . No comments.

Hi,
After searching the web i found a very good script to split the url to elements and validate it.
The result is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
array(14) {
  ["scheme"]=>
  string(4) "http"
  ["authority"]=>
  string(17) "garry-lachman.com"
  ["userinfo"]=>
  string(0) ""
  ["host"]=>
  string(17) "garry-lachman.com"
  ["IP_literal"]=>
  string(0) ""
  ["IPV6address"]=>
  string(0) ""
  ["ls32"]=>
  string(0) ""
  ["IPvFuture"]=>
  string(0) ""
  ["IPv4address"]=>
  string(0) ""
  ["regname"]=>
  string(17) "garry-lachman.com"
  ["port"]=>
  string(0) ""
  ["path_abempty"]=>
  string(12) "/2011/10/17/"
  ["query"]=>
  string(22) "test_querystring=value"
  ["url"]=>
  string(59) "http://garry-lachman.com/2011/10/17/?test_querystring=value"
}

The script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// function url_valid($url) { Rev:20110423_2000
//
// Return associative array of valid URI components, or FALSE if $url is not
// RFC-3986 compliant. If the passed URL begins with: "www." or "ftp.", then
// "http://" or "ftp://" is prepended and the corrected full-url is stored in
// the return array with a key name "url". This value should be used by the caller.
//
// Return value: FALSE if $url is not valid, otherwise array of URI components:
// e.g.
// Given: "http://www.jmrware.com:80/articles?height=10&width=75#fragone"
// Array(
//    [scheme] => http
//    [authority] => www.jmrware.com:80
//    [userinfo] =>
//    [host] => www.jmrware.com
//    [IP_literal] =>
//    [IPV6address] =>
//    [ls32] =>
//    [IPvFuture] =>
//    [IPv4address] =>
//    [regname] => www.jmrware.com
//    [port] => 80
//    [path_abempty] => /articles
//    [query] => height=10&width=75
//    [fragment] => fragone
//    [url] => http://www.jmrware.com:80/articles?height=10&width=75#fragone
// )
function url_valid($url) {
    if (strpos($url, 'www.') === 0) $url = 'http://'. $url;
    if (strpos($url, 'ftp.') === 0) $url = 'ftp://'. $url;
    if (!preg_match('/# Valid absolute URI having a non-empty, valid DNS host.
        ^
        (?P<scheme>[A-Za-z][A-Za-z0-9+\-.]*):\/\/
        (?P<authority>
          (?:(?P<userinfo>(?:[A-Za-z0-9\-._~!$&\'()*+,;=:]|%[0-9A-Fa-f]{2})*)@)?
          (?P<host>
            (?P<IP_literal>
              \[
              (?:
                (?P<IPV6address>
                  (?:                                                (?:[0-9A-Fa-f]{1,4}:){6}
                  |                                                ::(?:[0-9A-Fa-f]{1,4}:){5}
                  | (?:                          [0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}
                  | (?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}
                  | (?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}
                  | (?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::   [0-9A-Fa-f]{1,4}:
                  | (?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::
                  )
                  (?P<ls32>[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}
                  | (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
                       (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
                  )
                |   (?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::   [0-9A-Fa-f]{1,4}
                |   (?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::
                )
              | (?P<IPvFuture>[Vv][0-9A-Fa-f]+\.[A-Za-z0-9\-._~!$&\'()*+,;=:]+)
              )
              \]
            )
          | (?P<IPv4address>(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
                               (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
          | (?P<regname>(?:[A-Za-z0-9\-._~!$&\'()*+,;=]|%[0-9A-Fa-f]{2})+)
          )
          (?::(?P<port>[0-9]*))?
        )
        (?P<path_abempty>(?:\/(?:[A-Za-z0-9\-._~!$&\'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)
        (?:\?(?P<query>       (?:[A-Za-z0-9\-._~!$&\'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*))?
        (?:\#(?P<fragment>    (?:[A-Za-z0-9\-._~!$&\'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*))?
        $
        /mx'
, $url, $m)) return FALSE;
    switch ($m['scheme']) {
    case 'https':
    case 'http':
        if ($m['userinfo']) return FALSE; // HTTP scheme does not allow userinfo.
        break;
    case 'ftps':
    case 'ftp':
        break;
    default:
        return FALSE;   // Unrecognized URI scheme. Default to FALSE.
    }
    // Validate host name conforms to DNS "dot-separated-parts".
    if ($m['regname']) { // If host regname specified, check for DNS conformance.
        if (!preg_match('/# HTTP DNS host name.
            ^                      # Anchor to beginning of string.
            (?!.{256})             # Overall host length is less than 256 chars.
            (?:                    # Group dot separated host part alternatives.
              [A-Za-z0-9]\.        # Either a single alphanum followed by dot
            |                      # or... part has more than one char (63 chars max).
              [A-Za-z0-9]          # Part first char is alphanum (no dash).
              [A-Za-z0-9\-]{0,61}  # Internal chars are alphanum plus dash.
              [A-Za-z0-9]          # Part last char is alphanum (no dash).
              \.                   # Each part followed by literal dot.
            )*                     # Zero or more parts before top level domain.
            (?:                    # Explicitly specify top level domains.
              com|edu|gov|int|mil|net|org|biz|
              info|name|pro|aero|coop|museum|
              asia|cat|jobs|mobi|tel|travel|
              [A-Za-z]{2})         # Country codes are exactly two alpha chars.
              \.?                  # Top level domain can end in a dot.
            $                      # Anchor to end of string.
            /ix'
, $m['host'])) return FALSE;
    }
    $m['url'] = $url;
    for ($i = 0; isset($m[$i]); ++$i) unset($m[$i]);
    return $m; // return TRUE == array of useful named $matches plus the valid $url.
}

Have a nice day,
Garry Lachman

Share

Vim – Developers Best Friend – VIM Basics!!!

Written by Garry Lachman (Admin). Filed under Developer Tools. Tagged , , , , , , , . No comments.

Hi,
Most of the web developers found them self working in SSH mode without any IDE, i`m working in this mode over 2 years and found VIM my best friend.
Its not a standard editor, in your first time and the second you will damn him and me for this advice but very its will be your best friend.

History of vim (wikipedia)

Vim is a text editor written in 1988 by Bram Moolenaar for the Amiga computer, but first released publicly (v1.14) in 1991. It was based on an earlier editor, Stevie, for the Atari ST, created by Tim Thompson, Tony Andrews and G.R. (Fred) Walter[original research?]. The name “Vim” is an acronym for “Vi IMproved” because Vim is an extended version of the vi editor, with many additional features designed to be helpful in editing program source code. Originally, the acronym stood for “Vi IMitation”, but that was changed with the release of Vim 2.0 in December 1993. A later comment states that the reason for changing the name was that Vim’s feature set surpassed that of vi.

Basic use

  • When you enter you are in read mode, if you want to start write text press i.
  • use ‘Esc’ button to exit each mode
  • save & quit: press ‘Esc’ to exit write mode than for save only press :w and quite press :q, save & quite :wq and quite without saving :q!
  • for search press / and the word to search: /something to search, use n for next
  • for search and replace without confirm every replace: :%s/findme/replacewith/g with confirm :%s/findme/replacewith/gc
  • for remove current line: dd
  • undo last change u


This is the basics of VIM Editor.
Have fun ;)
Garry

Share

6 PHP Template Engines

Written by Garry Lachman (Admin). Filed under PHP + mySQL. Tagged , , , , , , , , , . No comments.

I think i don`t need to explain what is “Template Engine”, if this is the first time you hear about it
look at this link (Wikipedia)

Here is a list of some PHP Template Engines:

Smarty

Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic. This implies that PHP code is application logic, and is separated from the presentation.
Smarty



Simple Template Parser (STP)

This parser has been developed 5 years ago with the aim to produce a tool that allows to separate code from HTML. It started out as a simple php function. Meanwhile it has been rewritten by Stefan Reich and turned into a class file.
In larger projects there are usually designers and developers involved.
STP



PHP XTemplate

XTemplate allows you to store your HTML code separately from your PHP code (as opposed to compiling your template into PHP as per Smarty etc.). It has many useful features such as nested blocks and various kinds of variable interpolation, and yet the code is very short and very optimized.



Layout Solution

Layout Solution is a set of open source PHP classes to simplify website development and maintenance. It holds commonly used variables and page elements, allowing you to focus on designing your pages rather than worrying about correctly duplicating common layouts over and over.



Dwoo

Dwoo is a PHP5 template engine which is (almost) fully compatible with Smarty templates and plugins, but is written from scratch for PHP5, and adds many features.



Open Power Template

Open Power Template is a template engine for PHP5. Its task is to produce a full HTML code from the script data and ”code templates” that show, how and where put them. OPT has many features not only for programmers, but also for template writers that make this process nice and easy.

Share

read POST variables with Javascript using PHP

Written by Garry Lachman (Admin). Filed under JavaScript, PHP + mySQL. Tagged , , , , , , . 1 Comment.

Hi,
Today i will show very easy way to read POST variables from Javascript using PHP.

1
2
3
<script type="text/javascript">// <![CDATA[
var post_json = ;
// ]]></script>

We encode all POST vars with php to javascript JSON.
Now we can access the vars in simple way:

1
post_json.var_name;

Have a nice day,
Garry

Share

Custom Events in jQuery – bind & trigger

Written by Garry Lachman (Admin). Filed under JavaScript, jQuery. Tagged , , , , , , , , . No comments.

Sometimes custom events can make the life more easy.
If you want to communicate between classes and other object on the page you can simply
trigger a custom event with data.

First of all we create data exchange div:

1
<div id="data_exchange"></div>

Now we need to listen the “data exchange” div to receive the events.

1
2
3
$('#data_exchange').bind('event_name', function(event, data) {
  alert(event + ": " + data);
});

We show alert popup when we receive the event “event_name”.

The next step is dispatch the event to the “data exchange”:

1
$('#data_exchange').trigger('event_name', 'our data');

Have a nice day ;)
Garry Lachman

Share

Factory Method Pattern in JavaScript

Written by Garry Lachman (Admin). Filed under JavaScript. Tagged , , , . 1 Comment.

From Wikipedia: “The factory method pattern is an object-oriented design pattern to implement the concept of factories. Like other creational patterns, it deals with the problem of creating objects (products) without specifying the exact class of object that will be created. The creation of an object often requires complex processes not appropriate to include within a composing object. The object’s creation may lead to a significant duplication of code, may require information not accessible to the composing object, may not provide a sufficient level of abstraction, or may otherwise not be part of the composing object’s concerns. The factory method design pattern handles these problems by defining a separate method for creating the objects, which subclasses can then override to specify the derived type of product that will be created.”

2 Classes:

1
2
3
4
5
6
7
8
9
10
11
<script language="javascript" type="text/javascript">
// Class 1
function class_one() {
    this.init = function() {}
}

// Class 1
function class_two() {
    this.init = function() {}
}
</script>

Factory Method:

1
2
3
4
5
6
7
8
9
10
11
12
<script language="javascript" type="text/javascript">
function factory_method(){
}
// now add static function to get the instance
factory_method.get = function(_type){
    if (_type == 1) {
        return new class_one();
    } else {
        return new class_two();
    }
}
</script>

Usage:

1
2
3
4
<script language="javascript" type="text/javascript">
var _instance = factory_method.get(1);
_instance.init();
</script>

Have fun ;)

Share