最新SSD固態硬碟顆粒SLC/MLC/TLC/QLC有什麼區別?

參考網址:RENE.E

目錄

一、剖析SSD

二、什麼是NAND快閃記憶體

三、單級單元(Single Level Cell,簡稱SLC)

四、多級單元(Multi Level Cell,簡稱MLC)

五、三級單元(Triple Level Cell,簡稱TLC)

六、四級單元(Quad-level cells,簡稱QLC)

七、總結

八、四種快閃記憶體類型的固態硬碟價格

關於擦寫次數
​https://www.mobile01.com/topicdetail.php?f=490&t=4765000&p=1

 

發表於 硬體維修 | 發表迴響

php file_exists()檔案系統權限問題

用file_exists()查詢檔案是否存在時必需有該檔的執行權限才能正確查詢。
如要用網頁查詢mysql的檔案是否存在,至少必需開放–x的權限
例如mysql中有個資料庫d610026,必需把這個資料夾的執行權限打開
chmod 751 d610026
經試驗d610026資料夾內的檔案即使是640也可以正常查詢。

發表於 程式設計 | 發表迴響

php-產生qrcode

參考網址:
 http://phpqrcode.sourceforge.net/

XYZ的筆記本

  1. 到 http://phpqrcode.sourceforge.net/ 下載 PHP QR Code,例如 phpqrcode-2010100721_1.1.4.zip
  2. 解壓縮 phpqrcode-2010100721_1.1.4.zip,我解壓縮為 phpqrcode 資料夾
  3. 壓縮檔裡面的 phpqrcode/index.php 和 http://phpqrcode.sourceforge.net/examples/ 都有使用的範例。
  4. 簡單範例(test.php),例如想直接使用在 HTML 的 img 元素,

    <?php
    
    include "phpqrcode/qrlib.php"; // 引用 PHP QR code
    
    //$_REQUEST['level'] //L、M、Q、H,Error Correction Level,錯誤修正能力
    //$_REQUEST['size'] //1~10
    //$_REQUEST['data'] //要編成 QR code 的資料
    
    $errorCorrectionLevel = 'L';
    if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L', 'M', 'Q', 'H'))) {
        $errorCorrectionLevel = $_REQUEST['level'];
    }
    
    $matrixPointSize = 4;
    if (isset($_REQUEST['size'])) {
        $matrixPointSize = min(max((int) $_REQUEST['size'], 1), 10);
    }
    
    if (isset($_REQUEST['data'])) {
        if (trim($_REQUEST['data']) == '') {
            die('沒有資料');
        }
        QRcode::png($_REQUEST['data'], false, $errorCorrectionLevel, $matrixPointSize, 2);
    }

     

  5. 使用時,HTML 的部分

    <img src="test.php?level=L&size=4&data=abc"/>

     

發表於 程式設計 | 發表迴響

adodb參考手冊

參考網址:adodb

發表於 程式設計 | 發表迴響

UltraEdit V23功能調校

版面配置>工具列>主要(打勾)

版面配置>版面配置>多視窗

版面配置>主題>Slate

進階>設定>編輯器>換列/跳格設定 4

進階>設定>檔案處理>備份>不備份

進階>設定>應用程式配置>檔案標籤>操作>類型>多列

進階>配置>設定自動載入巨集>巨集檔案名稱 填入 E:\as\文書工具\ultraedit\fu.mac

alt-f

InsertMode
ColumnModeOff
HexOff
Key Ctrl+HOME
"<?"
Key Ctrl+END
"?>"
Key Ctrl+HOME
UltraEditReOn
Find RegExp "#function"
Replace All "function"
UltraEditReOn
Find "#}"
Replace All "}
"

alt-u

InsertMode
ColumnModeOff
HexOff
UltraEditReOn
Key Ctrl+HOME
Find RegExp "%function"
Replace All "#function"
UltraEditReOn
Find RegExp "%}"
Replace All "#}"
Key Ctrl+HOME
Key DEL
Key DEL
Key Ctrl+END
Key BACKSPACE
Key BACKSPACE
Key Ctrl+HOME

檢視-字型-設定顯示字型 consolas 13

胡萝卜周  http://www.carrotchou.blog/  

發表於 軟體使用 | 發表迴響

PHP big5轉utf8不要用iconv(),iconv這個函數,用mb_convert_encoding

參考網址:VECTOR COOL 威得數位行銷

不要以為big5轉utf8就用iconv()這麼簡單

