26 Jul 2018
|
idea
Just have migrated from Mac Mini to MacPro (4 core xeon model mid 2012) to double number of horses. Just swapped SSD from MacMini into MacPro and it is up and running. Build is almost twice faster now, everything seems to be ok but IntelliJ Idea started working extremely slow. Reinstall OS from scratch but it is pure 1 day wasting. It seemed to me that there is no acceleration enabled and reason is not known for me. Probably switch from Intel GPU to ATI might affect existing system setup. Did find that apple.awt.graphics.UseQuartz=true
system properties shall enable Quartz acceleration in Java as it is off by default (?). Quick test in Idea and it solves everything !
To add it:
- open Help->Edit Custom VM Options
- add
-Dapple.awt.graphics.UseQuartz=true
line there
my working custom options looks like bellow now:
-Xms128m
-Xmx1750m
-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
-Dapple.awt.graphics.UseQuartz=true
18 Jul 2018
|
bug
apple
codesign
linux-windows
Keep working on Keychain utility for linux-windows port, generating the code signing request for particular. And was surprised that openssl was not able to load it CertificateSigningRequest.certSigningRequest
built by Apple:
$ openssl req -text -noout -verify -in CertificateSigningRequest.certSigningRequest
unable to load X509 request
140735602271176:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/asn1/asn1_lib.c:143:
... other complains ...
140735602271176:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/pem/pem_oth.c:84:
Apple uses different format ? No, it just writes broken ASN.1 stream. Details bellow:
06 Jul 2018
|
debugger
kotlin
jvm
This post continues series of debugger rework, refer to previous post. In general rework is almost complete and changes are being tested now.
Beside variable resolution problem debug of kotlin code suffered from another issue: debugger was jumping random lines when step over collection iteration with lambdas. Why this was happening is bellow:
03 Jul 2018
|
fix
debugger
eclipse
History Cannot Use Step Filters while Debugging in Eclipse #309
Fix PR315
Eclipse plugin is on low priority and it debugger there was working on simple cases year ago I was checking. Simple debug session discovered the bug in Event request validation.
Root case
Problem case there was validation of EXCEPTION_ONLY.referenceTypeID
event modifier against list of known to debugger ones, but there is case when it can be zero:
27 Jun 2018
|
debugger
kotlin
soot
jvm
Have completed most of code rework responsible for debug information preparation for debugger and frame local variable resolution during debug.
Reasons for this:
- there is no direct link between Java variable and local variable begin generated in LLVM IR code. Previous implementation expect one local per variable. Some times it is not true;
Soot
performs split of local variable into multiple at each assignment and not always it is not always possible to pack them back, as result same java variable could be represented different memory location (at different part of code);
- previous implementation was resolving variables base on line number (of code and variable visibility). All this cause broken in case of multi statements lines;
- sometimes compilers put broken debug information in class file (e.g. kotlin) as result it is not valid source for decisions.
What was changed:
Details will be provided in separate post but some facts are bellow:
22 Jun 2018
|
fix
lol
icu.dat
Spoiler: because Apple uses Penguins to review application in Antarctica! (or just set region to Antarctica)
PR311. Kees van Dieren tried to release app to Apple with RoboVM 2.3.4 and it got rejected. It was crashing due NPE at following:
public DecimalFormatSymbols(Locale locale) {
...
try {
currency = Currency.getInstance(locale);
currencySymbol = currency.getSymbol(locale); // <== here
intlCurrencySymbol = currency.getCurrencyCode();
} catch (IllegalArgumentException e) {
...
}
}
Currency.getInstance()
can return null as per spec for countries without currencies, such as Antarctica. Currently icu.dat
that is embedded in RoboVM has two counties with XXX
currency: AQ, CP.
The fix is simple, to use no currency
currency object with code XXX
in this case:
--- compiler/rt/libcore/luni/src/main/java/java/text/DecimalFormatSymbols.java (date 1529655383000)
+++ compiler/rt/libcore/luni/src/main/java/java/text/DecimalFormatSymbols.java (date 1529660632000)
@@ -97,6 +97,11 @@
this.locale = locale;
try {
currency = Currency.getInstance(locale);
+ if (currency == null) {
+ // dkimitsa: for some countries there is no currecy like Antarctida AQ so pick currency
+ // directcly by no currency code
+ currency = Currency.getInstance("XXX");
+ }
currencySymbol = currency.getSymbol(locale);
intlCurrencySymbol = currency.getCurrencyCode();
} catch (IllegalArgumentException e) {
22 Jun 2018
|
fix
PR310
Time to start 2.3.5 with fix. Fix to own code that was intended to fix auto-signature pickup (PR293). It fixes a lot of stuff but introduced bug, that auto mode was picking distribution configuration (identity and profile). This will not work for debug/run configuration case. Fix is simple: consider only development identities:
--- Pair<SigningIdentity, ProvisioningProfile> pair = ProvisioningProfile.find(ProvisioningProfile.list(), SigningIdentity.list(), bundleId);
+++ Pair<SigningIdentity, ProvisioningProfile> pair = ProvisioningProfile.find(ProvisioningProfile.list(), SigningIdentity.list("/(?i)iPhone Developer|iOS Development/"), bundleId);
14 Jun 2018
|
debugger
kotlin
soot
jvm
Keep working on local variable resolution for Kotlin and while having a progress there a bunch of WTF cases related to debug information that is included in Kotlin. Happily it is related to synthetic variable that are inserted by Kotlin, usually it goes into following cases:
- variable defined to be in some slot within specific bytecode range but this slot is not populated;
- same as first but in specified local variable slot there is leftover data and it is has not compatible type.
Here is bytecode that demonstrates issue 2:
13 Jun 2018
|
fix
debugger
kotlin
History SSL Handshake error #306
Fix PR308
Initially I was suspecting missing of CA certificate for domain as in this issue but it turned out that RoboVM RT was not able to setup connection with TLSv1.2 only
server.