Pokazywanie postów oznaczonych etykietą workaround. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą workaround. Pokaż wszystkie posty

czwartek, maja 17, 2018

In case EMS server is overloaded on DEV

tibemsd.conf:
flow_control=enabled

per queue:
expiration=180min
flowControl=100MB
maxbytes=300MB
maxmsgs=100000
overflowPolicy=discardOld

poniedziałek, lutego 26, 2018

Continuosly updated CDM entities BW pattern

With one (or more) publisher(s) of CDM entity and many subscribers a single change in canonical data model forces all subscribers to adjust. With smart approach on BW side done once no furter adjustment is needed:
Parse XML string retrieved from transport against selected XSD entity but with input validation disabled. In next step map this data using for-each - designer proposes currently known fields/elements. In case data format is changed and new fields are added to the end of sequence they will be parsed but will be omitted in mapper. We still have data validation in mapper, but only on known (as of development) fields.



czwartek, lutego 22, 2018

How to output compressed data with HTTP in Tibco BW

Headers are important. Use Java Code to write string to GZIPOutputStream mapped by ByteArrayOutputStream.

czwartek, stycznia 25, 2018

Ubuntu 17.10 window buttons like in Unity

gsettings set org.gnome.desktop.wm.preferences button-layout 'close,minimize,maximize:'

poniedziałek, grudnia 18, 2017

Tibco Designer on Linux

java.extended.properties -Dswing.defaultlaf=com.jgoodies.looks.plastic.Plastic3DLookAndFeel -Dsun.awt.disablegrab=true --add-opens=java.base/jdk.internal=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=java.management/com.sun.jmx.remote.internal=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-opens=java.base/jdk.internal.vm=ALL-UNNAMED --add-modules=java.xml.bind --illegal-access=permit -Dswing.defaultlaf=com.jgoodies.looks.plastic.Plastic3DLookAndFeel -Dsun.awt.disablegrab=true -Xscmx1g -Xshareclasses:name=bw -Xgcpolicy:metronome -Djdk.attach.allowAttachSelf=true -Xquickstart
-XX:+IdleTuningGcOnIdle -Xtune:virtualized
 

export _JAVA_AWT_WM_NONREPARENTING=1

czwartek, września 21, 2017

What is the cause of Tibco BusinessWorks problems with HTTPS (TLSv1.1, TLSv1.2, SalesForce)

Tibco uses old version of cryptographic library Entrust which uses even older library IAIK from Technische Universität Graz in Austria. These are not capable of providing TLSv1.2. IAIK is properly developed and maintained (with TLS supported at least since 2014), see http://jcewww.iaik.tu-graz.ac.at/index.php/sic/News/iSaSiLk_5.0_with_TLS_1.2_support_released, but Tibco doesn't update this library on its own.  If you set java.property.TIBCO_SECURITY_VENDOR="j2se" or "j2se-default" or "ibm" in bwengine.tra file (also in designer.tra) you can use security stack from JRE. To be honest only part of it due to strange implementation of Tibco SSL Socket Factory. SSLContext is acquired for hardcoded value "TLSv1", what causes limiting TLS version used to TLSv1 despite the fact that Java 7+ can use TLSv1.2. How can Tibco fix this hardcode bug? By reading private MAX field from Sun's ProtocolVersion and then using it in argument to SSLContext.getInstance(). How can we hack this Tibco bug? By manually setting supported protocols inside JRE SSL contexts. If you want to access SalesForce from BW, but you can't, you can contact me and ask for help.




wtorek, września 19, 2017

Tibco BW and TLSv1.2




poniedziałek, września 11, 2017

Przesyłanie dokumentów między instytucjami przez ePUAP

Platforma ePUAP umożliwia przesłanie podpisanego dokumentu konkrentnej sprawy (zgodnego z XSD), z załącznikami od petenta do instytuacji i vice versa. Petent jednak nie może przesłać dalej dokumentu od jednej instytucji do drugiej. Nie może też przesłać XML-a z jedną sprawą jako załącznika do drugiej, bo podmioty uczestniczące w ePUAP nie umieją czytać plików sprawy. Ministerstwo nie wpadło na to. Tymczasem jest to bardzo podstawowa funkcjonalność jakiej obywatel może oczekiwać od e-usług. Co taki sąd może zrobić z dokumentem XML sprawy ePUAP? Powołać biegłego do odczytania go. A sąd nie ma na to czasu i pieniędzy. Sama walidacja dokumentu sprawy jest prosta:





Apeluję do Pani Minister o dodanie takiej funkcjonalności do ePUAP. Mogę nawet sam ją dopisać albo wykonać oddzielną aplikację za 0 zł.

