Dust and Stars - 1992 | Chapter 139 | Packaging and Reconciliation | English
When the sky was just beginning to pale, Lin Chen woke up. Not naturally—a sharp cramp in his left ankle yanked him back into cons
Chapter 139: Packaging and Reconciliation
When the sky was just beginning to pale, Lin Chen woke up. Not naturally—a sharp cramp in his left ankle yanked him back into consciousness. The muscle spasmed uncontrollably, as if a tendon had knotted itself between the bones. He bit down on his lower lip without making a sound, slowly straightened his leg, pressed a palm against his calf, and worked downward along the muscle. Only after more than a dozen passes did the cramp reluctantly subside. The kerosene lamp in the main room had long since gone out; only a gray-blue wash of morning light filtered through the paper window. Xiaoman's breathing was even. Wang Guiying was nowhere to be seen—probably in the kitchen lighting the fire and cooking porridge.
He felt around by the pillow for his phone. The screen lit up: 06:12. There were less than nine hours left until three in the afternoon.
He threw back the blanket and lowered his right foot first, keeping the left suspended as he leveraged himself upright. The moment his left sole touched the ground, the numbness wrapped around the bone like a thick callus. Sensation was broken, but the weight was real. He walked to the water jar and scooped up some water to wash his face. The cold splash cleared his head completely. The ledger lay open on the table. Beside yesterday's balance of 35.3 yuan, he added a new line: Goal: V3.0 packaging. Deliver 8000. Reconciliation.
At 7:20, the internet café in town had just opened. The rolling shutter was only halfway up, and he slipped in sideways. The owner was still yawning and didn't notice him. He went to the machine in the farthest corner and plugged in his flash drive. Power on. The startup music of Windows XP sounded dully through the speakers. He opened Notepad and the Python environment. The logic he had run through in his head last night now had to be typed into reality, line by line.
class DataCleaner:
def __init__(self, filepath):
self.filepath = filepath
self.log = []
self.success_count = 0
self.skip_count = 0
He wrote slowly. Not because he didn't know how, but because he was afraid of making a mistake. The keyboard in the internet café was badly worn, and the Enter key stuck a little. Every time he finished a method, he saved. Packaging wasn't for showing off; it was for reuse. V2.0 had been a loose script—run it once, then throw it away. V3.0 had to keep logs, connect to Excel, and pull up an error list at any time. He took out the hard-cover notebook he carried with him; inside was a copied summary of the official xlrd documentation. xlrd.open_workbook(), sheet.row_values(). He typed against it line by line. Whenever he was unsure about a parameter, he switched to the browser and searched over the dial-up connection. The internet was slow; pages loaded like a snail crawling uphill. He didn't wait. He checked an older manual in the local cache and inferred the rest from logic. If he passed the wrong parameter, he got a TypeError. He fixed it. If the indentation was off, he got an IndentationError. He adjusted it.
Nine o'clock. The logging module was finished. The exception-handling layer was in place. He imported the TXT source file Old Zhao had sent. Run.
The command-line window started scrolling. [INFO] Processing line 1... [WARNING] Line 45: Encoding mismatch, replaced. [ERROR] Line 112: Missing delimiter, skipped.
At 30 percent, the progress bar froze. Not because the machine had crashed—because memory had overflowed. The internet café computers had only 256 MB of RAM. Python was chewing through eight thousand lines of text full of redundant characters, and the stack had blown up. He stared at the screen. He didn't panic. He closed the program and changed the reading method from one-shot readlines() to line-by-line iteration. He added a buffer_size limit and cleared the temporary variables every five hundred lines. Then he ran it again.
The progress bar resumed its crawl. The fan inside the case buzzed continuously. He leaned back in his chair, and a dull swelling began to rise again in his left foot. He couldn't sit for too long. Every forty minutes, he stood up, braced himself on the edge of the desk, shifted his weight to his right leg, touched the toe of his left foot lightly to the ground, and gently worked his ankle. The café was hazy with cigarette smoke. Several young men nearby were playing Legend, shouting over the game nonstop. He put on his headphones—not to listen to music, but just to block out the noise.
At 11:30, the script finished running. The output log showed: Processed 8000 lines. Success: 7842. Skipped: 158. Errors: 0.
He opened the generated CSV. The data was neat. Amounts, dates, names, notes—the fields all aligned. As for the 158 skipped lines, the log clearly recorded the reason for each one: mixed full-width and half-width characters, broken lines, placeholder gibberish. He checked the log by hand once through and confirmed there were no mistakes.
But it still wasn't enough. What Old Zhao wanted was a table that could be imported directly into the accounting system. He had to pull out those 158 skipped entries separately and make a "pending review list" to include in the delivery package. That was the rule. And it was leverage.
He created a new Excel file. Using the script to export a CSV and then converting the format by hand, he listed the anomalous data one entry at a time. With every line he processed, the numbness in the sole of his foot crept another inch upward. Sweat seeped from his temples and dripped onto the keyboard. He pulled out a tissue and wiped it away. He didn't stop.
At 12:45, the delivery package was complete. One main data sheet, one exception list, one runtime log. Total size: 1.2 MB.
He leaned back in the chair and closed his eyes. His breathing was a little heavy. His left leg had already stopped obeying him, as if it had been filled with concrete. He knew he was nearing his limit. But delivery couldn't wait. He opened his eyes and logged into his email. Attachment uploaded. Recipient: Old Zhao. Subject: 8000 Cleaned Records_V3.0 Delivery_With Exception List and Settlement Notes.
He drafted the body of the email three times and revised it twice. In the end, he left only a few dry lines:
Boss Zhao, the data has been cleaned.
Valid records: 7,842. Exception records: 158 (see attached list).
The V3.0 script has been packaged in standard format and can be used directly for future data of the same type.
Please settle based on the actual number of valid records. If the cleaning standard needs to be adjusted, please confirm the rules in advance.
Attachment: data_cleaned_20100808.zip
He clicked Send. The progress bar finished. The email had been delivered.
He shut down the computer. Pulled out the flash drive. When he rose to leave, his left leg suddenly gave way, and his knee slammed into the table leg with a dull thud. One of the young men gaming beside him glanced back. Lin Chen said nothing. He steadied himself against the wall and slowly made his way out of the café.
Outside, the sun was blazing. The asphalt gave off a white glare. He walked very slowly, his right foot dragging the left, one step, one pause. Sweat soaked through the back of his shirt and stuck it to his skin. He didn't bother wiping it away. In his head, he was doing the math. Eight thousand records. If Old Zhao stuck to the flat two hundred yuan he had mentioned earlier, then his half day and full night would be worth only two hundred. But in the email he had brought up "settlement based on the actual number of valid records." If Old Zhao accepted that, then at 0.03 yuan per line, 7,842 records came to 235 yuan. Add the 35.3 he already had, and he'd clear 270. Enough to buy medicine, enough to pay next month's internet fees, enough to leave a little grain in reserve.
And if he didn't accept it? He'd force the price down. Or use "too much anomalous data" as an excuse to dock the payment.
By the old locust tree at the village entrance, he sat down. The shade couldn't keep out the heat, but at least it gave him room to breathe. He took out his phone. The screen was dark. No new messages.
He opened the ledger. After Goal, he crossed out V3.0 packaging and Deliver 8000. Then he wrote: Waiting for reconciliation. Foot injury: bruised left knee, swelling. Funds: 35.3 (pending settlement).
Wind rustled through the leaves overhead. Somewhere in the distance came the chugging sound of a tractor. He closed his eyes and let his heartbeat slow. Technical delivery was only the first step. The gears of business were only now beginning to mesh for real. Old Zhao wasn't a charity case; he was a businessman. Businessmen only looked at input-output ratio and controllability. The logs and lists in V3.0 were proof of controllability. He had provided a standard, and Old Zhao would have to work by that standard. Or Old Zhao would propose a new standard.
At 2:50 in the afternoon, the phone buzzed once.
He opened his eyes. A text message. Old Zhao. "Got the data. Ran it once—the format is right. Saw the list too. Tomorrow at nine in the morning, old teahouse in the county town. Bring the computer. We'll settle in person. Also got a new job to look at."
Lin Chen stared at the line of text. The old teahouse. Settle in person. A new job. There was no price-cutting. No haggling. Just a direct appointment.
He put away the phone and braced himself against the trunk to stand up. His left leg was still numb, but the string inside his bones pulled even tighter. Go to the county town. Take the minibus. Walk. Carry the computer. Meet Old Zhao's eyes. Talk money. Talk rules.
He brushed the dust off his pant leg and turned to walk back. His steps were still slow, but his direction was clear.
The lamp in the main room was not yet lit. Wang Guiying was in the kitchen chopping vegetables. The knife struck the cutting board with steady thuds. Xiaoman was in the yard chasing a dragonfly.
Lin Chen pushed open the door. Set the computer bag on the table. Opened the ledger. Date: August 8. Expenditure: internet café fee, 4 yuan. Bus fare (advance), 3 yuan. Income: 0 (to be settled tomorrow). Balance: 28.3 yuan. Foot injury: bruised left knee. Gait restricted. Progress: V3.0 delivered. Email sent. Meeting with Old Zhao arranged.
He stopped writing. Looked at the four words: "meeting with Old Zhao arranged." There was no excitement, only calculation. Travel cost, time cost, negotiation floor, backup plan. He pulled out a sheet of white paper and began making a list.
1. Bring V3.0 source code and a live demo.
2. Clarify tiered pricing: 0.03 for 1–5000 lines; 0.035 for 5000–10000.
3. Define responsibility for anomalous data: source-file errors do not reduce payment.
4. Settlement period: within 48 hours after delivery.
When he finished, he folded the paper and tucked it into the inner sleeve of the computer bag.
Outside the window, the sky gradually darkened. The cicadas had gone quiet. The wind carried a hint of coolness.
He closed the ledger and blew out the desk lamp.
Darkness settled over the room. In the silence, the pain in his left foot surfaced again. But he didn't move. He only listened to his own breathing.
Tomorrow. Nine o'clock. The old teahouse. The computer. Rules.
The road was still long. But the steps had already been laid. The next one, he would have to place himself.
The phone screen lit up once more beside his pillow. Not a text this time. The alarm. He had set it to remind himself to check the computer's battery and back up the data.
He reached over and turned it off. Closed his eyes.
Waited for dawn.
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment