目前分類:NetYea (126)

瀏覽方式: 標題列表 簡短摘要
網頁設計
  1. $baseUrl = 'https://'.$_SERVER['HTTP_HOST'].'/xxxx/';
複製代碼
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

1. 備份資料庫及網站檔案


2. 起首到官網下載opencart 4.0.2.3
https://www.opencart.com/index.php?route=cms/download/history


3. 解緊縮檔案並上傳


4. 確認平台支援 PHP 8.2+


5. 建立config.php 及 admin/config.php 可寫 只填 DB訊息

  1. // DB
  2. define('DB_DRIVER', 'mysqli');
  3. define('DB_HOSTNAME', 'localhost');
  4. define('DB_USERNAME', 'xxxx');
  5. define('DB_PASSWORD', 'xxxx');
  6. define('DB_DATABASE', 'xxxx');
  7. define('DB_PORT', '3306');
  8. define('DB_PREFIX', 'oc_');
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

1.素材寫實
2.內容有趣輕易理解

樞紐字(天然排序)
 

 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

填入名稱、選擇驗證類型、網域、治理者,贊成Google蒐集網頁資訊、成立

下方則是貼到要顯示的位置

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()


影片演示



文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計

用ESP32 PWM實現LED漸漸亮起。

程式的部分首要分成三個:1.設定頻道LEDchannel、2.附加到PIN腳、3.決定輸出巨細。

1.設定頻道LEDchannel屬性

ledcSetup(LEDChannel, freq, resolution);
//LEDChannel設定為0,不同輸出要設定到分歧頻道,例如RGB LED就要開三個頻道離別辦理R、G、B
//freq輸出頻率,建議值5000 Hz
//resolution代表輸出解析度,例如8代表0-255,10代表0-1023

2.附加到PIN腳

ledcAttachPin(ledPin, LEDChannel);
//ledPin代表腳位,看你把裝備接在哪一個腳位上面
//LEDchannel代表步調1所宣佈的LEDchannel,也就是說把設定好的LEDchannel屬性附加到某個腳位上

3.決意輸出巨細。

ledcWrite(LEDChannel, dutyCycle);
//將LEDchannel輸出dutyCycle的值。

典範程式將使接在Pin16的LED逐步亮起並熄滅,類型複製於 https://randomnerdtutorials.com/esp32-pwm-arduino-ide/

Arduino ESP32 PWM輸出 讓LED漸亮漸暗 網
Arduino ESP32 PWM輸出 讓LED漸亮漸暗 網

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

打開終端機或cmd,輸入以下指令,進行物件偵測:
  1. yolo predict model=yolov8n.pt source="https://ultralytics.com/images/bus.jpg"
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

NetYea,網頁設計,網頁設計網頁優化,hcdt,關鍵字優化

 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

電腦中毒Linux find饬令快速查找中毒文件教程

  .htaccess插馬特徵-》SetHandler application/x-httpd-php

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

網頁設計

為資料庫撈出之預設值

  1. <div id="element_id" data-url="cityData.min.json" data-selects="province,city,area" data-required="true"></div>
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

網頁設計

ereg_replace()是個利用正則的replacestr_replace()
ereg_replace ( string $pattern , string $replacement , string $string ) : string
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
preg_replace()是今朝的保舉方案,必選參數3個,可選參數3個。基本上可以籠蓋 只不過是參數的具體用法分歧。返回值是根基上一致的。ereg_replace()
 網頁設計 PHP燒毀函數ereg_replace(),如何用
網頁設計 PHP燒毀函數ereg_replace(),如何用

文章出處


文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

