Friday, May 29, 2020

The "success" of the Japan model in dealing with COVID-19


I think the above article has a part that best explains the "success" of Japan in dealing with COVID-19.

"In more than a dozen interviews with Reuters, public health officials, doctors and experts warned Japan’s slow scaling up of tests could mask the scale of infections and make its population vulnerable to future outbreaks.

Critics say vested interests and bureaucracy inside Japan’s health ministry caused bottlenecks at overworked public health centres, and officials waited too long to allow private labs to run tests."

The problem is that after the state of emergency was declared, public health officials were probably under pressure to "keep the numbers down so that we can reopen". The goal, of course, is to reduce the spread of COVID-19 so that the economy can reopen. The number of infections is the KPI for determining if the measures are working.

But the sense, being here in Japan, is that the KPI became the goal. Instead of working to slow the spread, the goal was to keep the numbers down. The result is that even though, on paper, the criteria for taking a PCR test was relaxed, people still did not get ready access to PCR tests. Call the hospital, and they redirect you to the health officials. Call the local health officials, and they redirect you somewhere else. And it goes on and on. Until you give up and just self-quarantine yourself at home (because most people are working from home anyway).

The problem with this approach is that you lose on contact tracing. So if Person A is infected but refused a test, he can stay at home to limit the spread. But if he had been in contact with Persons B and C before that, and they are also infected but without symptoms, then Persons B and C may end up spreading the virus to others.

The best way to get a sense of whether COVID-19 is really under control in Japan is to look at the number of positive cases vs the number of hospitalized cases. The number of hospitalized cases should be significantly lower than the number of cases because many people do not develop symptoms. (For example, as of May 28, there were 5,195 positive cases. At its peak, on May 5, there were already 2,974 hospitalized.)

There is, of course, a plus side to Japan. People are socially responsible, so even if a person has developed light to moderate symptoms but refused a test, he or she usually self-quarantines, which slows the spread. But it really doesn't do much to flatten the curve since there are many who do not develop symptoms.

When public health becomes a numbers game... sigh...

Thursday, May 28, 2020

The issue about changing the start of the academic year in Japan


Previously, I wrote about some of my thoughts about changing the start of the academic year in Japan. This is a follow-up post.

As someone who studied a bit of economics in the past, there is always that cost-benefit analysis in me when making decisions. So the biggest issue in my mind is: what is the benefit of this move? And then, how does it compare to the cost?

The cost will likely be one-off as society as a whole adjusts that one single time to this shift. The effects, though, will be long-term since society will then have to live with this decision.

This means that any benefit must firstly outweigh the one-off cost, and bring long-term positive effects that can balance and exceed any negative ones. And so, the search begins.

To me, the benefit of aligning the school year with countries in Europe and the U.S. is... of little benefit. Not many Japanese students ever actually venture overseas for studies to make this a move that will benefit the masses. And while an academic year that starts in September may make it easier for students from other countries to study in Japan, again, students from Europe and the U.S. may not make up a significant portion since they already have top-notch colleges of their own. Most foreign students in Japan actually come from less developed countries, and if the aim is to attract foreign students, then the academic year should be adjusted to align with those countries instead.

But then, what is the purpose of pursuing studies in Japan for these foreign students? Unless Japan allows a more open immigration policy that allows such students to find employment in Japan after studying here, it is unlikely that there will be a massive influx of foreign students even if Japan changes its academic year to suit them.

So to me, the danger is: are we pursuing change for the sake of change? Has the means become the end? If so, it is a waste of resources; we are solving a problem that we defined without there being a substantial problem in the first place. I really hope the Japanese government can focus more on the real issues at hand, which is the fragile education system that may cause significant social disruption when there is widespread school closures. Let's tackle real problems instead of chasing after self-created ones.

Monday, May 25, 2020

Exploring WLED firmware for NeoPixel LED control

Continuing from the foray into RGB LEDs with the MRR ESPx boards, I decided to see if I can find something to control RGB LEDs via WiFi. And came across this firmware called WLED.

