Ein wenig Ausbau
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_PATHhttps://en.m.wikibooks.org/wiki/Introducing_Julia/Modules_and_packages
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
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:
https://github.com/jongwook/MusicProcessing.jl/blob/master/REQUIRE7 lines (6 sloc) 52 Bytes
julia 0.4
DSP
SampledSignals
Plots PortAudio
PyPlot
Ä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:
https://groups.google.com/forum/#!topic/julia-users/ooyT55TI-jkI 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:
Sebastian Kraft
07.02.16
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 ofJULIA_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 UhrPutin 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
Kommentar veröffentlichen