!Mac OS X-10.15.7!ruby-2.7.1p83
Erinnern Sie sich für einen Moment an den letzten Bundler.
rake install:local
Dann wurde hogehoge automatisch installiert, oder? Der dort verwendete Befehlsrechen ist das heutige Thema.
Rechen ist eine rubinrote Version von Marke und Ameise. Es ist so konzipiert, dass es bequem für ein wenig Arbeit geeignet ist. Ein typisches Beispiel ist
task :default do
system 'rake -T'
exit
end
desc 'hello NAME'
task :hello do
name = ARGV[1]
puts "Hello #{name}!"
exit
end
ist. Legen Sie dies in ein Rakefile
> rake
Bitte. Die von Rakefile vorbereitete Aufgabe wird angezeigt. Es ist der Erklärung sehr ähnlich, wenn Sie mit Qiita oder meiner \ _Hilfe ohne Option treffen.
Schauen wir uns nun den Inhalt des Rakefiles an, das ich gerade geschrieben habe.
--desc gefolgt von Rechen -T -: Standard ist das Verhalten, wenn Rake ohne Argumente aufgerufen wird.
ist. Variablen, die mit ':' beginnen, sind Klassen, die als Symbole bezeichnet werden und die Namen ersetzen. Was ist jetzt falsch daran, aber ich werde es früher oder später viel benutzen.
Rake ist DSL (Domain Specific Language), dh die Idee, eine für den Ort einzigartige Sprache zu erstellen. Daher ist es keine echte Rubinsprache, aber es wurde erweitert, um die Verwendung einer kleinen Aufgabe zu vereinfachen. Die Syntax von Rake wird in Thor usw. verwendet, die später eingeführt wird.
system call
Die in Rakefile am häufigsten beschriebene Funktion ist System I. Dies ist die Funktion, die den Systembefehl aufruft. Der Grund ist, dass die von Hand zu erledigende Arbeit so beschrieben wird, wie sie ist. Ist es zum Beispiel nicht schwierig, sich an den Befehl zu erinnern, wenn Sie mit git geben (drücken) oder ziehen (ziehen)? Bis Sie sich daran gewöhnt haben, starten Sie das Web, suchen Sie, lesen Sie die Site mit verschiedenen Farben und wiederholen Sie den Vorgang bis zum Ende und geben Sie den Befehl ein. Ich fand es normal. Aber die erfahrenen Programmierer sind anders. Es ist nicht gut, sich zu erinnern, aber es ist eine gute Notiz von Dingen, die Sie vielleicht vergessen. Zum Beispiel in Rakefile
desc 'git pull'
task :pull do
p comm = "git pull origin main"
system comm
exit
end
Wenn Sie schreiben, wird dies allein die Verwendung erheblich vereinfachen.
Selbst wenn das Ziehen fehlschlägt, können Sie es mit Push gut machen
desc 'git push'
task :push do
p comm = "git add -A"
system comm
p comm = "git commit -m \'hoge\'"
system comm
p comm = "git pull origin main"
system comm
p comm = "git push origin main"
system comm
exit
end
Anstatt sich an die Arbeit zu erinnern, die Sie immer tun, lassen Sie Rakefile sich daran erinnern. Der Trick besteht darin, den Befehl zu kommunizieren.
Außerdem verstecke ich viele Kopien, weil meine Freunde mich verachten, wenn ich erwischt werde.
desc 'git push'
task :push2 do
["git add -A",
"git commit -m \'hoge\'",
"git pull origin main",
"git push origin main"].each do |comm|
p comm #puts comm.green after require 'colorize'
system comm
end
exit
end
Da Sie nicht wissen, wo Comm geschrieben ist, ist es außerdem einfacher zu erkennen, ob Sie Colorize verwenden, was in der Vorlesung durchgeführt wird. In der Zwischenzeit erinnere ich mich auch an die Feinheiten von Git.
command_line
Externe Befehle, die mit dem System verwendet werden können, sind langsam, daher werden sie normalerweise in den integrierten Funktionen von Ruby bereitgestellt, damit sie schneller ausgeführt werden können. Zum Beispiel kann das Aufrufen von ls mit einem Platzhalter durch Dir.glob ersetzt werden. Das Schöne daran ist, dass Sie Dinge wie "versuchen mit den ersten 5" tun können.
desc 'make list'
task :mk_list do
# system 'ls -1 ../members/*/README.org'
Dir.glob('../members/*/README.org')[0..4].each do |file|
p file
system "grep qiita_id #{file}"
end
exit
end
Ich versuche hier eine Organisationstabelle zu erstellen, aber die Frage ist, ob der Rückgabewert vom System nicht die Ausgabe ist, sondern ob der Befehl erfolgreich war.
Verwenden Sie übrigens zum Extrahieren der Standardausgabe (stdout) usw. den Edelstein mit dem Namen command \ _line. Wie gewöhnlich,
gem install command_line
Bitte. Dies funktioniert nur mit Ruby 2.4 und höher.
require 'command_line/global'
desc 'make list'
task :mk_list do
targets = "../members/*/README.org"
# system "ls -1 #{targets}"
Dir.glob(targets)[0..5].each do |file|
p file
res = command_line "grep qiita_id #{file}"
p res.stdout
end
exit
end
Dann können Sie es herausnehmen.
Nehmen Sie nun die Informationen von hier heraus
# input
"../members/daddygongon/README.org"
"#+qiita_id: daddygongon\n"
=> # output
| daddygongon | daddygongon|
Die Konvertierung wird wie folgt durchgeführt.
Zum Schluss noch einige Ergänzungen
require 'command_line/global'
desc 'make list'
task :mk_list do
targets = "../members/*/README.org"
i = 0
Dir.glob(targets).each do |file|
member = file.split('/')[2]
dd = {}
%i{qiita_id qiita_private}.each do |name|
res = command_line "grep #{name.to_s} #{file}"
res.stdout =~ /:\s*(.+)/ # regexp
dd[name] = $1.to_s
end
next if dd[:qiita_id] == ''
print " | [[https://qiita.com/#{dd[:qiita_id]}/private/#{dd[:qiita_private]}][#{member]}]]"
i += 1
puts "" if (i+1)%6==0
end
exit
end
Es wird gesagt. Auf diese Weise werden Informationen automatisch aus Dateien extrahiert.
Ich werde den Ort erklären, an dem ich Regexp geschrieben habe, und die allgemeinere Datenextraktionsmethode nächste Woche.
org to_html, to_platex
Ich habe den emacs org-mode in meiner \ _help eingeführt. In qiita \ _org wurde es über die Befehlszeile an qiita ausgegeben, aber allgemeiner wird ein Befehl zur Ausgabe an HTML oder Latex vorbereitet.
c-c c-e ho # export as [h]tml, [o]ut
c-c c-e ll # export [l]atex, [l]atex
Sie können mit in diese Formate konvertieren. Verstehst du, dass c-c einen Befehl zum Major-Modus bedeutet?
Es ist jedoch schwierig, die Ausgabe so zu sehen, wie sie ist. Daher empfehlen wir für HTML ein Format namens readtheorg. Schreiben Sie für Latex den Header neu, um das gewünschte Format zu erhalten.
html
Informationen zur Ausgabe in HTML finden Sie unter https://github.com/fniessen/org-html-themes. Ich empfehle readtheorg. Die folgende Datei theme-readtheorg.setup
# -*- mode: org; -*-
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/styles/lib/js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/styles/readtheorg/js/readtheorg.js"></script>
In ~ / .emacs.d / org-mode /.
#+SETUPFILE: ~/.emacs.d/org-mode/theme-readtheorg.setup
Bitte fügen Sie dem Header der Organisationsdatei hinzu, die Sie schreiben möchten. Danach exportiere ho und es ist fertig.
latex
Für Latex sollten nur diejenigen, die es verwenden müssen, die folgenden Schritte ausführen.
Mit lisp aus dem org-Modus können Sie ziemlich komplizierte Dinge tun. Es ist jedoch ein wenig mühsam, weil ich lisp lernen muss. Fügen Sie daher eine Anweisung zum Ersetzen des Headers zum zuvor eingeführten Rakefile hinzu. Zum Beispiel gibt es in docs / okamoto ein Beispiel, das die Latexdatei für die Zwischenprüfung verwendet.
Das Schöne an Rake ist, dass Sie diese sich wiederholenden Befehle auf einmal ausführen können. Versuchen Sie, die Kosten für das Speichern von Codierungen und Befehlen zu sparen, anstatt sich Gedanken über die dafür erforderliche Zeit zu machen. Speziell für Abschlussarbeiten verwenden viele Labors Latex. Probieren Sie es also aus. Da dies ursprünglich von Nishitani Lab gemacht wurde, lassen Sie mich bitte wissen, ob es einen besseren Weg gibt.