Petschbot
Sonntag, 8. Juni 2014
Abbruch Bunker Osterfeld
Samstag, 7. Juni 2014
Dienstag, 13. Mai 2014
How to export Evernote notes to plain text files via NvAlt
- Export your notes from Evernote to HTML files (File -> Export)
- Open the NvAlt Preferences and go to "Notes", "Storage". Select the Evernote Export Folder as Storage Folder and "Formatted HTML" as storage format. Close the NvAlt Preferences
- NvAlt will now import the Evernote HTML-Export files.
- Select all notes inside NvAlt and export them to plain text files via "File -> Export"
Mittwoch, 9. Oktober 2013
iOS7: Website für Präsentation offline verfügbar machen
<html manifest="cache.manifest">
CACHE MANIFEST # Version 201310916251 CACHE: /index.html /images/image1.png
#!/usr/bin/ruby -w
t = Time.new
timestamp = t.year, t.month, t.day, t.hour, t.min, t.sec
open('cache.manifest', 'w') do |fo|
fo.puts "CACHE MANIFEST"
fo.puts "# Version #{timestamp}"
fo.puts "CACHE:"
array = Dir["./**/*"].select{|f| !File.directory? f}
array.each do |i|
fo.puts "#{i}".gsub(/^\./, "")
end
end
https://developer.apple.com/library/safari/documentation/iphone/conceptual/safarijsdatabaseguide/OfflineApplicationCache/OfflineApplicationCache.html#//apple_ref/doc/uid/TP40007256-CH7-SW1
https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html#//apple_ref/doc/uid/TP40008193-SW1
Montag, 22. April 2013
RUBY: Geo-Locations Referenzpunkten zuordnen
Das folgende Script sieht vor im zu untersuchenden Gebiet ein oder mehrere Referenzpunkte zu setzen und darum einen Radius in Metern zu schlagen. Diese Referenzpunkte werden in der ersten CSV-Datei hinterlegt. Die Radien dürfen sich dabei überschneiden. In einer zweiten CSV-Datei findet sich die Geo-Locations.
Das Script kalkuliert anschließend die Distanz zwischen den Referenzpunkten und den Locations und vergleicht, ob die Location innerhalb der (pro Referenzpunkt individuell zu definierenden) Radien liegt. Dafür verwendet es eine Kalkulation nach Haversine wie in diesem Blogpost beschrieben: http://codingandweb.blogspot.de/2012/04/calculating-distance-between-two-points.html
Falls eine Location in den Radien mehrerer Referenzpunkte liegt wird der am nächsten liegende Referenzpunkt als Empfehlung bestimmt. Die Ergebnisse werden im Terminal und gleichzeitig als CSV-Datei ausgegeben. Anhand dieser Angaben lassen sich Locations gruppieren und z.B. eine Location-basierte Abarbeitung planen.
Datenfelder in der Locations-CSV
- id (ID der Location)
- lat (Location Latitude in der Form 59.1234)
- long (Location Longitude in der Form 6.1234)
- name (Name der Location)
Datenfelder in der Referenzen-CSV
- id (ID des Referenzpunkts)
- lat (Referenzpunkt Latitude)
- long (Referenzpunkt Longitude)
- radius (Gewünschter Radius um den Punkt im Meter)
Datenfelder in der Output-CSV
- id (Location ID)
- name (Name der Location)
- lat (Location Latitude)
- long (Location Longitude)
- ref matches (Anzahl der Referenzpunkte, in deren Radius die Location liegt)
- ref recommendation (Referenzpunkt am nächsten zur Location)
- ref shortest distance (Distanz in Metern zu diesem Referenzpunkt)
- ref %id% (Liegt Location im Radius des Referenzpunktes %id% (true/false))
- ref %id% distance (Distanz in Metern der Location zum Referenzpunkt %id%)
#!/usr/bin/ruby -w
require 'rubygems'
require 'fastercsv'
# Dateien über Kommandozeilenargumente definieren
reference_csv = ARGV[0] # CSV-datei mit den Referenzpunkten (id;lat;long;radius)
locations_csv = ARGV[1] # CSV-Datei mit den Locations () (id;lat;long)
output_csv = ARGV[2] # Gewünschter Name der Output-Datei
# Mathematische Funktionen um Distanz zwischen zwei Punkten definieren zu können
# http://codingandweb.blogspot.de/2012/04/calculating-distance-between-two-points.html
def power(num, pow)
num ** pow
end
def haversine(lat1, long1, lat2, long2)
dtor = Math::PI/180
r = 6378.14*1000
rlat1 = lat1 * dtor
rlong1 = long1 * dtor
rlat2 = lat2 * dtor
rlong2 = long2 * dtor
dlon = rlong1 - rlong2
dlat = rlat1 - rlat2
a = power(Math::sin(dlat/2), 2) + Math::cos(rlat1) * Math::cos(rlat2) * power(Math::sin(dlon/2), 2)
c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))
d = r * c
return d
end
# Referenzpunkte in Array einlesen
references = []
reference_line_counter = 0
FasterCSV.foreach(reference_csv, :quote_char => '"', :col_sep =>';', :row_sep =>:auto) do |row|
unless reference_line_counter == 0 then
references.push ("#{row[0]}|#{row[1]}|#{row[2]}|#{row[3]}")
end
reference_line_counter += 1
end
puts "#{(reference_line_counter - 1)} Referenzen eingelesen."
puts " "
# Locations einlesen und berechnen, ob sie innerhalb des definierten Radius der einzelnen Referenzpunkte liegen
location_line_counter = 0
reference_to_check = []
reference_result_string = ""
reference_match_counter = 0
reference_shortest_distance = 0
reference_nearest_to_location = ""
FasterCSV.foreach(locations_csv, :quote_char => '"', :col_sep =>';', :row_sep =>:auto) do |row|
unless location_line_counter == 0 then
location_id = "#{row[0]}"
location_lat = "#{row[1]}"
location_long = "#{row[2]}"
loctaion_name = "#{row[3]}"
puts " "
puts "==============================================================================================="
puts "Prüfe #{location_id} (#{location_name}, Lat #{location_lat}, Long #{location_long})"
puts " "
references.each do |ref|
ref_string = "#{ref}"
reference_to_check = ref_string.split("|")
reference_to_check_id = reference_to_check[0]
reference_to_check_lat = reference_to_check[1]
reference_to_check_long = reference_to_check[2]
reference_to_check_radius = reference_to_check[3]
puts "---------------------"
puts "Referenzpunkt #{reference_to_check_id}: Lat #{reference_to_check_lat}, Long #{reference_to_check_long}, Radius #{reference_to_check_radius} m"
distance = (haversine(location_lat.to_f,location_long.to_f,reference_to_check_lat.to_f,reference_to_check_long.to_f)).round
puts "Distanz zwischen Location und Referenzpunkt: #{distance} m"
if distance < reference_to_check_radius.to_f then
puts "#{location_id} (#{location_name}) in Radius von Referenzpunkt #{reference_to_check_id}: true"
puts " "
reference_result_string += "true;#{distance};"
if reference_match_counter == 0 then
reference_shortest_distance = distance
reference_nearest_to_location = "#{reference_to_check_id}"
else
if distance < reference_shortest_distance then
reference_shortest_distance = distance
reference_nearest_to_location = "#{reference_to_check_id}"
end
end
reference_match_counter += 1
else
puts "#{location_id} (#{location_name}) in Radius von Referenzpunkt #{reference_to_check_id}: false"
puts " "
reference_result_string += "false;#{distance};"
end
end
puts "Location liegt im Radius von #{reference_match_counter} Referenzpunkten"
unless reference_match_counter == 0 then
puts "Der am nächsten liegende Referenzpunkt ist #{reference_nearest_to_location} (#{reference_shortest_distance} m)"
end
reference_result_string = reference_result_string.chop
open(output_csv, 'a') do |f|
f.puts "#{location_id};#{location_name};#{location_lat};#{location_long};#{reference_match_counter};#{reference_nearest_to_location};#{reference_shortest_distance};#{reference_result_string}"
end
reference_result_string = ""
reference_match_counter = 0
reference_nearest_to_location = ""
reference_shortest_distance = 0
else
reference_id_header = ""
references.each do |ref|
ref_string = "#{ref}"
reference_to_check = ref_string.split("|")
reference_to_check_id = reference_to_check[0]
reference_id_header += "ref #{reference_to_check[0]};ref #{reference_to_check[0]} distance;"
end
reference_id_header = reference_id_header.chop
open(output_csv, 'w') do |f|
f.puts "id;name;lat;long;ref matches;ref recommendation;ref shortest distance;#{reference_id_header}"
end
end
location_line_counter += 1
end
puts " "
puts "==========================================="
puts "==========================================="
puts " "
puts "Operation abgeschlossen. #{(location_line_counter - 1)} Locations verarbeitet und Ergebnisse in #{output_csv} geschrieben."













