Ein wenig Ausbau


Heute abend mal ganz gemütlich meine Julia-Installation ausbauen (falls das korrekt ausgedrückt ist), das habe ich mir grade vorgenommen.

Eins nach dem Anderen, alles in Ruhe.

Gestern bin ich mit Python vorläufig gescheitert, heute nachmittag habe ich ein bisschen weitergemacht mit dem Julia-Data-Science-Projekt, und soeben kam mir die Idee zu versuchen, mit Julia ein wenig das nachzustellen, was ich gestern mit der Schlange angestellt habe.

julia> using DataFrames

julia> waves = readtable("/home/heide/python-wave-analysis/train.csv")
┌ Warning: readtable is deprecated, use CSV.read from the CSV package instead
│   caller = top-level scope at REPL[19]:1
└ @ Core REPL[19]:1
5435×2 DataFrame
│ Row  │ ID     │ Class            │
│      │ Int64⍰ │ String⍰          │
├──────┼────────┼──────────────────┤
│ 1    │ 0      │ siren            │
│ 2    │ 1      │ street_music     │
│ 3    │ 2      │ drilling         │
│ 4    │ 3      │ siren            │
│ 5    │ 4      │ dog_bark         │
│ 6    │ 6      │ children_playing │
│ 7    │ 10     │ street_music     │

│ 5428 │ 8722   │ dog_bark         │
│ 5429 │ 8723   │ street_music     │
│ 5430 │ 8724   │ children_playing │
│ 5431 │ 8725   │ engine_idling    │
│ 5432 │ 8726   │ dog_bark         │
│ 5433 │ 8727   │ engine_idling    │
│ 5434 │ 8728   │ engine_idling    │
│ 5435 │ 8729   │ air_conditioner  │

Mit dem Einlesen gibt's schon mal keine Probleme. DataFrames-Paket und daraus das "readtable" .... was ist das noch gleich? Eine Methode, oder? Na, demnächst nochmal nachschlagen.

Der Dreh- und Angelpunkt bei dem gestrigen Python-Projekt war das librosa-Modul. Gibt's das auch für Julia, habe ich mich gefragt. Gefundene Informationen/Antworten, ein bisschen querbeet gemixed:

julia> LOAD_PATH
3-element Array{String,1}:
 "@"     
 "@v#.#" 
 "@stdlib"

(v1.2) pkg> status
    Status `~/.julia/environments/v1.2/Project.toml`
  [aaaa29a8] Clustering v0.13.3
  [a93c6f00] DataFrames v0.19.4
  [6f286f6a] MultivariateStats v0.7.0
  [b8a86587] NearestNeighbors v0.4.3
  [91a5bcdd] Plots v0.26.3
https://en.m.wikibooks.org/wiki/Introducing_Julia/Modules_and_packages


Diese Pakete sind installiert. Ein Librosa-Äquivalent ist das hier:

https://github.com/jongwook/MusicProcessing.jl


Und auf dieser Seite sind alle Pakete aufgeführt, die über die Pkg-Methode installiert werden können:

https://pkg.julialang.org/docs/


https://pkg.julialang.org/docs/search?q=music

Diese Suche führt dazu: https://pkg.julialang.org/docs/MusicManipulations/nde5P/0.9.0/autodocs/


Hat wohl mehr mit Noten zu tun, sicher auch nicht uninteressant - später mal.

Habe noch nach Sound, Audio, Analyze und Wave gesucht. So aber nicht so aus, als würde da etwas dem MusicProcessing oder gar librosa entsprechen. Also versuche ich das MusicProcessing zu installieren.
Geht nicht über Pkg, ich muss den Sourcecode in ein Verzeichnis legen, was über den oben zu sehenden Path gefunden wird ... so ähnlich ...  jetzt erstemol gugge, wo is ..…. ..... guggigugg ....

So, isch abe den Source-Code in ein speziell angelegtes opt-Verzeichnis kopiert, in etwas (oder auch ganz genau) so:

julia> push!(LOAD_PATH, "/opt/julia-pakete/")
4-element Array{String,1}:
 "@"                
 "@v#.#"            
 "@stdlib"          
 "/opt/julia-pakete/"

julia> LOAD_PATH
4-element Array{String,1}:
 "@"                
 "@v#.#"            
 "@stdlib"          
 "/opt/julia-pakete/"