iconv("big5", "UTF-8", $str);

big5有很多字是沒有收錄的:

綫、綉、滙、栢、峯、頴、邨、着、双

iconv這個函數他遇到轉不出來的字,就停住了,可能會造成輸出文件中斷,導致文件結構錯誤。

請改用 mb_convert_encoding ,別高興太早 big5 沒有的字依然不會出來,只是不會因為遇到 big5 不認識的字就卡住,雖然輸出的速度好像會比iconv慢,不過順利解決問題。

測試:

$string = "轉碼測試功蓋銹abc轉碼測試"; 
$result = mb_convert_encoding($string,"utf-8","big5");
echo $result;

用法:

mb_convert_encoding( $str, $encoding1,$encoding2 );
$str,要轉換編碼文字

$encoding1,目標編碼,如utf-8,big5,大小寫均可
$encoding2,原始編碼,如UTF-8,BIG5,大小寫均可
mb_convert_encoding($str, "UTF-8"); //編碼轉換為utf-8
mb_convert_encoding($str, "UTF-8", "BIG5"); //原始編碼為BIG5轉UTF-8
mb_convert_encoding($str, "UTF-8", "auto"); //原始編碼不明,通過auto自動檢測,轉換UTF-8

 

發表於 程式設計 | 發表迴響

用canvas播放scratch文件

參考網址:簡書

2019/02/06更新
https://github.com/ZKingQ/scratch-player
可以下載可播放sb3的程式


scratch 3.0 已於2019/1/2釋出
一直在找瀏覽器可以播放.sb3的方法
想不到朝敏已經找到了prolin

基于Github上的scratch-render实现sb2或者sb3文件可以用h5的canvas直接播放而不是flash

前言

关于scratch-render,scratch-gui,scratch-vm等组件的关系可以查看这篇教程Getting Started,然后发现与Scratch文件相关的播放部分是由scratch-render控制。

Scratch 3.0

安装

git clone https://github.com/LLK/scratch-render.git
cd scratch-render
npm install # 使用cnpm可能会安装失败

下载龟速的话可以科学上网然后使用Proxifier全局代理

使用

其实Scratch开发团队已经实现了这个功能,只是我们要找到接口来调用。打开目录下的/test/integration/index.html可以打开这个播放器Demo网页。此时上传sb文件会发现只能显示代码初始状态的效果,这时需要添加一行代码,添加vm.greenflag()给js执行,就可以实现播放的效果了。
这个网页的代码如下:

<body>
    <script src="../../node_modules/scratch-vm/dist/web/scratch-vm.js"></script>
    <script src="../../node_modules/scratch-storage/dist/web/scratch-storage.js"></script>
    <script src="../../node_modules/scratch-svg-renderer/dist/web/scratch-svg-renderer.js"></script>
    <!-- note: this uses the BUILT version of scratch-render!  make sure to npm run build -->
    <script src="../../dist/web/scratch-render.js"></script>

    <canvas id="test" width="480" height="360" style="width: 480px"></canvas>
    <input type="file" id="file" name="file">

    <script>
        // These variables are going to be available in the "window global" intentionally.
        // Allows you easy access to debug with `vm.greenFlag()` etc.
        window.devicePixelRatio = 1;
        var canvas = document.getElementById('test');
        var render = new ScratchRender(canvas);
        var vm = new VirtualMachine();
        var storage = new ScratchStorage();
        var mockMouse = data => vm.runtime.postIOData('mouse', {
            canvasWidth: canvas.width,
            canvasHeight: canvas.height,
            ...data,
        });
        vm.attachStorage(storage);
        vm.attachRenderer(render);
        vm.attachV2SVGAdapter(new ScratchSVGRenderer.SVGRenderer());
        vm.attachV2BitmapAdapter(new ScratchSVGRenderer.BitmapAdapter());
        document.getElementById('file').addEventListener('click', e => {
            document.body.removeChild(document.getElementById('loaded'));
        });
        document.getElementById('file').addEventListener('change', e => {
            const reader = new FileReader();
            const thisFileInput = e.target;
            reader.onload = () => {
                vm.start();
                vm.loadProject(reader.result)
                    .then(() => {
                        // we add a `#loaded` div to our document, the integration suite
                        // waits for that element to show up to assume the vm is ready
                        // to play!
                        const div = document.createElement('div');
                        div.id='loaded';
                        document.body.appendChild(div);
                        // ------------------------------ //
                        vm.greenflag(); // 这里添加这条语句
                        // ------------------------------ //
                    });
            };
            reader.readAsArrayBuffer(thisFileInput.files[0]);
        });
    </script>