It actually works great with ESP8266 and ESP32 microcontrollers. I have successfully flashed it to a Wemos D1 Mini (which is ESP8266-based) and a Wemos Lolin32 OLED (which is ESP32 development board with OLED display). Both of them work with a small strip of 10 NeoPixel LEDs. It seems that WLED can also be used to control those "analog" RGB LEDs too. To do that, you will need to change some of the #define statements in NpbWrapper.h. The pin used for the data pin (defaults to GPIO2) of NeoPixel (WS2818B) strips can also be changed in NpbWrapper.h. If you do not have an IR receiver, you can disable IR by defining the pin to -1 (default value is 4). Other settings are found in wled.h.

I am, however, facing some trouble getting OLED support to work. Such features are supposed to be easily added via the usermod.cpp file, with examples here. I tried to use this usermod, and set the constructor to
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(U8X8_PIN_SCL, U8X8_PIN_SDA, U8X8_PIN_NONE);
but that did not work for me. Tried HW_I2C too, but still no joy. BTW, the SCL pin is 5 and SDA pin is 4 on the Wemos Lolin32 OLED, and I even disable the IR pin to make sure there is no conflict.

Still, even without the OLED display, NeoPixel control works. And there is no issue with the first pixel being of a different color, which is an issue when using the Adafruit_NeoPixel library (see comment in this post). The web UI looks great too, with many interesting presets, patterns and palettes.

As for which development board to use, I think the best one would be a development board with a small and thin footprint that can be powered by USB, with the 5V, GND, and at least GPIO2 broken out for connection to the NeoPixel strip. You can probably even design one. It just needs a ESP8266 or ESP32 microcontroller, the CP2102 or CH340 USB-to-serial chip, a few transistors to help with the flashing circuit, a 3.3V voltage regulator, and a USB connector. Plus a few passive components like resistors and capacitors. Probably two ESD protection diodes. And the pin header for pins to expose. But this is another PCB design project for another day...

Update: I managed to get the OLED display working by using pin 4 for SCL and pin 5 for SDA... this seems to be the right pins to use instead of the other way round... 😅😂

Update 2: The video below gives an introduction on how to flash WLED firmware to an ESP8266. A similar process can be used for ESP32. The process is toward the end of the video.

For information on what the various settings are, this is a great video.
 

Thursday, May 21, 2020

The MOSFET debate

Recently, there has been some discussion about this video by TH3D which claims that the MOSFETs used by BIGTREETECH on their boards are fakes. One of the factors considered was appearance: the MOSFETs used on the boards look different from the ones ordered via LCSC.

I myself had that similar experience with fake MOSFETs which looked different. You can read about it here. But more important than appearance is performance. I reached my conclusion that I had a fake MOSFET not just because of the appearance, but also because the MOSFET was not able to draw the amount of current that it was supposed to be capable of. It was not performing within specifications.

TH3D has also done some "extreme" testing of boards in the past, where they put Chinese boards against their EZBOARD and see how much current can be drawn by the MOSFET on the boards before smoke comes out. Well, surprise surprise, their EZBOARD outperformed the rest. But is that really a good comparison?

First, how much power a board can pull through the mounted MOSFET depends on many things. The thing is, boards are rated for a safe amount of current. For example, the MRR ESPx boards are designed to operate up to 15A, and that limit is not due to the MOSFET. It is due to the screw terminals being used as well as the heat being dissipated by the MOSFET at 15A. So an experiment that draws 30A for a board designed to operate at up to 15A is an experiment that is designed to fail the board. (I know the MRR ESPA can draw 24A without going up in smoke, but that is not what the board is rated for.)

Second, even if a MOSFET is rated for 100A, it does not mean it can safely draw 100A of current just like that. It must be mounted properly on a heatsink that can help dissipate that kind heat. For example, the WSK220N04 MOSFET used on the MRR ESPx as well as BIGTREETECH's SKR boards. It is rated for up to 220A. But with a RDSON of 3.2mohm and a junction to ambient thermal resistance of 62.5 degC/W, you are looking at a temperature rise of 9,680 degC when it is pulling 220A mounted on a 1 sq. inch copper area. There will be a fire if not instant disintegration.

