Тихо и незаметно вышло обновление «Учет оргтехники и ТМЦ в браузере».

Основные изменения:

  • устранение ошибок
  • группировка помещений
  • новое меню (адаптировано для планшетов)
  • хранилище документов

Снимок экрана из 2015-05-26 11:52:22

Описание здесь. Забрать можно здесь.

Рисуем красивые графики на PHP

Первоначально я рисовал графики при помощи Pchart (http://www.pchart.net/), однако что мне жутко в них не нравилось — это статичность изображения. Т.е. на выходе ты получаешь готовую красивую картинку, например, что-то вроде:

repplat

 

, но как я уже говорил — это просто статичная картинка, и никаких эффектов вроде плавного анимированного построения графика, подсветки значений при наведении курсора и т.п. никак не достичь.

Принялся за поиски другой библиотеки — на этот раз на основе JavaScript. Сперва смотрел в сторону широко разрекламмированой D3, но высокий «порог вхождения» остановил. Да, там можно реализовать «вообще всё что хочешь», но потратить полдня на то чтоб разобраться как построить элементарный график…

Посему далее стал смотреть в сторону http://www.chartjs.org/ . Там графики уже намного приятнее — анимация, простой код для отрисовки. Но! Так и не понял по какой причине, в библиотеке не реализована элементарная функция «легенда», а так-же отображение значений данных при не наведенном курсоре. Бред.

Снимок экрана из 2015-05-25 14:01:12Хорошо наткнулся на форк этой библиотеки — ChartsNew, который всё это позволяет делать «из коробки»:

Снимок экрана из 2015-05-25 14:06:04Основная трудность конечно при работе с JavaScript библиотеками для построения графиков из PHP, это конечно то, что приходится генерировать JavaScript код при помощи PHP, т.е. код становится «вермишелью» вроде вот этого: Читать далее Рисуем красивые графики на PHP

Установка расширений php при помощи pkg install во FreeBSD

1. Сначала ищем в портах. Зачем? Чтобы узнать в каком пакете лежит нужное расширение. Более простого решения не попалось

whereis php56-curl
php56-curl: /usr/ports/ftp/php56-curl

2. Устанавливаем из пакетов:

pkg install ftp/php56-curl

C и работа с MySQL. Пример.

Как оказалось просто Си (не С++), жутко не удобен при работе со строками и массивами. Но это лирика.. Ниже пример кода для выполнения запросов к MySQL, а так-же запуск выполнение сторонней программы.

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char *dns[10]={"8.8.8.8","172.17.112.2","176.107.220.1","176.107.216.1","91.242.164.1","81.163.80.1","91.247.152.1","91.247.156.1","91.247.156.1","188.254.37.250"};
int cntmas=10;


void GetDNSByUrl(char*dnsname,char*urlname){
      FILE *f;
      int c;
      char *sm = "";
      char *estr;
      char str[50];      
      int i;
      int pz;
      int cod;
      int flag;
      char ip[50];
      char zx[50];      
  char comstring[200];
    strcpy(comstring,"");
    strcat(comstring,"dig @");
   strcat(comstring,dnsname);
    strcat(comstring," ");
    strcat(comstring,urlname);
    strcat(comstring," +noall +answer >>tmpdns");    
    system(comstring);

};

int main (void){
    MYSQL *conn;
    MYSQL *conn2;
    MYSQL_RES *res;
    MYSQL_ROW row;

      char *server = "localhost";
      char *user = "root";
      char *password = "erfwerfwe"; 
      char *database = "webuser";
      char *curdns;
      char *id;
      char sql[200];
      int i;
      int col;
      
      conn = mysql_init(NULL);
      printf ("-Connect Mysql 1\n");
      if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
    	    exit(1);
      }
      conn2 = mysql_init(NULL);
      printf ("-Connect Mysql 2\n");
      if (!mysql_real_connect(conn2, server,user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
    	    exit(1);
      }
L3:    
    col=0;
    printf ("-Select urls from Mysql\n");
    if (mysql_query(conn, "select * from reestrban where type='url' and status=0 limit 1")) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
       }   
   res = mysql_use_result(conn);
   char *urlip;
   while ((row = mysql_fetch_row(res)) != NULL){
      col++;
      printf ("-- URL:");
      id=row[0];
      urlip=row[1];
      printf("%s\n",urlip);
        for (i=0;i<cntmas;i++){
           curdns=dns[i];           
           printf ("--- %s\n",curdns);
           GetDNSByUrl(curdns,urlip);
        };
      //обновляем статус что "посмотрели"
    strcpy(sql,"update reestrban set status=1 where id=");
    strcat(sql,id);    
    if (mysql_query(conn2, sql)) {
          fprintf(stderr, "Error %s\n", mysql_error(conn2));
          fprintf(stderr, "Error %s\n", sql);
          exit(1);
       }   
        
    };
   if (col!=0) goto L3; 
   mysql_free_result(res);
   mysql_close(conn);
}

Пишем бинарник под Linux

Вот и настал час Х, когда возникла нужда создать бинарный исполняемый файл под Linux — один из скриптов на PHP никак не удается оптимизировать, чтоб работал многопотоково и не жрал память как свинья…

Итак, для начала простейшее «Привет мир».. Создаем hello.c:

<span style="color: #4466ff;"><b>#include &lt;stdio.h&gt;
int main (void){
	printf ("Привет Мир!\n");
}</b></span>

Компилируем:

gcc -o helo helo.c

получаем в текущем каталоге исполняемый бинарник..

Жизнь замечательных грибов