Ne, so habe ich dann den Pfad hinzugefügt ... oder wie auch immer ... bin noch ein blutender Leiher, noch nicht mal mit wget habe ich es geschafft, umzugehen, musste File-für-File-Download mit Rechtsklick uso .... sch...!

Aber nu müsste using MusicProcessing funzen, mal gugge ...
julia> using MusicProcessing
ERROR: ArgumentError: Package MusicProcessing not found in current path:
- Run `import Pkg; Pkg.add("MusicProcessing")` to install the MusicProcessing package.

TJo.

Vielleischt Neuschtart nötlisch ...


julia> exit()
(base) heide@heide-desktop:~$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.2.0 (2019-08-20)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using MusicProcessing
ERROR: ArgumentError: Package MusicProcessing not found in current path:
- Run `import Pkg; Pkg.add("MusicProcessing")` to install the MusicProcessing package.

Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:876


Tjo. So alscho nisch.


To make it look in other places, add some more using push!:

julia> push!(LOAD_PATH, "/Users/me/myjuliaprojects")
3-element Array{String,1}:
 "@"      
 "@v#.#"  
 "@stdlib"                                                     
 "/Users/me/myjuliaprojects" 

     
And, since you don't want to do this every single time you run Julia, put this line into your startup file ~/.julia/config/startup.jl, which runs each time you start an interactive Julia session.

Julia looks for files in those directories in the form of a package with the structure:
ModuleName/src/file.jl


Or, if not in Package form (see below), it will look for a filename that matches the name of your module:

julia> using MyModule


and this would look in the LOAD_PATH for a file called MyModule.jl and load the module contained in that file.

https://en.m.wikibooks.org/wiki/Introducing_Julia/Modules_and_packages


Mal widder nisch ganz rischtisch geleese, wupp?

So, das startup.jl ist in mittlerweile woanders als wo angegeben d'do'd'daoben, und zwar hier: /opt/julia-1.2.0/etc/julia

Umständlich - weil ich doof bin - von da nach dort kopiert, Zeile wie angeleitet eingetragen (im Geany-Editor, nicht in vi - zu blöd dafür, ich), dann von dort nach da hin zurück kopiert, mit sudo, logo. Und?


julia> using MusicProcessing
[ Info: Precompiling MusicProcessing [top-level]
ERROR: LoadError: syntax: "<" is not a unary operator
Stacktrace:
 [1] top-level scope at /opt/julia-pakete/MusicProcessing/src/MusicProcessing.jl:7
 [2] include at ./boot.jl:328 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1094
 [4] include(::Module, ::String) at ./Base.jl:31
 [5] top-level scope at none:2
 [6] eval at ./boot.jl:330 [inlined]
 [7] eval(::Expr) at ./client.jl:432
 [8] top-level scope at ./none:3
in expression starting at /opt/julia-pakete/MusicProcessing/src/MusicProcessing.jl:7
ERROR: Failed to precompile MusicProcessing [top-level] to /home/heide/.julia/compiled/v1.2/MusicProcessing.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] compilecache(::Base.PkgId, ::String) at ./loading.jl:1253
 [3] _require(::Base.PkgId) at ./loading.jl:1013
 [4] require(::Base.PkgId) at ./loading.jl:911
 [5] require(::Module, ::Symbol) at ./loading.jl:906

Schon besser. Mal gugge (habe Idee) ...

Ne, das war nix. Habe noch alle anderen Files, die nicht im src-Verzeichnis waren, reinkopiert, hat nix gebracht.





Hier muss ich noch nach gugge:

ERROR: LoadError: syntax: "<" is not a unary operator

Aber vor allem gibt es noch die Requirements:

7 lines (6 sloc) 52 Bytes
julia 0.4
DSP
SampledSignals
Plots
PyPlot
PortAudio
 https://github.com/jongwook/MusicProcessing.jl/blob/master/REQUIRE


 Äh ... julia 0.4 ??? Geht das vielleischd nisch mit dem 1.20 ?

Plots habe ich schon installiert, ... wie war das nochmal?

(v1.2) pkg> status
    Status `~/.julia/environments/v1.2/Project.toml`
  [aaaa29a8] Clustering v0.13.3
  [a93c6f00] DataFrames v0.19.4
  [6f286f6a] MultivariateStats v0.7.0
  [b8a86587] NearestNeighbors v0.4.3
  [91a5bcdd] Plots v0.26.3

Also, eins nach dem annern nu ...

