拾荒者的垃圾場。
這兒有點荒蕪,而我繼續在生命中拾荒。

目前日期文章:201702 (6)

瀏覽方式: 標題列表 簡短摘要

已經到大二下了,感覺自己有很多不足的地方。

在 Codeforces 這裡,再次提醒了我要前進。

三場下來,rating 呈現嚴格遞減,這當然也不是我想要的。

前兩次都只有解一題,第三次到了三題,因為題目比較簡單。

目前打算式降低參加頻率,開始採練功模式。

也碰了三次了,說真的,其實題目沒想像中的難,但有深度,只要可以越往後面解的話。

現在應該就是提升準確度和手速吧。

Codeforces 真的很好玩。

希望某一天可以登上顛峰!

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

恩,正式使用之後會有更多內容。

目前記錄折騰過程。不排除會有更多問題。

為了更好融入 Cygwin ,所以採用手動編譯。 source 包 from GitHub 。

先定義目錄,因為它放得很多,又有些重名,假設當前目錄為 clone 下來的資料夾。

/cygdrive/d/workSpace/github/racket(cloned dir)/racket/src -> 現在在這裡

mkdir build && cd build

../configure

make

make install

基本上 README (看 /cygdrive/d/workSpace/github/racket(cloned dir)/racket/src 下的 README)  寫得算詳細,

可是其中有段 make --unix ,我本機 GNU make 竟然沒有 --unix 此 flag。

可能是這個原因,導致編譯時有些宏定義沒辦法起作用,

所以我直接在 /cygdrive/d/workSpace/github/racket(cloned dir)/racket/src/racket/src 目錄的 .c 檔做 #define 的動作。

因為他寫的 Makefile 我看不太懂,不太敢動他 : P

首先是出現 fatal error libffi.xxxx 沒有安裝,找不到庫等等 ( 問題出在 forign 資料夾編譯時 )

    To run `racket/draw' and `racket/gui' programs, you will need
    Cairo, Pango, and GTk install.  These libraries are not
    distributed with Racket, and they are not needed for compilation,
    except for building documentation that uses `racket/draw'. More
    info about required libs is available at
    http://docs.racket-lang.org/draw/libs.html and
    http://docs.racket-lang.org/gui/libs.html.

    The content of the "foreign" subdirectory may require GNU `make'
    if no installed "libffi" is detected.  If the build fails with
    another variant of `make', please try using GNU `make'.

基本上把它說的 Cairo, Pango, and GTk 三個庫用 Cygwin 的套件管理 lib 找齊,即可排除。

再來就是硬上了。看哪不過改哪邊。非常想唱忐忑。折騰兩個檔案就過了。

$ pwd
[repo dir]/racket/src/racket/src

$ vim file.c
#  define DIRENT_NO_NAMLEN//I added it on line 5486

$ vim string.c
# define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-cygwin" //I added it on 55
# https://stuff.mit.edu/afs/athena/system/i386_deb50/os/usr/include/plt/sconfig.h
# i386-cygwin 從這裡看來的宏定義,基本上可以說是亂搞。

$ cd ../../../.. && pwd
[repo dir]

$ mkdir build && cd build && ../configure && make && make install

鼓搗完之後,build 資夾 racketcgc 和 racket3m 可以用,不過就是不知道怎麼離開。

都 ctrl-z + kill % 結束它 ( 好慘 )。基本上就先這樣了。

然後輸入介面不友善,所以加個 rlwrap 放在前面。

$ rlwrap racket3m.exe # 注意 racket3m 的路徑

完美。

Thu Feb 23 01:25:39 CST 2017 update

(exit) ; 就可以離開啦 冏rz

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

因為看到學長的文有感而發,
突然想以 CS 為主題寫一個給後輩的指南。

究竟 CS 在搞甚麼,和 CE 有甚麼不同 ?
文科學校都叫 CS , 工科叫 CE ?
如何入門 CS 等等,這些是我一年前非常想知道的。
時至今日,我還在完備我心中的答案。

