Was auch immer eine Grow software macht
eine gui hab ich nicht geplant, dazu wäre ein git hub repository nötig. Rekursiv geht die software glaube nicht durch.
Was auch immer eine Grow software macht
eine gui hab ich nicht geplant, dazu wäre ein git hub repository nötig. Rekursiv geht die software glaube nicht durch.
Gesamtanschau der Pflanze, Strain und Breeder, wäre sinnvoll. So halt pauschal: Duengen einstellen, nur noch Wasser giessen. In 2-4Wochen ernten.
warum fragst ueberhaupt wenn scheinbar nur "toller Bud, kannst ernten wie du willst, am besten gestern, lesen willst? Wieso schreibSt du nicht direkt dabei wie dir vorstellst.
Naja Ich habe das bisher nach der "Braune Fäden" methode gemacht.
Fäden sind schon fast alle braun. Aber die Trichome würde ich nun nicht soweit einschätzen.
Immer ruhig Blut hier, ich wollte einfach eine Zweite Meinung einholen. Man kann ja nicht immer gleich erwarten, dass jeder auf anhieb gleich alles richtig macht oder?
Naah so braun will ichs nich
Das war auf die Kugel von Gandalf bezogen..
Ich habe mir das so wie in diesem Bild ganz unten vorgestellt:
Trichome-ernte-Zeitpunkt.jpg
Die gesamtanschau der Pflanze ist leider nur sehr Schwer zu machen. Die zwei sind hinten im Zelt mit netz.. Sind zwei Critical die Werbegeschenk waren. Breeder weiss ich nicht. Blätter verfärben sich bei den beiden nun alle Gelb/Rötlich nur noch relativ wenig grün.
Da kleben noch massig klare Köpfe dran. in 2 Wochen ist das noch nicht vel brauner. Knapp 2 Wochen können auch 10 Tage sein.Kein Mensch kann anhand von zwei, drei bildern erkennen, wie lange die Pflanze noch exakt braucht.
Man beobachtet das Mädel halt täglich und kann dann einschätzen wie schnell sie reift.
Wie gesagt, Ich schau mir bei diesem Grow das erste mal die Trichome an.
Ich versuch mal Bilder von der Pflanze zu machen wenn das Licht an ist heute abend. Hoffe Die reifen noch bevor alle Blätter abfallen. Macht das denn etwas aus und die Reifen trotzdem weiter?
Naah so braun will ichs nich ich mag den aktiven stone nicht den couchlock
Jetzt möchte ich auch mal meinen Senf dazugeben.
Zunächst: Ich habe das noch nie gemacht und Kann auch nicht einschätzen wie gesundheitsschädlich das tatsächlich ist, aber:
Die Pflanze mit der man bestäubt raucht man ja nicht.
Ich halte es für unmöglich dass man eine andere pflanze durch bestäuben gross kontaminiert. Geschweige denn die Samen, die danach raus kommen.
Weitaus grössere bedenken habe ich, eine Pflanze zu besprühen und durch den overspray (lackierer wissen was gemeint ist) die Nachbarpflanzen zu kontaminieren. Also wenn ich das machen würde, würde ich nur das Rauchen, was dann aus den Feminisierten Samen wächst und würde die Feminisierung in einem gesonderten Zelt machen.
Ich weiss. dafür ist ja gerade das tool
code update
using System;
using System.Drawing;
using System.IO;
namespace ExifPurge
{
/// <summary>
/// legt fest was eine property ist. Für einsteiger nicht relevant zu verstehen
/// </summary>
class Property
{
public int propertyID;
public string propertyName;
}
class Program
{
// legt fest, wie viel infotext ausgegeben werden soll, höhere nummern includieren die kleineren
static int debuglevel = 2; //0 = only errors; 1 = successful files; 2 = sucessful property removals; 3 = ALL
/// <summary>
/// dieser Teil wird immer aufgerufen, deshalb "Main"
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// löst die funktion ganz unten aus, um die exifproperties zu laden
Property[] exifProps = getExifProperties();
// lese alle dateien im gleichen ordner wie die .exe datei; Führe für jede Datei den folgenden code aus
foreach (string filePath in Directory.GetFiles("./"))
{
// wenn die datei nicht mit .exe endet ist es ein bild. also exif daten löschen
if (!filePath.EndsWith(".exe"))
{
// konvertiere den dateipfad zum dateinamen
string[] elements = filePath.Split('/');
string cleanedName = elements[elements.Length - 1];
// übergebe den dateinamen und alles exifs die entfernt werden sollen an die untere funktion "removeExif"
removeExif(cleanedName, exifProps);
}
}
Console.WriteLine("Alle dateien erfolgreich bereinigt!");
Console.WriteLine("keypress will exit the application");
while (Console.ReadKey(true).Key != ConsoleKey.Escape) ;
}
/// <summary>
/// Diese funktion wird für jede datei im Ordner aufgerufen und entfernt die exif Daten
/// </summary>
/// <param name="filename"></param>
public static void removeExif(string filename, Property[] exifProperties)
{
// erstelle eine Kopie des Bildes im Arbeitsspeicher
Image image = Image.FromFile(filename);
// Dieser Part enthält alle Exif daten der Norm die auf den Besitzer schliessen lassen
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
// gehe die an properties durch. Checke ob das bild diese Exifdaten besitzt
foreach (Property property in exifProperties)
{
// versuche die Exifdaten zu entfernen
try
{
image.RemovePropertyItem(property.propertyID);
if (debuglevel > 1) Console.WriteLine(filename + ": exif eigenschaft '"+property.propertyName+"' erfolgreich entfernt");
}
// fange fehlermeldungen ab
catch (System.ArgumentException e)
{
// wenn die fehlermeldung lautet "Property cannot be found" bedeutet dies sie muss nicht entfernt werden. Weitermachen
if (e.Message == "Property cannot be found.")
{
// Image does not contain this exif property
if (debuglevel > 2) Console.WriteLine(filename + " enthält diese exif eigenschaft nicht: '" + property.propertyName);
}
// andernfalls lasse das program crashen, damit man nicht fälschlicher weise Bilder mit exifdaten hochläd
else
{
Console.WriteLine(filename + ": Programmfehler beim entfernen der exif eigenschaften dieses bildes!");
Console.WriteLine("keypress will exit the application");
while (Console.ReadKey(true).Key != ConsoleKey.Escape) ;
throw;
}
}
}
// Speichere das Bild als neue datei, nicht überschreiben. Sonst bleiben die exif daten bestehen!
image.Save("n" + filename);
// Lösche das bild aus dem Arbeitsspeicher
image.Dispose();
// Lösche das Originalbild
File.Delete(filename);
// Benenne das Bereinigete Bild nach dem Original
File.Move("n" + filename, filename);
if (debuglevel > 0) Console.WriteLine(filename + " wurde erfolgreich bereinigt");
}
/// <summary>
/// diese funktion läd alle relevanten exif einstellingen der norm
/// </summary>
/// <returns>list of relevant exif properties</returns>
public static Property[] getExifProperties()
{
Property[] exifProps =
{
// Camera
new Property{propertyID = 42033 , propertyName = "Camera Serial"},
new Property{propertyID = 405 , propertyName = "Model Number" },
new Property{propertyID = 272 , propertyName = "Model" },
new Property{propertyID = 271 , propertyName = "Make" },
new Property{propertyID = 37121 , propertyName = "Components Configuration" },
new Property{propertyID = 50708 , propertyName = "unique Camera model" },
new Property{propertyID = 37500 , propertyName = "Manufactureres Note" },
new Property{propertyID = 51105 , propertyName = "Camera Label" },
new Property{propertyID = 50936 , propertyName = "Profile Name" },
new Property{propertyID = 50934 , propertyName = "As shot profile name" },
// Lens
new Property{propertyID = 42036 , propertyName = "Lens Model" },
new Property{propertyID = 42035 , propertyName = "Lens Make" },
new Property{propertyID = 42037 , propertyName = "Lens Serial" },
new Property{propertyID = 42034 , propertyName = "Lens Info" },
new Property{propertyID = 41989 , propertyName = "Focal Length" },
new Property{propertyID = 37386 , propertyName = "focal length 2" },
// Owner
new Property{propertyID = 42032 , propertyName = "Camera Owner" },
new Property{propertyID = 65000 , propertyName = "Owner Name" },
new Property{propertyID = 40093 , propertyName = "CPOwner" },
new Property{propertyID = 36873 , propertyName = "Google Plus Upload code" },
new Property{propertyID = 33432 , propertyName = "Copyright" },
new Property{propertyID = 50942 , propertyName = "Profile Copyright" },
new Property{propertyID = 316 , propertyName = "Hostname" },
new Property{propertyID = 315 , propertyName = "Artist" },
// Image
new Property{propertyID = 42016 , propertyName = "Image Unique ID" },
new Property{propertyID = 36867 , propertyName = "Datetime original" },
new Property{propertyID = 36868 , propertyName = "Create Date" },
new Property{propertyID = 306 , propertyName = "Modified date" },
new Property{propertyID = 270 , propertyName = "Image Description" },
new Property{propertyID = 11 , propertyName = "Processing Software" },
new Property{propertyID = 41491 , propertyName = "Image History" },
new Property{propertyID = 37395 , propertyName = "Image History 2" },
new Property{propertyID = 41490 , propertyName = "Security Classification" },
new Property{propertyID = 37394 , propertyName = "Security classification 2" },
new Property{propertyID = 41489 , propertyName = "Image Number" },
new Property{propertyID = 37393 , propertyName = "Image Number 2" },
new Property{propertyID = 50547 , propertyName = "Original Filename" },
new Property{propertyID = 50828 , propertyName = "Original Raw File Data" },
new Property{propertyID = 50827 , propertyName = "Original Raw File Name" },
new Property{propertyID = 41728 , propertyName = "File Source" },
new Property{propertyID = 50781 , propertyName = "Raw data unique ID" },
new Property{propertyID = 50217 , propertyName = "Oce ID Number" },
new Property{propertyID = 41730 , propertyName = "CFA Pattern" },
new Property{propertyID = 34954 , propertyName = "Leaf sub id" },
// Location
new Property{propertyID = 41492, propertyName = "Subject Location" },
new Property{propertyID = 37396, propertyName = "Subject Area" },
new Property{propertyID = 34853, propertyName = "GPS Info" },
new Property{propertyID = 34867, propertyName = "Isospeed data" },
new Property{propertyID = 34868, propertyName = "Isospeed latitude yyy" },
new Property{propertyID = 34869, propertyName = "Isospeed latitude xxx" },
new Property{propertyID = 40095, propertyName = "XPsubject" },
new Property{propertyID = 37889, propertyName = "Humidity" },
new Property{propertyID = 37888, propertyName = "Temperature" },
new Property{propertyID = 37890, propertyName = "Pressure" }
};
return exifProps;
}
}
}
Alles anzeigen
--------------- 10. April 2019, 00:16 ---------------
Wollte ihn direkt nur mitteilen, dass aktuell noch zu viele Informationen in deinen Bildern stecken
Auch Zeitstempel und so
Aber finde es auch cool was ich hier gerade machte
Naja. Man könnte jetzt ja auch fake daten reinschreiben aber das passt hier leider nicht in die 10'000 zeichen limit
Ordner auswählen, Button drücken, fertig
Ich meinte nicht die Usability, ich meinte die einfache Verteilung.
Ich dachte eher an sowas wie 4.5 höchstens. Das ist auch wirklich so gut wie überall drauf. Aber wieso Tuples?Ich mache das grade per Dictionary<int, string>? Oder wo bist du grade?
Weil diese einfacher zu implementieren sind als ein Objekt. Aber habs jetzt schon getan, also brauchst nicht mehr machen..
Bin für jedes Feedback dankbar. Letzten Endes führen viele Wege nach Rom.
Das Problem ist für mich folgendes:
- Ich möchte das ding nicht auf ein git stecken wenn du möchtest, gerne.
- das ding soll so einfach wie möglich für newbies nachbaubar sein.
-> wenn ich nun ein UI dazu bastel, macht es das ganze wahnsinnig kompliziert für beginner.
Aber keine Sorge, ich feile gerade an Text ausgabe mit aufgelösten namen und target net framework < 4.7 (dammit tuples...)
Sau cool!
Aber warum gibst du dem Benutzer keine Infos aus, was das Programm grade macht? Du hast so schön kommentiert, aber das Tool bleibt stumm.
danke
Naja zunächst einmal vertraue ich meinem Code, ich brauche keinen Output
Die Entstehung einer Software ist nunmal immer ein Prozess. Ich könnte jetzt natürlich auch ein fancy UI machen die frage ist halt immer Aufwand/Nutzen.
Kommentiert habe ich zum beispiel erst, als der Wunsch von Nutzern aufkam, zu verstehen was da passiert. Also habe ich fast jede einzelne Zeile so kommentiert, dass sie hoffentlich auch von Menschen verstanden wird, die gar nichts mit programmieren am Hut haben.
Immerhin meine Finanzmarktbots haben jetzt ein rudimentäres aber "kraftvolles" UI spendiert bekommen
Vor allem aber war das einfach schnell in 5 Minuten zusammen gehackt, und dann ist mir erst eingefallen: Hey das könnte auch für andere nützlich sein. Dass das so einen Anklang findet hätte ich nie gedacht.
aber ich hab ja auch schon geschrieben dass ich noch output plane. Da ich damit allerdings nichts verdiene und das alles good will ist, passiert das nur in meiner Freizeit wenn ich lust drauf hab.
EOS 6D ?^^
- Kein Kommentar -
EDIT:
Deine Consolenoutputs fressen aber auch gehörig Leistung. Schwierig wenn man das auf nem Server laufen lassen will. Zumindest wenn man gross skaliert.
Finde es aber sehr spannend zu sehen, wie viele der properties doch genutzt werden.
Du kannst sie ja jetzt noch nach Klarnamen auflösen und dann posten. Hab dir da schon mit Kommentaren vorgearbeitet .
Wäre es dann auch mit einer easy .bat möglich? (Hoffe das hieß so^^)
Die Überprüfung wäre online über gewisse Seiten möglich, was sie doch bei sensiblen Daten immer grenzwertig ist^^
Jedoch könnte man aus dem Quellcode entnehmen wie das ganze getestet wird ...??---> oder?^^
Mit einer .bat ist das denke ich leider nicht möglich. Man benötigt hier spezifische Funktionen für Bildbearbeitung.
Also ich halte nichts davon die daten Online zu überprüfen. Am ende gehts noch straight in einen Honeypot. Und am handy ist mir das ganze zu umständlich, da ich die Bilder mit einer Spiegelreflexkamera schiesse und danach noch Weissabgleich etc. mit Lightroom mache.
Wie das ganze getestet wird kannst du natürlich dem Quellcode entnehmen. Vorraussetzung ist, dass du den Quellcode verstehst. Ich habe mir jetzt allerdings grösstmögliche mühe gegeben alles zu kommentieren und ein Tutorial für einsteiger zu machen.
Ich kann hier leider keine Liste machen, habe nur zwei Programme Probiert. Beide haben die Seriennummer der Kamera nicht raus bekommen. Das wirklich schlimme ist, das Windows das mit Bordmitteln nicht anzeigt. Man hat also keine leichte überprüfung.
kannst du mit Screenshots noch zeigen wie das ganze dann aussieht?
Ist da eine Mehrfachauswahl möglich?
Ich schreibe denke ich noch ein Programm zur überprüfung und mache ein Tutorial, wie man diese Applikation nun Kompilieren/nutzen kann.
Eine Mehrfachauswahl ist nicht nötig. Einfach einen Ordner erstellen und alle Bilder (habe mit jpeg getestet) zusammen mit der .exe datei einfügen.
Die .exe Datei ausführen und alle relevanten exif Daten der Bilder im Ordner werden entfernt.
Sehr geehrte Community,
anscheinend entfernen einige Exif Cleaner die exif daten nicht komplett (z.B. die Kamera Seriennummer)
Ich zum beispiel wurde durch einen Moderator der Community angeschrieben, dass meine bilder noch die Kamera Seriennummer enthalten. Wenn man dann auf Facebook Bilder mit der gleichen Kamera kann man die Daten natürlich verbinden.
Fataler weise zeigt Windows diese exif Daten nicht an, man kann es also nicht überprüfen
Aus diesem Grund habe ich einen sehr einfachen Exif Cleaner für Windows programmiert.
Eine Kompillierte .exe datei möchte ich aus folgenden gründen nicht hochladen:
a) Wegen der rückverfolgung zu mir
b) Damit ihr keine Bedenken haben müsst, dass ich einen Trojaner oder ähnliches bei euch einschleuse.
Im folgenden eine Anleitung, wie ihr den Code zu einer ausführbaren Exe Datei kompillieren könnt:
1. Visual Studio (Community Edition) herunterladen
Ich weiss, das es ein wenig übertrieben sein kann, so ein grosses Programm für so ein einfaches "script" herunter zu laden. Andere Kompilierer gehen eventuell auch.
Ansonsten einfach einen exif cleaner aus dem Internet herunterladen und überprüfen ob er auch wirklich alles löscht!!!
https://visualstudio.microsoft.com/de/downloads/
2. Projekt erstellen
3. "Programmieren" / Code kopieren
Nun "programmieren" wir, ihr könnt einfach meinen code aus post 17 einfügen
PROPER exif cleaning - persönliche daten von fotos korrekt entfernen
Im Code ist alles hinter den Zeichen // ein Kommentar und wird vom Kompilierer nicht beachtet. Also rein für euch zum verstehen was da im programm passiert.
sagt dem programm welche Referenzen es verwenden soll
Visual Studio weiss standardmässig nichts mit Bildern anzufangen.
Hierzu muss auf der rechten seite, unter Solution Explorer auf Referenzen ein rechtsklick gemacht werden.
Wählt dort Referenz hinzufügen...
Im Referenzmanager müssen links oben Assemblies ausgewählt werden. danach rechts oben nach System.Drawing suchen und hinzufügen.
kopiert den folgenden code und ersetzt damit den kompletten inhalt des Programms:
EDIT: Code in post 17 verschoben wegen zeichenlänge
Nun sieht es so aus. Damit seid ihr fast fertig.
Jetzt nur noch den Namespace den Projektnamen anpassen, den ihr vorher vergeben habt.
4. Programm zu einer Ausführbaren Datei Kompillieren
5. Programm ausführen
Als erstes muss die ausführbare Datei zusammen mit Bildern in einem Ordner plaziert werden. Der Ordner darf nur die .exe Datei und Bilder enthalten.
resultat
Bitte stellt unbedingt sicher, dass die Daten auch entfernt worden sind!
--------------- 5. April 2019, 23:34 ---------------
Deine Kamera schreibt ihre Seriennummer in die Exifs. Ich hoffe du machst damit keine Facebook Urlaubsfotos
Tatsächlich. Toller exif purger ist das den ich da hab
Edit:
Moment, wo siehst du das? bei mir ist das leer... (!)
INFOS
Klima | 20-25 °C |
Luftfeuchte | 70-80 % |
Giess-Interval | Sobald die Erde angetrocknet ist |
Düngerzugabe | Ja |
Dünger-Interval | Nach Plan |
Vorgedüngte Erde | Ja |
INFOS ZUM EQUIPMENT
Leuchtmittel | 1000 Watt |
Abluftsystem | Ja |
Topfgrösse | < 20 Liter |
WEITERE INFOS
Symptome | Bananen |
Ergriffene Maßnahmen | raus machen |
Hallo Leute,
hab hier die Bananen. Ist es schon zu spät? Wie gehe ich nun am besten mit denen um?
Also raus klar. Aber dann? Vorsichtig Blüten abschneiden und Toilette runter und rest der Pflanze austrocknen lassen?
[bluetetag]10[/bluetetag]
Beste Grüsse
INFOS
Klima | 25-30 °C |
Luftfeuchte | 60-70 % |
Giess-Interval | Sobald die Erde angetrocknet ist |
Düngerzugabe | Ja |
Dünger-Interval | Nach Plan |
Vorgedüngte Erde | Nein |
INFOS ZUM EQUIPMENT
Leuchtmittel | mehr als 1000 Watt |
Abluftsystem | Nein |
Topfgrösse | < 5 Liter |
WEITERE INFOS
Symptome | ein sonnensegel weist kümmerwuchs auf |
Ergriffene Maßnahmen | noch keine |
Hallo Community,
Was hat die Pflanze? Ist im 26. Wuchstag.
Hatte soetwas schon bei vorherigen grows, Meist ist eine fläche betroffen, die sich von unten bis oben nur auf einer seite der Pflanze hochzieht.
Bei den ersten grows dachte ich vielleicht ein Pilz oder eine Krankheit. Diesmal habe ich mit desinfizierter Pinzette gearbeitet. Es ist nur eine Pflanze betroffen.
Da ich das nun konstant habe, mache ich etwas falsch?
Diesmal LED aber keine Lüfter, diese beiden Kriterien schlisse ich deshalb mal aus. Aber hab da nicht viel Erfahrung.
Sie bekommt wie die anderen auch BioBizz nach Plan:
- BioBizz Bio Heaven
- BioBizz Bio Grow
Beste Grüsse
MrGrower
Also ich hole mal ein paar con den Pro Breeze und berichte dann. Turm und Flat ventilatoren können später kommen.
HA HA ihr seid mir ja lustig, ich muss irgendwie bis zur Ernte überleben
Das mit der Zeremonie stimmt natürlich schon. Aber ein bisschen spass darf man ja auch mal haben..
Jau der schaut gut aus. Hab jetzt noch einen mit 37 geschafft. Aber die Raw papes halten nicht.
ich muss einmal den kleber schlecken und danach nochmal von aussen
--------------- 25. Februar 2019, 19:16 ---------------
Jau, das passt doch! Ich hab jetzt 37 sekunden geschafft.
Nur das dumme RAW pape will nicht hallten. Muss von aussen nochmal befeuchten...
Hey leute, ich hab hier einen für euch!
Zeigt, wie schnell ihr rollen könnt! ich bin gespannt.
Regeln:
- Die Grundmaterialien dürfen vorbereitet werden.
- Die Zeit muss mit einer Stoppuhr gemessen werden.
- Das Ergebnis muss akzeptabel ausschauen.
- Beim Start darf keines der Materialien berührt werden.
Vorbereitung:
1. Grinded euer Gras und bereitet euch euren Mix vor. Diesen könnt ihr zum beispiel auf ein Häufchen bereit legen.
2. Legt euch ein Pape auf den tisch.
3. Bereitet euren Tip vor und legt ihn auf den tisch (ak filter und ähnliches sind auch erlaubt)
Durchführung:
Am besten geht es mit einem freund. der eine stoppt, der andere rollt. Der Teilnehmer hat die hände in der luft, mindestens 5cm von den Grundmaterialien entfernt.
Sobald die Zeit läuft, darf gebaut werden. Die Zeit wird gestoppt, sobald der Joint bereit auf dem tisch liegt. Anschliessend wird der Joint begutachtet und der Versuch als gültig oder ungültig erklärt.
Damit ein versuch gültig ist, muss der Joint halbwegs gelungen sein. Wenn er beispielsweise abgeknickt ist, wieder auf geht oder die hälfte beim auf den Tisch legen wieder rausgefallen ist,ist der Versuch ungültig.
2 Beispiele:
Ich, Gerollte Zeit: 41 sekunden
der joint hat eine leichte imperfektion an der spitze, das geht beim verschliessen aber weg, ich denke das ist akzeptabel.
Meine freundin, Gerollte zeit 36 sekunden
Der joint ist nicht rund sondern oval, zudem ist er eingeknickt. Versuch abgelehnt.
Na, was packt ihr?
Beste Grüsse,
MrGrower