Szkriptek: Python, Perl, Bash, ...

Input: User browserebol JS-bol timezone - Output: mysql timezone

Sziasztok,

A kerdesem egyszeru, de sok tesztesetet igenyel, amiket nem en akarok "elsokent megkeresni", ha mar mas is megtette. Adott egy erosen multilanguage, tobb orszagbol es tobb idozonabol hasznalt backoffice. Meg egy rakas adat, amit GROUP BY DATE(created_at)-ezik a mysql mikor grafikont rajzolunk. a GROUP BY DATE(created_at) szeretnenk, ha a browser idozonajanak megfeleloen futna le (form fieldkent kuldjuk, PHP adja at es escape-eli amugy).

Amit szeretnek:

Input:
JS-bol a browser felhasznalojanak timezone-ja valamilyen formaban (lehetoleg minel kevesebb (idealis esetben nulla) kulso lib felhasznalasaval. JQuery-t es moment.js -t amugy include-ol a projekt, de a Date() sem tunik olyan butanak, legjobban annak orulnek, ha csak az kene hozza)

Output:
String, amit a mysql megeszik, es atallitja azalapjan megfelelore az idozonat

(Ugy erzem a ketto kozt lesz valami szabvany amit nem ismerek/nem jut eszembe/nem vagyok biztos a teszteseteiben)

Peldak:

Tegyuk fel hogy iden nyaron vagyunk Londonban, vagy Budapesten

JS:


var d = new Date()
var n = d.getTimezoneOffset();
// n == -60 ha London (UTC vs BST (DST)), -120 Budapesten

MySQL-hez string generalas:


// summer: (in winter different offsets apply)
case -60:
    return "SET time_zone = 'Europe/London';";
case -120:
    return "SET time_zone = 'Europe/Budapest';";

Ahol futnia kell a JS resznek: mindenkori legujabb Chrome-on es Safarin (iOS mobil miatt) kivul sehol. Tehat nem zavar, ha nem fut IE8-on pl.

Elso ranezesre mukodo, de altalam nem kedvelt workaround (meg amugy sem tudom, hogy a nyari-teli valtas benne van-e, ha meg is oldom elmeletben, teszteset problemaim tovabbra is lesznek):


GROUP BY DATE(CONVERT_TZ(created_at,'+00:00','+02:00'))

jpg: exif adatokból fájlnév [megoldva]

Sziasztok.

Szeretnék néhány száz képből, melyek különböző fényképezőgépekből születtek, valami áttekinthetőbbet alkotni.
Azt találtam ki, hogy a fájl neve a dátum legyen, utóneve meg az eredeti, fényképezőgép-adta név. Így megmarad az, hogy miből lett, és azonnal látszik, mikori.
#!/bin/bash

#datum szerinti atnevezes
#exiv2 -r'%Y%m%d_%H%M%S_:basename:' rename ./*.JPG
# ezt elvetettem, pedig a basename rendesen kijön

