Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of...

45
Funambol Java™ Platform, Java ME Technology-Based Open-Source Messaging Client: Lessons Learned Edoardo Schepis, Java ME Tech Lead Session: TS-4992

Transcript of Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of...

Page 1: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

Funambol Java™ Platform, Java ME Technology-Based Open-Source Messaging Client: Lessons LearnedEdoardo Schepis, Java ME Tech LeadSession: TS-4992

Page 2: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 2

What developers should know about building open source Java Platform, Micro Edition (Java ME platform) messaging applications for the mass market

How to build synchronization clients for Java ME technology-based devices, starting from the Funambol Java ME SDK

Page 3: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 3

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 4: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 4

Agenda

IntroductionFunambol Java ME SDKPush e-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 5: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 5

SynchronizationData synchronization is the process of makingtwo sets of data look identical

Which means• Exchange data modifications• Conflict resolution

Synchronization Protocol Features• Define a method for establishing a synchronization session and

communicating modifications• Record naming and identification• Define protocol commands

Page 6: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 6

Synchronization

Why do we need it?• PDA, Handsets, iPod, Outlook, Thunderbird, Skype, Gmail, Yahoo,

Jajah, Facebook, Web...• Mail, Contacts, Calendar• But also bookmarks, SMS, MP3, documents, files...• Mobile field work force

The common usage• PC Suite, Bluetooth, Active Sync, iSync: wired and PC

Over the Air is the key• Data plans• It just works• Wider support

Page 7: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 7

OTA Synchronization with mobile devices

OMA DS (former SyncML)• Platform independent• Open

Uses SyncML to automatically synchronize• Contacts (address book), including photos • Calendar• Tasks and notes• Additional and custom data types

Server maintains backup of PIM dataData can be accessed via webFull capabilities for mobile backup service

Page 8: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 8

Native sync or not?

Native is good, but...• Not always available (branding phones...)• Native clients not so easy to configure (even to find...)

Do not reinvent the wheel, just make it better• For all the handsets

• Java ME Platform, Windows Mobile, Linux, Blackberry, Android, iPhone• For all the clients

• Outlook, Thunderbird, Evolution• For all the Mail/PIM servers

• POP, IMAP, Exchange...

Page 9: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 9

Funambol Software Overview

Push• e-mail, contacts and calendar

Mobile Backup & PIM SyncMobile Device ManagementMobilizing Data & Applications

Page 10: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 10

Funambol Software Overview

Funambol Server

1.5B+ DevicesNokiaMotorolaSony EricssonSamsungLGSyncMLWin MobileJava MEiPhoneAndroid*

Push Email

PIMSync

OTAConfig

MobilePlatform

Email/PIMPOP/IMAPYahoo!HotmailGmailAOLOutlookExchange*Domino*Thunderbird*Custom/3rd party

*Community project

Funambol Portal

Page 11: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 11

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 12: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 12

Funambol Java ME SDKMIDP 2.0, CLDC 1.0, WMA 1.1

SyncML API (∼24kb)• Transport• Sync Protocol• Sync Source

Mail API (∼15kb)• MIME std parser• Multipart support

Common (∼30kb)• Push

• SMS• TCP/IP

• Storage• FileSystem• RMS / Blackberry

• Utils

JavaME API

Common

SyncML Mail

Sync Application

Page 13: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 13

Funambol SyncML API - 1/2

SyncManager• Handles communication and protocol

Sync Source• Client database:

handles items to send and to storeSyncItem• Abstracts objects to sync

Sync Modes• Two way, one way• Refresh

SyncListener• Notifies upper layers

Transport• Http/s, Socket, Bluetooth

JavaME APICommon

Mail

Sync Application

SyncML

Page 14: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 14

Funambol SyncML API - 2/2Data Synchronization Layer Class Diagram

+ getNextItem(): SyncItem+ getNextNewItem(): SyncItem+ getNextUpdatedItem(): SyncItem+ getNextDeletedItem(): SyncItem+ setItemStatus(key:String, status: int)

+ addItem(item: SyncItem): int+ updateItem(item: SyncItem): int+ deleteItem(item: SyncItem): int

+ beginSync()+ endSync()

+ getName()+ getSourceURI()+ getType()+ getEncoding()+ getSyncMode()

SyncSource

+ SyncItem(key: String)

> key: String> type: String> state: char> content: byte[]

SyncItem

DeviceConfig

SourceConfig

SyncConfig

+ SyncManager(config: SyncConfig)

+ sync(source: SyncSource): void

SyncManager- config: SyncConfig

BaseSyncSource

+BaseSyncSource(sc: SourceConfig)

Page 15: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 15

Funambol Mail API

Message• Multipart

Mime Formatter and Parser• RFC 2045, 2046

FoldersFlags

JavaME API

Sync Application

Common

MailSyncML

To: <[email protected]>Subject: Today's meetingContent-Type: text/plain;...

Hello, World!

Message

To: <[email protected]>Subject: Today's meetingContent-Type: multipart/mixed;...

