January 17, 2018 Adem Bilican No comments

How I implemented canSnippet’s newsletter campaign with MailChimp

“An email subscriber is worth 100x twitter or LinkedIn followers or whatever other stuff is out there. An email = a real channel” Andrew Chen

    A newsletter is an essential part of your online business/blog/project. It helps you reach your auditors more easily and keep them informed about any update regarding your project. I recently implemented a newsletter for canSnippet, my snippet management tool. I have already heard a lot about MailChimp and as it is the most commonly used service (and you can create a free account for small projects) I decided to go with it. I had some difficulties to create my first campaign (I didn’t even know what that meant at the time) so I wanted to share some essential points to help you in the creation of your first newsletter.
    There are 4 easy steps to follow for implementing a newsletter with MailChimp (without counting the fact that you already have a MailChimp account…).

1. Create a List

    This list will contain all the email addresses related to your project. You can have different lists for different projects. Connect to your MailChimp account and click on the Lists button on the top menu.

    Click the Create list button and confirm the creation of a new list. Fill the form with all the required information (you can see an example below).

Click Save to create your first list.

2. Design your forms

    Every event can be linked to a form, be it signup, unsubscibe… You can design all of these forms one by one and with great details. After creating your first list, you can click on the Signup forms tab and select General forms.
    For this simple example of a newsletter, all the forms that we will use are located under General forms except for the “Subscribe” form that will be located under Embedded forms.
There are 5 forms that are useful in case of a newsletter implementation. You can see the details of the required forms in the image below.

Click the image to see the full resolution PDF

You can select every form one by one and modify them as you like. I find the default forms already pretty good, I just added the logo and name of canSnippet on the header for additional personalisation.

3. Creating your first campaign

    You can now create your first Campaign that will correspond to your Welcome message. You can actually implement the Welcome message already in the Signup forms section, under Final Welcome email and tick the Send a final welcome email. Alternatively, you can create a Campaign and send a more personalized email every time a new user subscribes to your newsletter. That’s what we will do now, you can also refer to this approach next time you will create a Campaign.

Go to Campaigns and click Create Campaign, click Create an Email and give a name to your campaign.

Select Automated as we want the email to be sent every time a new user registers to our newsletter and select Welcome new subscribers.

In the next step just select the list we created earlier (so-called newsletter).
The final window corresponds to the heart of your campaign and will contain all the required information.
To send an automatic email every time an event is detected you need to adjust the trigger. Click Edit trigger and on the Delay section click on the drop-down menu and select Immediately and click Update Trigger.

4. Design your Welcome email

    Click Design Email and fill the form as you wish with the Email subject and Preview Text (optional) information. Then, select a template and start designing your welcome email. That’s where all the craziness starts as you can do everything you want. For a welcome email you can just start with a Basic – 1 Column layout and modify the text accordingly by adding an image for example. Then you can simply click Save and Close and click Save and Continue once you are done.

Click Next and review your workflow. If there is any issue, MailChimp will let you know. Finally, click Start workflow and confirm.

That’s it, you are done, enjoy your newsletter and share as much as you can✨

November 24, 2017 Adem Bilican 13 comments

Upload/download images to/from AWS S3 in React-Native: a step-by-step guide

I recently struggled a lot to be able to upload/download images to/from AWS S3 in my React Native iOS app. I wanted to allow users to upload images to S3 and access some of the images from other users… I have a server running on Express (nodejs) and here is how I solved my problem.

1. Create an IAM user

Go to the IAM section on your AWS dashboard, select the Users category from the left side menu and press the Add user button.
1.1 Enter a username (test_user in this example) and select the access type Programmatic access, click Next:Permissions.

1.2 Leave this section as is and click Next:Review.

1.3 Finalize the creation of the user by clicking the Create user button.

1.4 Your new IAM user is created, click the Download .csv button and keep the file somewhere safe as it contains the Secret Access Key of your user. We will need this information later to create pre-signed URLs.

2. Create an AWS S3 bucket

Go to the S3 section on your AWS dashboard and click the + Create bucket button.
2.1 Enter a name for your bucket (test-bucket-tutorial in this example), the name has to be unique. Click Next.

2.2 Leave the default parameters in the Set properties section and click Next (you can always change them later)

2.3 Same for Set permissions, leave the default parameters and click Next

2.4 Review and click Create bucket

2.5 Go to your freshly created bucket and click + Create folder . Name your new folder images.

3. Create policy for your IAM user

So far we created our IAM user and our S3 bucket with an images folder. We now need to give permissions to our IAM user to access the S3 test-bucket-tutorial/images folder.
3.1 Go to your IAM section on your AWS dashboard and click the Policies section.

