blog.darkstar.work - a simple url encoder/decoder

 a simple url encoder/decoder
 http://blog.darkstar.work

Labels

Wirtschaft (149) Pressefreiheit (124) Österreich (120) IT (96) code (61) Staatsschulden (37) EZB (27) Pensionssystem (16)
Posts mit dem Label code werden angezeigt. Alle Posts anzeigen
Posts mit dem Label code werden angezeigt. Alle Posts anzeigen

2021-03-31

Semantic web lost in history / herstory around 2010, how to reactivate it & a short contract use case

Current hypes, trends and pushed business models at 2020

Let's take a short look at the current hypes, trends and pushed business models for companies:

  1. IOT (Internet of things), Industry 4.0
    Machines, units, etc. know and probably send their own status at manufacturer, service center, at home or somewhere else over the rainbow (in case of  ugly DNS injection, warped rouing tables [OSPF, BGP] ot men in the middle [squid bump, bluecoat, ...]).
    Those units normally,communicate when they need maintenance, when components soon needs to be replaced, when physical, technical or environmental critical limit reached, when subsystems fail or completley shut down, when the user when the customer operates it improperly or negligently, simply report in intervals that they are alive and everything's OK, , etc

    We can find a lot of use cases for many useful applications here, added value / surplus is often small but still useful! Problems with security, flood of data, extracting relevant events and, above all, reacting to the corresponding message are the challenges here.

  2. Cloud
    I like the cloud, but sometimes cloud feels cloudy, cloudier, obscure dust and smog over keywords and hypes and real hard technical features that generate great customer surplius and real cash or quality of business benefits.

    What are the most common problems, pitfalls and misunderstandigs with any cloud?

    • Lack of specific customer requirements and inaccurate, exact technical specifications from the cloud provider.

      Practical example (what I really need and I'm thinking about right now):
      I need to implement a state service, that saves current game status of small multiplatform games (e.g. card game schnapsenarchon clone, SUPU) in the cloud. If I play on my  android tablet or smartphone, the current state and course of the game will be transfered to a cloud servie, persisted in a cloud storage or database and if I continue playing on Windows desktop, the last state of the game is automatically fetched from the cloud and the game application sets that game state and transferred back to cloud after the next move.

      For my purposes the cheapest way will be sufficient:
      A simple Amazon Linux 2 AMI (HVM), SSD Volume, Type t2.nano, t2.micro or t2.nano with a simple SQL-Database (no matter if hackish install at virtual imaage or the smallest Amazon DB instance) with somekind of open source PHP Swagger API, like https://github.com/andresharpe/quick-api

      With similar requirements, some developers and most managers are probably unsure whether to use Amazon ElasticCache or some kind of Session State Server ported to Azure SQL  or entirely another not well known cloud service.

      Even fewer people (including myself) know what the exact technical limits of the individual services are, e.g. the exact performance and scalable elasticity of Anazon Elastic Cache and when scalability of Amazon Elastic Cache is completely irrelevant, since the network traffic and the network data volume will always be the bottle neck in that specific scenario.

    • Nice advertising slogan, but poor performance and poorly configurable options from drive and storage providers, no standard network mount (like SMB or NFS), but a lot of cloudy magic.
      When I look at the beautiful Google Drive and Microsoft One Drive, I immediately see that this is not a classic network file system mount under my point of understanding.
      Reading and writing large blocks or deep recursively nested directory trees is extremely slow.
      I also didn't find an option to have an incremental version history backup created after every change (Create, Delete, Change) to the Cloud Drive or at least simply midnight-generated backups for the last 3 months at low cost.
      Options like synchronizing parts of the Cloud Drive locally create horror nightmares.
      In 1997 we booted an NFS from the USA via Etherboot with real-time DOS and debugged faster Doom Clones and other 3D games in C ++ with some ASM routines and the network performance didn't fail.

    • Difficulty finding the most suitable service in Cloud Djungel. Real technical comparisons between the hard facts and the possibilities of the individual cloud services have so far mainly published by free bloggers, e.g. AWS Lambda vs Azure Service Fabric
      Decisions are more based on creeds (we have a lot of .NET developers, so we'll use Azure, I mah strong Amazon-like power women and Linux, so I'll use Amazon).



Lets go back to RDF in the years 2010 - 2015 

You probably know what semantic web, owl, rdf, machine readable & understandable data are, right?

If not, then here is a little bit of reading:
https://www.w3.org/TR/rdf-mt/
https://www.w3.org/TR/2010/WD-rdb2rdf-ucr-20100608/
https://en.wikipedia.org/wiki/RDF_Schema

What does 'going back in time' mean in a large scope and broader sense?

Before all the new trends, there was an attempt to realize semantic web, e.g. RDF as an XML extension with semantic machine-understandable properties.

When we as human beeings read a website or analyze BIG data, we automatically recognize the context, perhaps the meaning and probably the significance of this data.

Machines can't do that, they didn't have a semantic understanding until now.

Information theory distinguishes between 3 levels of information:

  1. Syntax level (compiler construction, scanner, parser, automata & formal languages, extended grammar, e.g. https://en.wikipedia.org/wiki/Context-free_grammar
  2. Semantic level (meaningful reading by people, putting things into context, understanding contexts).
  3. Pragmatic level (goal-oriented action based on information by recognizing the meaning at the level of semantics).

I assume / postulate:

=> If computer programs reach 2. semantic level => then we are a big step closer to AI realization.


Why computer programs can't already implement semantic understandig? 

Theoretically and also practically in terms of technical frameworks, computer programs are already able to understand semantically data.

The concrete problem is here, that too little data are provided in a semantically machine-readable form and a standardized (META-)language.

Example: Regardless of whether Statistics Austria, Open Data GV or ECB, etc, certainly provide very good statistics, but none of them provide semantic machine-readable data.

Somebody has to make here a  larger startup, to transform already provided common and needed statistics public data in semantically machine-readable form.


What does that actually bring in return of short time invest?

Not so much immediately!

What could be the fruits in mid-term or in the long tail?

A lot, because when more and more public open data are availible in a semantic machine readable language, programs can also bring some of them in association and we'll be able to implement meta relational AI rules then.

Use case contracts

Semantic programs doesn't only mean mass data fetching and putting them into relation. 
Semantic programming could also in principle support any very formal business process, e.g. contract management for

  • employment contracts
  • supply contracts
  • service provider contracts
  • insurance contracts
  • bank contracts 
  • and all the contracts that people sign with just one click on a checkbox (which they usually do not know that this is a legal contract consent).


All clear and understandable so far?

I got this idea when I was looking and inspecting the adopted amendment to the laws and newly passed laws by the democratic republic of Austria and I wanted some semantic automated statistics for some use cases. 

For details look at post https://www.facebook.com/heinrich.elsigan.9/posts/156458906318533
or read the post copy below:

2021-03-22

Anyone expirience with com.huawei.ridemode for real?


android.manifest looks quiet dangerous

<?xml version="1.0" encoding="utf-8"?>

<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system"
android:versionCode="910014"
android:versionName="9.10.14"
android:compileSdkVersion="28"
android:compileSdkVersionCodename="9"
package="com.huawei.ridemode"
platformBuildVersionCode="28"
platformBuildVersionName="9">

<uses-sdk
android:minSdkVersion="28"
android:targetSdkVersion="28" />

<uses-permission
android:name="com.android.soundrecorder.permission.READ_RECORD" />

<uses-permission
android:name="android.permission.WRITE_SECURE_SETTINGS" />

<uses-permission
android:name="android.permission.WRITE_SETTINGS" />

<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission
android:name="android.permission.READ_PHONE_STATE" />

<uses-permission
android:name="android.permission.READ_CONTACTS" />

<uses-permission
android:name="android.permission.BLUETOOTH" />

<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permission
android:name="android.permission.SEND_SMS" />

<uses-permission
android:name="android.permission.WRITE_SMS" />

<uses-permission
android:name="android.permission.GET_TASKS" />

<uses-permission
android:name="com.android.systemui.permission.removeTask" />

<uses-permission
android:name="android.permission.REAL_GET_TASKS" />

<uses-permission
android:name="com.huawei.ridemode.ACCESS" />

<protected-broadcast
android:name="huawei.intent.action.HWRIDEMODE_SEND_SMS" />

<uses-permission
android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

<uses-permission
android:name="com.huawei.server.telecom.permission.DTMFANALYZER_RESULT_RECEIVER" />

<uses-permission
android:name="com.huawei.ims.permission.GET_DTMF_TONE_INFO_RIDE_MODE" />

<permission
android:name="com.huawei.dtmfanalyzer.ACCESS"
android:protectionLevel="0x12" />

<application
android:label="@ref/0x7f090003"
android:icon="@ref/0x7f020020"
android:name="com.huawei.ridemode.RideModeApplication"
android:allowBackup="false"
android:supportsRtl="true">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />

<activity
android:label="@ref/0x7f090003"
android:name="com.huawei.ridemode.RideModeActivity"
android:permission="com.huawei.ridemode.ACCESS"
android:taskAffinity="@string/0x1b"
android:excludeFromRecents="true"
android:configChanges="0x4a0">

<intent-filter>

<action
android:name="huawei.intent.action.RIDEMODE_SETTINGS" />

<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity
android:theme="@ref/0x01030010"
android:name="com.huawei.ridemode.RideModeStartActivity"
android:exported="true"
android:taskAffinity="@string/0x1b"
android:excludeFromRecents="true"
android:configChanges="0x4a4">

<intent-filter>

<action
android:name="android.intent.action.MAIN" />

<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:theme="@ref/0x0103006e"
android:name="com.huawei.ridemode.ContactActivity"
android:exported="false"
android:configChanges="0x4a0">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<activity
android:theme="@ref/0x0103006e"
android:label="@ref/0x7f090005"
android:name="com.huawei.ridemode.settings.AutoAnswerVoiceSelectionActivity"
android:exported="false"
android:screenOrientation="1"
android:windowSoftInputMode="0x20"
android:uiOptions="0x1">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<activity
android:theme="@ref/0x0103006e"
android:label="@ref/0x7f090008"
android:name="com.huawei.ridemode.settings.RideModeTextSettings"
android:exported="false"
android:configChanges="0x4a0">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<activity
android:theme="@ref/0x0103006e"
android:label="@ref/0x7f090024"
android:name="com.huawei.ridemode.settings.RideTrackingSettings"
android:exported="false"
android:configChanges="0x4a0">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<activity
android:theme="@ref/0x0103006e"
android:label="@ref/0x7f090006"
android:name="com.huawei.ridemode.settings.AutoMessageSelectionActivity"
android:exported="false"
android:configChanges="0x4a0"
android:uiOptions="0x1">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<activity
android:theme="@ref/0x0103006e"
android:label="@ref/0x7f090027"
android:name="com.huawei.ridemode.RideAnalyticsActivity"
android:exported="false"
android:screenOrientation="1"
android:uiOptions="0x1">

<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui" />
</activity>

<receiver
android:name="com.huawei.ridemode.RideModeBroadcastReciever"
android:permission="com.huawei.ridemode.ACCESS">

<intent-filter>

<action
android:name="huawei.intent.action.HWRIDEMODE_STOP" />

<action
android:name="huawei.intent.action.HWRIDEMODE_START" />

<action
android:name="huawei.intent.action.HWRIDEMODE_SEND_SMS" />
</intent-filter>
</receiver>

<service
android:name="com.huawei.ridemode.service.RideModeEnableService"
android:exported="false" />

<service
android:name="com.huawei.ridemode.service.RideModeDisableService"
android:exported="false" />

<service
android:name="com.huawei.ridemode.service.RideModeShowDialogService"
android:exported="false" />

<service
android:name="com.huawei.ridemode.service.RideModeIntentService"
android:exported="false" />

<service
android:name="com.huawei.ridemode.service.GPSLocationHelperService"
android:exported="false" />

<service
android:name="com.huawei.ridemode.dtmfanalyzer.DtmfAnalyzerService"
android:permission="com.huawei.dtmfanalyzer.ACCESS"
android:exported="false"
android:singleUser="true" />

<provider
android:name="com.huawei.ridemode.provider.RideModeProvider"
android:exported="false"
android:authorities="com.huawei.ridemode" />
</application>
</manifest>


class SubTabFragmentPagerAdapter.java very funny

.class public Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;
.super Landroid/support/v13/app/FragmentPagerAdapter;
.source "SubTabFragmentPagerAdapter.java"

# interfaces
.implements Lhuawei/android/widget/SubTabWidget$SubTabListener;
.implements Landroid/support/v4/view/ViewPager$OnPageChangeListener;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    }
.end annotation


# instance fields
.field private final mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

.field private final mSubTabs:Ljava/util/ArrayList;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/ArrayList<",
            "Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;",
            ">;"
        }
    .end annotation
