Смотрите «Урок №1. Напряжение и ток. В чем разница?» на YouTube
Решил по вспоминать, давно забытое 🙂
Подробно объясняется, что такое напряжение, а что такое сила тока.
Решил по вспоминать, давно забытое 🙂
Подробно объясняется, что такое напряжение, а что такое сила тока.
Странно, что такой полезной функции не оказалось в «коробке»…Ну да ничего. Решаемо.
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 |
function showImageTools (e) { data="<div id=imageDialog class='alert' style='z-index: 9999;position: absolute'>OLALA</div>"; if (!$('#imageDialog').length) { $("#saveweldingandmark").append(data); } moveImageTools(e); }; function moveImageTools (e) { var w = $('#imageDialog').width(); var h = $('#imageDialog').height(); $('#imageDialog').show(); $('#imageDialog').css({top: my, left: mx}); } var MouseCoords = { getX: function(e){ if (e.pageX) { return e.pageX; } else if (e.clientX) { return e.clientX+(document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft; } return 0; }, getY: function(e){ if (e.pageY){ return e.pageY; } else if (e.clientY) { return e.clientY+(document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop; } return 0; } }; document.onmousemove = function(e){ if (!e) e = window.event; mx=MouseCoords.getX(e); my=MouseCoords.getY(e); }; canvas.on('mouse:over', function (e) { console.log("Я на что-то наехал..."); showImageTools(e.target); }); canvas.on('mouse:out', function (e) { $('#imageDialog').remove(); }); |
Это я про Почту России. Вчера пришла смс от RussianPost, что посылка пришла. Ну мелочь конечно, что в тексте СМС квартира перепутана. Зато пришла! И получать когда поехал даж почти очереди не было (ну 4 человека для Почты не считаю очередью).. И уведомление просить не стали.. И номер посылки по треку не спрашивали.. Посмотрела ФИО в паспорте и пошла девушка за моей посылкой.. И нашла! Для полного счастья бы обед убрали, и вообще сказал бы что что-то к лучшему меняется…
P.S. Правда дядечке который за мной стоял не повезло, у них «сервер завис», поэтому отправить перевод не смогла…
А вот моя предыдущая запись про почту..
Последнее время активно работаю с библиотекой fabric.js, для работы с графикой на JavaScript, а именно делаю «редактор муфт»:
Библиотека позволяет на холсте canvas работать с графикой как с объектами: выделять, изменять, назначать обработчики событий (выделение, клик, перемещение и т.п.) для каждого объекта. Ну и еще много всего. В то-же время она достаточно проста в освоении.
Однако приведу несколько моментов, на которые пришлось потратить время, что-бы разобраться:
1) Перебор всех объектов в canvas:
1 2 |
canvas.forEachObject(function(obj) { }; |
2) Для очистки canvas от всех объектов:
1 |
canvas.clear(); |
3) Закраска объекта градиентом:
1 2 3 |
var rect = new fabric.Rect({left: 20,top: 0,fill: 'yellow',width: wx-40,height: steph,selectable:false,shadow: 'green 2px 2px 2px'}); rect.setGradient('fill', {x1: 0,y1: 0,x2: 0,y2: rect.height,colorStops: {1: '#000',0: '#fff'}}); canvas.add(rect); |
4) Назначение событий:
1 2 3 4 |
canvas.on('object:selected', function(e) { p = e.target; // в p сейчас, обьект по которому "щелкнули" }); |
Давно хотел попробовать переложить часть кода и логики на плечи MySQL.. По идее говорят за счет сокращения обмена сетевыми пакетами, скорость выполнения значительно увеличивается. В зависимости от задачи конечно. Ну попробовал.. Не очень понравилось. Писать на этом так называемом языке очень не удобно. Особенно эти «курсоры» в MySQL. В итоге пришел к выводу, что таки да. Смысл писать есть, но только если «очень -очень нада»..
Ниже пример процедуры заполнения таблицы на основании другой..
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 |
DROP PROCEDURE `pav_PrepareAgrmsTableForPredPlat`; CREATE PROCEDURE `pav_PrepareAgrmsTableForPredPlat`(IN `gr_id` INT) COMMENT 'Пересчет' NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN DECLARE done INT DEFAULT 0; DECLARE agrm_idd INT; DECLARE uider INT; DECLARE balancer double; DECLARE num CHAR(100); DECLARE nam VARCHAR(100); DECLARE mob CHAR(100); DECLARE adr VARCHAR(200); DECLARE agrms CURSOR FOR select accounts_addr.address,agreements.number,agreements.agrm_id as ag,agreements.uid as uuid,agreements.balance,accounts.name,accounts.mobile from vgroups inner join agreements on vgroups.uid=agreements.uid inner join accounts on agreements.uid=accounts.uid left join accounts_addr on accounts_addr.uid=accounts.uid where vgroups.blocked<>10 and vgroups.uid in (select uid from usergroups_staff where usergroups_staff.group_id=gr_id) and agreements.archive=0 and vgroups.archive=0 and LENGTH(accounts.mobile)>=10 and accounts_addr.type=1 group by agreements.agrm_id; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; delete from lanbpredplat where grp=gr_id; OPEN agrms; REPEAT FETCH agrms INTO adr,num,agrm_idd,uider,balancer,nam,mob; if NOT done then insert into lanbpredplat (am_usl,am_inet,am_tv,agrm_id,grp,uid,balance,number,username,phone,address) values (0,0,0,agrm_idd,gr_id,uider,balancer,num,nam,mob,adr); END IF; UNTIL done END REPEAT; CLOSE agrms; end |