#szerzoi jogok hozzaadasa
exiftool -copyright="xy 2016, All right reserved" \
-author="XYZ" \
-d %y%m%d_%H%M%S%%c_:basename:.%%e "-FileName<CreateDate" ./*.JPG
# most itt meg a :basename: helyében kellene az eredetinek kerülnie, de tanácstalan vagyok.

exit 0

Kérdés: exiftoolnál hogyan hivatkozom a képfájl nevére?
Pl. "kep1.jpg" esetében a "kep1" stringre?

Megjegyzés: eredeti témanyitó bejegyzésemet már tudom módosítani. (kösz, trey)

awk: mezőelválasztóban aposztóf

Sziasztok.

Adott egy string:

'regwe', 'khotkml', 'jgoij 43iojt'

Ezt szeretném cat-tal, grep-pel vagy tail-lal csővezetéken ráküldeni az awk-ra. A string fájlban van, soronként van belőle pár száz.

A problémám az, hogy ha megadom az awk-nak a mezőelválasztót, akkor syntax jelentkezik, ami jogos...

Kipróbáltam ezt is:
{FS="\', \'"}
Ismét hiba.

Valamikor egyszer megoldottam, de elfelejtettem hogyan.
Kösz a segítséget előre is.

(Gondolkodtam azon, hogy split-tel szétdartabololom és csinálok egy tömböt, de ágyúval lőnék verébre.)

python output és wc -l

Van 1 python script, ami kilistáz egy folder tartalmát. Magában működik, de ha megküldöm egy | wc -l -lel, akkor mindig 0-t ad vissza. redirect szintén nem működik. A sima for i in range(1,10) igen, ezért nem gondolom, h a shell-em majmult meg. Amúgy osx. Vagy én hülyültem meg. Ötlet?
Tisztában vagyok vele, hogy ilyen nincs.

Powershell - valtozo atadasa funkciok kozott

Sziasztok!

Adott ket funkciom:

function choose-mount {...}

Function main {...}

main

A script ugy epulne fol, hogy minden funciokba lenne, ezert a torzsben csak a main funcio meghivasa van. A main funcion belul, meghivom a choose-mount funciot majd amikor az lefut (a vegen feltolt ertekkel egy lokalis valtozot) ezt az erteket szeretnem meghivni a main funcioban.

Leheteseges ez, anelkul, hogy globalis valtozot vegyek fol?

Powershell - valtozora szures

Sziasztok,

Az egy powershell script, amivel egy txt fileban akarok szurni.

ket feltetel van, egy nev (Portás) es datum. (yyyy-mm-dd)

$last_day=(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')
$p = @("Portás,$last_day")
Get-Content 'C:\Users\nsuto\Desktop\EXPORT_SECURITY.txt' | Select-String -Pattern $p -SimpleMatch | Set-Content C:\Users\nsuto\Desktop\FilteredContent.txt

minden jo, amig nem szurok valtozora, akkor nem is jon letre a kimeneti fajl. Elv a txt-ben a datum formatum ugyanez, yyyy-mm-dd, ezek az elvalaszto karakterek is.

Ha siman kiiratom a valtozot, akkor jo ertek jon ki, jol formazva...

Hol a hiba, a szuresnel miert nem megy?

Gimp "script-fu" kötegelt futtatása parancssorban

Sziasztok.

Egy Gimp-re írt, remekül működő, "hdr-eff.scm" nevű scriptet szeretnék rengeteg fájlon végrehajtani paraméterek nélkül.
( http://registry.gimp.org/node/11776 )

Így próbálkoztam:

gimp --no-data \
--no-fonts \
--no-interface \
-b '(hdr-eff.scm "./fajl.jpg_original")' '(gimp-quit 0)'

A script elindult, de valahol megállt:

(gimp:16759): GLib-GObject-WARNING **: g_object_set_valist: object class 'GeglConfig' has no property named 'cache-size'

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777768 from "gimp:point-layer-mode" to "gimp:dissolve-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7779E8 from "gimp:point-layer-mode" to "gimp:behind-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777C00 from "gimp:point-layer-mode" to "gimp:multiply-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA777E10 from "gimp:point-layer-mode" to "gimp:screen-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778218 from "gimp:point-layer-mode" to "gimp:overlay-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778430 from "gimp:point-layer-mode" to "gimp:difference-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778670 from "gimp:point-layer-mode" to "gimp:addition-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7788B8 from "gimp:point-layer-mode" to "gimp:subtract-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778AD8 from "gimp:point-layer-mode" to "gimp:darken-only-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778CF8 from "gimp:point-layer-mode" to "gimp:lighten-only-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA778EF0 from "gimp:point-layer-mode" to "gimp:hue-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779120 from "gimp:point-layer-mode" to "gimp:saturation-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779340 from "gimp:point-layer-mode" to "gimp:color-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779540 from "gimp:point-layer-mode" to "gimp:value-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779758 from "gimp:point-layer-mode" to "gimp:divide-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA7799B8 from "gimp:point-layer-mode" to "gimp:dodge-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779BD0 from "gimp:point-layer-mode" to "gimp:burn-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA779E18 from "gimp:point-layer-mode" to "gimp:hardlight-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A010 from "gimp:point-layer-mode" to "gimp:softlight-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A268 from "gimp:point-layer-mode" to "gimp:grain-extract-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A480 from "gimp:point-layer-mode" to "gimp:grain-merge-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A6A8 from "gimp:point-layer-mode" to "gimp:color-erase-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77A8C8 from "gimp:point-layer-mode" to "gimp:erase-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77AAD0 from "gimp:point-layer-mode" to "gimp:replace-mode"

(gimp:16759): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0xA77B238 from "gimp:point-layer-mode" to "gimp:anti-erase-mode"
batch command experienced an execution error:
Error: ( : 165519496) eval: unbound variable: hdr-eff.scm

Aztán áll, visszaadott prompt sincs.

Valamit rosszul csinálok?

[változott] Python, TCP, 4 byte küldése, endianness, C#

új infó a topicnyitó végén

Ajaj, próbáltam a címet erősen zanzásítani... :)

Sziasztok!

Amin ügyködök, a következő.
Van ez a szoftver, telefonra, illetve egy TCP szerver váza C#-ban, az alábbi oldalon:
http://philip.daubmeier.de/sensoremitter/

Az Win-es telefonról küldi TCP-n a szenzoradatokat a pc-re.

Van ez a szoftver:
https://github.com/ianovir/HIMUServer

Ami úgy tűnik, némi módosítás után alkalmas lehetne arra, hogy fogadjam az adatokat a Windows-os telefonról.

Azzal küzdök, hogy a C# forrás szerint küldeni kellene a telefonon futó "kliens"-nek egy MagicNumbert TCP-n, amit át kellene alakítani Big Endianná, hogy a hálózaton biztos rendben érkezzen meg.
A kliens forrása zárt, az csak a Win Store-ból tölthető le.

Namost Pythonban (3-ast "használok") a

socket.htons

csak 2 byteot cserél, meg a pack is, nem pedig négyet...

...és itt a biológus agyam elvesztette a fonalat, segítséget kell kérnem... :)

Értem én, hogy lesznek más bajok is majd, de itt leragadtam.

A socket nyitva, beszélek is a telefonhoz, de az szól, hogy valami a másik oldalon nem kóser (nézzem meg, hogy tűzfal nem blokkol-e, esetleg szó nélkül kilép (itt gondolom valamilyen nem kezelt kivétel történik)).

A python szerver releváns részei itt lejjeb. A gányolás látszik... :)


import socket
import math
from struct import *
import sys

timeout = 10  #timeout in seconds
bufferSize = 1024 #bytes
MagicNumber = 0x42fea723 # Big Endian int32 http://www.scadacore.com/field-tools/programming-calculators/online-hex-converter/
#MagicNumber = 0x23a7fe42 # Little Endian int32
#packSeparator="#"
packSeparator=""
go=True;
.
.
.

def executeTCP(port):
	'''
	Performs data acquisition via TCP protocol
	'''
	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock.settimeout(timeout)
	serverAddress = ('', port)
	sock.bind(serverAddress)
	sock.listen(1)
	print ('waiting for connection')
	[connection, clientAddress] = sock.accept()
	print ('Sending magic number')
	print ("MagicNumber type: ", type(MagicNumber).__name__)
	print ("MagicNumber size: ",  sys.getsizeof(MagicNumber))
	#magicnum = pack('i', bytearray.fromhex(hex_string))
	magicnum_2 = pack("!I", MagicNumber)
	print ("magicnum_2: ", magicnum_2)
	print ("magicnum_2 type: ", type(magicnum_2).__name__)
	sock.send(magicnum_2)			# http://stackoverflow.com/questions/8904092/how-can-i-send-anything-other-than-strings-through-python-sock-send
	connection.setblocking(1)
	print ('connection from ' + str(clientAddress))
	while go:
		data = connection.recv(bufferSize)	
		if not data: break
		printSensorsData(data.decode("utf-8"))
	connection.close()		

.
.
.

szerk:
Úgy tűnik, wireshark-kal belehallgatva a beszélgetésbe, hogy a python szerver hallgat, a 2 eszköz között pontosan 0 byte információ közlekedik. Mármint persze a syn-ack pároson kívül. :)
Magyarul nem küldi el a stringet a szerver.
Erős a gyanúm, de itt tényleg kezdek kidőlni, hogy nem jó helyen próbálom küldeni az adatokat.
Olvasgatok, de kezdek elveszni.
A Python doksik szerint ha (mondjuk TCP) szervert szeretnék, a socket.bind, .listen, .accept kell.
Ha kliens akarok lenni, az is megvan. (mármint legalábbis a doksikban :))

De azt nem értem, hogy ha én szerverként szeretnék létezni, de el szeretnék küldeni egy stringet 4 byte-ot a kliensnek (mondjuk a már felépített kapcsolaton keresztül), akkor most szerver vagyok, kliens, vagy rohadt sokat kellene még olvasnom...? :)

Komolyan: ha valaki segítene ebben az ügyben, megköszönném! :)