Salesforce – Vergleich von 2 orgs

Aufrufe: 395

Das ist mal ein gutes Tool, da bin ich gerade drauf gestoßen: Salesforce Org Compare. Damit kann man die Metadaten von 2 Orgs herunter laden lassen, und die Differenzen (einfach ein Diff auf den heruntergeladenen Daten) anzeigen lassen. Das ist wunderbar, wenn man mal wieder vergessen hat, welche Teile alle für ein Deployment notwendig sind, oder wenn die Orgs unterschiedlich reagieren, und man keinen Anhaltspunkt hat, warum das so ist.

Es sollte eigentlich nicht notwendig sein, schließlich weiß man genau, was man geändert hat, der Kollege hat auch nicht auf einer anderen Sandbox widersprüchliche Sachen geändert…

Thermische Probleme mit Raspberry Pi 4

Aufrufe: 500

Der Raspberry Pi 4 sieht mit seinem Gigabit-Ethernet und den USB-3 Ports genau danach aus, was mir die ganze Zeit fehlte. Einer meine 3er-Pis spielt seit geraumer Zeit mit 3 externen Festplatten NAS. Das natürlich nur unbefriedigend, da mit USB 2 und 100 MBit bei dmcypt-verschlüsselten Platten in guten Fällen 6 MB/s per Samba übertragen werden. Das reicht für vieles, aber längst nicht alles, was ein NAS so tun soll.

Der Pi4 kopiert von dmcrypt zu dmcrypt mit etwa 70 MB/s (über Samba kommt bei mir dann etwa 50 MB/s an – bei großen Dateien), das ist die richtige Richtung. Allerdings lief er beim Kopieren von 2 TB nicht durch, sondern stürzte mit einer Kernel Panic ab. Wenn der als NAS funktionieren soll, muss er auch stabil sein, schnell alleine reicht nicht.

Mit fiel schon beim ersten Starten auf, dass vor allem die USB-Anschlüsse sehr warm werden, die CPU war auch fast nicht mehr anfassbar. Spätestens in einem Gehäuse kann die Wärmeableitung nicht mehr reichen. Bei Tom’s Hardware wird berichtet, dass eine neue Firmware den USB-Controller kühler laufen lassen soll, Tests zeigten 2°C Unterschied, was aber bei weitem noch nicht für den Betrieb in einem Gehäuse ausreicht. Meine Messungen (billigstes Infrarot-Thermometer) des CPU- und RAM-Chips zeigten Oberflächentemperaturen bis 62°C, wenn auf dem Bildschirm das Thermometer erscheint, und auch Thermal Throttling hinweist.

Mit

vcgencmd measure_temp

kann der CPU-Sensor ausgelesen werden. Bei 80°C auf dem Sensor zeigt sich das Thermometer. Meine Versuche bestätigen, dass bei Last nach etwas mehr als 3 Minuten der Prozessor bremst – kopiert der Pi verschlüsselte Dateien, haben alle Chips gut zu tun.

Mit aktiver Kühlung durch einen Lüfter (120mm auf 5 V statt 12 V, so nicht hörbar, und so aufgestellt, dass etwas Luft über die Chips zieht) bleibt der Sensor zwischen 50°C und 60°C, die Oberfläche liegt dann bei akzeptablen 36°C. Im Moment habe ich keine weiteren Abstürze, vielleicht ist die Temperatur das einzige Problem. Auf jeden Fall lasse ich den nur dann als NAS laufen, wenn ich einen Lüfter dran stellen kann, andernfalls ist mir das eine zu heiße Sache.

Salesforce – Assets with or without Contact and/or Account

Aufrufe: 1489

In test classes it is always a good thing if you are not just going through your code, but also to actually test if it is working according to design. To make your test shine, you would test both kinds of cases, working examples as well as those where you expect an error to occur.

To test a trigger, that ensures Contact and Account to be set on an Asset (as long as certain parameters are fulfilled), I added a test case where the trigger could not work properly.

According to the Apex documentation, an Asset must have Contact and/or Account set, otherwise you will run into an Exception (FIELD_INTEGRITY_EXCEPTION: Every asset needs an account, a contact or both).

Screenshot of Asset Object Reference - AccountId must be set

So, my Test class includes

Asset a = new Asset (Name = 'Test asset');
try {
    insert a;
    System.assert (false, 'Should not reach this, an Asset needs an Account or Contact');
}
catch (Exception e) {
}