說明:在Linux下把excel數據導入到mysql數據庫中,這其實是很搞笑的一個運動!幾近很少有法式員研究過這個問題吧?如斯反常的問題,估量我是第一個研究的!呵呵,完全是自找苦吃~~,但是今天完了這項太有挑戰性的工作!
先清理一下思緒先,~~
起首:需要把文件上傳到服務器上
然後:讀取excel數據列顯示出來
然後:讓用戶選擇字段的對應關係
然後:提交數據,讀取字段的對應關係
最後:批量導入數據,刪除臨時文件
一共是以上五步調!我們一步步闡發~~~
第一步:下載附件中的phpexcelparser4.rar ,這個文件是上傳excel盜服務器上並以web情勢展現出來的!這個一般沒有問題的!問題是法式的做法是把表存為臨時表而沒有真正保存下來,所以起首要更改程序代碼為

 

  1.  
  2. //uc轉換成html
  3. function uc2html($str) {
  4.    $ret = '';
  5.    for( $i=0; $i<strlen($str)/2; $i++ ) {
  6.        $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
  7.        // $ret .= '&#'.$charcode;
  8.        if($charcode<127)
  9.          $ret .=chr($charcode);
  10.        else
  11.            $ret .= iconv("utf-8","utf-8",u2utf8($charcode));
  12.    }
  13.        return $ret;
  14. }
  15. //html轉成utf8
  16. function u2utf8($c) {
  17. $str="";
  18. if ($c < 0x80) {
  19.   $str.=$c;
  20. } else if ($c < 0x800) {
  21.   $str.=chr(0xC0 | $c>>6);
  22.   $str.=chr(0x80 | $c & 0x3F);
  23. } else if ($c < 0x10000) {
  24.   $str.=chr(0xE0 | $c>>12);
  25.   $str.=chr(0x80 | $c>>6 & 0x3F);
  26.   $str.=chr(0x80 | $c & 0x3F);
  27. } else if ($c < 0x200000) {
  28.   $str.=chr(0xF0 | $c>>18);
  29.   $str.=chr(0x80 | $c>>12 & 0x3F);
  30.   $str.=chr(0x80 | $c>>6 & 0x3F);
  31.   $str.=chr(0x80 | $c & 0x3F);
  32. }
  33. return $str;
  34. }
  35.  
  36. if (trim($_POST["cmd"])=="upload")
  37. {
  38. $err_corr = "Unsupported format or file corrupted";
  39. $excel_file_size;
  40. $excel_file = $_FILES['excel_file'];
  41. $uploadservername=$UploadAbsPath."tmpexcel/".$_FILES['excel_file']['name'];
  42. echo($uploadservername);
  43.      if (!is_writeable($UploadAbsPath."tmpexcel/"))
  44.      {
  45.      echo "目次不可寫!"; exit;
  46.      }
  47.      else
  48.      {
  49.      echo "目錄可寫!";
  50.      }
  51. if (move_uploaded_file($_FILES['excel_file']['tmp_name'], $uploadservername))
  52. {
  53.     echo("上傳成功");
  54. }
  55. else
  56. {
  57.     echo("上傳失敗");
  58. }
  59. $excel_file=$uploadservername;
  60. //if( $excel_file )
  61. //    $excel_file = $_FILES['excel_file']['tmp_name'];
  62.  
  63.  
  64. if( $excel_file == '' ) fatal("No file uploaded");
  65.  
  66.  
  67. $exc = new ExcelFileParser("debug.log", ABC_NO_LOG);//ABC_NO_LOG ABC_VAR_DUMP);
  68.     //echo($excel_file."|");
  69.    
  70. $style = $_POST['style'];
  71. if( $style == 'old' )
  72. {
  73.     $fh = @fopen ($excel_file,'rb');
  74.     if( !$fh ) fatal("No file uploaded");
  75.     if( filesize($excel_file)==0 ) fatal("No file uploaded");
  76.     $fc = fread( $fh, filesize($excel_file) );
  77.     @fclose($fh);
  78.     if( strlen($fc) < filesize($excel_file) )
  79.     fatal("Cannot read file");
  80.    
  81.     $time_start = getmicrotime();
  82.     $res = $exc->ParseFromString($fc);
  83.     $time_end = getmicrotime();
  84. }
  85. elseif( $style == 'segment' )
  86. {
  87.     $time_start = getmicrotime();
  88.     $res = $exc->ParseFromFile($excel_file);
  89.     $time_end = getmicrotime();
  90. }
  91.  
  92.  
  93. switch ($res) {
  94.     case 0: break;
  95.     case 1: fatal("Can't open file");
  96.     case 2: fatal("File too small to be an Excel file");
  97.     case 3: fatal("Error reading file header");
  98.     case 4: fatal("Error reading file");
  99.     case 5: fatal("This is not an Excel file or file stored in Excel < 5.0");
  100.     case 6: fatal("File corrupted");
  101.     case 7: fatal("No Excel data found in file");
  102.     case 8: fatal("Unsupported file version");
  103.  
  104.  
  105.     default:
  106.     fatal("Unknown error");
  107. }
  108.  
  109.  
  110. /*
  111. print '<pre>';
  112. print_r( $exc );
  113. print '</pre>';
  114. exit;
  115. */
  116.  
  117.  
  118. show_time();
  119.  
  120.  
  121. echo <<<LEG
  122. <b>Legend:</b><br><br>
  123. <form name='doform' action='' method='post'>
  124. <input type='hidden' name='action' value='do'>
  125. <input type='hidden' name='excel_file' value=$excel_file>
  126. <input type='hidden' name='style' value=$style>
  127. <table border=1 cellspacing=0 cellpadding=0>
  128. <tr><td>Data type</td><td>Description</td></tr>
  129. <tr><td class=empty>&nbsp;</td><td class=index>An empty cell</td></tr>
  130. <tr><td class=dt_string>ABCabc</td><td class=index>String</td></tr>
  131. <tr><td class=dt_int>12345</td><td class=index>Integer</td></tr>
  132. <tr><td class=dt_float>123.45</td><td class=index>Float</td></tr>
  133. <tr><td class=dt_date>123.45</td><td class=index>Date</td></tr>
  134. <table>
  135. <br><br>
  136.  
  137.  
  138. LEG;
  139. /*
  140. print "<pre>";
  141. print_r ($exc->worksheet);
  142. print_r($exc->sst);
  143. print "</pre>";
  144. */
  145.     for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
  146.     {
  147.     print "<b>Worksheet: \"";
  148.     if( $exc->worksheet['unicode'][$ws_num] ) {
  149.     print uc2html($exc->worksheet['name'][$ws_num]);
  150.     } else
  151.     print $exc->worksheet['name'][$ws_num];
  152.  
  153.  
  154.     print "\"</b>";
  155.     $ws = $exc->worksheet['data'][$ws_num];
  156.  
  157.  
  158.     if( is_array($ws) &&
  159.          isset($ws['max_row']) && isset($ws['max_col']) ) {
  160.      echo "\n<br><br><table border=1 cellspacing=0 cellpadding=2>\n";
  161.  
  162.  
  163.      print "<tr><td>&nbsp;</td>\n";
  164.      for( $j=0; $j<=$ws['max_col']; $j++ ) {
  165.     print "<td class=index>&nbsp;";
  166.     if( $j>25 ) print chr((int)($j/26)+64);
  167.     //這裡要顯示一個下拉列表來顯示數據
  168.     //注意是輪回數據<br />
  169.     echo("\n<select name='".$j."'>");
  170.     echo("\n<option value='0'>不選擇</option>");
  171.    echo("\n<option value='costomernum'>客戶編號</option>");
  172.    echo("\n<option value='name'>客戶姓名</option>");
  173.    echo("\n<option value='phone1'>德律風1</option>");
  174.    echo("\n<option value='phone2'>德律風2</option>");
  175.    echo("\n<option value='address1'>地址1</option>");
  176.    echo("\n<option value='address2'>地址2</option>");  
  177.    echo("\n<option value='company'>公司</option>");
  178.    echo("\n<option value='levelc'>職稱</option>");   
  179.    echo("\n<option value='ps'>備註</option>");
  180.    
  181.     echo("</select>");
  182.     print "</td>";
  183.      }
  184.  
  185.  
  186.      print "<tr><td>&nbsp;</td>\n";
  187.      for( $j=0; $j<=$ws['max_col']; $j++ ) {
  188.     print "<td class=index>&nbsp;";
  189.     if( $j>25 ) print chr((int)($j/26)+64);
  190.     print chr(($j % 26) + 65)."&nbsp;列名</td>";
  191.      }
  192.  
  193.  
  194.  
  195. //表頭輸出完畢
  196.     if ($ws['max_row']>9)
  197.     {
  198.     $shownum=9;
  199.     }
  200.     else
  201.     {
  202.     $shownum=$ws['max_row'];//只輸出前10條數據
  203.     }
  204.      for( $i=0; $i<=$shownum; $i++ ) {
  205.      print "<tr><td class=index>".($i+1)."</td>\n";
  206.      if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
  207.          for( $j=0; $j<=$ws['max_col']; $j++ ) {
  208.  
  209.  
  210.     if( ( is_array($ws['cell'][$i]) ) &&
  211.          ( isset($ws['cell'][$i][$j]) )
  212.          ){
  213.  
  214.  
  215.      // print cell data
  216.      print "<td class=\"";
  217.      $data = $ws['cell'][$i][$j];
  218.  
  219.  
  220.      $font = $ws['cell'][$i][$j]['font'];
  221.      $style = " style ='".ExcelFont::ExcelToCSS($exc->fonts[$font])."'";
  222.  
  223.  
  224.          switch ($data['type']) {
  225.     // string
  226.     case 0:
  227.         print "dt_string\"".$style.">";
  228.         $ind = $data['data'];
  229.         if( $exc->sst['unicode'][$ind] ) {
  230.         $s = uc2html($exc->sst['data'][$ind]);
  231.         } else
  232.         $s = $exc->sst['data'][$ind];
  233.         if( strlen(trim($s))==0 )
  234.         print "&nbsp;";
  235.         else
  236.         print $s;
  237.         break;
  238.     // integer number
  239.     case 1:
  240.         print "dt_int\"".$style.">&nbsp;";
  241.         print $data['data'];
  242.         break;
  243.     // float number
  244.     case 2:
  245.         print "dt_float\"".$style.">&nbsp;";
  246.         echo $data['data'];
  247.         break;
  248.     // date
  249.     case 3:
  250.         print "dt_date\"".$style.">&nbsp;";
  251.  
  252.  
  253.         $ret = $data[data];//str_replace ( " 00:00:00", "", gmdate("d-m-Y H:i:s",$exc->xls2tstamp($data[data])) );
  254.         echo ( $ret );
  255.         break;
  256.     default:
  257.         print "dt_unknown\"".$style."> &nbsp;";
  258.         break;
  259.          }
  260.      print "</td>\n";
  261.     } else {
  262.         print "<td class=empty>&nbsp;</td>\n";
  263.     }
  264.          }
  265.      } else {
  266.     // print an empty row
  267.     for( $j=0; $j<=$ws['max_col']; $j++ )
  268.         print "<td class=empty>&nbsp;</td>";
  269.     print "\n";
  270.      }
  271.      print "</tr>\n";
  272.      }
  273.  
  274.  
  275.      echo "</table><br>\n";
  276.     } else {
  277.     // emtpty worksheet
  278.     print "<b> - empty</b><br>\n";
  279.     }
  280.     print "<br>";
  281.  
  282.  
  283.     }
  284.     echo("<input type='submit' name='Submit' value='轉換' />");
  285.     echo("</form>");
  286. /*    print "Formats<br>";
  287.     foreach($exc->format as $value) {
  288.     printf("( %x )",array_search($value,$exc->format));
  289.     print htmlentities($value,ENT_QUOTES);
  290.     print "<br>";
  291.     }
  292.  
  293.  
  294.      print "XFs<br>";
  295.     for( $i=0;$i<count($exc->xf['format']);$i++) {
  296.     printf ("(%x)",$i);
  297.     printf (" format (%x) font (%x)",$exc->xf['format'][$i],$exc->xf['font'][$i]);
  298.  
  299.  
  300.     print "<br>";
  301.     }
  302. */
  303. }
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

網頁設計

前兩天收到中華電信HINET的德律風
說某一網域被入侵,亂發信被揭發
今天客戶說寄到GMAIL的信掃數寄不出去
查了一下,先到下面網址打入IPhttps://mxtoolbox.com
https://www.dnsbl.info/dnsbl-details.php?dnsbl=dnsbl.spfbl.net
伺服器被當垃圾信跳板 申請DNS IP反解 網頁設計

發現有被兩個單元列入黑名單
伺服器被當垃圾信跳板 申請DNS IP反解 網頁設計


問了谷歌後,只要在其他dnsbl或是CBL裡沒有紀錄就好

直接問中華電信的 "Spam小組" 有專線(02)2192-6022 直接打去問,完全都免費。
CBL:http://cbl.abuseat.org/lookup.cgi?ip=61.218.3.178&.submit=Lookup
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

 

 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

網頁設計


跋文


週六晚上在看一些性能評估的文章,突發靈感,有了頓悟,扯出了這篇文章。有趣的是順著這個思緒,看明白了曩昔的許多工作。若是我的同事看到這篇文章後有愛好,我們卻是可以暗裏聊聊,對曩昔的工作做一下复盤。別的還要很感激王概凱先生的《聊聊架構》這本書對我的啟迪,在我最茫然無助、最驚慌失措的時刻給了我靈感和標的目的。保舉對架構思想感愛好的童鞋們讀讀看,全篇沒多少觸及手藝內容,可是對技術從業者有著很大的啟發性。



