- 6 tháng trước
Danh mục
🤖
Công nghệPhụ đề
00:00When QR codes first came out, I thought they were awful, never going to catch on.
00:05This is a flowchart from the time that really resonated with me.
00:09The problem as I saw it was that QR codes are ugly and they mean nothing to people.
00:15I would rather just see a website or a word that I could google.
00:19QR codes are a language for machines and I am a human. But I was wrong.
00:26QR codes obviously turned out to be so useful that they are now ubiquitous,
00:30used in everything from tickets to restaurant menus and advertising.
00:34In some countries, they're the most common way to exchange money.
00:39And the story of QR codes is a very human one.
00:42The origin of these checkerboard patterns actually dates back to our first efforts at digitizing information.
00:49In 1825, there was a renowned painter who lived in New Haven, Connecticut with his wife and two kids.
00:56His big break came one day when he was invited to paint a portrait of the Marquis de Lafayette,
01:01a hero of the American Revolution. Even though his wife was expecting their third child any day,
01:07the opportunity was too good to pass up and he hastily set off for Washington DC where Lafayette was waiting.
01:14There, the painter wrote to his wife describing his first meeting with Lafayette,
01:19signing off with the words,
01:20We'll write again soon, love to all the children, in the greatest taste but with the same ardent affection as ever, thy loving husband.
01:28After a few days with no reply, a courier delivered a letter which said his wife was ill after childbirth.
01:35Worried, the painter rushed home.
01:37He traveled by horse and wagon day and night, managing to arrive back in New Haven in several days.
01:46But it was far too late.
01:48His wife had died.
01:50Not only that, he had missed the funeral.
01:53Her body was already buried in the ground.
01:57The painter's name was Samuel Finley Breeze Morse.
02:02From that day forward, Morse set out to find a faster way to communicate over long distances.
02:07He got a job at New York University where he attended lectures on electricity,
02:12a rapidly developing field at the time.
02:14In 1836, along with Joseph Henry and Alfred Vale,
02:18he devised a machine that could send electrical pulses along a wire.
02:22This was not the first electric telegraph, but it was the simplest.
02:27In the UK, another team had set up a series of circuits
02:30to move five magnetic needles to point at letters and numbers.
02:35Morse's system required only a single circuit.
02:38But the simplicity of the apparatus demanded a cleverer method of encoding information.
02:45On the circuit, you could send short or long pulses.
02:49Morse turned these into dots and dashes.
02:53The most common letters could be sent with a single key press,
02:57a dot for an E and a dash for a T.
03:00The other letters were arranged by frequency and assigned increasingly complex codes.
03:07These symbols were meant to be printed at the receiver on a paper strip,
03:11but operators soon realized they could recognize the letters just by the sound.
03:19This sped up the rate at which information could be sent and received.
03:23So Morse code became an international standard for rapid messaging.
03:29Widely used in the military, maritime communications and aviation.
03:34The universally recognized distress call, SOS, what does it stand for?
03:40Nothing.
03:41It just happens to be easy to send and recognize in Morse code.
03:46Morse code revolutionized communication.
03:50But in the next century, it would transform a totally different industry.
03:54In the late 1940s, Bernard Silver was an engineering student at Drexel University in Pennsylvania.
04:04One day, he overheard the president of a local supermarket chain asking the engineering dean to
04:09find a way to speed up the checkout process.
04:12At that time, cashiers had to type in each item and its price by hand,
04:17a process so tedious and repetitive that many cashiers had developed carpal tunnel syndrome.
04:23Silver told his friend Norman Joseph Woodland about the problem and together they began experimenting.
04:30After several false starts, Woodland moved down to Florida.
04:34And one day, on the beach, he drew some dots and dashes of Morse code in the sand,
04:40something he was very familiar with as a boy scout.
04:44He recalls,
04:45I just extended the dots and dashes downwards and made narrow lines and wide lines out of them.
04:52And thus, the first barcode was created.
04:55From this humble beginning evolved the universal product code or UPC barcode,
05:00capable of storing a simple string of 12 numbers.
05:05It's read by scanning a laser across it and checking how much light is reflected to
05:10read the black and white lines, essentially as dots and dashes.
05:15A pair of vertical lines are placed at the beginning,
05:18middle and end to ensure the scanner reads the code properly.
05:22The code is divided into left and right halves.
05:25Numbers at either side have their black and white lines flipped,
05:28so that the scanner can tell left and right apart even while reading upside down.
05:33When viewed upright, the numbers typically specify the manufacturer on the left
05:38and the product on the right.
05:40Manufacturers actually pay large sums of money to reserve a given amount of numbers to themselves,
05:45so that they can exclusively register their products.
05:50In this way, the 12 digits of a barcode uniquely specify every single grocery item you've ever bought.
05:56This jar of Jift peanut butter is identified by the same 12 digits,
05:59no matter where in the world it's found.
06:01And all forms of peanut butter, smooth, crunchy, stir, no stir, sugar-free, low sodium,
06:07across all brands get their own unique barcode.
06:12Will we ever run out of barcodes?
06:14Well, 12 digits could combine to provide 10 to the 12,
06:18that is a trillion different possible sequences.
06:21That should be more than enough, even if companies keep making stuff like
06:25Sour Patch Oreos and Flaming Hot Mountain Dew.
06:28But there is a catch, the last digit is not independent of the others.
06:35The barcode creators were aware that it could get scratched, stained, or tampered with,
06:39so they reserved the last digit to verify that the barcode is complete.
06:46Take any barcode and sum the digits at odd numbered positions.
06:51Multiply this result by 3.
06:54Add the digit sum at even numbered positions to the result.
06:58And take the remainder when this number is divided by 10.
07:02If this remainder is 0, then the check digit is 0.
07:05Otherwise, the check digit is 10 minus this remainder.
07:10If a scanner is unable to read any one digit of the barcode,
07:14it can use the final digit to back-calculate what it must be using this algorithm.
07:21But if two digits are damaged, well, then we're out of luck.
07:24In that case, we have to type in the numbers printed below the barcode.
07:28So without that last digit, the number of unique possibilities is 10 to the 11, or 100 billion options.
07:35To date, 1.24 billion barcodes have been registered, a number that is rising every day.
07:41So they won't last us forever.
07:46But that's not why people began to look for alternatives to barcodes.
07:50It was really the amount of information a single barcode could store.
07:5412 digits by themselves could only identify one product.
07:58But what if someone wanted to know more information, like where that product came from?
08:03In 1986, cattle in the UK began showing symptoms of a curious brain disease,
08:14bovine spongiform encephalopathy, or mad cow disease for short.
08:20It is spread when cattle ate feed containing prions, misfolded proteins.
08:25And if people ate beef containing tissue from the brain or spinal cord of infected cattle,
08:29they could contract a related brain illness that literally turns your brain into a sponge.
08:36Now, as no test could detect mad cow disease in living cows, millions of cattle were culled.
08:41Health officials sought a method to track sources and imports of beef.
08:46But with all the information this would require for any one piece of beef, barcodes were insufficient.
08:53American inventor David Alley tried to solve the problem by stacking many barcodes on top of each other.
08:58The result, code 49, looked like a bookshelf.
09:02This is actually the predecessor of PDF417, a code often used on airline boarding passes.
09:09But code 49 didn't solve the data quantity problem.
09:13At best, it multiplied the information a barcode could carry by a handful.
09:18A more efficient way was to extend barcodes into two dimensions, creating a data matrix.
09:25NASA tried this in 1994 with Vera code, used to track and identify space shuttle parts.
09:31This code was read by early digital cameras rather than lasers, and was initially proprietary.
09:38Around the same time, Masahiro Hara, an engineer at a Japanese auto parts manufacturer,
09:43Denso, was getting frustrated at having to scan multiple barcodes for filling in the same box of car components.
09:49Hara set out to develop an alternative on his own.
10:08He took inspiration from an unusual source.
10:12He took inspiration from an unusual source.
10:20to understand how information is stored in a QR code, I am going to build one myself, in the way
10:40Masahiro Hara first conceptualized it, with a Go board.
10:44I have the usual black and white stones.
10:47White represents zero, black represents one.
10:51And we're going to encode the link to our YouTube channel on this board.
10:56So the first step is to convert www.youtube.com slash Veritasium into ones and zeros.
11:02And we'll do that using byte encoding.
11:04Byte encoding uses ASCII, which itself has roots in Morse code.
11:09Every character is assigned a number from 1 to 256.
11:13Then we convert the ASCII decimal into its binary form.
11:18Since 256 is 2 to the power of 8,
11:20we can use the 8 binary bit combinations to represent all ASCII characters.
11:25These 8 bits make up 1 byte of information.
11:30The letter W is assigned the ASCII decimal 119.
11:34Or 0, 1, 1, 1, 1, 0, 1, 1, 1.
11:37Doing the same for all characters in www.youtube.com slash Veritasium,
11:43this is what the string looks like in binary.
11:46This is 26 characters long, so it takes up 26 bytes of information.
11:52Now our board is 25 by 25.
11:57This is known as a version 2 QR code.
12:00But there are many different sizes, all readable by your phone camera.
12:04Hara's version 1 QR code was 21 by 21.
12:07And the largest version today is 177 by 177.
12:11That is large enough to hold 3 kilobytes of information.
12:15Just 26 of these would have been enough to store all the information
12:18Apollo 11's computer needed to send humans to the moon.
12:24One programmer even coded up a computer game, Snake, into a version 40 QR code.
12:32The region around a QR code must be empty and of uniform color.
12:36This is the quiet zone.
12:39A distinguishing feature of QR codes is the three square patterns in the corners.
12:45These position squares allow the reader to identify the orientation of the code.
12:50Now almost all QR codes also have a fourth square in the last corner,
12:55but it's smaller and hence trickier to spot.
12:58This is the alignment pattern.
13:00It's used to rescale the QR code when it's read from varying distances or from crazy oblique angles.
13:07The relative size and distance of the alignment square with respect to the position squares
13:11allows the software to rescale it into a proper square.
13:16Next to the position squares are plain white strips that isolate them from the rest of the code.
13:22And these are timing strips.
13:25Zebra pedestrian crossings which connect the top left position square with the other two.
13:31Every QR code has these alternating strips.
13:34You should look out for them.
13:35QR codes of all sizes visibly look the same.
13:38So this tells your phone which version it is and therefore how much data to expect.
13:43If there are five alternating squares, it's version one.
13:46If there are nine, it's version two.
13:48And so on.
13:50And next to those are format strips that contain rules for how to scan the code.
13:55I'm placing redstones in the space they occupy for now.
13:59There is another feature every QR code has.
14:02This one pixel adjacent to the bottom right position square, it is always dark.
14:08I asked Haru-san if it had any special significance, but he said no.
14:20All of this remaining space is for data storage.
14:24Data inside a QR code always starts at the bottom right corner.
14:28Here the first four squares carry four bits that specify the data format.
14:33Triple zero one if it's just numbers.
14:36Zero zero one zero if it's alphanumeric.
14:39So capital letters and numbers.
14:41Zero one zero zero if it's information stored in bytes.
14:45And one zero zero zero for Japanese kanji.
14:50The following eight bits are used to indicate the number of characters in our message.
14:55So since we have 26 characters, that should be zero zero zero one one zero one zero.
15:03Next we start arranging our bytes for youtube.com slash veritasium starting in 8-bit two-column cells.
15:10They follow a zigzag pattern that snakes its way to the top left.
15:15Within each cell that represents a byte, the most significant bit, corresponding to 2 to the 7,
15:20is at the bottom right. And the least significant, or two to the zero, is at the opposite end.
15:26Zero one one one zero one one one for w will hence be filled like this.
15:33And we'll follow along with the rest.
15:35Once we fill in the bytes for www.u, we encounter the alignment pattern after four bits.
15:42To put in the next T, we simply bypass it and do the same for any of the other fixed regions of the code.
15:50Thus we keep filling in our data in the same zigzag pattern.
15:55After we complete www.youtube.c, the cells start looking less regular and more Tetris-like.
16:02But the way we put the stones, byte after byte remains the same.
16:14And there go the last eight bits for the last letter M.
16:18But wait a minute, we've only covered about half of our QR code.
16:23Well that's because this whole remaining space is reserved for redundancy.
16:28These extra bytes of error correction code allow us to reconstruct information if the QR code is damaged.
16:37For a fully intact QR code, error correction makes something else possible.
16:42Putting a company logo at the center.
16:45Just like the sponsor of this video, Saley.
16:48Now I travel a lot. Recently I was in Germany, right now I'm in Australia, and soon I'm going to the UK.
16:54But wherever you are, you need to have a working phone.
16:58Either you pay your home carrier's hefty roaming fees, or you have to find a place to buy a local
17:03SIM card, put it in the phone, and hope it works.
17:06This video's sponsor, Saley, makes it easy to set up a cell plan and data in more than 150 countries.
17:12You can pick how much data you want and how long you want it for.
17:16And it is so much cheaper than roaming.
17:19I'm actually going to the UK really soon, and here's how quickly I can set up an eSIM with Saley.
17:24All I have to do is click on the country, select a plan, and activate the eSIM.
17:30Then when I land, I'll automatically connect to a local network with no hidden charges.
17:35That's it. There's no need to hunt for public Wi-Fi, and you don't have to stand in line
17:40at the airport to get a physical SIM.
17:42With Saley, you set it up once and you'll always be connected.
17:46And if you find out that your phone isn't compatible with eSIMs, you will get a full refund.
17:51So to check out Saley for free, go to salee.com slash veritasium or click the link in the description.
17:57Use the code VERITASIUM to get an exclusive 15% off your first purchase.
18:02That's salee.com slash veritasium, or you can scan this handy QR code to get 15% off.
18:09So I want to thank Saley for sponsoring this part of the video.
18:12And now back to building our own QR code.
18:16QR codes offer four levels of error correction.
18:20Low, which can still be read with 7% of the code missing.
18:23Medium, which can handle 14%.
18:26Quartile, 25%, and high, up to 30%.
18:31This means a QR code could still be read properly, even with nearly a third of it missing.
18:37Higher levels require more space for error correction.
18:41So knowing how much of the code is error correction is vital.
18:45This information is protected in two ways.
18:49First, the level of error correction is indicated in the format strip,
18:53which is present identically in two places.
18:56The simplest way to avoid errors is to duplicate the information.
19:02Here we'll choose the M level by placing one blue and one yellow stone here at the top left.
19:08So what if this part gets damaged?
19:11We have a copy in the second format strip starting at the bottom left.
19:16The format strip contains three more bits of important information that we'll get to later.
19:21So for now, I'm just going to put down three blue stones in both copies.
19:27But what about all the rest of the format strip?
19:30Well, this is the second layer of protection.
19:33These other 10 bits are all just designed to correct mistakes in the first five bits.
19:38So how does this work?
19:40Let's say I only wanted to communicate two levels of error correction to you.
19:46Low or high.
19:47If one of the bits flips in transmission to 0 1 or 1 0, it's easy to know that an error has occurred,
19:55but no way to know which the original message was.
19:58An easy way to fix this is to add another bit.
20:01So 0 0 0 for low, 1 1 1 for high.
20:05Now these are at opposite ends of a cube and hence they are further apart.
20:10If you then receive 0 1 1, it's more likely that the intended message was 1 1 1,
20:15so it's easy to correct.
20:18In this scheme, the only allowed code words are triple 0 and triple 1.
20:23The rest act as disallowed buffers to indicate errors in transmission.
20:29The allowed code words should be as far apart as possible.
20:34Here they are three vertices apart.
20:37This is known as the Hamming distance, after Richard Hamming, who pioneered the field of error correction.
20:46For a Hamming distance of n, you can correct up to n minus 1 over 2 errors in a binary string,
20:52so one bit flip in the previous example.
20:54So back to the five bits of our format string.
20:59If I only wanted to communicate all 0s or all 1s,
21:02I could place them at opposite corners of a five-dimensional hypercube.
21:07However, our string includes all 2 to the 5, or 32, combinations of 1s and 0s as valid code words.
21:15So to provide buffers, like before, we can extend the 5-bit string into a 15-bit string.
21:21Now the 32 valid code words are each separated by 7 vertices, or a Hamming distance of 7.
21:28Which means we can correct up to 3 bit flip errors.
21:33The easiest way to do this is using a lookup table.
21:36The table takes a slightly misread vertex and finds the closest valid vertex, likely the intended code word.
21:46But for our main QR code data, we need a far more efficient scheme.
21:50One that doesn't require lookup tables, or doubling or tripling our data size.
21:56Let's say I want to send you a message that is the four numbers 1, negative 2, 3, and 5.
22:03If I just send these numbers, one of them could get corrupted in transmission,
22:08and you wouldn't know that an error had occurred, or which digit was wrong.
22:12So before I send the message, we come up with a plan.
22:16First, instead of sending you four numbers, I will send six.
22:20The first four are my actual message, and the last two, A and B, will help you check if there were any errors.
22:28Now, I want you to treat these six numbers as the coefficients of a degree 5 polynomial.
22:33And I will pick the values of A and B so that this polynomial could also be written in the form of a degree 3 polynomial,
22:41call it Q of X, times X minus 1, X minus 2.
22:45Now, we could set these last two terms to be X minus any number, but for simplicity, let's say we pick 1 and 2.
22:55That way, when you receive my polynomial, you know that if you plug in X equals 1 or X equals 2,
23:00you should get zero for both, because that's how I constructed the polynomial.
23:05And if you don't get zero, you know there has been an error in transmission.
23:10They are called syndromes, which is an apt term, since syndromes are defined as a group of signs
23:16that occur together and characterize a particular abnormality.
23:20If the message polynomial is not zero at any of the syndrome values, then there is an error in the code.
23:27So how do I find the values of A and B in our example?
23:31Well, I take the polynomial without A and B and divide it by X minus 1, X minus 2.
23:37I get a degree 3 polynomial, which is what I want, but there is also a remainder of 37X minus 30.
23:46So I can move this to the left-hand side.
23:48For the polynomial to take the form I want, A must be negative 37 and B positive 30.
23:55So I send the message 1, negative 2, 3, 5, negative 37, and 30.
24:02You can plug in X equals 1 and X equals 2, and if you get zero for both, you know the message was sent correctly.
24:10But what if there was an error in transmission?
24:13Say at position 4, the number has changed to a 6.
24:16Well now, if you evaluate at X equals 1 and 2, the polynomial is no longer zero.
24:22To figure out where the error occurred, one at a time you set each coefficient to be a variable.
24:30Then find the value of that variable setting the polynomial equal to zero at X equals 1.
24:36You repeat this for X equals 2.
24:38And what you find is that the two values are different.
24:42This indicates that the second coefficient was not the error.
24:46You find the same for all the other coefficients except when you reach the one where the error occurred.
24:51Here, not only are the two values equal, they are also equal to the originally transmitted number, that is 5.
24:59So this method allows us both to check and correct errors with only a modest increase in data size.
25:06This is a toy example of a Reed-Solomon error correcting code, developed by mathematicians Irving S. Reed and Gustav Solomon in 1960.
25:27The job of decoding Reed-Solomon codes in a brute force way, as we described, can quickly get intensive.
25:32In fact, as the Voyager spacecraft floated into the outer solar system, NASA engineers knew their signal-to-noise ratio would get incredibly small.
25:42But the promise of Reed-Solomon codes was such that they put an experimental encoder in before launch,
25:48wagering that smarter encoding algorithms would follow in the next decade.
25:52And that's exactly what happened.
25:55To this day, we can make out Voyager's ever-faintening whispers thanks to Reed-Solomon codes.
26:01These codes also ensure that your old CDs or DVDs can still play your favorite songs and movies despite multiple scratches.
26:09And they are the reason why QR codes still work when damaged.
26:13In a QR code, the entire data, starting from the data type, character length byte,
26:19our message bytes, and final padding are laid out in a line and converted back into ASCII decimals.
26:25Fitting a high-degree polynomial using these can easily make the coefficients blow up.
26:31Hence, Reed-Solomon encoding uses finite field arithmetic, Galois fields, to obtain the error-correcting terms.
26:38These converted back into binary are used to fill out the rest of the QR code.
26:42And there we have our complete QR code.
26:53But why can't we scan it yet?
26:56See how these regions here appear uniformly white and black?
27:01Well, sometimes the encoded data can insert plain patterns and blank spaces just by chance.
27:07These can confound the readers which expect to see a noisy checkerboard.
27:12They think maybe it's a big damage patch, or maybe it's not a QR code at all.
27:16But there is a way to fix this.
27:18Remember the three blue stones I put in for masking in the format string?
27:22Well, they specify one of eight ways to reshuffle the appearance of our QR code pixels
27:28to make them seem truly jumbled.
27:31Now, this particular mask says flip the pixels so white becomes black and black becomes white
27:37for every third column of data.
27:41But this does not apply to the functional elements of the code.
27:44They remain unchanged.
27:53The QR code standard specifies the use of eight masking patterns.
27:57In principle, when combined with the correct masking bits, all eight forms of the code are readable.
28:03Which is why some QR code generators will return different looking codes for the same input string.
28:09But which one works best?
28:12Well, every continuous or bad patch adds points.
28:16And each mask gets assigned a score.
28:18The mask with the lowest score at the end wins.
28:22It's easiest for any reader to scan.
28:27For our handmade QR code, I'm going to use the simplest mask.
28:34And now we have a working QR code.
28:38Try it out.
28:42The moment of truth.
28:46Uh, it worked.
28:48You know, going through this exercise made me realize again why I hate QR codes.
28:53They are not meant for people.
28:54I made all kinds of mistakes while I was trying to put down these black and white stones.
28:58This was really hard to get this perfect.
29:02I guess it didn't have to be perfect, but it had to be close enough.
29:05All right.
29:06Initially, QR codes had only industrial uses.
29:09It was tested, but it wasn't long before the value of their data storage capacity was realized.
29:28In 2002, mad cow disease resurfaced in the UK.
29:32179 people died from eating contaminated beef.
29:36And people panicked.
29:38They wanted to know exactly where their meat was coming from and how it was stored before it reached the supermarket.
29:44This time, the QR code was available to help.
29:47It was one of the first instances where the curious checkerboards started to appear in common use.
29:52But why are QR codes so successful? There are plenty of other 2D matrix codes out there.
29:59Well, one reason is that Denso Wave decided not to exercise patent rights on QR codes.
30:04Well, I personally am an engineer, so I was happy to use the QR codes in the world.
30:17So, when I opened Tokyo, I think that the QR code is here, so I think it was the right answer.
30:28Denso instead opted to monetize and sell QR code scanners.
30:33Of course, with the rise of smartphones, most people would soon carry a QR code scanner in their pocket.
30:38But initially, QR code reading apps were third-party and rather niche.
30:43But then, in 2017, Android and Apple built QR code readers right into their camera apps.
30:49So, the use of these codes took off.
30:52The COVID-19 pandemic also gave QR codes a boost worldwide.
30:56Suddenly, restaurants and vendors wanted a contactless way to hand out menus and product information.
31:01Contactless payment using QR codes took off in India and China.
31:05Today, India sees over 12 billion QR code-enabled transactions per month.
31:10QR codes also proved handy in storing vaccine records and personal health information in phone wallets.
31:16But their enormous spread has also created problems.
31:20A question about QR code safety.
31:24In recent years, some scammers have used QR codes to try to defraud people who read them.
31:31Do you have concerns about these uses?
31:34I think, this was a piece of fishingку,
31:37or something like that,
31:39or anything like that.
31:41However,
31:42in Japan,
31:442020,
31:46we had to read that QR code
31:48that we had to guide people
31:57on the history of the QR code,
31:59so I have to use it on the QR code.
32:02So as with anything on the internet, you have to pay extra attention to safety.
32:19Check where a scanned QR code is taking you before actually clicking on a link.
32:24So I want to know about the future of QR codes.
32:28What is next for QR codes?
32:30QR code is basically using text and text.
32:40Because it is in the air, there are many devices from the internet or Wi-Fi.
32:50If you're having a QR code or a cell or a cell or a cell or a cell or a cell or something,
33:00I can't go anywhere else, but in other hospitals, I want to take care of the QR code and read it to the hospital,
33:09and I want to take care of the patient.
33:17The QR code is two colors of white and black, and I want to make it more colorful.
33:28Now, if the possibility of running out of UPC barcodes is remote, for QR codes it is impossible.
33:36The number of unique version 1 QR codes using the lowest redundancy level is 2 to the 152.
33:44This is about 10 times the total number of legal chessboard configurations.
33:49Which is also why a random distribution of pixels filled into a QR code pattern generally
33:54cannot be interpreted as a message.
33:57You have scanned countless QR codes.
34:01And when you scan your next one, you'll have a better idea of how it works.
34:05But have you ever thought about what QR itself stands for?
34:08What is your favorite application of the QR code?
34:21Well, one of the most驚いた things is that the address and phone number of QR codes are added to the QR code.
34:32I think it's a promotion to the drone that has a QR code that has been used to create a lot of things that I've seen before.
34:45I'm going to show you how to express it.
Bình luận