3.2 Click Create policy and select the JSON tab, then copy-paste the text below on the text input.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test-bucket-tutorial/images"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": ["arn:aws:s3:::test-bucket-tutorial/images/*"]
    }
  ]
}

It should look like the picture below:

3.3 Click Review policy, give a name to your policy (test-bucket-tutorial-policy in this example) and click Create policy

4. Attach policy to your IAM user

Now we need to attach the policy to the user.
4.1 On the Policies section, select our freshly created policy.

4.2 Go to the Attached entities tab and click Attach

4.3 Select the IAM user that we created at Step1 and click Attach policy

Now the user has the permissions (listed in the policy) to access the test-bucket-tutorial/images folder in your S3 bucket.

5. Generating pre-signed URL on the server side

Pre-signed URLs allow you to create a unique URL based on the credentials that you will provide and to safely use this URL on your client-side (without providing the Secret Access Key). As written earlier, I am using expressjs as a back-end, however the code below can easily be adapted to other alternatives.
5.1 Install the node aws-sdk package.

npm install aws-sdk

5.2 Copy-paste the following code to your main javascript code when running your server, this will output the generated pre-signed URL to the console.

var AWS = require('aws-sdk');
var s3 = new AWS.S3({accessKeyId:'XXXXXXXXXXXX', secretAccessKey:'YYYYYYYYYYYY', region:'REGION'});

var params = {Bucket: 'test-bucket-tutorial', Key: 'images/myimage.jpg', ContentType: 'image/jpeg'};
s3.getSignedUrl('putObject', params, function (err, url) {
    console.log('Your generated pre-signed URL is', url);
});
  • Replace XXXXXXXXXXXX by your user’s Access Key ID that you can find on the csv file previously downloaded (Step 1.4)
  • Replace YYYYYYYYYYYY by your user’s Secret Access Key that you can find on the csv file previously downloaded
  • Replace REGION by the region of your AWS S3 bucket, you can find this information here

6. Upload images to S3 from the client-side

My client-side is implemented in React-Native. To allow the user to select a picture and send it to our S3 bucket we will use the ImagePickerIOS component (which is not very highly documented…). Put the code below on your RN app wherever you want it to be run.

ImagePickerIOS.openSelectDialog({}, imageUri => {
    const xhr = new XMLHttpRequest()
    xhr.open('PUT', presignedUrl)
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
            console.log('Image successfully uploaded to S3')
        } else {
            console.log('Error while sending the image to S3')
        }
    }
}
xhr.setRequestHeader('Content-Type', 'image/jpeg')
xhr.send({ uri: imageUri, type: 'image/jpeg', name: 'myimage.jpg'})
}, error => console.log(error));

I adapted the original code that I found in this very helpful article. Change the presignedUrl value with the pre-signed URL that you generated on your server (Step 5.2).

7. Downloading images from the client-side

If you want to download some images to your client app, you need to follow a similar approach with some slight changes:

  • remove the ContentType attribute from the params array
  • use the getObject method instead of putObject

The code will then look like:

var params = {Bucket: 'test-bucket-tutorial', Key: 'images/myimage.jpg'};
s3.getSignedUrl('getObject', params, function (err, url) {
    console.log('Your generated pre-signed URL is', url);
});

This code will generate a unique URL to access your image.
Check the AWS.S3 Documentation page if you want to learn more about the different methods that are available.

8. A concrete example

I personally use these examples in my own project as follow :
1 – The user selects a photo from the Gallery
2 – The RN app sends a request to my Express server with the name (and ID) of the user as the image filename
3 – The nodejs server generates the pre-signed URL adapted to the image filename using the AWS SDK
4 – The server sends the generated pre-signed URL to the RN app
5 – The RN app performs a HTTP request with the pre-signed URL to upload the image to S3

Let me know how it goes for you in the comments 🙂


We can work together

Share this post on social media:

August 10, 2017 Adem Bilican No comments

How to get a specific sequence (chromosome, start, end) from the command line?

In several of my projects, I have to focus on specific regions of a genome, let’s say while looking for binding peaks. It is quite common to download a full genome as a fasta file, or each chromosome separately from Ensembl or NCBI. However, it is difficult to get a specific region of a genome (chromosome, start, end). I didn’t find any easy solution for it so far. Therefore, I focused on using tools available directly from NCBI, the e-utilities.

To get a specific region of the genome one needs to know the GI identifier of the chromosome of interest. Let’s say we are interested in sequences from chromosome 2L of Drosophila melanogaster. The first step is to search for it on the Nucleotide database of NCBI.

Here, we have to note the GI identifier (667674288)

Then, the command to run is

efetch -db=nuccore -format=fasta -id=667674288 -seq_start=12200 -seq_stop=13000

This will return the sequence of chromosome 2L between positions 12200 and 13000 in fasta format as follow:

>AE014134.6:12000-12200 Drosophila melanogaster chromosome 2L
ATTTCATATGTATTCACAACTTCATCACATGCGTAGGTTTCCTTATTATTCTCTGCATCATTTTCTTCCA
ACACAGACTCTTCATTTTCTAATGGTTCTACTGGAACAACGCCAGTGGGTTGCACGACTCTGGACGTGGC
TAAAGCAATACGCTGCAGTTCAGAAGAAGACATCATATACAGTGCTTCTCCAGAGTTTGTA

This command gets really handy when working with multiple regions. One could save all the regions of interest in a tab separated file with one column containing the start position and the other the end positions such as:

12000    12200
13500    13700

and then use awk to get the sequences for all those regions and save it as a fasta file:

awk '{ system("efetch -db=nuccore -format=fasta -id=667674288 -seq_start="$1" -seq_stop="$2" ") }' dmel_chr2L_peaks.txt > dmel_chr2L_peaks.fasta

Enjoy and let me know if you have any alternative solution for this problem.

June 17, 2017 Adem Bilican 14 comments

How to submit an Electron app to the mac appstore?

 

1- Create a Bundle ID for your app

The very first step to be able to send a mac app to the appStore is to create a unique Bundle ID for it:

  • go to your Apple Developer Account
  • click Certificates, IDs & Profiles
  • select macOS in the top-left dropdown list
  • click on App IDs under the Identifiers menu
  • click the + sign on the upper-right part of the screen
  • give a description to your app, choose Explicit App ID and enter a Bundle ID (usually something like com.domain.appname)
  • click Continue and then Register

 

2- Create your developer certificates

You need two types of certificate as a developer to submit an app to the mac appStore:

  • click Certificates, IDs & Profiles
  • select macOS in the top-left dropdown list
  • click on All under the Certificates menu
  • click the + sign on the upper-right part of the screen
  • in the Production section choose Mac App Store
  • in the next page select Mac App Distribution, click Continue
  • create your Certificate Signing Request as indicated, click Continue
  • load your CSR file and download the generated certificate

In addition to the Mac App Distribution certificate, one also need a Mac Installer Distribution certificate. You need to perform the same steps as previously and select Mac Installer Distribution on step 5.
All your certificates should be ready now.
 

3- Package your Electron app

It is now time to prepare your app for the submission. You  first need to install electron-packager. This module will be helpful to create the .app and package everything we need. To install :

npm install electron-packager -g

And then run:

electron-packager . --appname=appName --app-bundle-id=com.domain.appname --version=ELECTRON_VERSION --overwrite --platform=mas --arch=x64 --icon=../appName.icns --prune --out=mas-build --ignore --app-version=1.0.0 --ignore=.+.o$

Change ELECTRON_VERSION to the correct version of Electron installed in your machine (run “electron -v” if you are not sure).
This will create your appName.app in a new folder named mas-build. This is usually enough if you want to distribute your app. However, a few more steps are required to submit it properly to the appStore.
As you can see, you also need the .icns file with the requested icon format. You can check here to see how to prepare the perfect .icns.
 

4- Sign your app

You need then to sign your app, so everybody knows it’s coming from a trustworthy developer 😉
The codesign command already exists by default on mac, you will use it to sign your app. Run the following command by properly adding the name of your certificate and the correct path to your appName.app.

codesign --deep --verbose --force --sign "3rd Party Mac Developer Application: $$$$$ (£££££)" PATH_TO/appName.app
codesign --verify -vvvv PATH_TO/appName.app

 

5-Prepare additional files

5.a- Update the Info.plist

Your app is now signed. The next step is to find your appName.app, right-click and select Show Package Contents.
Go to the Contents folder and open the Info.plist file with a text editor (not Xcode).
Add the following code

<key>ElectronTeamID</key>
<pre><string>TEAM_ID</string>

Just before

...
<code><span class="nt"></dict></span>
<span class="nt"></plist>

Here you need to replace TEAM_ID with your teamID, you can find it on your Apple developer account (click Membership then you’ll see a row named Team ID).
 

5.b- Add child.plist and parent.plist

Create the two following files with the corresponding content:

  • child.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.inherit</key>
    <true/>
  </dict>
</plist>
  • parent.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.application-groups</key>
    <string>TEAM_ID.your.bundle.id</string>
  </dict>