來源:簡書

  • 組織營業
  • 架構師經由過程索求和研究營業範疇的常識,構建本身對待營業的"世界觀"。他會基於這種熟悉拆分營業生命週期,確立營業鴻溝,構建出了一套解決特定營業問題的範疇模型。而且確認模型之間、範疇之間的關係與協作體式格局。完成了對營業領域內的要素的組織工作。
  • 組織手藝
  • 為了能在較量爭論機世界中運作人類社會的營業模子,架構師需要選用較量爭論機世界中適合的框架、中心件、編程說話、收集和談等手藝工具根據之前設計方案組織起來構成一套軟件系統方案,在我看來軟件系統就像是一種手藝組織,即技術組件、手藝手段根據某種邏輯被組織起來了,這些手藝工具被確定了職責,有了明白分工,並以實現營業功能為目標集合在了一路。好比RPC框架或新聞隊列被用於內部系統之間的通訊辦事就如同信使一般,而數據庫則負責紀錄成績,它更像是一位書記員。
  • 組織人員
  • 為了可以或許實現使用軟件系統解決營業問題的目標,架構師還需要關注軟件系統的構建過程,他以實現軟件系統為號令,從公司組織中群集一批軟件工程師,並將這些人員按分歧工種、分歧職責、分歧系統進行組織,肯定這些人員之間的協作體例,並關注這個組織系統是不是運作精良好比溝通是否順暢、產出是不是到達要求、能否按時候完成等。
  • 組織全局,對外輸出
  •  
  • 架構師的重要方針是解決營業問題,推動營業增加。所以他很是關心軟件的運行狀態。因為只有在軟件系統運行起來後,才能對外提供辦事,才能在用戶拜候的過程當中,解決營業問題。架構師需要關注運行過程中產生的數據好比營業成功率,系統運行資本佔用數據、用戶反饋信息、營業增長情況等,這些信息將會幫助架構師制訂下一步架構目的和標的目的。
  • 明確本身的營業相幹主體:找出你工作的協作關係網內的營業方和客戶方,如許你就可以從客戶方中找到離你比來的業務價值點,從你的營業方中挖掘更多的資源。甚至你可以按這個思路順著收集向上或向下發掘價值鏈條,整合更多的上下游資本以實現更大的價值。
  • 向前一步,為更大的價值負責:不要因為本身是開辟人員就不去關注軟件運維,不要因為只是測試就不關注軟件開發,因為你關注的越多你越能看清全局的價值方針。假如只關註一畝三分地,那麼注定這輩子只能困守在這一畝三分地裡,成為一位流水線上焦炙至死的碼農。試著改變思維,從架構師的角度思慮價值問題,看看可否將技術貫穿到營業、到用戶、到終究的價值去。之前我的朋友說過要把產品經理踢到運營位置去,把法式員踢到產品司理位置去,這樣才是准確幹事體例。這句話也是近似的意思,向前一步才能懂得怎麼做的更好。
  • 像架構師一樣思慮,用價值找尋重心:人的蒼茫是因為找不到重心,而價值的意義在於指導我們思慮做哪些工作才能實現價值,先做哪些事情會比後做哪些工作更能締造收益。像架構師那樣全局性思考,把遇到問題進行拆分,把進修到的事物串連起來,努力組成完全的價值鏈條。
  • 學會毗連,構建系統:前幾天看到一篇文章對本日頭條的產品形態極盡批評之詞,指責它的智能算法將人類封死在本身的喜愛之中,將人類社會進一步碎片化。這仿佛很有事理,有趣的是互聯網將我們毗連至廣袤的世界,卻也把我們封閉在獨屬於本身的小世界裡。依舊是我的那位伴侶,他說他的最大價值在於毗鄰,將分歧的人毗連在一起,有趣的工作可能就會行將産生。也許算法的本性就是馴服與逢迎,但人終究想理解這個世界照樣需要依托自身的行動與分歧人之間豎立聯繫,這也是一種擺脫流水線限制的有效體例。別的,我們本身也是某種事物毗鄰的產物,比如架構師,他是營業、手藝、管理毗連在一起的一種產物。所以我們該當建立本身的知識體係以吸收融會新知識,將孤立的概念連接起來,形成自身的價值鏈條。好比這篇文章將我從事手藝開辟經驗、與對架構的理解和本身過往經歷連系起來,這也是一種內涵的體系梳理。
     
  • 業務範疇與功能:好比付出寶存身付出領域而推出的轉賬、收款功能等,好比人工智能主動駕駛系統等。
  • 服務能力:這就比如火車站購票窗口,評判它的服務能力的標準就是它可以或許同時處置懲罰幾許的用戶購票營業,能不能在指守時間內完成購票營業,能不能7*8小時持續工作。對應到軟件系管轄域,則浮現為
     
    • 系統准確性 (法式可以或許准確表述業務流程,沒有Bug)。
    • 可用性(可以7*24小時*365不間停工作)。
    • 大範圍(高並發,高吞吐量)。