using Pkg
Pkg.add("DSP")
Pkg.add("SampledSignals")
Pkg.add("PyPlot")
Pkg.add("PortAudio")

 Kann fim einfach so als Block in den REPL schmeissen. Der arbeitet das dann nacheinander ab, mit Mordsgeduldigkeit(en) oso ... {jedenfalls ohne zu fluchen, wie ich gestern und auch sonst so öfters} ...

Aha, da:

julia> Pkg.add("PortAudio")
 Resolving package versions...
ERROR: Unsatisfiable requirements detected for package PortAudio [80ea8bcb]:
 PortAudio [80ea8bcb] log:
 ├─possible versions are: [0.2.1, 0.3.0, 0.4.0, 0.5.0, 1.0.0] or uninstalled
 ├─restricted to versions * by an explicit requirement, leaving only versions [0.2.1, 0.3.0, 0.4.0, 0.5.0, 1.0.0]
 └─restricted by julia compatibility requirements to versions: uninstalled — no versions left
Stacktrace:

Das PortAudio verlangt auch nach iwas ... nur was?

Unsatisfiable requirements detected - heisst das, es ist unmöglich, das Verlangen zu stillen .. osowas ..?

Aha, da tut sich eine neue Geschicht' auf:

http://julia-programming-language.2336112.n4.nabble.com/Realtime-Audio-Processing-with-PortAudio-jl-td36335.html

Und https://groups.google.com/forum/#!topic/julia-users/ooyT55TI-jk

Na, dann ... aber ganz langsam und gemütlich heut' ...


Wieder Aha-Effekt, so geht das also:


Am Sonntag, 7. Februar 2016 16:51:35 UTC+1 schrieb CrocoDuck O'Ducks:

I am starting looking into your module and... ehm... what is the proper way to install it?

It's not a registered package, yet. Therefore, it requires the following steps:


Pkg.build("PortAudio")
Sebastian Kraft

07.02.16


https://groups.google.com/forum/#!topic/julia-users/ooyT55TI-jk


Dann könnte ich das mit dem MusicProcessing auch noch mal so versuchen (auch, noch, mal - meine meistverwendeten Füllsel, ich weiß, ich kenn sie).

Fehler!

┌ Error: Error building `PortAudio`:
│ ERROR: LoadError: UndefVarError: JULIA_HOME not defined
│ Stacktrace:
│  [1] top-level scope at /home/heide/.julia/dev/PortAudio/deps/build.jl:6
│  [2] include at ./boot.jl:328 [inlined]
│  [3] include_relative(::Module, ::String) at ./loading.jl:1094
│  [4] include(::Module, ::String) at ./Base.jl:31
│  [5] include(::String) at ./client.jl:431
│  [6] top-level scope at none:5
│ in expression starting at /home/heide/.julia/dev/PortAudio/deps/build.jl:6
└ @ Pkg.Operations /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/backwards_compatible_isolation.jl:647

Googlen! "JULIA_HOME define" - so müsste sich was finden.

I had this too on xubunntu 18.04 (bionic beaver). I fixed it by typing "export JULIA_HOME="{path to the directory where julia binary is}".

https://github.com/JuliaLang/IJulia.jl/issues/658


Na, fein. Suchen wir also die Binaries ...

export JULIA_HOME="/opt/julia-1.2.0/bin"
Hätte da noch ein Slash / hintergehört. Hoffe nicht. Und, klappert's jetzt?

NEIN.

Mist.

Nix gefunden, was funzt. JULIA_HOME kann nicht gesetzt werden, JULIA bleibt heimatlos.

Dafür jedoch:

julia> using Pkg

julia> Pkg.clone("https://github.com/jongwook/MusicProcessing.jl")
┌ Warning: Pkg.clone is only kept for legacy CI script reasons, please use `add`
└ @ Pkg.API /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:406
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
   Cloning git-repo `https://github.com/jongwook/MusicProcessing.jl`
  Updating git-repo `https://github.com/jongwook/MusicProcessing.jl`
