diff options
Diffstat (limited to 'util/bin')
-rwxr-xr-x | util/bin/make-realwallpaper | 180 | ||||
-rwxr-xr-x | util/bin/mobile.vvs.de | 167 | ||||
-rwxr-xr-x | util/bin/vvs.de | 61 |
3 files changed, 370 insertions, 38 deletions
diff --git a/util/bin/make-realwallpaper b/util/bin/make-realwallpaper index a195b5f1..837bd378 100755 --- a/util/bin/make-realwallpaper +++ b/util/bin/make-realwallpaper @@ -16,7 +16,7 @@ main() { fetch clouds-raw.jpg \ http://user.chol.com/~winxplanet/cloud_data/clouds_2048.jpg & fetch krebs.sat.tle \ - http://www.celestrak.com/NORAD/elements/stations.txt + http://www.celestrak.com/NORAD/elements/stations.txt & wait #check_type nightmap-old-raw.jpg image @@ -24,7 +24,8 @@ main() { check_type daymap-raw.png image check_type clouds-raw.jpg image - in_size=1466x1200 + in_size=2048x1024 + xplanet_out_size=1466x1200 out_geometry=1366x768+100+160 nightsnow_color='#0c1a49' # nightmap @@ -39,24 +40,26 @@ main() { ; do normal=${raw%-raw.*}.png - needs_rebuild $normal $raw || continue - echo "make $normal; normalize $raw" >&2 - convert $raw -scale $in_size $normal + if needs_rebuild $normal $raw; then + echo "make $normal; normalize $raw" >&2 + convert $raw -scale $in_size $normal + fi done # create nightmap-fullsnow - needs_rebuild nightmap-fullsnow.png \ - && convert -size $in_size xc:$nightsnow_color nightmap-fullsnow.png + if needs_rebuild nightmap-fullsnow.png; then + convert -size $in_size xc:$nightsnow_color nightmap-fullsnow.png + fi # extract daymap-snowmask from daymap-final - needs_rebuild daymap-snowmask.png \ - daymap.png \ - && convert daymap.png -threshold 95% daymap-snowmask.png + if needs_rebuild daymap-snowmask.png daymap.png; then + convert daymap.png -threshold 95% daymap-snowmask.png + fi # extract nightmap-lightmask from nightmap - needs_rebuild nightmap-lightmask.png \ - nightmap.png \ - && convert nightmap.png -threshold 25% nightmap-lightmask.png + if needs_rebuild nightmap-lightmask.png nightmap.png; then + convert nightmap.png -threshold 25% nightmap-lightmask.png + fi # create layers make_layer nightmap-snowlayer.png nightmap-fullsnow.png daymap-snowmask.png @@ -83,58 +86,160 @@ main() { ln $normal $final done + make_gcloud_cloudmask + + map=daymap-final.png + night_map=nightmap-final.png + cloud_map=clouds-final.png + gcloud_map=gcloud-cloudmask.png + satellite_file=krebs.sat + # create xplanet output - cat >xplanet.config <<EOF + cat >xplanet.config <<EOF [earth] "Earth" -map=daymap-final.png -night_map=nightmap-final.png -cloud_map=clouds-final.png +map=$map +night_map=$night_map +cloud_map=$cloud_map cloud_threshold=10 shade=15 EOF # create xplanet output satellite version - cat >xplanet-sat.config <<EOF + cat >xplanet-sat.config <<EOF +[earth] +"Earth" +map=$map +night_map=$night_map +cloud_map=$cloud_map +cloud_threshold=10 +satellite_file=$satellite_file +shade=15 +EOF + + # create xplanet output gcloud version + cat >xplanet-gcloud.config <<EOF [earth] "Earth" -map=daymap-final.png -night_map=nightmap-final.png -cloud_map=clouds-final.png -satellite_file=krebs.sat +map=$map +night_map=$night_map +cloud_map=$gcloud_map cloud_threshold=10 shade=15 EOF - needs_rebuild krebs.sat \ - && cat >krebs.sat <<EOF + # create xplanet output gcloud-satellite version + cat >xplanet-gcloud-sat.config <<EOF +[earth] +"Earth" +map=$map +night_map=$night_map +cloud_map=$gcloud_map +cloud_threshold=10 +satellite_file=$satellite_file +shade=15 +EOF + + cat >krebs.sat <<EOF 25544 "ISS" Image=none trail={orbit,-2,2,1} color=grey thickness=1 fontsize=10 37820 "T1" Image=none trail={orbit,-2,2,1} color=grey thickness=1 fontsize=10 -39175 "ATV-4" Image=none trail={orbit,-2,2,1} color=grey thickness=1 fontsize=10 39258 "CYG" Image=none trail={orbit,-2,2,1} color=grey thickness=1 fontsize=10 EOF - needs_rebuild krebs.mar \ - && cat >krebs.mar <<EOF + cat >krebs.mar <<EOF EOF # rebuild every time to update shadow - xplanet --num_times 1 --geometry $in_size \ - --output xplanet-output.png --projection merc -config xplanet.config + xplanet --num_times 1 --geometry $xplanet_out_size \ + --output xplanet-output.png --projection merc \ + -config xplanet.config # rebuild everytime satellite version - xplanet --num_times 1 --geometry $in_size \ - --output xplanet-sat-output.png --projection merc -config xplanet-sat.config + xplanet --num_times 1 --geometry $xplanet_out_size \ + --output xplanet-sat-output.png --projection merc \ + -config xplanet-sat.config + + # rebuild every time to update shadow gcloud + xplanet --num_times 1 --geometry $xplanet_out_size \ + --output xplanet-gcloud-output.png --projection merc \ + -config xplanet-gcloud.config + + # rebuild everytime satellite gcloud version + xplanet --num_times 1 --geometry $xplanet_out_size \ + --output xplanet-gcloud-sat-output.png --projection merc \ + -config xplanet-gcloud-sat.config + + # trim xplanet output + if needs_rebuild realwallpaper.png xplanet-output.png; then + convert xplanet-output.png -crop $out_geometry \ + realwallpaper.png + fi + + # trim xplanet-sat output + if needs_rebuild realwallpaper-sat.png xplanet-sat-output.png; then + convert xplanet-sat-output.png -crop $out_geometry \ + realwallpaper-sat.png + fi # trim xplanet output - needs_rebuild realwallpaper.png \ - xplanet-output.png \ - && convert xplanet-output.png -crop $out_geometry realwallpaper.png + if needs_rebuild realwallpaper-gcloud.png xplanet-gcloud-output.png; then + convert xplanet-gcloud-output.png -crop $out_geometry \ + realwallpaper-gcloud.png + fi # trim xplanet-sat output - needs_rebuild realwallpaper-sat.png \ - xplanet-sat-output.png \ - && convert xplanet-sat-output.png -crop $out_geometry realwallpaper-sat.png + if needs_rebuild realwallpaper-gcloud-sat.png xplanet-gcloud-sat-output.png; then + convert xplanet-gcloud-sat-output.png -crop $out_geometry \ + realwallpaper-gcloud-sat.png + fi +} + +# generate clouds from google maps +make_gcloud_cloudmask() { + echo 'fetch gcloud-*.png tiles' >&2 + for y in $(seq -w 0 15); do + for x in $(seq -w 0 15); do + echo "curl -sS -o gcloud-$y-$x.png -z gcloud-$y-$x.png \\\"https://mts0.google.com/vt/lyrs=h@239000000,weather_nolabels,weather_0cloud&hl=en&src=app&x=$x&y=$y&z=4&s=Galil\\\"" + done + done | xargs --max-args=1 -P 10 -I @ sh -c @ + gcloud_tiles=$(find -name 'gcloud-[0-9][0-9]-[0-9][0-9].png'|sort) + if needs_rebuild gcloud-raw.png $gcloud_tiles; then + echo 'make gcloud-raw.png' && + montage -mode Concatenate -background None \ + $gcloud_tiles -tile x16 gcloud-raw.png + fi + + check_type gcloud-raw.png image + + gcloud_in_size=2048x2048 + gcloud_out_size=2048x1024 + gcloud_out_geometry=2048x1024+0+512 + gcloud_base_color='#ffffff' + + if needs_rebuild gcloud-normal.png gcloud-raw.png; then + echo "make gcloud-normal.png; normalize gcloud-raw.png" >&2 + convert -flatten gcloud-raw.png \ + -scale $gcloud_in_size gcloud-normal.png + fi + + if needs_rebuild gcloud-distmap.png; then + convert -size 2048x2048 gradient: -rotate 180 \ + -fx "p{i, (asinh(tan((j/h+0.5)*pi))/2.6+0.5) * h }" \ + gcloud-distmap.png + fi + + if needs_rebuild gcloud-cloudmask.png gcloud-normal.png; then + echo 'make gcloud-cloudmask.png' && + convert gcloud-normal.png gcloud-distmap.png \ + -fx 'p{i,v*h}' \ + -crop $gcloud_out_geometry \ + gcloud-cloudmask.png + fi + + if needs_rebuild gcloud-fullcloud.png; then + echo 'make gcloud-fullcloud.png' && + convert -size $gcloud_out_size xc:$gcloud_base_color gcloud-fullcloud.png + fi } # usage: getimg FILENAME URL @@ -195,5 +300,4 @@ needs_rebuild() { return $result } - main "$@" diff --git a/util/bin/mobile.vvs.de b/util/bin/mobile.vvs.de new file mode 100755 index 00000000..fdc4cca2 --- /dev/null +++ b/util/bin/mobile.vvs.de @@ -0,0 +1,167 @@ +#! /bin/sh +# +# NAME +# mobile.vvs.de - web scraper for VVS departure information +# +# SYNOPSIS +# mobile.vvs.de ORIGIN [HH [MM [YYmmdd]]] +# +# DESCRIPTION +# The mobile.vvs.de utility fetches departure information from the +# Internet and prints the results to standard output. +# +# OPERANDS +# ORIGIN The point of departure. +# +# HH, MM, YYmmdd +# The time and date of departure. Defaults to the current +# time and date. +# +# STDIN +# Not used. +# +# INPUT FILES +# None. +# +# ENVIRONMENT VARIABLES +# The following environment variables affect the execution of mobile.vvs.de: +# +# limit Limits the number of entries to be fetched. +# +# origin, H, M, Ymd +# Provide defaults operands. If origin is set, then ORIGIN +# becomes optional. The order of the operands doesn't change +# by these variables. These variables are overridden by the +# operands. +# +# ASYNCHRONOUS EVENTS +# Defaults. +# +# STDOUT +# The first line has the format: +# +# "\e[4m%s:%s %s\e[m\n", H, M, origin_real_name +# +# where H and M are the corresponding provided or default operands. +# origin_real_name is the real name of the point of departure. +# +# The subsequent lines specify the departing means of transport. +# Each line has the format: +# +# "%s %s → %s\n", time_of_departure, line_number, destination +# +# where time_of_departure is self-evident, and line_number and +# destination identify the route and direction. +# +# STDERR +# Not used. +# +# OUTPUT FILES +# None. +# +# EXTENDED DESCRIPTION +# None. +# +# EXIT STATUS +# 0 A departure board could be fetched. +# +# 1 ORIGIN doesn't specify an acceptable point of departure. +# +# EXAMPLES +# 1. Get the top three current departures at Stuttgart, Hauptbahnhof: +# +# $ limit=3 mobile.vvs.de hauptbahnhof +# +# FUTURE DIRECTIONS +# None. +# +# BUGS +# The format of STDOUT suffers from bit rot. +# +# SEE ALSO +# vvs.de +# +# COPYRIGHT +# All departure information is copyrighted by Verkehrs- und +# Tarifverbund Stuttgart GmbH. The original copyright statement can +# be obtained online at http://www.vvs.de/impressum . +# +# The following code is your fault. +# +set -euf + +ltrim() { + sed "s/^[${1-$symbols}]*//" +} + +POST() { + ## TODO url-encode, trim + tr '\n' '&' | sed 's/&$//' | + w3m -config /dev/null -cols 256 -post /dev/stdin -dump "${1-$URI}" +} + +limit=${limit-10} +origin="${1-$origin}" +H="${2-${H-`date +%H`}}" +M="${3-${M-`date +%M`}}" +Ymd="${4-${Ymd-`date +%Y%m%d`}}" + +URI='http://mobil.vvs.de/mobile/XSLT_DM_REQUEST' + +echo " +sessionID=0 +requestID=0 +language=de +locationServerActive=1 +useRealtime=1 +anySigWhenPerfectNoOtherMatches=1 +limit=$limit +deleteAssignedStops_dm=1 +mode=direct +convertCrossingsITKernel2LocationServer=1 +convertStopsPTKernel2LocationServer=1 +convertAddressesITKernel2LocationServer=1 +convertPOIsITKernel2LocationServer=1 +itdLPxx_dest= +useAllStops=1 +maxAssignedStops=1 +itOptionsActive=1 +trITMOTvalue100=5 +ptOptionsActive=1 +useProxFootSearch=0 +w_regPrefAm=1 +w_objPrefAl=2 +w_objPrefAl=12 +itdLPxx_script=true +place_dm= +placeState_dm=empty +nameState_dm=empty +nameInfo_dm=invalid +typeInfo_dm=invalid +placeInfo_dm=invalid +reducedAnyWithoutAddressObjFilter_dm=103 +reducedAnyPostcodeObjFilter_dm=64 +reducedAnyTooManyObjFilter_dm=2 +anyObjFilter_dm=126 +type_dm=any +name_dm=$origin +itdTimeHour=`echo $H | ltrim 0` +itdTimeMinute=`echo $M | ltrim 0` +itdDate=$Ymd +" | POST "$URI" | sed -rn ' + s/^Von:[^[:alpha:]]+(.*)$/[4m'$H:$M' \1[m/p + /Haltestelle/,/^ *$/{ + /Haltestelle|^ *$/!{ + s/[[:space:]]*\[info\][[:space:]]*$// + p + } + } +' | { + read REPLY + echo "$REPLY" + while read time dev no dest ; do + printf "$time %3s → %s\n" $no "$dest" + done +} + +#### diff --git a/util/bin/vvs.de b/util/bin/vvs.de new file mode 100755 index 00000000..3b7ccf93 --- /dev/null +++ b/util/bin/vvs.de @@ -0,0 +1,61 @@ +#! /bin/sh +# +# NAME +# vvs.de - web scraper for VVS departure information +# +# SYNOPSIS +# vvs.de ORIGIN DESTINATION [HH [MM]] +# +# EXAMPLES +# $ vvs.de Hauptbahnhof Renningen 13 37 +# +# CAVEATS +# Acceptable operands have to be found by trial and error. +# +# BUGS +# Probably bit rot.^_^ +# +# SEE ALSO +# mobile.vvs.de +# +# COPYRIGHT +# All departure information is copyrighted by Verkehrs- und +# Tarifverbund Stuttgart GmbH. The original copyright statement can +# be obtained online at http://www.vvs.de/impressum . +# +# The following code is your fault. +# +set -euf + +# <form action="./efaanyfield/anyfield.php" method="post" id="efaForm">
+ #s/itdDateDay=/&${3-$itdDateDay}/ + #s/itdDateMonth=/&${4-$itdDateMonth}/ + #s/itdDateYear=/&${5-$itdDateYear}/ + +vvs_tmp=/tmp/vvs.tmp +curl -Ss http://www.vvs.de/fahrplan/ | +sed -rn "/<!-- EFA -->/,/<!-- \/EFA -->/{ + s.*<input.*name=\"([^\"]*)\".*value=\"([^\"]*)\".*/>.*\1=\2;T + /itdTripDateTimeDepArr=arr/b + s/(name_origin=).*/\1${1-$name_origin}/ + s/(name_destination=).*/\1${2-$name_destination}/ + ${3+s/(itdTimeHour=).*/\1${3-$itdTimeHour}/} + ${4+s/(itdTimeMinute=).*/\1${4-$itdTimeMinute}/} + p +}" | tr '\n' '&' | sed 's/&$//' >"$vvs_tmp" + + +#while read line ; do +# test -z "$line" || echo "$line" +#done >"$vvs_tmp" + +echo from: ${1-$name_origin} +echo \ \ to: ${2-$name_destination} +echo '-------------------------------------' +w3m -cols 9423 -post "$vvs_tmp" \ + -dump http://www.vvs.de/./efaanyfield/anyfield.php | +sed -rn " + s/^ +[0-9]+ +([0-9]+:[0-9]+) +([0-9]+:[0-9]+) +([A-Z0-9 ,]+) .*$/\1 \2 \3/p +" | tr -d , + +#### |