所以軟件架構不單單只是選用什麼框架、選用什麼手藝組件這麼簡單。它貫穿了對人的組織、對手藝的組織、對營業的組織,並將這三種組織以解決營業問題這一目標有機的連系在了一起。

很多面試的候選人在被問及他所開發的系統採用什麼架構的問題時,只會枚舉出一些手藝組件、手藝框架等手藝要素,如許看來其底子沒有理清架構的深層寄義。也有一些架構師只專注對底層手藝的研究,以為打造一個出色的系統長短常牛逼的工作,可是他忽略了軟件系統的價值是以解決營業問題的能力、支撐業務增長的能力為權衡標準,所以最後生產出了良多對組織,對營業沒有匡助的系統。

成本與收益正如之前所說軟件系統只有在運行的時辰才能締造價值,也就是說軟件系統能否7*24小時*365天不變的工作關係到公司的收益程度。所以開發團隊對生產情況的發布老是不寒而栗,對解決生產情況的問題老是加班加點。而軟件系統的本錢則表現在軟件構建進程,這時候候我們就能理解那些工程手藝如項目經管、靈敏開發、單位測試、持續集成、延續構建,版本辦理等的價值了,他們有的是包管軟件系統准確性,有的是為了降低溝通本錢,有的是為了提拔開發效力等但總的來說就是為了下降軟件的構建本錢。所以在晉升系統服務能力,締造更多營業收益的同時,降低構建本錢也是一種提拔收益的有用手段。