</plist>

Replace TEAM_ID by your Team ID and your.bundle.id by the unique Bundle ID of your app (we previoudly used com.domain.appname).
 

6- Create a .pkg of your app

Create a new file and name it packageAppStore.sh with the following content.

#!/bin/bash

# Name of your app.
APP="YourApp"
# The path of your app to sign.
APP_PATH="/path/to/YourApp.app"
# The path to the location you want to put the signed package.
RESULT_PATH="~/Desktop/$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
# The path of your plist files.
CHILD_PLIST="/path/to/child.plist"
PARENT_PLIST="/path/to/parent.plist"

FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"

codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/Electron Framework.framework"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$FRAMEWORKS_PATH/$APP Helper NP.app/"
codesign -s "$APP_KEY" -f --entitlements "$CHILD_PLIST" "$APP_PATH/Contents/MacOS/$APP"
codesign -s "$APP_KEY" -f --entitlements "$PARENT_PLIST" "$APP_PATH"

productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"

You need to do some changes on this file on the first lines:

  • l4: change YourApp.app by the name of your app (with the .app extension), in our case appName.app
  • l6: change /path/to/YourApp.app to the path to your appName.app
  • l8: change ~/Desktop/$APP.pkg to the directory where you want to save your final .pkg, don’t modify the $APP.pkg part
  • l10 and l11: Enter the corresponding names of your two certificates
  • l13: change /path/to/child.plist to the path to your child.plist file
  • l14: change /path/to/parent.plist to the path to your parent.plist file

Finally, run the following command to generate your appName.pkg :

./packageAppStore.sh

 

7- Launch Application Loader and load the .pkg

If you already installed Xcode, you should also have an application called Application Loader. Launch Application Loader and login with your account. You might need to get an app specific password, for this connect to appleid.apple.com and click Generate Passwords… on the APP-SPECIFIC-PASSWORDS section. Enter a Label (for example Application Loader) and copy paste the code to the Application Loader app.
Click Choose and select the freshly generate appName.pkg. This should automatically identify your app based on the Bundle ID.
Finish the whole process of uploading your app.
 

8- Complete your app information

You app build should be available on your iTunesConnect account soon. In the meantime, you need to complete the information about your app. Once done, you can select the build that you want to upload to the appStore and click Submit.
 

9- Some potential issues

If you submitted the .pkg file but it does not appear on itunesConnect, check your email. If you received something like:

Invalid Signature – The executable at path appName.app/Contents/Resources/app/node_modules/robotjs/build/Release/robotjs.node has following signing error(s): code object is not signed at all In architecture: x86_64 . Refer to the Code Signing and Application Sandboxing Guide at http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/AboutCS/AboutCS.html and Technical Note 2206 at https://developer.apple.com/library/mac/technotes/tn2206/_index.html for more information.

You need to sign the different modules mentioned in this email. For that, just do as follow for each module:

electron-osx-sign appName.app appName.app/Contents/Resources/app/node_modules/robotjs/build/Release/robotjs.node

Voilà 🙂 You can now enjoy some coffee while waiting for the review. Congratulations!

Source: https://electron.atom.io/docs/tutorial/mac-app-store-submission-guide/


We can work together

Share this post on social media:

June 12, 2017 Adem Bilican No comments

How to draw a Venn diagram in R?

The topic of today is about Venn diagrams, see here for a detailed defition. I will quickly show you how to draw a Venn diagram composed of three distinct datasets in R.

For this purpose you will need the VennDiagram package. Start R and install the required package as follow:

install.packages('VennDiagram')
library(VennDiagram)

The main command to draw your Venn diagram is:

draw.triple.venn(area1 = 3472, area2 = 3528, area3 = 3492, n12 = 3176, n23 = 3323, n13 = 3182, n123 = 3096, category = c("sample1", "sample2", "sample3"), lty = "blank", fill = c("skyblue", "pink1", "mediumorchid") , cex=2, cat.cex=2, cat.fontfamily = rep("serif", 3))

The resulting Venn diagram will look like :

The explanation of the different numbers (area1, area2, area3, n12, n23, n13 and n123) are represented in the figures below:

June 7, 2017 Adem Bilican No comments

How to launch a job on SGE based clusters ?

As bioinformaticians, we often have to deal with computer clusters. There are different computer cluster systems available such as SGE, LSF… Although the main idea is the same, the commands used to submit a job might be slightly different. In this article I will quickly show how to submit a job to an SGE (Sun Grid Engine) based cluster.