The temperature rise of a MOSFET is governed mainly by its RDSON, thermal resistance and heatsink area. For the same MOSFET, being mounted on a larger copper area will allow heat to dissipate better, which means a lower temperature rise for the same amount of current being drawn. Adding a heatsink has the same effect. It is why those big external MOSFETs have huge heatsinks. It is also why MOSFETs mounted on 3D printer control boards usually have a higher temperature rise, because the boards they are mounted on usually do not have that 1 sq. inch or more of copper area for that MOSFET. The smaller the copper area, the higher the temperature rise.

The other factor is the MOSFET itself. Saying the SKR boards are not as good as the EZBOARD is... comparing an apple to an orange. They use different MOSFETs, so the temperature rise will obviously be different. Just for comparison, let's take the WSK220N04 and the IRLS3036. The former has a RDSON of 3.2mohm at VGS of 10V and junction to ambient thermal resistance of 62.5 degC/W. The latter has RSDON of 2.4mohm at VGS of 10V and junction to ambient thermal resistance of 40 degC/W.

When both are mounted to the same copper area of 1 sq. inch, drawing a current of 30A should result in an approximate temperature rise of 180 degC for the WSK220N04. But the IRLS3036 is expected to have an approximate temperature rise of 86.4 degC. But the price of the IRLS3036 is US$2.66 per unit, while the WSK220N04 costs only US$1.16 (all prices from LCSC for better comparison). Obviously, a more expensive MOSFET is going to outperform a cheaper one. I am not sure what MOSFET is used on the EZBOARD, but given that it is said to be overspec, it is likely to be an expensive MOSFET with a very low RDSON and thermal resistance. Which also means that the EZBOARD will see a much lower temperature rise than the SKR boards at the same current being drawn. But the EZBOARD also costs a few times more.

Okay, I think I have written enough about what I think about this issue. I will not question the intentions behind TH3D for doing those "extreme" tests and making their videos. I am no mind reader. I just hope to add my own view on MOSFET performance based on what I know.

Wednesday, May 20, 2020

U.S. support for the Uighurs: humanitarian or political?

Note: This post is purposely skewed toward providing the "other" side of the issue to provoke thought. There are more than enough articles out on the Internet on what China is doing to the Uighurs to provide the "orthodox" view on this matter.

When I think about the Uighur issue in China, I like to think about it from two perspectives: humanitarian and political.

Humanitarian-wise, it has to do with the Chinese government suppressing Uighur culture. Having visited Xinjiang in the mid-1990s, I did not observe such suppression first-hand. It could be that I was too young to notice such suppression, but I was introduced to Uighur culture and way of life without noticing any effort to deny their practices or erase their heritage. In fact, it was being promoted because it brought in tourism money.

Politically, there has been an independence movement in the Xinjiang region for centuries. But external support for this independence movement came from the Soviet Union at a time when the Soviet Union was not on good terms with China. I don't think the Soviet Union were humanitarian in their purpose; it was probably more for political revenge against China for not following Soviet leadership in communism/socialism.

Support for this independence movement has since been taken up by the U.S., with greater intensity as China rose to become the world's second largest economy. While the purpose stated by the U.S. is humanitarian, I suspect it is again political.

For a country to become a superpower, there is a need for economic power that is based on geographic depth. While the bulk of China's population (and thus, economic consumers) live in the eastern part of China, the western part, including Xinjiang, forms a bulk of China's geographic depth. An independent Xinjiang and Tibet would take away that depth. A country without such geographic depth can still be an economic power. We see Japan as an example, and the European Union as another. But such a country would not be a superpower: it will lack the geographic depth necessary to become a power with a size that can challenge the U.S.

Another hint at why this may be the case. Given that the Uighur independence is not new, the independence of Xinjiang (and Tibet) would have been major issues raised by Kissinger back in the 1970s if the U.S. really cared for the self-determination of these people. But no, the U.S. was more concerned about geopolitics, about getting China as a partner to balance against the Soviet Union. It is only after China's economic rise that we see stronger U.S. support for the Uighur and Tibetans. I think it is quite obvious that the humanitarian cause is being hijacked for political purposes.

If we dig deeper into the humanitarian issue: could it be that China is taking a stronger stance against separatist Uighurs because they have become more vocal due to external support for their movement? This would form a vicious cycle, since stronger suppression of the Uighurs will only result in stronger external support, leading the separatist Uighurs to be more bold, which will in turn lead to even stronger suppression. In other words: was the humanitarian crisis faced by the Uighurs caused by external support for their independence? Is the humanitarian crisis being created by external powers who want to use humanitarian reasons for intervention in China's internal politics? (For example, we see Russian suppression of Chechnya, but we do not see strong U.S. action against Russia.)