作為一位軟件工程師而言,我們常常處在軟件構建過程體系中的某個環節,我們可以基於本錢與收益的關係去思慮本身每項妙技的價值,學習新的有價值的妙技,乃至在工作中基於本錢與收益的考量選擇合適的技術。好比在邏輯不大産生轉變的處所,沒有需要去做過量的設計,利用各類花俏的設計模式等揮霍時間。如許我們才能成為技術的主人。

架構目的需要適應營業的成長


架構的方針就是為了支撐業務增進,就是晉升軟件系統的服務能力。
可是話雖然說如斯,但真實卻要做良多取捨。
好比對初創團隊而言,其產品是不是解決業務問題這一假想還沒獲得確認,就當即去機關一個高性能、高可用的分佈式系統,如許的架構目標遠超出業務成長的需求,最後的成績就是揮霍大量人力物力,卻得不到任何起色。架構師需要審時度勢,仔細衡量准確性、大規模、可用性三者的關係,好比本年營業蓬勃發展日均定單300萬,基於對未來的可能預測,來歲可能有3000萬的定單,那麼架構師應當要側重考慮大範圍和可用性。並且每點提升的程度,也需要架構師衡量掌控,好比可用性要到達2個9照樣3個9。

回首本身以往的工作許多時候就是因為沒有確立架構目的致使鋪張了組織許多資源,比如在之前的創業團隊中,由於本人有必然的代碼潔癖,經常會破費良多時候和同事計較代碼質量,如許本可以更快上線的功能卻需要被延遲,其時過度尋求准確性的行為是與創業團隊快速驗證設法的營業需求不匹配的。
另外一點對照深入的案例則是在本人擔負一個手藝團隊負責人的時辰,在一次述職呈報的時辰,leader問我對接下來團隊工作有什麼企圖?我其時說了一堆什麼改良代碼質量,每天晨會,使命透明化,豎立迭代機制等等,然後就被各類批判一通。
當時團隊基本以外包人員為主,人員程度較差,開辟出來的金融系統也是千瘡百孔而這條營業線最主要的業務價值則是按打算實現潛在投資方的需求,爭取拉到投資。
所以不久leader就召集測試架構的相幹人員與我這邊一同梳理對焦點功能的測試工作,將研發、測試、上線的流程自動化。
那時其實不理解如許做核心價值是什麼?但回過甚來看如許的工作方式恰恰相符了營業發展的需求,即確保系統是符合設計需求的,保證系統達到可接受的准確性,為後續能過快速進步打下根蒂根基,最重要的是為企業降低了構建成本。
所以程序員想要工作出事迹,必須認清楚系統背後的業務價值,按價值去梳理工作優先級,而不是像我一般過度糾結細節,追求手藝抱負化。