.end field

.field private final mViewPager:Landroid/support/v4/view/ViewPager;


# direct methods
.method public constructor (Landroid/app/Activity;Landroid/support/v4/view/ViewPager;Lhuawei/android/widget/SubTabWidget;)V
    .registers 5
    .param p1, "activity"    # Landroid/app/Activity;
    .param p2, "pager"    # Landroid/support/v4/view/ViewPager;
    .param p3, "subTabWidget"    # Lhuawei/android/widget/SubTabWidget;

    .line 51
    invoke-virtual {p1}, Landroid/app/Activity;->getFragmentManager()Landroid/app/FragmentManager;

    move-result-object v0

    invoke-direct {p0, v0}, Landroid/support/v13/app/FragmentPagerAdapter;->(Landroid/app/FragmentManager;)V

    .line 28
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;->()V

    iput-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    .line 56
    iput-object p3, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    .line 57
    iput-object p2, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    .line 58
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    invoke-virtual {v0, p0}, Landroid/support/v4/view/ViewPager;->setAdapter(Landroid/support/v4/view/PagerAdapter;)V

    .line 59
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    invoke-virtual {v0, p0}, Landroid/support/v4/view/ViewPager;->setOnPageChangeListener(Landroid/support/v4/view/ViewPager$OnPageChangeListener;)V

    .line 60
    return-void