In conclusion, before we go about blindly following the cries of the U.S. and others in calling for humanitarian treatment of the Uighurs, we should better understand the background to the issue, which stretches back centuries. A state's power comes from its people, and a person's power comes from knowledge. Let us strive to be better informed so that we do not let our power be blindly harnessed by our leaders.

Tuesday, May 19, 2020

Strong state, weak state

It takes a virus to reinstate the state

This opinion article deserves a read. Governments can be strong and weak, and a strong state does not equate to an authoritarian one.

I think the misconception that a strong state is authoritarian can lead us toward undermining the strength of a state. But anyway, read the article to form your own views.

To win, first know the "shape" of the opponent's strategy

Our minds are not good at grasping the unknown. It is our nature that, when trying to deal with an issue, we must first have a concept of that issue. In other words, we must give that issue a "shape". This applies not just to our daily lives but also to broader aspects like economics and geopolitics. Here, I shall talk more about geopolitics.

In geopolitics, we must know what others are trying to do. We need to give "shape" to their strategies. Is it a strategy of coercion by military force? Is it a strategy of "buying" allies? Once we know that strategy, we can then work to undermine it, to work on countering it.

For example, if the opponent's strategy is to weaken our alliances (as mentioned in The Art of War), then we need to look at our alliances and address issues that may be exploited. If the strategy is to stretch us, we need to know how to prioritize our resource allocation. If it is a strategy of distraction, we need to learn to discern substantial actions from inconsequential ones.

The key is to work against the opponent's strategy and not be tied down by dealing with his actions.

Saturday, May 16, 2020

Striking a balance between conflicting ideals

Experts have jobs. They need to understand those who don’t.

And herein lies the problem.

"They see the overclass as enacting policies that are presented as good for the whole country but really mostly benefit people from the ruling class, whose lives have gotten better over the past few decades while the rest are left behind."

I believe in capitalism and meritocracy. But I also believe that any ideology, taken to the extreme, will only end in failure. Because human nature is not black and white. There are so many shades of gray in between. And the story of human history is therefore about striking a balance between conflicting ideals such that we make progress as a whole.

China is a good example. Yes, we know it is a communist country, but China has also learnt that pursuing communism by itself will not work. That is why China has opened up its economy, with some form of capitalism and meritocracy within its otherwise communistic and autocratic system. The thing is to strike a balance that allows China's society as a whole to move forward.

The American way, however, has been moving toward an increasingly extreme ideology of denying anything that is not democratic, capitalistic, meritocratic. I have previously written about the fallacy of "communism is bad". At a time when the U.S. needed to harness popular support to win a struggle against the Soviet Union, splitting the world into black and white, blue versus red seemed to be easy and effective.

And when American politicians saw the effectiveness of this "divide to win" strategy, they started to bring it into domestic politics, resulting in the extreme political divide we see today. A society that is so divided today, taking conflicting ideologies to their extremes. You have a "ruling" class that keeps stressing that capitalism is the way for the U.S. to grow and prosper, denouncing social welfare for being communist. As a rhetoric, that may sound nice, but the human story has reached today not because we focused entirely on survival of the fittest. Somewhere along the way, we have learnt that the key to species survival and prosperity is not in individuals who are each the best of their kind. Rather, it is about how an entire group can work together, each playing different roles, to allow the entire group to thrive better than others.

In any society, people will have different capabilities, different skills, different levels of proficiency. The people at the top are there because there are people at the bottom propping them up. The key is how to take care of the entire group without flattening the structure (communism taken to the extreme) because a flat structure provides no incentive for those who can to bring about progress. A flat structure, in other words, is stagnant. At the same time, we need to make sure that our societal pyramid has a system in place to take care of the pyramid's base. Because it is the base that props up the pyramid, allowing those at the top to chart out a better course for the future. If you let the base die away, the top will collapse on itself.