成也分工,敗也分工


正如在法式員的蒼茫那一章節提到的:法式員的蒼茫因為長期沉沒於軟件世界的浩大的分工體系中,無法看清從營業到軟件架構的價值鏈條,沒法清楚定位本身在分工系統的位置,處置不好本身與手藝、營業的關係而至,所以在這裡我想談談分工。
架構師為了使軟件系統更好的服務營業,必定將軟件系統生命週期進行拆分,好比分出開辟生命週期、測試生命週期、用戶接見生命週期、軟件運維生命週期。並憑據分歧的生命週期劃分出不同的職責與腳色,好比開發人員負責開發週期負責完成軟件研發,測試人員負責對開發人員交付的功效進行測試等,於是就構成了分工。
一旦分工構成,每個分工組織都會有本身的價值追求,架構師關注的頂層的價值即軟件系統可否支持業務增加被分工的情勢打碎到各個組織中。
分工是有其價值的,他使得複雜昂貴的義務可以被簡單、並行、可替代的流水線體例解決。
但久而久之,價值碎片化的問題就泛起了,好比測試人員只關注找出更多問題,開辟人員只關注快速開辟更多的系統,運維人員只關注保障系統穩定。
三者之間常常都只站在自己的立場去要求對方怎麼做,沒有人再關注整體價值,產生諸多矛盾增添軟件實行本錢。
而身處流水線中的一員,又因為困擾於重複性工作,迷茫於工作的意義,乃至感受自己做為了人的創意與靈感都被抹殺了。所以我的伴侶吐槽我說你寫了那麼多代碼然後並沒有怎麼樣長短常有道理的,那是因為我只關注著做為流水工人的價值要求,看不到生態鏈最頂端的價值。
我們細心想想那些團隊帶領,精英首腦哪一個不是為著更泛博的價值所負責,好比項目司理只需要關心本身項目標商業價值,而公司CEO則關心公司範圍內所有營業的總體貿易價值。