.end method

.method public constructor (Landroid/app/FragmentManager;Landroid/content/Context;Landroid/support/v4/view/ViewPager;Lhuawei/android/widget/SubTabWidget;)V
    .registers 6
    .param p1, "fm"    # Landroid/app/FragmentManager;
    .param p2, "context"    # Landroid/content/Context;
    .param p3, "pager"    # Landroid/support/v4/view/ViewPager;
    .param p4, "subTabWidget"    # Lhuawei/android/widget/SubTabWidget;

    .line 65
    invoke-direct {p0, p1}, Landroid/support/v13/app/FragmentPagerAdapter;->(Landroid/app/FragmentManager;)V

    .line 28
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;->()V

    iput-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    .line 70
    iput-object p4, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    .line 71
    iput-object p3, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    .line 72
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    invoke-virtual {v0, p0}, Landroid/support/v4/view/ViewPager;->setAdapter(Landroid/support/v4/view/PagerAdapter;)V

    .line 73
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    invoke-virtual {v0, p0}, Landroid/support/v4/view/ViewPager;->setOnPageChangeListener(Landroid/support/v4/view/ViewPager$OnPageChangeListener;)V

    .line 74
    return-void
.end method

.method private setCurrentItem(Lhuawei/android/widget/SubTabWidget$SubTab;)V
    .registers 5
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 195
    invoke-virtual {p1}, Lhuawei/android/widget/SubTabWidget$SubTab;->getTag()Ljava/lang/Object;

    move-result-object v0

    instance-of v0, v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    if-eqz v0, :cond_2a

    .line 196
    invoke-virtual {p1}, Lhuawei/android/widget/SubTabWidget$SubTab;->getTag()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    .line 197
    .local v0, "tag":Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    const/4 v1, 0x0

    .local v1, "i":I
    :goto_f
    iget-object v2, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v2}, Ljava/util/ArrayList;->size()I

    move-result v2

    if-ge v1, v2, :cond_2a

    .line 198
    iget-object v2, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v2, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v2

    if-ne v2, v0, :cond_27

    .line 200
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 202
    iget-object v2, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mViewPager:Landroid/support/v4/view/ViewPager;

    invoke-virtual {v2, v1}, Landroid/support/v4/view/ViewPager;->setCurrentItem(I)V

    .line 197
    :cond_27
    add-int/lit8 v1, v1, 0x1

    goto :goto_f

    .line 206
    .end local v0    # "tag":Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    .end local v1    # "i":I
    :cond_2a
    return-void