However, in the project I work at currrently, this assertion fails, as our Assets can exist without neither Contact nor Account.

And this is where the documentation is plainly wrong, as it depends on the Organization-Wide Defaults for sharing. If you set access to anything except the default (Controlled by Parent), you can create Assets without Account or Contact. So the documentation is wrong 75% of the time, as a setting of “Private”, “Public Read Only” and “Public Read/Write” allows Assets without.

This was a pitfall for me, as my test class worked on one box, but not on another. And soometimes failing tests hint at an issue with the org itself. But only sometimes, most times it is because a developer did not set up the test correctly.

Atmel Atmega ISP Programmierung schlägt fehl

Aufrufe: 1274

Von Pollin gibt es für 2,99 € ein ‘Entwicklungsboard’ mit einem Atmega 168PA drauf. Die Beschreibung ist dürftig, insbesondere, wie der In System Programmiert werden kann. Bei mir lag so ein Board etwas länger rum, weil einfach die Zeit fehlte.

Durchpiepen der Leitungen zeigte dann, dass der Programmer an folgende Pins am Pollinboard angeschlosen werden musste:

ICSP 1 (MOSI) – 11
ICSP 2 (Vcc) – Vcc
ICSP 4 (Gnd) – GND
ICSP 5 (RST) – RST
ICSP 7 (SCK) – 13
ICSP 9 (MISO) – 12

Vergleiche dazu das Anschlusslayout des Olimex Programmers.

Aber alles, was ich versuchte, die Kommunikation funktionierte nicht. Die Fehlermeldung war:

Timestamp: 2018-10-29 18:08:45.435
Severity: ERROR
ComponentId: 20100
StatusCode: 1
ModuleName: TCF (TCF command: Device:startSession failed.)

Failed to enter programming mode. ispEnterProgMode: Error status 
received: Got 0xc0, expected 0x00 (Command has failed to 
execute on the tool)

Da keine meiner Ideen fruchtete, bin ich diesem Troubleshooting gefolgt. Oszilloskop an der RESET Leitung zeigte dann nicht einen, sondern mehrere (ich glaube 5) Reset-versuche durch den Programmer. Das sollte so nicht sein. Das Lesen der Gerätesignatur in Atmel Studio schickt einen Reset, wenn alles gut geht.

Letztlich stellte sich heraus, dass ich zwar die Pins richtig raus gesucht hatte, aber einfach meiner eigenen Anleitung nicht gefolgt bin. MOSI hatte ich mit GND verbunden, und schon ging nichts mehr.

Ich habe noch weiter getestet mit allen Signalen: bei diesem Fehler kann es ganz einfach sein, dass ein Kabel nicht richtig angeschlossen ist. Am falschen Pin oder ein Kabelbruch – der Fehlercode ist immer derselbe wenn eins der ISP Signale fehlt, egal ob MOSI, MISO, SCK oder RST.

TBS5520SE – Multi-standard TV Tuner USB Box

Aufrufe: 1459

Die kleine Box in schwarzen Metall verspricht, alles an Fernsehsignalen empfangen zu können, was so hier verfügbar ist.

An der Frontseite 2 LEDs, einmal in blau, um zu zeigen, dass das Gerät arbeitet, und einmal in grün, damit wird angezeigt, dass auf der aktuellen Frequenz ein Sender gefunden wurde. Aber davon sagt die nicht wirklich vorhandene Anleitung nichts. Außerdem sind die LEDs viel zu hell, reine Funktionsindikatoren sollten leicht sichtbar, aber nicht grell sein. Neben einem Monitor aufgestellt stört die Helligkeit massiv. 

Die Box hat einen Antenneneingang sowie einen LNB-Anschluß und ein USB-2.0 Interface.

Das Gehäuse ist aus Metall und hat ein paar Lüftungsschlitze. Die Beschreibung sagt: “Neben der guten Ausstattung und dem modernen Interface wurde auch auf eine geringe Leistungsaufnahme und damit eine niedrige Abwärme, für geräuschlosen Betrieb, geachtet.”. Ein Lüfter ist sicher auch nicht notwendig, aber das Gerät wird schon warm, die Lüftungsschlitze sind gerechtfertigt und gut.

Empfangbar seien DVB-S / S2 / S2X, DVB-C / C2, DVB-T / T2 und ISDB-T. Und das passt auch wunderbar zum zentralen Chip in dem Gerät, dem Si21832B. Dieser dekodiert all diese Standards für uns.

Daneben gibt es noch einen CY7C68013A für die USB-Kommunikation. Außerdem ein paar Verstärker- und Logikchips, aber keine Überraschung.Kommen wir zu den Treibern. Diese können von der Webseite herunter geladen werden, im Lieferumfang ist kein Datenträger – der sowieso nur veraltete Versionen haben würde.

Ich habe zum Ansehen des Video-Streams den kostenlosen TBS-Viewer ausprobiert. Der Sendersuchlauf hatte mich direkt demotiviert. Der Empfangstyp war auf Satellit voreingestellt.

Ein Wechsel auf DVB-T (‘Terrestrisch’) setzt immer die Transponderliste “DMB-TH Hong Kong” als Standard.Ein Suchlauf (Korrekt auf Transponderliste: DVB-T2 Deutschland gestellt) lieferte keinen Sender, über die gesamte Frequenzliste hinweg. Spezifisches Scannen einzelner Frequenzen, die hier definitiv empfangbar sind und unverschlüsselte Sender übertrage (514 MHz und 706 MHz), lieferten auch 0 Sender. Den Grund dafür liefert die etwas schwache Anleitung: absolut wichtig ist TBS 5520 SE ChangeMode-Tool v1.0.0.2, mit diesem kann der Empfangsmodus geändert werden. Bei mir war der auf Satellit voreingestellt; nur mit diesem Tool kann auf DVB-T2 umgestellt werden.

Danach funktionierte dann auch der Suchlauf im TBS-Viewer. Allerdings ist die Empfindlichkeit des Empfängers eher mittelmäßig. Eine mickrige Antenne, die auch an einem Fernseher hier eher schwierigen Empfang liefert, die aber an einer Xoro-Box sehr gut funktioniert, liefert auch am TBS-5520 keinen befriedigenden Empfang. Vermutlich braucht man mit dem Gerät meistens eine aktive Antenne.

Zum Test wollte ich auch den kostenpflichtigen DVB-Viewer installieren – TBS Viewer lief noch – und erhielt die Fehlermeldung, dass DVB-Viewer noch liefe. Meine Vermutung ist da klar, dass der TBS-Viewer eine verfiesemantuckte Version des DVB-Viewers ist.

Also: es funktioniert alles, aber die Dokumentation stinkt schon anrüchig, und die Lösung des Empfangsumschaltens mittels des Change-Mode-Tools ist suboptimal. Technisch Interessierte werden keine Schwierigkeiten damit haben, aber es ist nicht gut.

Ein für mich wichtiger Kaufgrund war die Zusage “Treiber für sämtliche 32- und 64-bit Betriebssysteme befinden sich im Lieferumfang: Win XP, Vista, Win 7/8/10 und Linux.” “Sämtliche 32- und 64-bit Betriebssysteme” … MacOS ist schon einmal nicht dabei, somit ist sämtliche eine leere Versprechung. Linux ist ein verlockendes Versprechen für mich; ich will immer noch den Empfang von Fernsehen auf einem Raspberry Pi machen, und das Dekodieren dann auf anderen Clients. Leider unterstützt der Raspberry Pi h.265 nicht. Linux und sämtliche klingt wunderbar. ARM-Linux scheint da aber nicht wirklich drunter zu fallen.

Mehr zum Linux-Treiber später….

Salesforce API documentation could be better with API versions

Aufrufe: 410

Once again I found a nice, no, necessary feature. When searching for RecordType-IDs in Apex, you could either query for them with SOQL (burning away the precious number of statements) OR you could just ask the schema.

With List<RecordTypeInfo> contactRTs = Schema.SObjectType.Contact.getRecordTypeInfos() you can get all available RecordTypes for this Object. With contactRTs[0].getName() you can get the label of the record type.

The label. This may be dependent on the language of the user, so it’s utterly useless in code. But there is also contactRTs[0].getDeveloperName() – yay! However, the documentation never states which is the minimum API needed for a function call, and this is absolute crap. Why not just add a line with the API-version? Otherwise you may get errors, which contradict the documentation.