-- Update 7.11.2017 --

W nawiązaniu do przekazanej idei przybliżonej przez Pana pod załączonym poniżej linkiem uprzejmie wyjaśniam, że można przesyłać dalej dokumenty, które zostały nam doręczone przez ePUAP. Istotnie nie jest to wystarczająco łatwe i wygodne ale możliwe. W razie czego służę wyjaśnieniami jak to można zrobić.

Jednakże między innymi dlatego problematyka e-doręczeń znalazła się w programie „Od papierowej do cyfrowej Polski” jako odrębny temat zatytułowany „Strumień e-Skrzynka i e-Doręczenie” zob. https://www.gov.pl/cyfryzacja/strumien-e-skrzynka-i-e-doreczenie

Odrębną kwestią jest to, że poza ePUAP trudno jest wizualizować dokumenty XML jak również wersyfikować podpisy i wyodrębniać załączniki do tych dokumentów. Tu też ma Pan rację że nie jest to wygodne choć sąd może korzystać wprost z konta na ePUAP lub usługi wizualizacji jest dostępnej pod adresem  https://epuap.gov.pl/wps/myportal/strefa-urzednika/inne-systemy/walidator
Z wizualizacją poradzono sobie też na platformie SEKAP zob. https://www.sekap.pl/epaczka.seam

Jeszcze inne problemy dotyczą możliwości skutecznego przesłania do sądu pisma procesowego na elektroniczną skrzynkę podawczą sądu, co jak Pan zapewne wie nie jest obecnie możliwe, ale nie dlatego, że nie można przekazać dalej dokumentu otrzymanego z innego podmiotu (bo można), ani dlatego, że sąd „nie umie” odczytać dokumentu XML (bo powinien). Powody wyjaśniają sądy na swoich stronach internetowych zob. np. tutaj: http://bip.warszawa.so.gov.pl/artykul/468/353/elektroniczna-skrzynka-podawcza

W MC doskonale zdajemy sobie sprawę z powyższych uwarunkowań i dlatego między innymi pracujemy nad takim rozwiązaniem problemu doręczeń jakie kierunkowo zostało zasygnalizowane w programie „Od papierowej do cyfrowej Polski”.

Z poważaniem

Kazimierz Schmidt
Radca ministra

Ministerstwo Cyfryzacji
Departament Utrzymania i Rozwoju Systemów

czwartek, września 07, 2017

How to disable proxy in Google Chrome on Windows


poniedziałek, września 04, 2017

Why /etc/security/limits.conf doesn't work in Ubuntu 16.04, 16.10, 17.04?

Because there is systemd...
Modify its files:

root@user-VirtualBox:~# grep NOFILE /etc/systemd/*.conf
/etc/systemd/system.conf:DefaultLimitNOFILE=2097152
/etc/systemd/user.conf:DefaultLimitNOFILE=1048576



piątek, czerwca 09, 2017

How to create instance of Java interface returning dummy data


czwartek, października 27, 2016

Fix slow and unresponsive LibreOffice in Ubuntu 16.10

echo "export SAL_USE_VCLPLUGIN=gtk" >> /etc/profile

środa, września 14, 2016

How to extract text from MS HTML