.end method


# virtual methods
.method public addSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;ILandroid/app/Fragment;Landroid/os/Bundle;Z)V
    .registers 8
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;
    .param p2, "position"    # I
    .param p3, "frag"    # Landroid/app/Fragment;
    .param p4, "args"    # Landroid/os/Bundle;
    .param p5, "selected"    # Z

    .line 100
    invoke-virtual {p3}, Landroid/app/Fragment;->isAdded()Z

    move-result v0

    if-nez v0, :cond_f

    invoke-virtual {p3}, Landroid/app/Fragment;->isDetached()Z

    move-result v0

    if-nez v0, :cond_f

    .line 101
    invoke-virtual {p3, p4}, Landroid/app/Fragment;->setArguments(Landroid/os/Bundle;)V

    .line 103
    :cond_f
    new-instance v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    invoke-direct {v0, p3, p4}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->(Landroid/app/Fragment;Landroid/os/Bundle;)V

    .line 104
    .local v0, "info":Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    invoke-virtual {p1, v0}, Lhuawei/android/widget/SubTabWidget$SubTab;->setTag(Ljava/lang/Object;)Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 105
    invoke-virtual {p1}, Lhuawei/android/widget/SubTabWidget$SubTab;->getCallback()Lhuawei/android/widget/SubTabWidget$SubTabListener;

    move-result-object v1

    if-nez v1, :cond_20

    .line 106
    invoke-virtual {p1, p0}, Lhuawei/android/widget/SubTabWidget$SubTab;->setSubTabListener(Lhuawei/android/widget/SubTabWidget$SubTabListener;)Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 109
    :cond_20
    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v1, p2, v0}, Ljava/util/ArrayList;->add(ILjava/lang/Object;)V

    .line 111
    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v1, p1, p2, p5}, Lhuawei/android/widget/SubTabWidget;->addSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;IZ)V

    .line 112
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 113
    if-nez p5, :cond_40

    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v1}, Lhuawei/android/widget/SubTabWidget;->getSelectedSubTab()Lhuawei/android/widget/SubTabWidget$SubTab;

    move-result-object v1

    if-eqz v1, :cond_40

    .line 114
    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v1}, Lhuawei/android/widget/SubTabWidget;->getSelectedSubTab()Lhuawei/android/widget/SubTabWidget$SubTab;

    move-result-object v1

    invoke-direct {p0, v1}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->setCurrentItem(Lhuawei/android/widget/SubTabWidget$SubTab;)V

    .line 116
    :cond_40
    return-void