所以關注的價值越大且職位也就越高。這些高層帶領者們把控著整體的價值鏈條,實時糾正底層分工組織的價值方針與整體價值目的泛起誤差的問題

從價值出發-找尋學習與工作的新思緒蒼茫能引發思考,架構則塑造了視野,而價值則是我們之所以存活,之所以工作的邏輯出發點


基於如許一種價值思惟,對我們的學習和工作又可以有哪些改啟示呢?
 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

 

數位輸出時結果
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

JQuery圖表插件——Highcharts 網頁設計

因為項目中需要用到圖表生成,所有Google了下,找到了這個插件,順帶寫了個DEMO。點擊跳轉官網

先上三個圖,分別曲直線、柱狀、扇形。

 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()


2. DNS代管 -> 設定

網頁設計Hinet eyeSee申請DNS IP反解

3. 前去反解設定頁面

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

jQuery 輪播式告白插件 flexslider 利用指南

  1. <link rel="stylesheet" href="flexslider.css">
  2. <script src="jquery.min.js"></script>
  3. <script src="jquery.flexslider-min.js"></script>
文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

Python爬蟲進修之利用BeautifulSoup庫爬取開

Python爬蟲進修之利用BeautifulSoup庫爬取開

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()

網頁設計

1.先安裝NANO的驅動程式
找到Tools - > Boards manager
Arduino nano初始設定並引入Library 網頁設Arduino nano初始設定並引入Library 網頁設

2.左邊輸入nano
安裝 Arduino AVR Boards 1.8.X
Arduino nano初始設定並引入Library 網頁設Arduino nano初始設定並引入Library 網頁設


3. 找到正確型號
Tools -> Processor -> ATmega328P(Old Bootloader)
Arduino nano初始設定並引入Library 網頁設Arduino nano初始設定並引入Library 網頁設


4. 替換COM PORT
Tools -> Port -> COM 10(每台電腦顯示分歧)
這時候插上Arduino nano 已顯示連線
Arduino nano初始設定並引入Library 網頁設
Arduino nano初始設定並引入Library 網頁設

5.安裝LIB (liquid-crystal-i2-c.h)
載點
https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c


SKETCH -> ADD .ZIP Library...
把檔案上傳便可
Arduino nano初始設定並引入Library 網頁設
Arduino nano初始設定並引入Library 網頁設

果燒錄泛起毛病請看這篇
錯誤訊息:stk500_getsync() attempt 10 of 10: not in sync: resp


文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計

 

文章標籤

nerolindwwdh 發表在 痞客邦 留言(0) 人氣()