public static String extractTextFromHtml(String html, boolean isForJson) {
StringBuilder sb = new StringBuilder();
boolean ignore = false; 
boolean isXmlData = false;
boolean closing = false;
      
for (int i=0; i < html.length(); i++) {
char c = html.charAt(i);
if (c=='<' & !ignore) {
 ignore = true;
 closing = false;
}
else if (c=='&' && !ignore) {
 int end = html.indexOf(";", i+1);    
 if (end!=-1) {
  Boolean isNumber = null;
  Boolean isEntity = null;
  for (int x=i+1; x < end; x++) {
   char ch = html.charAt(x);
   if ((ch >='0' && ch <= '9') || (ch=='#' && x==c+1)) {
    if (isNumber == null)
     isNumber = true;
    else
     isNumber &= true;
   }
   else if (ch==' ') {
    if (isEntity==null)
     isEntity = false;
    else
     isEntity = isNumber = false;
   }
   else
    isEntity = true;
  }
  if (Boolean.TRUE.equals(isNumber) || Boolean.TRUE.equals(isEntity)) {       
   if (Boolean.TRUE.equals(isNumber)) {
   String num = html.substring(i+2, end);
   sb.append(Character.toString((char)Integer.valueOf(num).intValue()));       
          }
          int add = (end - i);
   i += add;
         }     
  else if (ignore && c=='/') {
   closing = true;
  }
  else if (ignore && c=='>') {
   ignore = false;
   if (closing && isXmlData)
    closing = isXmlData = false;
  }
  else if (ignore && c==':') {
   isXmlData = true;
  }
  else if (!ignore && !isXmlData) {
   if (c=='„' || c=='”' && isForJson)
    c = '"';
   if (c=='"' && i>1 && html.charAt(i-1)!='\\' && isForJson)
    sb.append('\\');      
   sb.append(c);    
  }
 }
 String s = sb.toString().trim();
 if (s.startsWith("ĘĄ"))
  return s.substring(2, s.length());
 return s;
}

wtorek, lipca 12, 2016

Ceph S3 API SignatureDoesNotMatch

Use Amazon SDK Client (https://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip) and following Java code:

String accessKey = "1";
String secretKey = "2";
String endpoint = "http://localhost:8080";
String bucket = "UPPERCASE";

SignerFactory.registerSigner("S3SignerType", S3Signer.class);
BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setSignerOverride("S3SignerType");
clientConfig.setProtocol(Protocol.HTTP);

AmazonS3Client conn = new AmazonS3Client(credentials, clientConfig);
conn.setEndpoint(endpoint);
InMemoryRegionImpl region = new  InMemoryRegionImpl("ceph", "localhost");
region.addEndpoint("s3", endpoint);
conn.setRegion(new com.amazonaws.regions.Region(region));

System.out.println(conn.listBuckets().get(0));

byte[] bytes = "Hello World!".getBytes();
ByteArrayInputStream input = new ByteArrayInputStream(bytes);
try {
ObjectMetadata md = new ObjectMetadata();
md.setContentLength(bytes.length);
md.setHeader("x-amz-acl", "public-read");
PutObjectRequest por = new PutObjectRequest(bucket, "plik.txt", input, md);
PutObjectResult res = conn.putObject(por);
System.out.println(res);
}
catch (AmazonS3Exception s3e) {
s3e.printStackTrace();
}

piątek, maja 27, 2016

Ratujemy meble zniszczone przez wilgoć

Płyta MDF to sprasowany wraz ze spoiwem w wysokiej temperaturze komponent drzewny. Gdy w płytę wniknie woda to puchnie i wypacza się. W dotyku robi się z niej tektura. Stolarz naprawia to rozbierając meble i wymieniając zepsuty element. Ewentualnie wycina, szpachluje i maluje natryskowo. W warunkach domowych możemy usunąć zepsutą warstwę nożem (resekcja do głębokości, na której płyta znowu jest twarda w dotyku), wyszlifować drobnoziarnistym papierem ściernym, wyrównać szpachlą drzewno-akrylową, ponownie wyszlifować, zagruntować Vidaronem i zamalować testerem koloru farby lateksowej, której warstwę spolerujemy pianką melaminową po upływie 2 tygodni od malowania. Dlaczego farba lateksowa? Jest bardzo duża szansa na dobranie koloru dostępnego w małym testerze. Nie dysponując warsztatem, raczej nie bylibyśmy w stanie zrobić gładkiej warstwy standardowego lakieru. Dużą naprawę zrobimy za parę lat.









piątek, października 02, 2015

DIY: Naprawa korozji obudowy pralki

Kupiłem 1,5 roku temu Electroluksa - sensowne programy, relatywnie cicha i mało wibrująca, silnik inwerterowy. Kiedyś Electrolux był synonimem niezawodnej pralki. Nawet robione 7 lat temu we Francji modele były w jeszcze w porządku. Teraz produkcja jest włosko-chińska i ustawiona w łazience pralka potrafi zerdzewieć. Pionowa ścianka jest zgrzewana oporowo z częściami służącymi do poziomego przymocowania i zgrzeiny nie są odporne na korozję. Zgrzewanie i lakierowanie zostawia przestrzenie, w których może penetrować woda. Można wymienić obudowę na nową, ale co z tego, jak zerdzewieje znowu. Ten model ma błędny proces produkcyjny. Wydawać regularnie 500 zł co 1,5 roku nie ma sensu. Chyba, żeby kupić nowego Boscha. Blacha w niemieckim Audi też nie rdzewieje. Alternatywne rozwiązanie: naprawić ściankę samemu za 40 zł za pomocą taśmy malarskiej, pędzelka, papieru ściernego i farby na rdzę Hammerite 0,25l z gwarancją na 8 lat (wszystko dostępne w Leroy Merlin).










piątek, września 18, 2015

Jak przerobić PDF-a z osadzonymi czcionkami na takiego z obiektami budowanymi z krzywych

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.1 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

czwartek, września 17, 2015

Percentiles in HSQLDB

create AGGREGATE FUNCTION PERCENTILES(IN val float, IN flag_return boolean, INOUT buffer float ARRAY, INOUT counter INT)
   RETURNS varchar2
   CONTAINS SQL
   BEGIN ATOMIC
     declare i number default 1;
     declare stats varchar2(2000) default '';
     declare asum float default 0;  
     declare p0, p50, p90, p99, p100, pavg number default 0;
     declare sorted_buffer float ARRAY;
     IF flag_return THEN
       --call println('PERCENTILES return');
       set sorted_buffer = SORT_ARRAY(buffer);  
       call println('PERCENTILES sorted');
       set p50 = sorted_buffer[1];
       set p90 = sorted_buffer[1];
       set p99 = sorted_buffer[1];
       while i <= counter do
       begin atomic
  --call println('PERCENTILES selection '||i);
           set asum = asum + sorted_buffer[i];
           if abs(i - round(counter / 2, 0)) < 0.001 then
               set p50 = round(sorted_buffer[i], 2);
           end if;        
           if abs(i - round(counter * 9 / 10, 0)) < 0.001 then
               set p90 = round(sorted_buffer[i], 2);
           end if;
           if abs(i - round(counter  * 99 / 100, 0)) < 0.001 then
               set p99 = round(sorted_buffer[i], 2);
           end if;
  set i = i+1;        
       end;
       end while;
       set p0 = round(sorted_buffer[1],2);
       set p100 = round(sorted_buffer[counter],2);
       set pavg = round(asum / counter, 2);
       --call println('PERCENTILES preparing result');
       set stats = 'min='|| p0 || '|p50='|| p50 || '|p90='||p90 || '|p99='||p99 || '|max='||p100 || '|avg='|| pavg;
       RETURN stats;
     ELSE      
       IF val IS NULL THEN RETURN NULL; END IF;
       IF counter IS NULL THEN SET counter = 0; END IF;
       SET counter = counter + 1;
       IF counter = 1 THEN SET buffer = ARRAY[val];
       ELSE SET buffer[counter] = val; END IF;
       RETURN NULL;
     END IF;
   END

for (select appid, percentiles(mem_pct) as mem_stats, avg(mem_mb) as mem,
percentiles(cpu_pct) as cpu_stats, avg(cpu_cnt) as cpu,
    percentiles(gc_millis) as gc_stats from T_VM_STAT group by appid) do
  begin atomic
set r = REGEXP_SUBSTRING_ARRAY(mem_stats, '((?<==)[0-9]+[\.\,]*[0-9]*)');
set (p0,p50,p90,p99,p100,pavg)=(to_number(r[1]), to_number(r[2]), to_number(r[3]), to_number(r[4]), to_number(r[5]), to_number(r[6]));

środa, czerwca 24, 2015

How to make Tibco BW Designer less ugly on Linux

Install Microsoft web fonts and set these used by Designer to Arial 12 and Lucida Typewriter 12.
Modify designer.tra:

java.extended.properties -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:MaxPermSize=512m  -Dswing.defaultlaf=com.jgoodies.looks.plastic.Plastic3DLookAndFeel -Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.opengl=false -Dswing.aatext=true


czwartek, maja 14, 2015

org.xml.sax.SAXException: validation error: xsi:type "null" is not validly derived from the allowed type definition - how to communicate with SalesForce from Tibco BW

WSDL defining base object and extensions and using base object with xsi:type in definitions of 'generic' operations is not compliant with standards. Let's try to do some workaround in WSDL:

1. Define  on base object. Please not that name "xsi:type" is also not compliant but works in BW.
2. Change type of element in operation definition from base type to xsd:anyType.

and in BW:

3. Create mapper with derived object. Fill it. Inside @type put 'distinguishedNamespacePrefix:TypeName'. Please note that after this attribute BW will need to add empty @xsi:type - do not fill it, this is going to work this way.
4. In process 'Namespace Registry' redefine namespace of derived object using prefix name changed to 'distinguishedNamespacePrefix'. This ensures that our @xsi:type value will have valid namespace prefix.
5. On mapper top level input and also on SOAP call activity click exclamation mark 'Edit Statement'. Check 'Exclude result prefixes'. This in runtime moves all namespace definitions to the XML root. This makes our @xsi:type working due to the fact that xsi is visible from the top to bottom of the XML teee.
6. In SOAP call input mapping use 'Copy-Contents-Of' of derivative object.

Quick note about project validation: Error 'Syntactic error in data: /schema/complexType/attribute/@name: data "xsi:type" is not a valid NCName.  A valid example is "_NCname.has-no_colons".' is legitimate and looks bad, but hey - we avoided writing proxy or buying SalesForce adapter!