.end method

.method public addSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;Landroid/app/Fragment;Landroid/os/Bundle;Z)V
    .registers 7
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;
    .param p2, "frag"    # Landroid/app/Fragment;
    .param p3, "args"    # Landroid/os/Bundle;
    .param p4, "selected"    # Z

    .line 80
    invoke-virtual {p2}, Landroid/app/Fragment;->isAdded()Z

    move-result v0

    if-nez v0, :cond_f

    invoke-virtual {p2}, Landroid/app/Fragment;->isDetached()Z

    move-result v0

    if-nez v0, :cond_f

    .line 81
    invoke-virtual {p2, p3}, Landroid/app/Fragment;->setArguments(Landroid/os/Bundle;)V

    .line 84
    :cond_f
    new-instance v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    invoke-direct {v0, p2, p3}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->(Landroid/app/Fragment;Landroid/os/Bundle;)V

    .line 85
    .local v0, "info":Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    invoke-virtual {p1, v0}, Lhuawei/android/widget/SubTabWidget$SubTab;->setTag(Ljava/lang/Object;)Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 87
    invoke-virtual {p1}, Lhuawei/android/widget/SubTabWidget$SubTab;->getCallback()Lhuawei/android/widget/SubTabWidget$SubTabListener;

    move-result-object v1

    if-nez v1, :cond_20

    .line 88
    invoke-virtual {p1, p0}, Lhuawei/android/widget/SubTabWidget$SubTab;->setSubTabListener(Lhuawei/android/widget/SubTabWidget$SubTabListener;)Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 91
    :cond_20
    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v1, v0}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 92
    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v1, p1, p4}, Lhuawei/android/widget/SubTabWidget;->addSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;Z)V

    .line 93
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 94
    return-void
.end method

.method public getCount()I
    .registers 2

    .line 152
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I

    move-result v0

    return v0
.end method

.method public getItem(I)Landroid/app/Fragment;
    .registers 3
    .param p1, "position"    # I

    .line 139
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v0, p1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    invoke-static {v0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->access$000(Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;)Landroid/app/Fragment;

    move-result-object v0

    return-object v0
.end method

.method public onPageScrollStateChanged(I)V
    .registers 2
    .param p1, "state"    # I

    .line 160
    return-void
.end method

.method public onPageScrolled(IFI)V
    .registers 5
    .param p1, "position"    # I
    .param p2, "positionOffset"    # F
    .param p3, "positionOffsetPixels"    # I

    .line 166
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v0, p1, p2}, Lhuawei/android/widget/SubTabWidget;->setSubTabScrollingOffsets(IF)V

    .line 167
    return-void
.end method

.method public onPageSelected(I)V
    .registers 3
    .param p1, "position"    # I

    .line 172
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v0, p1}, Lhuawei/android/widget/SubTabWidget;->setSubTabSelected(I)V

    .line 173
    return-void
.end method

.method public onSubTabReselected(Lhuawei/android/widget/SubTabWidget$SubTab;Landroid/app/FragmentTransaction;)V
    .registers 3
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;
    .param p2, "ft"    # Landroid/app/FragmentTransaction;

    .line 180
    return-void
.end method

.method public onSubTabSelected(Lhuawei/android/widget/SubTabWidget$SubTab;Landroid/app/FragmentTransaction;)V
    .registers 3
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;
    .param p2, "ft"    # Landroid/app/FragmentTransaction;

    .line 185
    invoke-direct {p0, p1}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->setCurrentItem(Lhuawei/android/widget/SubTabWidget$SubTab;)V

    .line 186
    return-void
