[RUBY] Diagrammtyp Rubin-Anhang-IV (Rechen)

!Mac OS X-10.15.7!ruby-2.7.1p83

rubinrote Version von make, ant

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.


Recommended Posts

Diagrammtyp Rubin-Anhang-IV (Rechen)
Diagrammtyp Ruby
Diagrammtyp Ruby-Anhang-III (Bündler)
Diagrammtyp Ruby-I (Puts)
Diagrammtyp Ruby-Anhang-V (Rubular)
Diagrammtyp Rubin-Anhang-VI (Thor, Rubocop)
Diagrammtyp Ruby-Anhang-I (Bash + Emacs)