Message

Body

Header attributes Header attributes

Body

Multipart

BodyPartHello, World!

BodyPart<br>Hello...

BodyPart[attachment]

Page 16: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 16

Funambol Common Libraries

Push• SMS OTA service• TCP/IP service• Server Alert Notification (SAN)• OTA Configuration

Storage• RMS / Blackberry• File System

Utils• Logging• Base64 and QuotedPrintable• ThreadPool• Serialization

JavaME APICommon

SyncML Mail

Sync Application

Page 17: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 17

How to build a sync-based application

Prepare your SyncSource• Create a configuration for synchronization• Implement sync Items database

Start the sync with SyncManager• Mapping and modifications

Optional:• Create a configuration

• Device capabilities (manufacturer, sw, hw, fw, utc support, ...)• Connect a SyncListener

• Notify upper layers• Filtering

• Size, age and more

JavaME API

Common

SyncML Mail

Sync Application

Page 18: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 18

Let's sync our contactsVcard + JSR75

File format standard for electronic business cards• RFC 2425 and RFC 2426• V2.1 Specification from the Internet Mail Consortium• V3.0 Specification approved by the IETF

Java Specification Request (JSR) 75 (PIM package)BEGIN:VCARDVERSION:2.1N:Schepis;EdoardoFN:Edoardo SchepisORG:FunambolTITLE:JavaME Tech LeadTEL;WORK;VOICE:+1 (650) 701 1450ADR;WORK:;;643 Bair Island Road, Suite 305;Redwood City;CA;94063;United States of AmericaURL;WORK:http://www.edschepis.netEMAIL;PREF;INTERNET:[email protected]:20080309T150456ZEND:VCARD

Page 19: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 19

public Contact getContact(byte[] vCard) {ByteArrayInputStream bis = new

ByteArrayInputStream(vCard);PIMItem[] items = pim.fromSerialFormat(bis, “UTF-8”);return ((Contact) items[0]);

}

Let's sync our contactsJSR75 – get Contact from a VCard

Page 20: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 20

Let's sync our contactsJSR75 – get Vcard from a Contact

...ContactList contactList = (ContactList)

pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);...public byte[] getVCard(Contact c) {

ByteArrayOutputStream os = new ByteArrayOutputStream();

PIM.getInstance().toSerialFormat(c, os, “UTF-8”,

“VCARD/2.1”);return os.toByteArray();

}

Page 21: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 21

... SyncConfig conf = new SyncConfig(); conf.syncUrl = "http://somewhere.com"; conf.username = "user"; conf.password = "pass"; SourceConfig sc = ClientStore.loadMySourceConfig(); ContactSyncSource css = new ContactSyncSource(sc); SyncManager sm = new SyncManager(conf); sm.sync(sc); ClientStore.saveMySourceConfig();...

Let's sync our contactsSynchronize Contact

Page 22: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 22

...<SyncBody>... <!-- status commands --> <Sync><CmdID>3</CmdID> <!-- client side changes --> <Target><LocURI>addressbook</LocURI></Target> <Source><LocURI>addressbook</LocURI></Source> <Replace><CmdID>4</CmdID>

<!-- one client side change --><Meta xmlns="syncml:metinf"> <Type>text/x-vcard</Type><Format>b64</Format></Meta>

<Item><Source><LocURI>1</LocURI></Source> <!-- LUID --><Data>... base 64 encoded content ...</Data>

</Item> </Replace> </Sync> <Final/></SyncBody>...

Let's sync our contactsSyncML content

Page 23: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 23

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 24: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 24

Push E-mail Client 1/2

E-mail on mass market handsets• Java ME Platform• Blackberry too

All standard e-mail functionalityPush• SMS and TCP based

Advanced features e.g.• Send Photo• Call sender• Integrated address book eliminates typing of e-mail addresses on

phoneAdvertising

Page 25: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 25

Push E-mail Client 2/2

Page 26: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 26

Push Implementation

Client waits for server push• The ds-server detects updates on mail server and notifies the

registered clientUsing SMS (also with app. off)• The app is registered with PushRegistry for incoming SMS

Using Socket (only with app. on)• CTP

• The app manages a socket open with the server (CTP server) that uses it for sending notifications

• STP• The app starts a serversocket and waits for server notifications• IP natting, proxies and gateways

• Socket and PushRegistry• Specs are always right... but app. closed means no connection on many

devices and therefore no IP address

Page 27: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 27

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 28: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 28

ObjectOriented vs. Performance and Fragmentation

How much does OO still flows in our veins?• Fat classes• “if” vs. polymorphism• Preprocessing

• AntennaProvide the best User Experience with • 800kb of Heap space...• 512kb of RMS• 100kb of jar (suggested)

Fragmentation• Targeting consumers means building many bundles• Platforms: the latest not always means the best• Branding phones: same device but with fw variant

Page 29: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 29

Certification process - 1/2

Trusted 3rd party Certification• to avoid requests for permissions to the user