</body>

现在打开之后随便扔一个sb文件进去就会自动播放了

 

scratch播放器

然后你就可以根据这个网页的逻辑进行改编,进一步定制实现自己的播放器界面了,比如像网易卡达这样子



作者:章开晴
链接:https://www.jianshu.com/p/1bbe539d5b87
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
發表於 程式設計, 軟體使用 | 發表迴響

php的strpos()函数的返回值false与0问题

參考網址:志文工作室

php中的strpos函数定义说明如下:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

返回 needle 在 haystack 中首次出现的数字位置,以整型返回位置信息。如果没找到 needle, strpos() 将返回布尔型的 FALSE 值。

存在问题:

如果$needle出现在$haystack头部,则返回值为0。在不严格的判断中,0 = false,这样就无法区分是否找到。

解决方法:

使用符号“===”而不是“==”进行判断。
判断符号 “==”会转换类型再进行比较,而更严格的符号“===”会先判断类型是否相同,然后才进行比较。

如下举例:

//判断字符串是否存在的函数
function strexists($haystack, $needle) {
    return !(strpos($haystack, $needle) === FALSE);//注意这里的"==="
}

 

 

發表於 程式設計 | 發表迴響

hosts的運用

參考網址: iT邦幫忙

C:\Windows\System32\drivers\etc\hosts
 linux 放在 /etc/hosts

簡而言之,就是要查詢一個主機名稱時,
如果這個檔案沒定義的話,
就會去查DNS。
例如,若該檔案的內容有:

1.2.3.4   ithelp.ithome.com.tw

那麼您要連ithelp.ithome.com.tw時,
不會去向 DNS 查真正的 IP 是什麼,
而馬上往 1.2.3.4 來送。

如果有一些常要連的目標,
若 DNS 常會有問題,或者很清楚其 IP ,
也可以手動去加上 IP 及其對應名稱;
或者若 DNS 還沒有設好,
而主機上有好幾個虛擬主機的話,
且是用 virtual name 來對應的話,
也可以利用 hosts 的功能,
這樣在這台電腦上 query 該名稱,
雖 DNS 還沒有該記錄,但您電腦就可 query 到正確的 IP 所在,
而虛擬主機也可以由被 query 的hostname來做出回應;
這是 hosts 可以的正向作法。

寫程式時常會用到localhost
懶得打那麼多字,就在hosts檔中加入

127.0.0.1 lo

修改完後記得重新啟動網路

那麼只要在網址列輸入lo就可以連到localhost了

 

ultraedit
licensing.ultraedit.com
licensing2.ultraedit.com

發表於 Linux系統, Windows系統, 軟體使用 | 發表迴響

[SQL]查詢及去除換行符號

參考網址:
MySQL 查询带有回车换行符的内容

MySQL 去除字段中的换行和回车符

MySQL查询带有回车换行符内容的方法:
select * from table where content like '%\r\n%';//或者 \n

108.11.16更新
新版的mysql換行符號只剩'\n'
所以下命令變成
SELECT * FROM `player` WHERE `player_name` like '%\n%'

php語法
str_replace(array("\r", "\n", "\r\n", "\n\r"), '', $str);

參考網址:標準之旅
參考網址:淺談mysql資料庫中的換行符與textarea中的換行符

 

解决方法:
UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ''), CHAR(13), '');
UPDATE player SET player_engname = REPLACE(REPLACE(player_engname, CHAR(10), ''), CHAR(13), '') where player_id = 8
char(10):  换行符
char(13):  回车符

MySQL的trim函数没办法去掉回车和换行,只能去掉多余的空格,可以用MySQL的replace函数。

 

 

========================================
以下查詢不適用在mysql

參考網址:逍遙齋

SQL 查詢 換行符號
where id like '%'+char(10)+'%'

CHAR 可用於將控制字符插入字符串中。下表顯示了一些常用的控制字符。
控制鍵 值
Tab: CHAR(9)
換行: CHAR(10)
ENTER: CHAR(13)

Ex:
SELECT * FROM TABLE_NAME
WHERE 1=1 AND COLUMN_NAME LIKE '%'+CHAR(13)+'%'

update base_mapping set basename = replace(basename,Char(10),'')
update base_mapping set basename = replace(basename,Char(13),'')

發表於 程式設計 | 發表迴響