Line Icons

Darmowe fonty

<link rel="stylesheet" href="https://cdn.lineicons.com/2.0/LineIcons.css">
<!doctype html> 
<html lang='en'>
  <head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'>
    <!-- LineIcons CSS -->
    <link href="https://cdn.lineicons.com/2.0/LineIcons.css" rel="stylesheet">
    <title>LineIcons Starter Template</title>
  </head>
  <body>
     <h1>Icons Added!</h1>
     <i class="lni lni-add-file"></i>
     <i class="lni lni-cart"></i>
     <i class="lni lni-calculator"></i>
  </body>
</html>

Czytaj dalej Line Icons

Przyrostki rozmiaru pliku

Konwertuje wielkość pliku w bajtach na wielokrotność i dodaje przyrostek

let nBytes = 3838383838388394994;   // wielkość w bajtach
let sOutput = "";

const aMultiples = ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];

for (nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
      sOutput = nApprox.toFixed(3) + " " + aMultiples[nMultiple] + " (" + nBytes + " bytes)";
}

Optymalizacja zapytań: link rel=dns-prefetch

Zapobiegawcze zapytanie DNS (do innej domeny) w czasie ściągania głównego pliku – zmniejsza opóźnienia dns lookup.

 <link rel="dns-prefetch" href="//ajax.googleapis.com">

Zapobiegawcze nawiązanie połączenia TCP – zmniejsza opóźnienia tcp

 <link rel="preconnect" href="//fonts.example.com" crossorigin>

JS – konwersja B na KB, MB, GB, TB,…

Przelicza bajty na wielokrotności

let nBytes = 22323848499494949494;
let sOutput = nBytes + " bytes";

const aMultiples = ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];

for (nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
    sOutput = nApprox.toFixed(3) + " " + aMultiples[nMultiple] + " (" + nBytes + " bytes)";
}

ajaxSetup

Ustawienia wspólne dla wielu wywołań ajax

$.ajaxSetup({
    url      : '/projekty/add.json',
    type     : 'post',
    dataType : 'json',
    error    : function(e){ console.error(e.message); }
});

$.ajax({
    url     : '/projekty/edit.json',   // nadpisuje ust. ogólne
    data    : JSON.stringify({id, name}),
    success : function(resp ){ render(resp); }
});

find – tar – backup plików od określonej daty

Znajdź pliki z podkatalogu projekty/ nowsze niż 14 dni  i zapisz je do pliki_find.txt

# cd CRM/
# find projekty/ -type f -mtime -14 > pliki_find_pl.txt

-type f - tylko pliki
-mtime -14 - nowszwe niż 2 tygodnie (minus nowsze, plus starsze, brak znaku dokładna data)

Utworzenie archiwum (skompresowane z) z plików o nazwach zawartych w pliki_find.txt

# tar -zcvf projekty_PL_20200802.tgz --files-from=pliki_find_pl.txt
# wc -l pliki_find_pl.txt
59
# tar -tvf projekty_PL_20200802.tgz | wc -l
59

CakpPHP – wgrywanie plików na serwer

Tabele MySQL

CREATE TABLE files ( 
  id           INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  file_type_id INT UNSIGNED, 
  project_id   INT UNSIGNED, 
  orygname     VARCHAR(255) NOT NULL, 
  dir          VARCHAR(255), 
  filename     VARCHAR(255) NOT NULL, 
  ext          CHAR(9), 
  description  TEXT, 
  module       ENUM ('project')
  is_active    TINYINT(1) DEFAULT 1, 
  user_id      INT UNSIGNED NOT NULL, 
  created      DATETIME,   
  modified     DATETIME, 
);
CREATE TABLE file_types ( 
  id          INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  name        VARCHAR(255) NOT NULL,
  description TEXT
);

CakePHP MySQL – procedury składowane

Utworzenie procedury składowanej w MySQL

DELIMITER $$
CREATE PROCEDURE low_amount()
BEGIN
SELECT ip.id, ip.product_id, ip.brand_id, ip.amount_alert, ip.is_ordered, SUM(ip.amount) AS suma, 
       p.name AS product, b.initials, b.name AS brand
FROM item_packs ip 
    INNER JOIN products p ON p.id=ip.product_id
    INNER JOIN brands   b ON b.id=ip.brand_id
GROUP BY ip.product_id, ip.brand_id
HAVING suma <= ip.amount_alert;
END $$
DELIMITER ;
SHOW PROCEDURE STATUS    -- wszystkie procedury

SHOW PROCEDURE STATUS [LIKE 'my_procedure' | WHERE search_condition]

SHOW CREATE PROCEDURE my_procedure;
DROP PROCEDURE [IF EXISTS] my_procedure;

SHOW PROCEDURE STATUS WHERE Db='myDababaseName' \G
DELIMITER $
CREATE PROCEDURE user_projects(p_user_id INT)
BEGIN
  SELECT p.id, p.status_id, COUNT(*) AS count,
        SUM(p.price) AS total, SUM(p.price * (ch.percent / 100)) AS weighted
  FROM projects p
   LEFT JOIN chances ch ON p.chance_id=ch.id
  WHERE p.manager_id = p_user_id
   AND p.status_id <> 3                        -- bez odrzuconych
  GROUP BY p.status_id ;
END $
DELIMITER ;

Wywołanie procedury w CakePHP 3

$connection = \Cake\Datasource\ConnectionManager::get('default');

$results = $connection->execute('CALL low_amount()')->fetchAll('assoc');

$this->set(compact('results'));