There are two main commands that are very useful :

  • qsub: to submit a job to the cluster
  • qstat: to check the jobs you submitted to the cluster

There are two ways to submit a job to a cluster:

1 – Submission via a script

An example of a script is shown below, let’s call the script file jobscript.sh. In this case, it is essential to specify all the parameters as header of the script.

#!/bin/bash
#$ -N jobName
#$ -q jobQueue
#$ -o /path_to/jobs.out
#$ -e /path_to/jobs.err
cd /folder
$YOUR_COMMAND

Here, we are starting a job with the following parameters:

  • -N: name of the job
  • -q: queue on which to run the job
  • -o: path to the output file
  • -e: path to the error file
  • The rest of the script correspond to the commands we want to run

Some additional helpful headers are as follow:

  • -pe smp 8: number of threads to use for the job (here 8)
  • -cwd: start the job on current working directory
  • -M: email address (to get notifications about the job status)
  • -m [b,e,a,s,n]: status to be notified about (beginning, end, aborted, suspended, no mail)

For more information see: http://gridscheduler.sourceforge.net/htmlman/htmlman1/qsub.html

To start your job, you need to run

qsub jobscript.sh

2 – Direct submission from the command line

There is an alternative way to submit a job from the command line.


qsub -N jobName -q jobQueue -o /path_to/jobs.out -e /path_to/jobs.err [ENTER]

cd /folder [ENTER]

$YOUR_COMMAND [Ctrl+D]

This way the job will be submitted as soon as you press Ctrl+D. You can use several commands by pressing ENTER to separate each of them and start the job by pressing Ctrl+D after the last command.

January 19, 2014 Adem Bilican No comments

Save and share your snippets with canSnippet

canSnippetLogoBlack.png

UPDATE : canSnippet is not anymore on beta, I created a new page for the project.
canSnippet’s project page.

I am very happy today to introduce you to canSnippet. canSnippet is an open source web-based application to save and share your code snippets. It is my first “big” project, thus I would like to have as many comments and feedback as possible. Please don’t hesitate to contact me for any question or remark, I will be happy to answer. For this project I used the CC BY license (I am also moving my whole blog under the same license), more information in the creative common by 4.0 page.
I used the following technologies for canSnippet : HTML, PHP, Javascript and sqlite.

Author: ademcan (ademcan@ademcan.net)
Version: 1.0 beta
License: CC BY

canSnippet is an open source web-based application to save and share your snippets.
The advantages of canSnippet are :
– it’s green (literally)
– open source (License CC BY)
– web-based
– easy installation process
– sqlite database
– syntax highlighting (based on prism.js)
– possibility to save private and public snippets
– unique link per snippet for easy sharing
– support many programming languages (html, css, javascript, python, java, php, ruby, c, c++, sql)
– rss feed
– search engine
– browse panel using AJAX
– responsive design
– it’s flat-green 🙂

Todo :
– search API
– tags support
– including prismjs plugins and themes
– create new non-flat theme

Alternatives to canSnippet :
SnippetVamp

Installation :
– Download the latest canSnippet.zip file
– send the zip file to your server and unzip
– give the following rights
705 to folders
604 to files
– open the following URL in your web browser
http://[YOUR_DOMAIN]/canSnippet/
– Follow the unique instruction (i.e. fill in the form)
– Remove the install.php file for higher security
– You are done ! Now you canSnippet…

Screenshots:
http://ademcan.net/gallery/?dir=canSnippet

Demo :
http://ademcan.net/canSnippet/demo

Download :
GitHub : https://github.com/ademcan/canSnippet
zip | 7z (v1.0 beta – 22.01.2013)

I would also like to thank my two super beta-testers Yome and Bajazet, thank you guys !
Again : this is a beta. I am still working on the code to improve it as much as possible, and I am very open to any discussion about the code and the design 🙂

Enjoy !

Source: New feed

December 10, 2013 Adem Bilican No comments

[FR] L’identité

 

Fingerprint_picturesvg.png
J’ai écrit cette courte “histoire” pour ma participation au Prix de la Sorge 2013.
Merci à Yome et Yohan (le luxembourgeois) pour les corrections.

L’iDentité