.end method

.method public onSubTabUnselected(Lhuawei/android/widget/SubTabWidget$SubTab;Landroid/app/FragmentTransaction;)V
    .registers 3
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;
    .param p2, "ft"    # Landroid/app/FragmentTransaction;

    .line 192
    return-void
.end method

.method public removeAllSubTabs()V
    .registers 2

    .line 130
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v0}, Ljava/util/ArrayList;->clear()V

    .line 131
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v0}, Lhuawei/android/widget/SubTabWidget;->removeAllSubTabs()V

    .line 132
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 133
    return-void
.end method

.method public removeSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;)V
    .registers 3
    .param p1, "subTab"    # Lhuawei/android/widget/SubTabWidget$SubTab;

    .line 120
    invoke-virtual {p1}, Lhuawei/android/widget/SubTabWidget$SubTab;->getPosition()I

    move-result v0

    invoke-virtual {p0, v0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->removeSubTabAt(I)V

    .line 121
    return-void
.end method

.method public removeSubTabAt(I)V
    .registers 4
    .param p1, "position"    # I

    .line 124
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v0, p1}, Ljava/util/ArrayList;->remove(I)Ljava/lang/Object;

    .line 125
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    iget-object v1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabWidget:Lhuawei/android/widget/SubTabWidget;

    invoke-virtual {v1, p1}, Lhuawei/android/widget/SubTabWidget;->getSubTabAt(I)Lhuawei/android/widget/SubTabWidget$SubTab;

    move-result-object v1

    invoke-virtual {v0, v1}, Lhuawei/android/widget/SubTabWidget;->removeSubTab(Lhuawei/android/widget/SubTabWidget$SubTab;)V

    .line 126
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 127
    return-void
.end method