[ Info: Assigning UUID 1b8316d5-81d4-5f6f-a99f-6dc343b691d6 to MusicProcessing
 Resolving package versions...
  Updating `~/.julia/environments/v1.2/Project.toml`
  [1b8316d5] + MusicProcessing v0.0.0 [`~/.julia/dev/MusicProcessing`]
  Updating `~/.julia/environments/v1.2/Manifest.toml`
  [1b8316d5] + MusicProcessing v0.0.0 [`~/.julia/dev/MusicProcessing`]

julia> JULIA_HOME
ERROR: UndefVarError: JULIA_HOME not defined

Und jetzt:


julia> Pkg.add("MusicProcessing")
ERROR: Package MusicProcessing [1b8316d5-81d4-5f6f-a99f-6dc343b691d6] not found in a registry.
Stacktrace:
 [1] pkgerror(::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Types.jl:112
 [2] check_registered(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Operations.jl:924
 [3] #add#100(::Bool, ::typeof(Pkg.Operations.add), ::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}, ::Array{Base.UUID,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Operations.jl:961
 [4] #add at ./none:0 [inlined]
 [5] #add#25(::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(Pkg.API.add), ::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:99
 [6] add at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:69 [inlined]
 [7] #add#24 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:67 [inlined]
 [8] add at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:67 [inlined]
 [9] #add#21 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:65 [inlined]
 [10] add at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:65 [inlined]
 [11] #add#20(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(Pkg.API.add), ::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:64
 [12] add(::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:64
 [13] top-level scope at REPL[12]:1

julia> Pkg.build("MusicProcessing")
  Building SpecialFunctions → `~/.julia/packages/SpecialFunctions/ne2iw/deps/build.log`
  Building Conda ───────────→ `~/.julia/packages/Conda/kLXeC/deps/build.log`
  Building FFTW ────────────→ `~/.julia/packages/FFTW/2okGQ/deps/build.log`
  Building GR ──────────────→ `~/.julia/packages/GR/ZI5OE/deps/build.log`
  Building FFMPEG ──────────→ `~/.julia/packages/FFMPEG/9JQpZ/deps/build.log`
  Building Plots ───────────→ `~/.julia/packages/Plots/h3o4c/deps/build.log`
  Building PyCall ──────────→ `~/.julia/packages/PyCall/ttONZ/deps/build.log`
  Building LibCURL ─────────→ `~/.julia/packages/LibCURL/lWJxD/deps/build.log`
  Building WinRPM ──────────→ `~/.julia/packages/WinRPM/Y9QdZ/deps/build.log`
  Building Homebrew ────────→ `~/.julia/packages/Homebrew/s09IX/deps/build.log`
  Building PortAudio ───────→ `~/.julia/dev/PortAudio/deps/build.log`
 Resolving package versions...
┌ Error: Error building `PortAudio`:
│ ERROR: LoadError: UndefVarError: JULIA_HOME not defined
│ Stacktrace:
│  [1] top-level scope at /home/heide/.julia/dev/PortAudio/deps/build.jl:6
│  [2] include at ./boot.jl:328 [inlined]
│  [3] include_relative(::Module, ::String) at ./loading.jl:1094
│  [4] include(::Module, ::String) at ./Base.jl:31
│  [5] include(::String) at ./client.jl:431
│  [6] top-level scope at none:5
│ in expression starting at /home/heide/.julia/dev/PortAudio/deps/build.jl:6
└ @ Pkg.Operations /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/backwards_compatible_isolation.jl:647
false

 Es macht sich. Und das hier habe ich einfach probiert, und ... geht:

julia> JULIA_HOME = "/opt/julia-1.2.0/bin"
"/opt/julia-1.2.0/bin"
 julia> JULIA_HOME
"/opt/julia-1.2.0/bin"


Dann setze ich das doch einfach in das startup.jl-File. Erstmal aber testen, ob's was bringt ...

Nö. Von JULIA-BINDIR habe ich auch noch was gelesen:

julia> JULIA_BINDIR = "/opt/julia-1.2.0/bin"
"/opt/julia-1.2.0/bin"

julia> JULIA_BINDIR
"/opt/julia-1.2.0/bin"

  Building PortAudio → `~/.julia/dev/PortAudio/deps/build.log`
┌ Error: Error building `PortAudio`:
│ ERROR: LoadError: UndefVarError: JULIA_HOME not defined


Tjo. Und nu? (Ich stelle auch immer dieselben dummen Fragen, ich weiß.)

(base) heide@heide-desktop:/opt/julia-1.2.0/bin$ echo $JULIA_HOME
/opt/julia-1.2.0/bin

Eigentlich isses doch definiert ...

julia> JULIA_BINDIR
"/opt/julia-1.2.0/bin"

julia> JULIA_HOME
"/opt/julia-1.2.0/bin"

Und auch im REPL steht's noch rischtisch ... mönnä, öh, männo!


It is still not working with non-"built from source" Julia installations. That error could be simply corrected by puttingSys.BINDIR in the place of JULIA_HOME in the deps/build.jl file, but nevertheless everything else is still not prepared to compile the LLVM/Clang 6.0.0 needed by normal downloaded Julia installations.

 https://github.com/JuliaInterop/Cxx.jl/issues/398


Also besser nicht aus den Paketquellen installieren, Mist.

Finden wir also mal das build.jl file ....

find -iname 'build.jl'

./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/UnregisteredWithoutProject/deps/build.jl
./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/BuildProjectFixedDeps/deps/build.jl
./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/BasicSandbox/deps/build.jl
./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/BigProject/deps/build.jl
./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/BigProject/SubModule/deps/build.jl
./opt/julia-1.2.0/share/julia/stdlib/v1.2/Pkg/test/test_packages/BigProject/SubModule2/deps/build.jl


Super, gibt's nicht nur einmal!


Ich würd dann mal sagen, ich deinstalliere das wieder und installiere es manuell und nicht über apt install.

...

Ach, Quark! Ich hab's ja gar nicht über apt installiert. Kac...!
Kann denn nicht mal iwas funzen, oder wie oder was???


Zum Mäusemelken.


Soeben in Leserkommentaren gelesen, die beobachten die Flugbewegungen über dem Iran, und zwar über diese Seite:

https://www.flightradar24.com/29.29,44.85/5

Je weniger Flugzeuge über dem Iran in der Luft, desto wahrscheinlicher der Vergeltungsschlag ... so die Logik eines der Kommentatoren, nicht meine Logik.


Irgendwie makaber, das so zu beobachten, oder?


............................... Ich muss jetzt mal Pause machen, sonst dreh ich durch ;-) ... zur Zeit gelingt aber auch nix mi'm Programmieren bis zu einem gewünschten Ende .... oso .... Pause.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Keine Ahnung, ob das so stimmt, aber es liest sich interessant:

juba39 heute, 21:26 Uhr
9. Schallende Ohrfeige
Putin verpaßt gerade den Falken in den USA eine schallende Ohrfeige. Vom Treffem mit Erdogan und Rohani bietet Putin Saudiarabien S-300 oder S-400 zum Schutz seiner Infrastruktur an. Vieleicht sollten wir hier einmal Klartext reden (als Millitär mit 24 Dienstjahren sage ich das nicht so hin). Die Patriot (die ja die BuWe auch hat), sind zur die Abwehr moderner Angriffsmittel totaler Schrott. Waren sie eigentlich schon immer. So berichtet National Interest 2018 erstmals öffentlich, daß im Kuweit-Krieg durch die Patriot keine einzige Scudrakete des Irak getroffen wurde. Beim letzten Angriff auf den Flughafen in Riad, ebenfalls mit Uralt-Scuds gab es Amateurvideos. Die zeigen den Start von 6(!) Patriot-Raketen. die alle ergebnislos explodieren, um zum Schluß, zum Glück außerhalb des Flughafen, die Explosion der Scud zu hören. Hat Deutschland so viel Angst vor Sanktionen, daß man nicht einmal sein eigenes System fertigbaut? Am Ingenieurswissen liegt es nichr! Und zu Russland (wird zwar in hiesigen Medien gern unterschlagen, wie meine bisherigen Beiträge von heute auch), die haben ja in Syrien reichlich zu tun mit der Abwehr solcher Drohnen aus dem Bereich Idlib auf ihre Stützpunkte. Ist im Moment nur etwas unökonomisch, eine 10T$-Rakete gegen eine 500$-Drohne. Zumindest gelingt aber, was ja offensichtlich in SA nicht passierte, die Aufklärung des Anfluges. Bei der US-Präsenz im Persischen Golf eine weitere Merkwürdigkeit. Stattdessen ergeht sich die Welt in Spekulationen, um möglichst einen Krieg schnellsten herbeizuschreiben.

Saudi-Arabien nach dem Angriff: Stresstest für Mohammed bin Salman - SPIEGEL ONLINE


Aha, da:

Putin rät Saudi-Arabien nach Drohnenangriff zum Kauf von S-400-Raketenabwehrsystemen | Telepolis

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~







Kommentare

Beliebte Posts aus diesem Blog

·

Es brennt.

Bye, bye Nord Stream 2!