« Chérie, je vais passer chez ma mère cet après-midi » s’exclama Christine.
« Fais-attention, tu ne devrais pas utiliser la iTransport si souvent, tu sais très bien que cette machine a causé des ennuis à certains de ses utilisateurs. »
Christine ne l’écouta pas en rentrant dans sa iBeauty pour se préparer de la tête aux pieds en 30 secondes. John se méfiait encore plus chaque jour qui passe de toutes ces nouvelles technologies qui avaient désormais envahi leur vie quotidienne. Il ne pouvait pas non plus trop s’en plaindre, lui qui se rendait tous les jours avec la iTransport depuis chez lui de Sophia à l’Université de Boston où il était professeur en études génétiques. Il se tourna sans trop insister vers son écran géant pour terminer son projet, allongé sur son canapé, le tout transmis aux travers des iElectrodes posées dans son cerveau.
La société Aplle, avait lancé la iTransport il y a cinq mois. Cette machine de téléportation permettait de se rendre en quelques secondes à n’importe quel endroit du globe disposant d’une autre iTransport. La technologie était basée sur la fission et la fusion des molécules composant le corps humain. Chris Temp était le chercheur qui s’occupait de ce projet au sein de la société. Il était vraiment fier de son dernier bijou. Il ne pouvait pas s’empêcher de penser à l’année 2001, l’année du séquençage du génome qui avait dû occuper pendant des années plusieurs groupes de recherche, dont le fameux Watson. Aujourd’hui, le séquençage d’un organisme entier ne prenait pas plus de 5 secondes…
Avec la iTransport les notions de frontières, pays et nationalités avaient complètement disparu. Toutes les communes étaient au moins équipées d’une machine, ce qui permettait de se rendre à des milliers de kilomètres pour passer la soirée dans un restaurant à l’autre bout du monde. Dans la très grande majorité des cas, cette machine fonctionnait parfaitement. Cependant, il est arrivé que la iTransport ne fonctionne pas comme prévu dans certaines situations. Le système de téléportation est basé sur la fission des molécules au lieu de départ et leur fusion dans des proportions et positions exactes à la destination finale. Une simple erreur de proportion ou position d’une seule molécule a été fatale pour certains de ses utilisateurs. Néanmoins le leitmotiv de la compagnie Aplle était clair «Pas de progrès sans sacrifices» même si le sacrifice devait être une vie humaine. Il restait encore certaines personnes qui ne partageaient pas cette idéologie mais elles étaient trop facilement exclues de la société et considérées comme « attardées » pour être pris au sérieux. John ne faisait pas partie de ces « attardés » mais il les comprenait bien, lui, qui avait fait des études approfondies en génétique, réalisait bien que ce n’était pas une notion à prendre à la légère. Cependant, il ne se plaignait pas trop et utilisait la iTransport assez fréquemment. Il devait d’ailleurs se rendre à Oslo la semaine prochaine car il lui serait attribué le plus grand prix en génétique pour ses travaux de recherches. Il recevra le prix Krogel en génétique. C’est en particulier de ce fait qu’il était très occupé en ce moment, il devait finaliser ses analyses et surtout préparer un discours digne de ce nom, ce qui n’était pas chose facile, lui qui ne supporte pas d’être mis sur le devant de la scène.    John sursauta. Il venait de faire un cauchemar, il se retrouvait dans les années 1990. Il vivait dans un bloc en béton et devait tout faire à la main : saisir du texte au clavier, utiliser la télécommande, ouvrir la porte, se doucher… S’il ne connaissait pas déjà toutes ces machines bizarres grâce à son arrière-arrière grand père il n’aurait jamais su à quoi elles servaient. Il aurait certainement eu l’impression de se retrouver sur une autre planète.
Christine était de retour, elle apparut toute souriante au travers de la vitre de la iTransport.
« Bonjour chérie. »
« Salut, comment va ta mère ? »
« Elle va très bien figure-toi, elle m’a annoncé qu’elle participera à la remise des prix Krogel à Oslo. »
« Je ne pense pas que ce soit raisonnable qu’elle vienne. De plus, la cérémonie de remise des prix sera retransmise en direct par hologramme. »
« Je ne vois pas ce qui te pose problème, si elle participe, c’est pour te faire plaisir. »
« Oui, mais tu sais aussi très bien qu’elle n’a jamais utilisé la iTransport et que cette machine est fortement déconseillée aux personnes âgées. »
« Ah John ! Que puis-je te dire de plus… »
John se retourna sans trop insister pour continuer son travail. Il devait terminer sa présentation le plus rapidement possible pour avoir le temps de répéter son discours. Il n’était vraiment pas doué pour parler en face d’un public, encore moins quand ce dernier était composé de grands chercheurs dont le professeur Temp.

Christine se réveilla lentement de son second sommeil, servit son café et se prépara pour sortir chercher les enfants à l’école. Christine et John avaient deux adorables filles. Ils faisaient tout pour qu’elles grandissent dans de très bonnes conditions. C’est pour cela que John tenait aussi beaucoup à son prix Krogel. Le sommeil avait été étudié en profondeur et les chercheurs découvrirent que les humains disposaient plutôt d’un sommeil polyphasique alors que la société des années 1990 les avait rendu mono-phasique. Une simple sieste de vingt minutes toutes les quatre heures suffisait largement.