• network, multimedia, PIM and filesystem access, SMS usage, autostart• to bypass security restriction of carrier-branded phones• To access restricted API

Verisign/Thawte• Developers own private key• Certificate in chain• Very popular• Pay once in a year

Java Platform Verified Program• GeoTrust• Pay per device/per release• Testing house applies UTI general criteria (don't mind if the sync

works)• The only viable solution for Motorola devices

Page 30: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 30

Certification process - 2/2

Carriers security restrictions• No “Ask Once” for network connections: client-server apps become

impractical and unrealistic• No Push Registration• No JSR 75 access• ... some carriers avoid also to play a MIDI file (!)

Need an agreement with mobile operators or manufacturers to enter in operator/manufacturer trusted domain• Full access to all the API• No user prompts

Page 31: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 31

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 32: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 32

Funambol is Mobile Open Source

Community Edition• AGPLv3 (Affero GPL)• Fixing the ASP loophole (SaaS):

• “If you change or add to the code and you use the software as the basis of an Internet or network-based service, you must publish your code or buy a commercial license”

• http://www.fsf.org/licensing/licenses/agpl-3.0.htmlFunambol CommEd Contains:• A data synchronization (DS) server that works on Linux and Windows• Mobile device clients e.g. Windows Mobile, Java ME Platform, Outlook,

iPod• E-mail connector that supports POP and IMAP e-mail systems• Administrator tool• Software development kits and interfaces• Documentation• Community projects, support for Exchange, Domino, BlackBerry and

more

Page 33: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 33

Why Open Source in mobile matters?

Broadest device compatibilityFirst to market advantageLargest mobile open source communityMobile innovation, resources and supportComplete code transparencyReduced riskLow cost

Page 34: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 34

Developing open source software

Everybody watches you! (therefore write good code)You belong to a Company and to a CommunityEveryone is in the spotlightCommunities need frameworks - Customers need products

Page 35: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 35

Community Programs

Code Sniper• Awards bounties of up to several

thousand dollars for the development of connectors, plug-ins, client and synclets by Community Members

• Enable the Community to influence the direction and reach of the Funambol Project through direct contribution of open source code

• New: connectors for Social Networking

Phone Sniper• Awards bounties to Community

Members for testing Funambol on mobile devices

Page 36: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 36

Funambol CommunityHall of Fame

Mike Taczak, Nguyen Mai (USA)http://www.mailtrust.com• Blackberry Plugin• iPhone

Patrick Ohly (Germany)http://www.estamos.de• SyncEvolution• iPhone

Carlo Codega (Italy)http://sazilla.blogspot.com• Mozilla Sync • Android Sync

Paulo Sergio (Portugal)• Gmail Sync Plugin

http://sf.net/projects/funambol-gmail• Yahoo Sync Plugin

http://sf.net/projects/funambolyahoo

Page 37: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 37

Agenda

IntroductionFunambol Java ME SDKPush E-mail ClientWrite Once...Mobile Open SourceOn the edge

Page 38: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 38

The new generation of clients

AndroidiPhoneLinux Devices: OpenMoko, QtopiaSymbian

Page 39: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 39

Android

To make a sync application for Android, you should have:• An Activity controlling the main UI (start sync,

choose items)• Some other activities for Settings, About, etc.• A Service to actually doing the sync

When the user starts the sync:• The Activity trigger the service using

startService() with an Intent• The service is started and the method

onStart() is calledThe Service talks back to the app using Intent to notify the sync progress

http://code.google.com/p/funambol/

Page 40: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 40

iPhone

a Safari browser web app for all usersa native app for developers and advanced users that have "jailbroken" their iPhone• Based on SyncEvolution• Compiled for iPhone and

connected to the (undocumented) AddressBook interface

• A simple COCOA user interface and the game is done!

We are designing the new version of the client, based on the Apple SDK

http://www.funambol.com/solutions/iphone.php

Page 41: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 41

For More Information

Funambol Open Source• http://www.funambol.com/opensource

Funambol SDK and Documentation• http://www.funambol.com/opensource/downloads.php

Code Sniper• http://www.funambol.com/opensource/codesniper.php

SyncML - Data Synchronization and Device Management• http://www.openmobilealliance.org/syncml/

Page 42: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 42

my.funambol.comSimple set-up of phones for mobile e-mail and PIM syncSupports over 700 device modelsSync, view, edit PIM dataList

Page 43: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 43

Summary

Synchronization• Work in any environment with any device, efficiently and without

configuration/upgrades hassleFunambol SDK• Fast development of your sync-applications

Open Source• The key to beat fragmentation

We are looking for snipers

Page 44: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 44

Page 45: Funambol Java™ Platform, Java ME Technology-Based Open ... · Code Sniper •Awards bounties of up to several thousand dollars for the development of connectors, plug-ins, client

2008 JavaOneSM Conference | java.sun.com/javaone | 45

Edoardo Schepis, Java ME Tech [email protected]