There is no "best" system. But there are bad ones. And because there are so many shades of gray, there is no single system that works for everyone. It is up to us to arrive at individual systems most appropriate for our own societies to move forward. And those systems are always somewhere in the middle ground. Depending on the people in the system, sometimes the solution is more to the left, sometimes more to the right. But it is never at the extreme ends, because we never have homogeneous human beings.

I only hope societies can find their balance. Before going to the extremes result in conflicts that negatively impacts the entire human species.

Sunday, May 10, 2020

COVID-19 has turned everyone into an armchair expert

We are starting to see things like this paper, which argues the economic cost of lockdowns. The implicit message is that we should be opening up the economy.
A Multi-Risk SIR Model with Optimally Targeted Lockdown

And the news seems to be trying to echo that same message.

For those who praise the Swedish model about herd immunity, herd immunity only works if recovering from infection conveys immunity from future infection, which as of today, the WHO has said is something that has yet to be scientifically proven. Rate of infection is also determined by population density, which is why large and dense cities like New York experience more cases per capita than suburban or rural districts.

Academic papers that use economic modeling to model the effects of COVID-19 are only as good as their assumptions. If a model assumes the wrong infection rate, the wrong fatality rate, or even the wrong assumption about immunity conveyed by infection recovery, that model will not be reflective of the real world. The issue with mathematical models is that it can only take in as many factors as those who design the model incorporate in them, and the real world is full of many other factors for which we do not have a proper understanding of.

Even the agent-based model that I came up with is overly simplistic. It was designed to provide insight into possible patterns, not predict what will happen.

We can all try to make sense of the statistics on our own. But if our interpretation of numbers matter more than the scientists, then why do they spend their lifetimes trying to perfect their skills?

COVID-19 has turned everyone into armchair experts, all thinking we know better than actual experts of this field. But while we are all experts in our own fields, being an expert in economics does not make me an expert in infection science. To think we know better than the experts is hubris, and hubris has been known to lead to downfall.

By the way, I think crises like COVID-19 highlight the need for interdisciplinary/cross-disciplinary expertise. A pity that most people, to be experts in one field, are usually unable to devote the time to become an expert in another field enough for us to produce such experts. Maybe we need a group of experts whose only expertise is being able to bring together experts in other fields and integrate their expertise into something that can deal with the overall situation, which usually spans various fields.

Oh wait, we do have such experts. They are called leaders.

Machine learning meet strategic thought


This is actually quite mind-blowing. Instead of trying to directly fight an opponent, this new AI uses its actions to mislead the opponent's perception of the situation so that the opponent fails through its own mistakes.

In OODA terms, the AI is shaping the Observe process of the opponent to mess up the opponent's Orient thus Decide processes, leading it to take the wrong Action. And doing so helps it to win 86% of the time, instead of trying to slug it out with the opponent for a 47% win rate.

Looked at from the perspective of strategic thought, it is to win without fighting, to win through deception. The Art of War. Wow.

🤯

Saturday, May 09, 2020

Marlin, ESP32, RGB LEDs, and case light

Previously, I tested NEOPixel RGB LEDs on the MRR ESPA. This time, I tested the options for controlling the LEDs via an LCD controller. For that, I needed to use the MRR ESPE since the MRR ESPA cannot support the traditional LCD12864 controller.

The setup:
- One NEOPixel light strip with 10 addressable RGB LEDs, connected to 5V, GND, and GPIO2
- One 120mm RGB fan, connected to 12V, GND, and pins 153, 154, and 155 for R, G, and B respectively via a custom MOSFET board
(Note: Non-addressable RGB LEDs can be controlled via the I2S output pins since they are basically on/off only. For NEOPixels, the I2S output pins cannot be used for the data pin; the data pin needs to be connected to a native ESP32 pin like GPIO2.)


First, the changes in configuration files needed.
Configuration.h
#define RGB_LED

#if EITHER(RGB_LED, RGBW_LED)
  #define RGB_LED_R_PIN 153
  #define RGB_LED_G_PIN 154
  #define RGB_LED_B_PIN 155
  //#define RGB_LED_W_PIN -1
#endif

 
#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE   NEO_GRB 

  #define NEOPIXEL_PIN     2
  #define NEOPIXEL_PIXELS 10
  #define NEOPIXEL_IS_SEQUENTIAL
  #define NEOPIXEL_BRIGHTNESS 127
  #define NEOPIXEL_STARTUP_TEST
#endif

 
Configuration_adv.h
#define CASE_LIGHT_ENABLE
#if ENABLED(CASE_LIGHT_ENABLE)
  #define CASE_LIGHT_PIN 2
  #define INVERT_CASE_LIGHT false
  #define CASE_LIGHT_DEFAULT_ON true
  #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105
  //#define CASE_LIGHT_MAX_PWM 128
  #define CASE_LIGHT_MENU
  //#define CASE_LIGHT_NO_BRIGHTNESS
  #define CASE_LIGHT_USE_NEOPIXEL
  #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
    #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 }
  #endif
#endif
 

  #define LED_CONTROL_MENU
  #if ENABLED(LED_CONTROL_MENU)
    #define LED_COLOR_PRESETS
    #if ENABLED(LED_COLOR_PRESETS)
      #define LED_USER_PRESET_RED        255
      #define LED_USER_PRESET_GREEN      128
      #define LED_USER_PRESET_BLUE         0
      #define LED_USER_PRESET_WHITE      255
      #define LED_USER_PRESET_BRIGHTNESS 255
      //#define LED_USER_PRESET_STARTUP
    #endif
  #endif



The results are not really stunning. But it works.

On boot, the NEOPixels will cycle through red, green, and blue, then turn white since the light strip is configured as a case light which is always on after boot. Somehow, setting the color of the NEOPixels also end up setting the colors for the RGB fan.

I then used the LCD controller to turn on and off the case light. The menu item is actually under Configuration -> Case light. This has options for on/off and brightness. Even when NEOPixels are used, there is no option to change colors from the LCD controller.

Next, I used the LCD controller to change LED colors. This is under the LED option of the main menu. Changing LED colors will affect both the RGB fan as well as the NEOPixel light strip. Somehow, they are linked inside the firmware. I don't know if this is a feature or a bug.

This is the custom MOSFET board. It can be used to drive a RGB CPU fan. It is basically two sets of dual-channel MOSFETs to give a total of four channels. Three channels are used for RGB control, the remaining channel for fan control.






The glitch when using the Adafruit_Neopixel library with ESP32 still exists. One way to try and resolve the glitch is to select the same option on the LCD controller again. Basically, run the command twice. This helps most of the time. Another option involves editing neopixel.h itself to change the show() function.
  static inline void show() {
    adaneo1.show();
    adaneo1.show();
    #if PIN_EXISTS(NEOPIXEL2)
      #if MULTIPLE_NEOPIXEL_TYPES
        adaneo2.show();
        adaneo2.show();
      #else
        adaneo1.setPin(NEOPIXEL2_PIN);
        adaneo1.show();
        adaneo1.show();
        adaneo1.setPin(NEOPIXEL_PIN);
      #endif
    #endif
  }

Basically, call show() twice.

Conclusion: The LCD controller can be used to control LEDs (of course) and it works with ESP32-based boards. Both MRR ESPA and MRR ESPE have been tested to work with RGB LEDs: the MRR ESPA can work with NEOPixels, while the MRR ESPE has enough pins to use for NEOPixels as well as non-addressable RGB LEDs.

Get the MRR ESPA board here.

MRR ESPA and MRR ESPE related social media:
Facebook page
Facebook group for users


Wednesday, May 06, 2020

Connecting MRR ESPA to Labists Mini 3D printer (aka Easythreed X1) part 3


With a bit of time today, I decided to work further on using the MRR ESPA with the Labists Mini 3D printer (aka Easythreed X1).

Connecting MRR ESPA to Labists Mini 3D printer (aka Easythreed X1)

Connecting MRR ESPA to Labists Mini 3D printer (aka Easythreed X1) part 2

First, I did some testing with the latest Marlin bugfix-2.0.x, changing things like various options in Configuration_adv.h, given below with the values tried in brackets.

MINIMUM_STEPPER_PULSE (1, 2, 3, 5)
MINIMUM_STEPPER_POST_DIR_DELAY (200, 400, 650)
MINIMUM_STEPPER_PRE_DIR_DELAY (200, 400, 650)
SLOWDOWN_DIVISOR (2, 4, 6)
BLOCK_BUFFER_SIZE (16, 64, 256)