Yes, I know that the Summer`18 release is not far now, so in this case it means that it was a bit more than a week before I can use this needed feature. But it cost me quite some time – checking if I had a typo, if I misread … and then finally a search for the release notes with this function. With the API version in the docs, this would have been a matter of minutes…

Simple script for setting allowed IP address in tinyproxy

Aufrufe: 861

I’m using a dynamic IP address, but for Salesforce development I need a fixed one. As a proxy with a fixed IP address is enough, I use tinyproxy for that. Of course I cannot afford to have an unrestricted open proxy. Now this small script helps me achieve this in a half-automated way. I ssh in to my proxy-server, call this script, and it takes care of producing an appropriate line in the configuration:


#! /bin/bash
#
# Find the ip address of the calling ssh
callerId=`echo $SSH_CONNECTION | awk '{print $1}'`
#
# Find the allow line and set it to the ip address
sudo sed -i "/# set from script/!b;n;cAllow ${callerId}" /etc/tinyproxy.conf
sudo systemctl restart tinyproxy

In order for this to work, you need a marker in your tinyproxy.conf. This script looks for “# set from script”, and replaces the following line with an Allow-entry.

Was soll das Gerede in Warteschleifen?

Aufrufe: 316

Jetzt bin ich wieder in so einer Hotline-Warteschleife (ich möchte doch mal wissen, was Medion zu den widersprüchlichen Angaben zu dem Rechner zu sagen hat), und werde mit Musik genervt.

Aber die Unsitte, dass alle paar Sekunden eine Bandansage mich darüber informiert, dass immer noch niemand zur Verfügung steht, ist extrem störend. Wenn einfach nur Musik läuft, dann schalte ich halt den Lautsprecher an, lasse das Telefon neben mir liegen, und kann weiter arbeiten. Eine menschliche Stimme allerdings reisst mich dann raus – es gibt mir Hoffnung, dass jemand mit mir reden, ja vielleicht sogar mein Problem lösen könnte.

Wirklich: lasst diese sinnlosen Ansagen. Es glaubt doch sowieso niemand, was da geredet wird. “Nur noch ein paar Augenblicke..”, “Der nächste freie Mitarbeiter…” Blah blah blah. Es nervt!

Aldi liefert nicht übermäßig schnell – Medion Erazer X67015

Aufrufe: 1085

Am Montag, 4.12. direkt morgens im Aldi bezahlt, aber bis heute noch nicht einmal verschickt.

Den Medion Erazer X67015 hätte ich gerne. Ich hatte schon angefangen, mir Preise für die Komponenten raus zu suchen, und bin dann zu einem ähnlichen Gesamtpreis gelangt. Allerdings hätte ich dann in 3 Shops bestellen müssen, und das Ding noch zusammen bauen. So entspricht der Rechner in etwa der Leistungskategorie, die ich wollte, aber vor allem ist alles zusammen. Mit Garantie.

Allerdings fand ich das Konzept schon etwas gewöhnungsbedürftig. Ich muss also vor Ort im Laden mein Geld abgeben, erhalte dafür einen flimsigen Zettel mit einem Code, und muss dann das ganze Prozedere einer Online-Bestellung noch zusätzlich machen. Und dann halt darauf warten, dass das Gerät auch zu mir kommt.

Dienstag morgen, 0:30h erhalte ich eine Email von Aldi:
“die folgende Bestellung werden wir heute versenden:
[…]
Versanddatum: 04.12.2017”

Also erstmal: die Email ging am 5.12. raus. Sie war im Futur geschrieben und behauptet, am 4.12. würde die Bestellung versendet werden.

Aber ich freute mich dennoch, das schien ja schnell zu funktionieren. Schwierigkeiten mit den Zeitformen der deutschen Sprache kann ich gut ignorieren. Aber jetzt haben wir den 6.12., 2 Tage nachdem die Bestellung versandt werden sollte. Der Status bei DHL ist immer noch, dass die Daten elektronisch übermittelt wurden, aber auch DHL noch auf das Paket wartet:

Sendungsverfolgung DHL: am 5.12. wurden die Daten elektronisch übermitteltIch bin gespannt, ob und wann da noch etwas passiert. Ich bin vor allem sauer, weil die Email eine ganz andere Zusage enthielt. Und das ist einfach nicht in Ordnung!

Telefonisch war auch keine andere Information zu erhalten. Die Person im Callcenter sagte nur, er wisse nicht, was die verschiedenen Firmen untereinander ausgemacht haben. Wie üblich bin ich als Kunde wieder Wurst.