我知道自己還有很多不足的地方,
要寫這樣的東西可能不夠有力。
但我覺得系上學長弟制,
學術傳承的東西似乎不夠多。

我沒認直屬

感覺有個這樣的東西,
入門好像就可以容易些,
彎路也可以少走一點。

我覺得概念的形成很重要,
對一個領域沒有一個概觀,
在學習上好像就會有點無所適從。

基本上內容可能就提及跟其他學校相比,
有哪方面可以自己加強。
其實比起學校課程,
我覺得自主學習研究的風氣更為重要。
而說實在的,
其實系上也有不少**神秘**的資源是被我們所忽略的。

我也正在摸索,這部分就慢慢紀錄吧。

這一年多來,也算是有不少際遇了。
一個全然的小白能由家人引路,
繼而受到同儕教授指教,
最後能自主透過網路,追求自己想要的東西。

最後,
希望系上學習風氣也能日益增長。
儘管離系核很遠的的我好像沒資格這樣說

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

今天玩 bonk.io , 俺和有位 ubuntu 1604 的網友 ( linuxer ) 有了交流。

真是各種 666 ,見證 OS 之爭 R。

成功度過了 2/14 呵呵,不過要開學了,要上發條了,買來的書也要看,該下決心潛心讀書了。

總而言之,言而總之,加油 Bar ,騷年。

也希望未來能和遇到更多有著相同興趣的網友啊。

題外話,有點想旁聽星期五的 Java 啊。

 

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

在 windows 下用 ide 應該沒這個問題,只要在上面 toolbar 點個幾下,就可以增加了,

之前在 minesweeper solver 用過就不贅述了。

此次是在 cygwin 下,我想在家目錄下新增一個 lib 資料夾專門放我的標頭檔,

但每次要加上 -I 去 link dir 感覺很麻煩,用 alias 感覺又不是正道。

之後查到 SO 的這篇,沒錯!我就是個搬運工。

在 BASH 下可以設環境變數,其實提問者提到的 LD_* 那個我也試過,

不過後來一查,發現是動態連結的環境變數。

怎麼說哩,有查到一個例子是 nano 需要用到 ncurses 的庫,.so 檔卻被移到其他地方去,

所以要執行 nano 時跑不起來,這是只要重新設定一下 LD_* 這個變數就好了。

讓 nano 重新找到 ncurses 的 .so ,就可以開始編文字囉。

跑題了。主要還是說 gcc/g++ 也有適用給 include 搜尋的環境變數,

就是 C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 啦 ,

前者是給 C 後者是 C++ , 然後還有一個就是 CPATH 是兩者共用的。

所以在 .bashrc 或 .profile 中加一句 CPATH="$HOME/lib:$CPATH" 就好囉。

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

因為裝了 UpNext extension ( from github) , 所以出現了這個提示。

實在很惱人,在看了低調一點的辦法後,發現我根本沒有 gpedit.msc 啊~

(因為我是 notebook windows 10 , 好像要 windows 專業版 才有這個功能)