John reçu un message télépathique de la part de l’un de ses collaborateurs Fredy Curck :
« John, il faut impérativement que tu me retrouves le manuscrit de thèse de ton ancien élève Greg. Je pense que celui-ci peut contenir des informations très importantes pour mener notre projet à bien. »
John et Fredy étudiaient en secret la iTransport. Ils avaient prévu de la démonter et d’analyser en détails les technologies utilisées. Le but de John étant tout d’abord d’être sûr de son utilisation saine et pourquoi pas en faire une base pour ses futures analyses. John s’empressa de se rendre au sous-sol de sa maison où il conservait encore bizarrement des versions papier de certains documents, dont le fameux manuscrit de thèse. Le papier étant très cher, et tout le monde disposant d’espaces électroniques infinis pour sauvegarder leurs documents, il était très rare de trouver encore des documents au format papier, cela va s’en dire qu’il était encore plus difficile de trouver une imprimante. John était bricoleur et avait réussi à remettre en marche une imprimante qu’il avait retrouvé dans les objets de son arrière-arrière grand-père.
Il retrouva très rapidement le manuscrit en question et s’empressa de le scanner au travers de ses lunettes pour le transmettre à Fredy. Il ne pouvait s’empêcher de se demander ce que Fredy pouvait trouver d’intéressant dans cette thèse. Il ne se souvient d’aucun résultat très important au sein de ce manuscrit qui pourrait leur permettre d’avancer dans l’analyse de la iTransport.
« Ok Fredy, voici donc le manuscrit que tu m’as demandé. Je peux savoir ce que tu cherches exactement ? »
« Pas maintenant John, il faut que je regarde cela rapidement. La cérémonie des Krogel à lieu dans moins d’une semaine. Tu imagines si nous pouvions avoir des résultats juste avant cette cérémonie ? »
« Oui effectivement ce serait une très bonne chose… »
« Papaaa, nous t’attendons pour manger ! » S’écria Sophie, la plus grande des deux filles.
« J’arrive mon amour ! Fredy, je dois y aller, tu sais que nous mangeons à table une fois par semaine, j’attends de tes nouvelles avec impatience, tiens-moi au courant dès que tu as du nouveau, salut. »

Les capsules nourrissantes étaient largement suffisantes pour permettre au corps humain de s’approprier tous les éléments nécessaires. Néanmoins, Christine et John avaient décidé qu’ils mangeraient à table une fois par semaine, même si cela semblait très archaïque.

« John, nous avons un problème… », c’était Fredy, sa voix tremblait. John ne pouvait plus le joindre mais il appris rapidement que des forces de l’ordre avaient fait irruption à son domicile et récupéré tout le matériel nécessaire à l’étude de la iTransport. La société Aplle disposant de tous les droits sur le produit, il était formellement interdit d’analyser cette machine. Toute personne essayant de comprendre son fonctionnement risquait une peine très lourde. C’était horrible, qu’allez-t-il se passer maintenant ? John essayait en vain de joindre son ami et de faire quelque chose pour le sauver. Il se rendît chez lui où la femme de Fredy était seule et désespérée. Il savait pertinemment que Fredy lui aurait laissé un message, un signe. C’était bien le cas, certains documents très importants de Fredy étaient toujours gardés dans leur boîte secrète en commun. John ne risquait pas grand-chose, leurs discours avec Fredy étaient toujours chiffrés. Il n’était pas possible pour John de laisser tomber cette affaire. Avec tous les documents il se rendît chez lui pour continuer les travaux ; il ne lui restait plus que deux jours avant la cérémonie de remise des prix Krogel.

Ces deux deniers jours, John ne respecta pas son cycle polyphasique de sommeil, il ne dormit pas du tout. En lisant les rapports de Fredy il réalisa pourquoi son ami lui avait demandé la thèse de son ancien élève. Il avait découvert une potentielle faille dans le système de la iTransport. Le court instant entre la fission et la fusion des particules composant le corps humain était le point faible de la machine. Il devait alors analyser ces ondes de très grandes amplitudes. La thèse en question correspondait tout à fait à ce qui pouvait aider John et Fredy à se faufiler au sein du mécanisme de fonctionnement de la iTransport. John s’empressa de relire la thèse de Greg et y retrouva effectivement un algorithme permettant la réception et la modification des ondes qui transportent les molécules, les mêmes utilisées dans la iTransport.
John était tout excité, en plus de recevoir le prix Krogel, il pouvait devenir le chercheur le plus reconnu de la Terre s’il arrivait à se faufiler dans le système de la iTransport. Bien sûr tout cela n’était pas sans risque. Il pourrait même tout au contraire perdre son prix Krogel, mais rien ne pouvait arrêter John. Ce projet dépassait tout ce qu’il pouvait imaginer. Il se doutait que ce système possédait une voire plusieurs failles et c’est lui qui les découvrirait.

John disposait de deux iTransports à son domicile, son salaire élevé lui permettait ce luxe. Il regroupa rapidement ses deux machines dans sa salle d’étude. Il lui fallait maintenant un cobaye, il ne pouvait pas risquer Katzy, sa chatte adorée, de plus ses filles ne le lui pardonneraient jamais s’il arrivait quoi que ce soit à Katzy. Il décida de se servir d’un simple objet et amena son imprimante avec lui. La iTransport disposait d’un système de reconnaissance et n’aurait jamais accepté de fonctionner avec un objet connu autre qu’une particule vivante, ce qui était la raison pour laquelle elle avait été créée. Un des rares objets qui ne serait pas reconnu et donc potentiellement rejeté par la iTransport était la vieille imprimante qui lui restait. C’est avec un pincement au cœur qu’il décida de l’utiliser en tant que cobaye.
Il testa donc rapidement la téléportation de l’imprimante d’une iTransport vers l’autre. Le transfert était tellement rapide qu’il n’avait pas eu le temps d’intercepter d’ondes, mais comment Fredy avait-il fait ? En relisant rapidement les rapports de Fredy il réalisa que son ami avait travaillé dans une chambre froide pour ralentir naturellement les ondes pendant le transfert. John fît de même en se rendant dans le sous-sol de sa maison. En renouvelant le transfert avec toutes les machines en place il commença à apercevoir des signaux. L’écran affichait des nombres et des lettres qui n’avaient aucun sens tel quel. Il ne savait pas trop comment s’y prendre mais les notes de Fredy allaient lui être d’une aide exceptionnelle.
Il installa rapidement l’algorithme d’identification des ondes sur l’ordinateur principal et répéta la manipulation de téléportation de son imprimante. L’écran affichait un message binaire, qui ne représentait rien aux yeux de John dans son état actuel. La section « Résultats » de la thèse de Greg contenait des informations à propos de cette séquence binaire. Il s’agissait en fait de la composition de l’imprimante. John s’arrêta. Que voulait dire la composition ? Une explication lui effleura l’esprit mais il ne voulait pas y croire. Il n’y avait qu’une seule solution pour pouvoir confirmer ses doutes, il devait essayer la machine avec un organisme vivant.
Il courut au jardin et trouva une coccinelle sur une feuille de son prunier. John ne pouvait pas faire de mal à une fourmi mais cette fois c’était pour la bonne cause, il en était excusé. Il se précipita à nouveau dans le sous-sol de sa maison et répéta la manipulation avec la coccinelle. Les séquences binaires ne s’affichaient plus sur l’écran, il ne distinguait plus rien. Il répéta la manipulation une dizaine de fois avant de voir apparaître le premier signal. Il s’agissait d’une séquence, une suite de lettre cette fois-ci, John lisait
« A, A, C, T, A, G, T…mon Dieu ! » S’exclama-t-il, « ils n’ont pas osé… »
Il s’agissait de la séquence d’ADN de la coccinelle. John pouvait facilement distinguer tous les gênes de la petite bête. Il pouvait même en déduire le phénotype de celle-ci. John était ébahi, l’ADN, le code génétique était la dernière identité qu’il restait aux personnes. Plus rien n’était secret, les informations personnelles, le groupe sanguin, les empreintes digitales… il ne restait plus que l’ADN… mais cela n’était plus vrai désormais. John était persuadé que la iTransport utilisait uniquement les informations des molécules pour effectuer les réactions de fission et fusion. Il ne se doutait pas une seule seconde que tout le corps était scanné jusqu’au détail près du code génétique. En analysant en détails les données transmises il réalisa un lien vers une adresse internet : iDbD, il s’agissait certainement de la base de données où toutes les séquences étaient stockées.
John s’assis, il était tétanisé, il ne lui restait plus rien, il ne restait plus rien de l’humanité. La découverte qu’il venait de faire était une charge trop lourde pour lui. La cérémonie de remises des prix Krogel avait lieu dans moins de deux heures, qu’allait-il faire ?…

Image source : Fingerprint – wikimedia

Source: New feed