But I still had the "eaten" steps problem. Which did not appear at all when I use the previous fork by luc-github which is being archived here. The latest bugfix-2.0.x also makes the motors sound more... rough.

I guess the only way is to continue to use the old fork for the MRR ESPA.

Anyway, using the old fork, I decided to do a bit of fine-tuning for retraction settings.



Retraction of 8mm at 30mm/s seems to give the best result. I tried to increase retraction speed to 40mm/s to see if it will help, but the result from 6mm at 40mm/s seems to be worse than 6mm at 30mm/s, so I more or less decided to stick with 8mm at 30mm/s from now.

By the way, I have added a part cooling fan to the printer. It is a 25x25x7mm fan which I got from here. The official one can be obtained here.

I then tried to print a couple of LEGO compatible bricks, but without using a raft, the elephant foot makes those bricks useless.

I also printed this Scorbunny (50mm in height).







I guess I still need to work on the retraction just a little bit more.



Get the MRR ESPA board here.

MRR ESPA and MRR ESPE related social media:
Facebook page
Facebook group for users

Affiliate link to Labists mini 3D printer on Amazon.com

My thoughts on contact tracing apps

Digital handshake: Can contact tracing deliver on its promise in coronavirus battle?

Here is my own take on how contact tracing apps can be implemented, based on some of the stuff I have been reading.

Basic model: Smartphone app using Bluetooth. The app will both broadcast its IMEI number, and at the same time, note down the IMEI numbers being broadcast by other phones in the vicinity.

1. Signal strength should be used to determine proximity. A threshold should be used; any signal strength below that should be ignored.

2. An IMEI number needs to be "valid" (above threshold signal strength) for a certain period of time in order to be flagged as "close contact". Maybe repeatedly seeing the same number over 15 to 30 minutes would be a good gauge. This needs to be determined by scientists studying infectious diseases.

3. Valid numbers are logged down in the phone, with a time stamp of the date and time when it became a valid number. This means the only personal data being stored on phones are the IMEI numbers. If the same number has already been logged in the past X hours (probably 6 hours, but this is again a number for experts to determine), then it is ignored.

4. If a person is found to have been infected, the log from his or her phone is downloaded by the authorities. Then, records falling within the "infectious period" are extracted. The IMEI numbers are checked against the records of mobile operators to determine the identities of the owners.

5. Step 4 is repeated in an outward cascade.

6. Records are deleted after a certain period has gone by (like 3 months).

The advantage of such a system is that the minimum data is being stored on phones. This means records will only take up very little storage space. Also, the only personal data stored is the IMEI number, which helps to keep identities private since linking IMEI number to owner name is something that is not easily done (without access to data maintained by mobile operators). Regular housekeeping of old records means the data set is kept small and manageable for use.

Implementation-wise, I think Python already has the Bluetooth libraries needed, and Kivy is probably a good way to create the actual UI portion since it can be easily packaged to run on both Android and iOS phones. The app will start as a beacon, and become a scanner at certain fixed intervals (like every 5 minutes) to do the processing and logging of nearby phones. Wonder if anyone wants to give this a try?

Tuesday, May 05, 2020

Raising a tiger cub

Trump administration pushing to rip global supply chains from China: officials

There is a Chinese saying, 养虎为患 which basically means raising a tiger brings disaster.

Almost 50 years ago, in the midst of the Cold War, the U.S. sought to engage China against the Soviet Union. This led to various things happening in the 1970s and 1980s, including the recognition of the PRC over Taiwan at the United Nations, the opening up of trade relations, accepting students from China into the U.S., and many other things which have improved China's political and economic standing over the years.

The U.S. thought it was raising a puppy into an obedient dog. But over the years, that cute, obedient puppy has grown into a wolf. And now, trying to beat the wolf into obedience may be too late. And starving a wolf is not the best way to get it to obey orders; it only makes the wolf more vicious. I hope the U.S. finds a way to live with the wolf. If not, when it runs out of meat, it may end up being wolf food.

Sunday, May 03, 2020

Life is like a cherry blossom 人生如樱随风落

人生如樱随风落
莫等绿叶代其色

Life is like a cherry blossom falling with the wind,
without waiting for the green leaves to replace its beauty.