但,深深被 geek 精神影響的我,內心其實也微微的排斥這種方法的,太 win 的方式不適合我 (被踢

既然插件是從很 geek 的 github 載下來的,解決方法也要很 geek 的從 stackoverflow 找啊 (其實是 google 找到的

不過試著用英文搜尋看看真的很重要,不要被中文思維所局限了,所謂視野開闊,就從英文搜尋開始~

so 上的 hacker 果然厲害,直接從 dll 下手,而且還是用 bat 檔改,恩,更新日期還很新(Jan 14, 2017),太棒了。(傳送門 戳我)

沒有摸過 bat , 只有摸過 linux 的 script , bat 也是看懂了一些,這位仁兄似乎是直接開檔改一些值,太狂啦~

講一下步驟

  1. Save the code below to DevWarningPatch.bat somewhere
    (on the Desktop, for example or in the folder with chrome.dll)
    將下列 code 存成 DevWarningPatch.bat (注意副檔名)。
    不會改副檔名自己找辦法(有些人可以直接用重新命名改),或用記事本存 .txt 再右鍵進內容改。
    儲存的位置不限,可以是桌面,或是 chrome 的系統夾。
    我才不會說 geeker 都是用 vim 呢 ( 謎 : geeker 才不用 windows )
    註:其實檔名沒那麼重要,但,尊重作者。
  2. Exit Chrome.
    Or let the script close it including its hidden background processes.
    關閉 chrome , (可以直接關閉他,或讓 script 關閉他) ,包含 chrome 在背景運作的程序都要關閉。
    ( 這,我就直接右上角按 x 而已)
     
  3. Rightclick the batch file and run it as administrator: it will find & patch all applicable chrome.dll
    Alternatively you can drag'n'drop chrome.dll onto the batch file
    右鍵點擊 bat 檔,並以系統管理員身分執行,他就會為 dll 上 patch ,
    或者你可以將 chrome.dll 拖曳到這個 bat 檔上。

完成提示圖

 


以下 bat 僅為參考,最新更新以 so 為主。( the bat file here )

<# :
@echo off
copy/b "%~f0" "%temp%\%~n0.ps1" >nul
powershell -Version 2 -ExecutionPolicy bypass -noprofile "%temp%\%~n0.ps1" "%cd% " "%~1"
del "%temp%\%~n0.ps1"
pause
exit /b
#>
param([string]$cwd='.', [string]$dll)

function main {
    "Chrome 'developer mode extensions' warning disabler v1.0.10.20170114`n"
    $pathsDone = @{}
    if ($dll -and (gi -literal $dll)) {
        doPatch "DRAG'n'DROPPED" ((gi -literal $dll).directoryName + '\')
        exit
    }
    doPatch CURRENT ((gi -literal $cwd).fullName + '\')
    ('HKLM', 'HKCU') | %{ $hive = $_
        ('', '\Wow6432Node') | %{
            $key = "${hive}:\SOFTWARE$_\Google\Update\Clients"
            gci -ea silentlycontinue $key -r | gp | ?{ $_.CommandLine } | %{
                $path = $_.CommandLine -replace '"(.+?\\\d+\.\d+\.\d+\.\d+\\).+', '$1'
                doPatch REGISTRY $path
            }
        }
    }
}

function doPatch([string]$pathLabel, [string]$path) {
    if ($pathsDone[$path.toLower()]) { return }

    $dll = $path + "chrome.dll"
    if (!(test-path -literal $dll)) {
        return
    }
    "======================="
    "$pathLabel PATH $((gi -literal $dll).DirectoryName)"

    "`tREADING Chrome.dll..."
    $bytes = [IO.File]::ReadAllBytes($dll)

    # process PE headers
    $BC = [BitConverter]
    $coff = $BC::ToUInt32($bytes,0x3C) + 4
    $is64 = $BC::ToUInt16($bytes,$coff) -eq 0x8664
    $opthdr = $coff+20
    $codesize = $BC::ToUInt32($bytes,$opthdr+4)
    $imagebase32 = $BC::ToUInt32($bytes,$opthdr+28)

    # patch the flag in data section
    $data = $BC::ToString($bytes,$codesize)
    $flag = "ExtensionDeveloperModeWarning"
    $stroffs = $data.IndexOf($BC::ToString($flag[1..99]))/3 - 1
    if ($stroffs -lt 0) {
        write-host -f red "`t$flag not found"
        return
    }
    $stroffs += $codesize
    if ($bytes[$stroffs] -eq 0) {
        write-host -f darkgreen "`tALREADY PATCHED"
        return
    }

    $exe = join-path (split-path $path) chrome.exe
    $EA = $ErrorActionPreference
    $ErrorActionPreference = 'silentlyContinue'
    while ((get-process chrome -module | ?{ $_.FileName -eq $exe })) {
        forEach ($timeout in 15..0) {
            write-host -n -b yellow -f black `
                "`rChrome is running and will be terminated in $timeout sec. "
            write-host -n -b yellow -f darkyellow "Press ENTER to do it now. "
            if ([console]::KeyAvailable) {
                $key = $Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyDown,NoEcho")
                if ($key.virtualKeyCode -eq 13) { break }
                if ($key.virtualKeyCode -eq 27) { write-host; exit }
            }
            sleep 1
        }
        write-host
        get-process chrome | ?{
            $_.MainWindowHandle.toInt64() -and ($_ | gps -file).FileName -eq $exe
        } | %{
            "`tTrying to exit gracefully..."
            if ($_.CloseMainWindow()) {
                sleep 1
            }
        }
        $killLabelShown = 0
        get-process chrome | ?{
            ($_ | gps -file | select -expand FileName) -eq $exe
        } | %{
            if (!$killLabelShown++) {
                "`tTerminating background chrome processes..."
            }
            stop-process $_ -force
        }
        sleep -milliseconds 200
    }
    $ErrorActionPreference = $EA

    $bytes[$stroffs] = 0
    "`tPATCHED $flag flag"

    # patch the channel restriction code for stable/beta
    $code = $BC::ToString($bytes,0,$codesize)
    $rxChannel = '83-F8-(?:03-7D|02-7F)'
    # old code: cmp eax,3; jge ...
    # new code: cmp eax,2; jg ...
    $chanpos = 0
    try {
        if ($is64) {
            $pos = 0
            $rx = [regex]"$rxChannel-.{1,100}-48-8D"
            do {
                $m = $rx.match($code,$pos)
                if (!$m.success) { break }
                $chanpos = $m.index/3 + 2
                $pos = $m.index + $m.length + 1
                $offs = $BC::ToUInt32($bytes,$pos/3+1)
                $diff = $pos/3+5+$offs - $stroffs
            } until ($diff -ge 0 -and $diff -le 4096 -and $diff % 256 -eq 0)
            if (!$m.success) {
                $rx = [regex]"84-C0.{18,48}($rxChannel)-.{30,60}84-C0"
                $m = $rx.matches($code)
                if ($m.count -ne 1) { throw }
                $chanpos = $m[0].groups[1].index/3 + 2
            }
        } else {
            $flagOffs = [uint32]$stroffs + [uint32]$imagebase32
            $flagOffsStr = $BC::ToString($BC::GetBytes($flagOffs))
            $variants = "(?<channel>$rxChannel-.{1,100})-68-(?<flag>`$1-.{6}`$2)",
                    "68-(?<flag>`$1-.{6}`$2).{300,500}E8.{12,32}(?<channel>$rxChannel)",
                    "E8.{12,32}(?<channel>$rxChannel).{300,500}68-(?<flag>`$1-.{6}`$2)"
            forEach ($variant in $variants) {
                $pattern = $flagOffsStr -replace '^(..)-.{6}(..)', $variant
                "`tLooking for $($pattern -replace '\?<.+?>', '')..."
                $minDiff = 65536
                foreach ($m in [regex]::matches($code, $pattern)) {
                    $maybeFlagOffs = $BC::toUInt32($bytes, $m.groups['flag'].index/3)
                    $diff = [Math]::abs($maybeFlagOffs - $flagOffs)
                    if ($diff % 256 -eq 0 -and $diff -lt $minDiff) {
                        $minDiff = $diff
                        $chanpos = $m.groups['channel'].index/3 + 2
                    }
                }
            }
            if (!$chanpos) { throw }
        }
    } catch {
        write-host -f red "`tUnable to find the channel code, try updating me"
        write-host -f red "`thttp://stackoverflow.com/a/30361260"
        return
    }
    $bytes[$chanpos] = 9
    "`tPATCHED Chrome release channel restriction"

    "`tWriting to a temporary dll..."
    [IO.File]::WriteAllBytes("$dll.new",$bytes)

    "`tBacking up the original dll..."
    move -literal $dll "$dll.bak" -force

    "`tRenaming the temporary dll as the original dll..."
    move -literal "$dll.new" $dll -force

    $pathsDone[$path.toLower()] = $true
    write-host -f green "`tDONE.`n"
    [GC]::Collect()
}

main

nobodyzxc 發表在 痞客邦 留言(1) 人氣()

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