.method public setItem(Landroid/app/Fragment;I)V
    .registers 4
    .param p1, "fm"    # Landroid/app/Fragment;
    .param p2, "position"    # I

    .line 144
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->mSubTabs:Ljava/util/ArrayList;

    invoke-virtual {v0, p2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    .line 145
    .local v0, "info":Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
    invoke-virtual {v0, p1}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->setFragmentItem(Landroid/app/Fragment;)V

    .line 146
    invoke-virtual {p0}, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;->notifyDataSetChanged()V

    .line 147
    return-void
.end method

.class final Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;
.super Ljava/lang/Object;
.source "SubTabFragmentPagerAdapter.java"


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lhuawei/support/v13/app/SubTabFragmentPagerAdapter;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x18
    name = "SubTabInfo"
.end annotation


# instance fields
.field private final args:Landroid/os/Bundle;

.field private fragment:Landroid/app/Fragment;


# direct methods
.method constructor (Landroid/app/Fragment;Landroid/os/Bundle;)V
    .registers 3
    .param p1, "_fragment"    # Landroid/app/Fragment;
    .param p2, "_args"    # Landroid/os/Bundle;

    .line 34
    invoke-direct {p0}, Ljava/lang/Object;->()V

    .line 35
    iput-object p1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->fragment:Landroid/app/Fragment;

    .line 36
    iput-object p2, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->args:Landroid/os/Bundle;

    .line 37
    return-void
.end method

.method static synthetic access$000(Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;)Landroid/app/Fragment;
    .registers 2
    .param p0, "x0"    # Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;

    .line 30
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->fragment:Landroid/app/Fragment;

    return-object v0
.end method


# virtual methods
.method public getArgs()Landroid/os/Bundle;
    .registers 2

    .line 45
    iget-object v0, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->args:Landroid/os/Bundle;

    return-object v0
.end method

.method public setFragmentItem(Landroid/app/Fragment;)V
    .registers 2
    .param p1, "fm"    # Landroid/app/Fragment;

    .line 40
    iput-object p1, p0, Lhuawei/support/v13/app/SubTabFragmentPagerAdapter$SubTabInfo;->fragment:Landroid/app/Fragment;

    .line 41
    return-void
.end method



Emojies in res are even more funny




all calls and usages in classes.dex LOLs em all


2021-02-27

Schlafstörungen, nächtliche Recherche und IBM Security

Aufgrund nächtlicher Schlafstörungen recherierte ich ein wenig, denn für ein komplett neues android system image kompilieren, war ich trotzdem viel zu müde.

Dabei fand ich diese netten IBM Security Produkte und noch ein par andere Dinge:


IBM's still alive


IBM Security Trusteer Mobile SDK

Hier gibts so ein trusted mobile device (andoid, iphone, tablet) SDK (Software Development Kit), das Kompromittierungen (root, hacked, jail-breaked, untergeschobene root-CAs um SSL aufzubrechen und evtl. Staatstrojaner und ähnliches erkennt). Jedenfalls sollten Entwickler damit sicherere verteilte Anwendungen für Cloud u.s.w. hochverfügbar implemetieren können:

https://www.ibm.com/products/trusteer-mobile-sdk

Mobile device management (MDM) solutions

Das hier ist auch so eine mobile security Geschichte, die mobile Geräte Sicherheit der Mitarbeiter garantieren will. Also so kein "Nachhause-Telefonieren" durch irgendwelche untergejubelten Drittanbieter Apps, klassische End-2-EndPoint Secuirty, u.s.w.

https://www.ibm.com/security/mobile/mobile-device-management

IBM Security Products (case study fraud detection)

Dann zeigt IBM weiter noch, dass es auch eine standardisierte Fraud detection (wahrscheinlich generisch erweiterbar) kann! Ich schätze diese Fraud Detection Engine geht wahrscheinlich über Insolvenzregister, KSV, Casinosperre, Standardbonitätabfragen und dubiose exotische Prepaid oder sontige WireCreditCards hinaus und lernt kontinuierlich (à la Virenscanner):

https://www.ibm.com/security/products

nomachine.com

Zu guter letzt fand ich noch einen sicheren Terminal-Server (diesmal nicht IBM, den sich auch mal wer ansehen könnte):

https://www.nomachine.com/product&p=NoMachine%20Enterprise%20Terminal%20Server




Gehe jetzt wieder ins Bett, gute Nacht / guten Morgen.


2021-02-05

No global plan for generic multi-language globalization/localizaion

There is sadley no generic concept for platform and language independent multi language globalization / localization for applications.

Some case studies


Visual Studio WinForms (C#VB)

Globalization / Localization in Windows Forms is implemented via different resource files (.resx).
ResourceManager and Resource accessors are created semi automatically from Visual Studio.

Visual Studio 2019
Resources in .NET


Microsoft and Stockoverflow links about resources and globalization and culture info.

Android Studio (Java, Kotlin)

Globalization / Localization are realised in Android Studio via different language directories beyond the res folder:

Using the Translation Editor inside Resource Manager to build your translation from Android Studio GUI, see: http://blog.androidrich.com/2016/11/translation-editor-in-android-studio.html



Android supports right to left screen orientation too for arab or farsi languages.

Documentation about globalization / localization in android

Razor MVC and Blazor Web

Webpages, that are build with .NET framework and deployed in IIS on windows or Apache on linux (no matter with mod_mono or something else [1]) use language and country prefix directly after FQDN and before path in url to route to different language subpages, e.g.:
https://docs.microsoft.com/en-us/aspnet/core/blazor/globalization-localization
https://docs.microsoft.com/de-at/aspnet/core/blazor/globalization-localization
https://docs.microsoft.com/fr-fr/aspnet/core/blazor/globalization-localization



Multi-language globalization in reality

In reality in the world wide web and on desktop or other applications, there are many different approaches how multi-language and globalization is implemented. Only few use a auto translation API like google.com/translate.

Prospect / outlook for standardized globalization?

I don't know. Lets use the crowd to answer that question!

2020-11-02

Snaps, snapd,, Snap Store, snapcraft.io

Tonight in the early morn, when I tried to write(1) an open os based solution(2) to transform almost any modern personal computer or laptop(3) to a simple generic wifi router(4).

Then I unexpectedly found a  community platform, that was still unknown to me:

snapcraft.io

Snaps are there defined as  app packages for desktop, cloud and IoT that are easy to install, secure, cross‐platform and dependency‐free. Snaps are discoverable and installable from the Snap Store, the app store for Linux with an audience of millions, 


I tried first the search functionality of that platform and let's say clearly: 
The layout design looks excellent, the community is well visited, but some functions could be better. Lets look at these 2 examples: 
Searching common phrase file
Searching 1 char only d  
Search results also could be sorted more meaningful & understandable, e.g. 
  1. show all results, where the search phrase  directly corresponds to the package app name /(no matter if sql like (prefix, suffix, substring), sql fulltext match or Levenstein distance.
  2. then show all results, where the search phrase is found in the shown package descripton
  3. at least show all results, that appear like a magical fog or smoke for the user. I know, that your search function is probably not returning total random or bad fuzzy hit results, but I guess the search algorithm searches in fields, which are not shown in search result view.




Snapcraft web site provides at the moment the snap app package search page, a store, tutorials, documentation, developer blog, forum and IOT special bulletin.


Conclusio: Snapcraft has surly more potential, but additional functionality must be added and especially a more clear vision and road-map needs to be specified, followed and permanently filled with life. (Under my point of view, without any additional improvements, vision and road-map the project and the community won't grow up and then after some time, this will remain as small circle of developer project or even become orphaned.)
So far I see this nevertheless as an good opportunity for developers and community to get seen and to receive good jobs offers.

Simply said: Thou must have very soon an idea, where this should go and what exactly you want with  it. If thou don't want to expand and keep this project as a nice and gentle private hobby, then you can keep everything and don't have to change anything. But if you want to expand, become at least a small player for long time, ...


2020-08-10

State management in Blazor

There is a sufficient document for state management in Blazor.
Here is a quick & fast work through with all prerequisites, how to get state management in Blazor working.

Example with Blazored.LocalStorage package


Install nuget package for your project

# Find packages providing a "Blazored.LocalStorage" 
Find-Package Blazored.LocalStorage
# install "Blazored.LocalStorage"  Install-Package Blazored.LocalStorage -Project YourProject# alternatively

Add Blazored.LocalStorage to ConfigureServices at your Startup.cs

using System;
/* ... */
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
/* ... */
using Blazored.LocalStorage;
public class Startup {   /* ... */     public void ConfigureServices(IServiceCollection services)  {      /* ... */     services.AddRazorPages();      services.AddServerSideBlazor();     /* ... */     services.AddBlazoredLocalStorage();     /* ... */   } }

Using LocalStorage inside a razor page / control

@page "/MyPage"
using Blazored.LocalStorage
@inject ILocalStorageService localStorage
@code {
  /* ... */
  Dictionary<stringstring> sessionDict;
  /* ... */
  protected override async Task OnAfterRenderAsync(bool firstRender)  { 
    
if (firstRender)    {
      sessionDict = 
        await localStorage.GetItemAsync<Dictionary<stringstring>>("SessDict");       StateHasChanged();     }    await base.OnAfterRenderAsync(firstRender);   }          protected async Task PersistSessionDict(<Dictionary<stringstring> persistDict) { if (persistDict != sessionDict) { await localStorage.SetItemAsync("SessDict", persistDict); } } }

Using LocalStorage inside an entity class

using System;
/* ... */
using Blazored.LocalStorage;
 
public class MyEntity
{
  [Inject] 
  public ILocalStorageService LS
  {  
    get => _localStorage;
    set => value;
  }
  private ILocalStorageService _localStorage; 



  interal async Task<Dictionary<stringstring>> GetSessionDict() =>  
      await LS.GetItemAsync<Dictionary<stringstring>>("SessDict");
  /* ... */
}

Example with ProtectedBrowserStorage package


Install nuget package for your project


# Find packages providing a "ProtectedBrowserStorage" 
Find-Package ProtectedBrowserStorage 

# install "Microsoft.AspNetCore.ProtectedBrowserStorage"
Install-Package Microsoft.AspNetCore.ProtectedBrowserStorage -Project YourProject
# alternatively install "ProtectedBrowserStorage.NETStandard"  
Install-Package ProtectedBrowserStorage.NETStandard -Project YourProject


Add ProtectedBrowserStorage to ConfigureServices at your Startup.cs

using System;
/* ... */
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
/* ... */
using Microsoft.AspNetCore.ProtectedBrowserStorage;

public class Startup {   /* ... */   public void ConfigureServices(IServiceCollection services) {       /* ... */     services.AddRazorPages();      services.AddServerSideBlazor();     /*... */     services.AddProtectedBrowserStorage();     /* ... */   } }

Using ProtectedBrowserStorage inside a razor page / control

@page "/MyPage"
@using Microsoft.AspNetCore.ProtectedBrowserStorage
@inject ProtectedSessionStorage ProtectedSessionStore
@code {   /* ... */   Dictionary<string, string> sessionDict;   /* ... */   protected override async TaskOnAfterRenderAsync(boolfirstRender)   {      if(firstRender)     {       sessionDict =         await ProtectedSessionStore.GetAsync<Dictionary<string, string>>("SessDict");       StateHasChanged();     }     await base.OnAfterRenderAsync(firstRender);   }     protected async Task PersistSessionDict(Dictionary<stringstring> persistDict) { if (persistDict != sessionDict) { await ProtectedSessionStore.SetAsync("SessDict", persistDict); } } }

Sources and links: