I Use This!
Activity Not Available

News

Analyzed 7 months ago. based on code collected 9 months ago.
Posted about 10 hours ago
This year I had the opportunity to participate in the Google Summer of Code 2018 within the Debian organization. The project topic was the reverse engineering of Bluetooth Low Energy devices (at the level of “what data are sent and received during ... [More] the communication”). I wrote a rather general guide (not related to a single test device) on how to do this type of activity. In addition, I’ve created some scripts (and a deb package) to use the EQ3 Eqiva radiator valves without their Android/iOS application. Here is a brief summary and some references to what has been produced. Reverse Engineering Guide The guide is available at this address. Basically, it explains: BLE operation principles and differences compared to the classic Bluetooth how to do Logging on Android with the aim of observing the data exchanged how to analyze an Android application to better interpret the data identified Bluez stack tools, used to communicate via Bluetooth on GNU/Linux systems examples of scripts working on real devices This guide would like to be an evolving project, in which to gather information on reverse engineering techniques and to make available works already done in this area. Take a look at the Contributions page! EQ3 Eqiva Scripts EQ3 Eqiva (source) I created a deb package that provides a tool to send commands and receive notifications from the EQ3 Eqiva radiator valves. Once installed, run the eq3eqiva command to get an overview of the available features. Other utilities: Protocol description Individual scripts: Their documentation is included in the previous guide. It consists of two sections: Single Valve Management and Multiple Valve Management. Laica PS7002 Scripts Laica PS7002 (source) I also did a partial reverse engineering of the protocol used by the smart BLE scale Laica PS7002. Although I only managed to read the weight (despite the various functions), the work has been included in this guide because it shows aspects that have not been dealt within other sections. Utilities: Script Documentation Protocol description [Less]
Posted about 23 hours ago
Welcome readers, this is a infrequently updated post series that logs my activities within open-source communities. I want my work to be as transparent as possible in order to promote open governance, a policy feared even by some “mighty” nations.I ... [More] do not work on open-source full-time, although I sincerely would love to. Therefore the posts may cover a ridiculously long period (even a whole year). A Revamped Blog SiteThis website is now using a new theme called Minima from the Jekyll developers. It’s a elegant and simplistic one featured in various blogs involved in the Rust community. I am myself a huge fan of Rust, so I immediately had a crush on the theme. Although this idea already came out probably a year ago, the transition took so long because I didn’t have the time to focus on learning front-end technologies.At first I thought I must implement the theme on my own as I would be using Hexo but it was for Jekyll, but turns out it was quite easy to forcibly apply it under a different static site generator. Now I’m pretty satisfied the outcome, though I am just clueless on how to make a good homepage, hence the one it has now. DebianDebian is a general-purpose Linux distribution that is widely used on the planet. I am currently a Debian Maintainer who works on packages related to Android SDK and the Java ecosystem. Uploaded Gradle 4.4 to experimental. I didn’t investigate how to make gradle-debian-helper compatible with the new release until Emmanuel Bourg did it. It’s now in unstable. Introduced new package dd-plist which is needed by Gradle 4.4. We’ve started updating the Android SDK to Oreo Uploaded android-platform-external-boringssl Uploaded android-platform-external-libselinux Uploaded android-platform-external-libunwind Uploaded android-platform-frameworks-native Uploaded android-platform-libcore Voidbuilder: A New Builder for DebianI have been writing a simple Node.js application called “Voidbuilder” which serves as an alternative to tools like pbuilder or sbuild. The main difference is that is replaces the chroot part of those tools with Docker. It also comes with goodies like zero-configuration and the ability to start a container with all build-dependencies installed so you don’t need to contaminate your machine with tons of development packages just for working on a package.Writing such admin/devel tools in JavaScript is an odd choice which few people would agree, I assume. My rationale includes that it’s much more powerful than shell scripts and has a richer ecosystem than Python. While I am satisfied with the coding experience, I am still annoyed that JavaScript lacks so many features that modern OOP languages have (e.g. enumerations, interfaces). Luckily, it only took me a few weeks to get the prototype running.The code is hosted on Salsa and it will get a release on NPM soon after I implement the second feature I mentioned above. [Less]
Posted about 23 hours ago
Finally I decided to mark down my activities in open source communities every several months.I’ve been maintaining a blog of my own but actually I just put it at the corner and let it get dusty, which was not my intention in the first place. I ... [More] always felt that there’s not much to write down, well, which was also not right. Writing articles about my work may not interest most random people, but at least it can be considered being responsible of my actions in open source communities.The following is the brief notes of my open source activities in September 2016: Applied for Debian MaintainerI’ve spent about a year in contributing to Debian, all began in Google Summer of Code 2015 when I was working on packaging Android SDK in Debian. After that I kept working on the project, but most of the time I need to file a Request for Sponsor (RFS) for asking a Debian Developer for reviewing on my packages. Hans-Christoph Steiner, Markus Koschany and Emmanuel Bourg did most of the review for me. Now that I am familiar with packaging, I should be qualified to apply for a DM identity. Being a DM, I can gain upload permissions to my own packages, which will ease the maintenance. According the application, I have been approved (🎉🎊) but not officially a DM. Thanks to Debian Developer nthykier who told me on IRC that my key is waiting for being synced to the official keyring, which will probably happen in October.Thanks for the advocations from Hans-Christoph Steiner, Markus Koschany and Emmanuel Bourg! Started Updating Android Packages to NougatWith the exciting release of Android 7 Nougat comes the beginning of the CyanogenMod developers’ busy period, as well as Debian’s android-tools team’s. One of our teammates Chirayu Desai notified us someday that the source code of Android N is released, after which I summarized some of my ideas and plan on the mailing list. There will be several changes for the Nougat update: ARM & MIPS builds are brought back. Actually they were there before I rid them out. 😓 We decided to maintain x86 binaries only because Google only supports and releases Android SDK in x86. Now I know how to setup an environment of other architectures as well as how to build packages for these architectures, it would be great to support them again. Plus the Debian Lava team seemed to care about ADB on ARM64 by complaining on the removal bug. Good news is that Chirayu Desai is also willing to help me in these architectures since he does not use any x86 machines. 😂 AndroidConfig.h are 🔥. These header files contains macros dealing with architecture details and must be included in all C/C++ binaries in AOSP. Since Nougat, the AOSP team removed the header files and we are able remove the use of build profiles in android-platform-build. aidl is now a separated package. It was previously a package in android-platform-frameworks-base. I really don’t like the AOSP team moving stuff around. They have a gigantic project tree to play with but we don’t! In this month I have prepared updates for the following packages: android-platform-external-doclava (not yet uploaded) android-platform-external-libselinux android-platform-external-libunwind android-platform-frameworks-native android-platform-libcore android-platform-system-core android-platform-system-extras android-platform-system-tools-aidl For the moment they are being uploaded to the experimental distribution. After all of the existing packages are updated to 7.0.0+r1, we will upload all of them to Unstable. Hacking gradle-debian-helper So That It Auto-generates Maven POMsEvery Debian packages providing Java libraries should install Maven POMs into /usr/share/maven-repo which serve as the metadata. Without these metadata, these libraries would be uneasy to be used by other Java packages. Gradle projects do not have Maven POMs, so the package maintainers need to write custom rules to generate them.Most of the Android packages are built with Gradle and gradle-debian-helper, and I need to provide the same scripts for them in order to generate the Maven POMs. Weeks ago I noticed that almost all Android packages containing Java libraries are unreproducible because the order of the dependencies in the Maven POMs are unsorted and random, and I had to modify every one of those packages to sort the dependencies. If the Maven POM generation was done by gradle-debian-helper, my life could have been better.The feature is being developed at GitHub. The obstacle I met so far is that it is tricky when you are writing Gradle plugins in Java and you need to access the third-party classes used by Gradle classes. The compiler complained that I must not convert org.apache.maven.model.Dependency to org.apache.maven.model.Dependency, which sounded nonsense. My first guess was that the build script (pom.xml) of gradle-debian-helper links to the JARs in /usr/share/java instead of POMs in /usr/share/maven-repo. I modified the build script so that it links to POMs in /usr/share/maven-repo but it just failed to load pmaven-debian.pom. I’ve reported this bug. Other Activities Fix Gradle’s failure to launch. Previously, Gradle still harcoded the JAR versions in its classpath, and a new upstream release of JSch broke Gradle entirely. I modified the build scripts of Gradle so that it used a versionless classpath without manually removing the dependency declarations. The tricky part is that Gradle builds using itself, so even now we’ve fixed the Gradle in Debian, the new release of Gradle in Ubuntu still FTBFS. I asked on the IRC and was told that I need to contact the Ubuntu archive managers and ask them to rebootstrap the package, which I did afterwards and Colin Watson helped. Thank you! Polished the packaging of Gradle. This includes dropping the generation of classpaths in the JAR manifest (otherwise JVM loads 2 sets of the same JARs) and making the generated Maven POMs reproducible. Prepared updates for several packages including android-platform-frameworks-native/6.0.1+r55-1. Reported a wishlist bug that src:p7zip should provide developemnt packages for lib7z.so. Reported bugs about src:closure-compiler and src:zabbix who should switch to libandroid-json-java from dusty libandroid-json-org-java. Turns out that the JSON library in AOSP is used by external projects, although I wonder why somebody would reply on a library without any API stability or version information. Anyway, it is used by packages in Debian, which was why I built this library in src:android-platform-libcore in the first place. Reported a bug about qemubuilder failing on creating images for arm64 Manually closed the bug about an auto-transition of android-platform-build which is long ended. Plans for the Next Months Update Gradle to 3.1. Finish the update of all Android packages to Nougat. Fix and upload android-framework-23, the last missing piece of a usable SDK. Hope I can also manage to pass my exams after all these. 🙄 [Less]
Posted about 23 hours ago
Because of all the nonsense coming from my current school, I hadn’t been able to spend too much time on open source projects. As a result, this post sums up an entire year of activities after the previous one… Surprised me a bit too. 😰 Personal ... [More] ProjectsCreated a repository in GitLab to store some useful scripts and config files that makes up my development environment. It mostly focuses on Debian development, but will add more stuff in other area when the time has come.The repository contains files that sets up cowbuilder for all officially supported architectures in Debian, and some scripts to update the images, to build a package in all those architectures, and to build a long list of packages, all in parallel using a process pool. Very useful when you are testing reverse-build-dependencies. Introducing maven-repo-helper-extras I spent several weeks writing some additional tools for the existing maven-repo-helper. The package now contains 2 tools: mh_shlibdeps: Like dh_shlibdeps but for Maven artifacts, successor to mh_resolve_dependencies mh_genlauncher: Generate simple launcher scripts for Java programs distributed as Maven artifacts. The package name is likely to be changed, and mh_genlauncher is likely to be replaced by something neater. Still waiting for other core devs in pkg-java team to review it. Other ActivitiesUpdated BND to 3.5.0. Updated Maven Bundle Plugin to 3.5.0. Updated OSGi Compendium to 6.0.0. Introduced Felix Resolver Google Summer of Code 2018I am now a mentor under Debian organization in GSoC 2018, guiding students to contribute to our Android SDK packages. [Less]
Posted about 23 hours ago
I did not finish too many significant jobs in the last 2 months, so I am combining them into one post. So far I still only work in Debian, but my (would-be) personal open source project Viska has started its conceptional stage, although there is ... [More] not much effort spent in it yet. Debian Updated android-platform-external-libunwind so that android-platform-frameworks-base can build against it. Uploaded android-platform-tools-swt which provides various graphical tools in Android SDK using SWT. Uploaded android-framework-23 which provides the Android SDK Platform for API Level 23. Released gradle-debian-helper 1.4 with new features: A task of genetating Maven POMs for being used by maven-repo-helper Let javadoc link to the local Javadoc of default-jdk Updated libnative-platform-java to 0.11 Updated gradle to 3.1. Also updated the following packages in order to be compatible with Gradle 3.x: android-platform-tools-base bnd gant groovy libgpars-groovy-java Uploaded a new package uncommons-watchmaker Updated android-sdk-meta which now no longer installs symlinks to any shared libraries. Plans for the Next MonthsDebian Stretch is coming soon as the transition freeze has passed and the soft freeze is coming in January. Therefore, I don’t think there is enough time for the Nougat SDK getting into Stretch, since there’s one package being waiting in the NEW queue for over a month! Without it being accepted we can’t step forward, so let’s hope the SDK is better shaped in Debian Buster. Sorry about that, we can’t do anything to accelerate the NEW queue. 😓Anyway, forget about the techs, let’s listen to some music! This December, I will be playing cello in a small concert held in Taichung featuring Star Wars and some songs arranged by Mr. Alan MacDonald. If you live in Taichung, a nice city in Taiwan, please come! [Less]
Posted 1 day ago
I moved with my family to Okinawa in August, in the Akano neighborhood in the Uruma city. We arrived on time to see a bunch of eisaa, traditional dances using lots for drums, that often take place at the end of August. Each neighborhood has its ... [More] own band and we hope we can join next year. We live in a concrete building with a shared optic fiber connection. It has a good ping to the mainland, but the speed for big downloads is catastrophic in the evenings, when all families are using the fiber at the same time. Impossible to manage a simple sbuild-update -dragu unstable, and I could not contribute anything to Debian since them. It is frustrating; however there might be solutions through our GitLab forge. On the work side, I joined the Okinawa Institute of Science and Technology Graduate University (OIST). It is a formidable place, open to the public even on week-end (note the opening hours of the café). If you come visit, please let me know! [Less]
Posted 1 day ago
reveal.js (Github repo) is an open-source project that lets you generate beautiful slideshows with HTML, CSS and Javascript. Slide content is written inside blocks. Sections with the attribute data-markdown to load markdown content. There are two ... [More] ways to go about this tl;dr Fork https://github.com/py-ranoid/reveal.js with git clone git@github.com:py-ranoid/reveal.js.git Create a copy of /md_example to /myslides Comment or delete lines 24 to 53 in index.html Edit markdown content in example.md. 2 lines : Vertical slide seperation 3 lines : Horizontal slide seperation Edit slide themes by changing the name of the CSS file on Line 10. You can try them here. Options are Light Themes : sky.css, beige.css, white.css, simple.css, solarized.css, serif.css Dark Themes : blood.css, league.css, black.css, moon.css,night.css Add, Commit and Push your changes to Github Enable Github Pages for your reveal.js fork with Settings > Github Pages Your slides should be hosted at username.github.io/reveal.js/myslides Seperating content into slides reveal.js offers vertical (⬆️ and ⬇️) and horizontal (⬅️ and ➡️) slide propogation Hence content can have vertical seperators and horizontal seperators Vertical slides can be used to display optional/additional content about a slide Set by the attributes : data-separator and data-separator-vertical respectively. For example : data-separator="^\n\n\n" data-separator-vertical="^\n\n" Hence markdown content seperated by 2 blank lines would be in different vertical slides and markdown content seperated by 3 blank lines would be in different horizontal slides. Writing slide content There are two ways to add slide content with markdown In a seperate markdown file Isolates content from styling Requires a .md file and a .html file Inside ..., add this section : Within index.html Markdown content embedded within html tags Requires a single .html file Inside ..., add this section : Add Slide content within the tag. Slide themes Edit slide themes by changing the name of the CSS file on Line 10. You can try them here. Options are Light Themes : sky.css, beige.css, white.css, simple.css, solarized.css, serif.css Dark Themes : blood.css, league.css, black.css, moon.css,night.css Slide transitions Default transition is slide You can choose from none, fade, slide, convex, concave and zoom To apply transitions to sections, use the data-transition attribute The train goes on … and on … and stops. (Passengers entering and leaving) And it starts again To apply transitions to slides, within markdown, use this ## Slide attributes Slide content. ## Slide 2 Fragments Fragments can be use to sequentially introduce mutiple elements in a slide sequentially Within markdown, this can be done with : ## Element attributes - Item 1 - Item 2 [Less]
Posted 1 day ago
Do you need your own site ? need your own site with a blog ? need your own site with a blog but can’t code front-end ? Welcome to Jekyll. It lets you “transform your plain text into static websites and blogs”. How to create your own ... [More] (version of this) site Setting up Github Pages Create a Github account if you don’t have one. Create a repository called .github.io.Note : By default, the contents of the github page for your repository will be sourced from its README. This lets you use Github Pages to host static webpages (fixed content) Clone the repository on your local machine with git clone https://github.com/username/username.github.io.git Getting this theme Find a Jekyll theme that works for you. Each theme has a link to its source code and emo below it. If you’d like to use the theme I’m using, check out the demo her. Though isn’t my site one :laughing: ? Show sergiokopplin some ❤️ by adding a ⭐️ to his repository Clone the repository on your local machine with git clone https://github.com/sergiokopplin/indigo.git Hosting your Jekyll site Optional : If you’d like to experiment with your site before you push it, make a branch with git checkout -b beta. However you can only host your github page from the master branch so all your changes from beta will have to be merged into master. Copy the theme files to your GH pages folder (after cloning) cd username.github.io cp ../indigo/* -r . Add, commit and push your changes to github. git add . git commit -m "Added theme files" git push origin master Note : Github Pages take some time to render so don’t expect your pushed changes to reflect immediately on your site. 😛 Running the site on your local machine Install Ruby, Bundler, Jekyll and other dependencies. Serve site with jekyll sudo apt-get install ruby ruby-dev build-essential # sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev\n # Run ⬆️ if you ⬇️ doesn't word sudo gem install eventmachine -v '1.2.7' gem install jekyll bundler bundle install bundle exec jekyll serve --config _config.yml,_config-dev.yml If it all works fine 👌 , your site should now be running on port 4000. Tweaking your site Most of the elements on your homepage can be edited with _config.yml. Comments in the file should guide you through the rest of the process. However, changes made to _config.yml are not updated dynamically and the the server should be restarted. The About section can be edited at /about.md On the other hand, modifying other files and assets, dynamiccally updates your site. For example, this blog gets rendered on my local site as I write it Regenerating: 1 file(s) changed at 2018-09-23 10:08:23 _posts/2018-09-23-init.markdown ...done in 1.246159402 seconds. Again, once you’re done making changes, make sure you add, commit and push your changes to GitHub. Creating a blog Blogs are automatically generated from markdown files in /_posts, which contains all blog posts. Blog filename format : yyyy-mm-dd-title.markdown yyyy-mm-dd : Date of the blog title : Title of the blog with no space. Can have multiple hyphens instead. For example : yyyy-mm-dd-new-blog.markdown Note : The title also becomes the URL of the blog. So link the above file would be /new-blog Blog content format : yyyy-mm-dd-title.markdown Every blog has a header (which is more a config) and content of your blog. For example 2018-09-23-template.markdown is the source for this blog and contains : --- title: "Blog Title" layout: post date: 2018-09-23 08:36 tag: - jekyll - template image: https://koppl.in/indigo/assets/images/jekyll-logo-light-solid.png headerImage: true projects: true hidden: true description: "Blog description" category: template author: johndoe externalLink: false --- Markdown Content --- More **markdown** content --- hidden : If true, post won’t get indexed under at /blog tags : List of tags for your blog. You can search for other blogs with the tag at /tags/#tagname category : used to suggest other blogs (in /posts) with the same category projects : If true, post will get indexed under at /projects Credits : Icon made by Freepik from www.flaticon.com [Less]
Posted 2 days ago
Some days ago I found an key chain at home that was a small digital photo frame, and it seems that was not used since 2009 (old times when I was not using Debian at home yet). The photo frame was still working (I connected it with an USB cable ... [More] and after some seconds, it turned on), and showed 37 photos from 2009 indeed. When I connected it with USB cable to the computer, it was asking “Connect USB? Yes/No” I pressed the button saying “yes” and nothing happened in the computer (I was expecting an USB drive to be shown in Dolphin, but no). I looked at “dmesg” output and it was shown as a CDROM: [ 1620.497536] usb 3-2: new full-speed USB device number 4 using xhci_hcd [ 1620.639507] usb 3-2: New USB device found, idVendor=1908, idProduct=1320 [ 1620.639513] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 1620.639515] usb 3-2: Product: Photo Frame [ 1620.639518] usb 3-2: Manufacturer: BUILDWIN [ 1620.640549] usb-storage 3-2:1.0: USB Mass Storage device detected [ 1620.640770] usb-storage 3-2:1.0: Quirks match for vid 1908 pid 1320: 20000 [ 1620.640807] scsi host7: usb-storage 3-2:1.0 [ 1621.713594] scsi 7:0:0:0: CD-ROM buildwin Photo Frame 1.01 PQ: 0 ANSI: 2 [ 1621.715400] sr 7:0:0:0: [sr1] scsi3-mmc drive: 40x/40x writer cd/rw xa/form2 cdda tray [ 1621.715745] sr 7:0:0:0: Attached scsi CD-ROM sr1 [ 1621.715932] sr 7:0:0:0: Attached scsi generic sg1 type 5 But not automounted. I mounted it and then looked at the files, but I couldn’t find photos there, only these files: Autorun.inf FEnCodeUnicode.dll LanguageUnicode.ini DPFMate.exe flashlib.dat StartInfoUnicode.ini The Autorun.inf file was pointing to the DPFMate.exe file. I connected the device to a Windows computer and then I could run the DPFMate.exe program, and it was a program to manage the photos in the device. I was wondering if I could manage the device from Debian and then searched for «dpf “digital photo frame” linux dpfmate» and found this page: http://www.penguin.cz/~utx/hardware/Abeyerr_Digital_Photo_Frame/ Yes, that one was my key chain! I looked for gphoto in Debian, going to https://packages.debian.org/gphoto and then learned that the program I need to install was gphoto2. I installed it and then went to its Quick Start Guide to learn how to access the device, get the photos etc. In particular, I used these commands: gphoto2 --auto-detect Model Port ---------------------------------------------------------- AX203 USB picture frame firmware ver 3.4.x usbscsi:/dev/sg1 gphoto2 --get-all-files (it copied all the pictures that were in the photo frame, to the current folder in my computer) gphoto2 --upload-file=name_of_file (to put some file in the photo frame) gphoto2 --delete-file=1-38 (to delete the file 1 to 38 in the photo frame). [Less]
Posted 3 days ago