1 คะแนน โดย GN⁺ 2024-08-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในแอป iOS ของ Oral-B ขนาด 290MB มี 233MB มาจาก asset catalog โดยขนาดส่วนใหญ่ของแอปถูกใช้ไปกับแอสเซ็ต PDF สำหรับแปรงสีฟันหลายรุ่น
  • แอสเซ็ต Oral-B ที่ใหญ่ที่สุดคือ Sonos_M9_rose ขนาด 7.8MB และ PDF จำนวนมากไม่ได้มีภาพแปรงสีฟ้าทั้งด้าม แต่มีเพียง ด้ามจับและปุ่ม เท่านั้น
  • ใน Comino.bundle มีไฟล์อย่าง 20class_seqlen26_6p5h_20200302-095627_comino_android_production ซึ่งดูเหมือนเป็น น้ำหนักของโมเดล
  • แอป Colgate Smile ใหญ่กว่าที่ 378MB โดยมี Unity framework 125MB และ binary symbols ที่ไม่ได้ถูกลบออกเป็นปัจจัยหลักที่ทำให้ขนาดบวม
  • Colgate ใส่ แอสเซ็ตและไฟล์ localization 60MB ซ้ำ ทั้งใน main bundle และ widget extension ทำให้อย่างน้อย 120MB เพิ่มขนาดแอปโดยไม่มีคุณค่าเชิงฟังก์ชัน

ขนาดส่วนใหญ่ของแอป Oral-B คือแอสเซ็ต PDF

  • ในแอป Oral-B ขนาดรวม 290MB มี 233MB มาจาก asset catalog
    • คิดเป็น 80% ของขนาดทั้งหมด
    • ส่วนใหญ่เป็นแอสเซ็ต PDF ที่แสดงแปรงสีฟันรุ่นต่าง ๆ
  • แอสเซ็ต PDF ที่ใหญ่ที่สุดคือ Sonos_M9_rose ขนาด 7.8MB
  • PDF หลายไฟล์ไม่ได้มีภาพแปรงสีฟ้าทั้งด้าม แต่มีเพียง ด้ามจับและปุ่ม เท่านั้น
  • รายการอื่นที่สะดุดตาคือ Comino.bundle ขนาด 15MB
    • มีไฟล์อย่าง 20class_seqlen26_6p5h_20200302-095627_comino_android_production
    • ไฟล์เหล่านี้ดูเหมือนเป็นน้ำหนักของโมเดลบางประเภท

ปัญหาที่ใหญ่กว่าของ Colgate Smile คือขนาดบวมที่ลดได้

  • ขนาดแอป Colgate Smile คือ 378MB
  • ดูเหมือนว่าแอปใช้ Unity เพราะฟีเจอร์ “guided brushing”
    • Unity framework มีขนาด 125MB
    • หากฟีเจอร์ดังกล่าวมีคุณค่า การใช้ Unity เองก็ถือเป็นทางเลือกที่พอเข้าใจได้
  • การสิ้นเปลืองที่ใหญ่กว่าคือ ไม่ได้ลบ binary symbols ออกจากแอป production
    • binary symbols ใช้สำหรับ symbolication
    • หากอัปโหลด DSYM ไปยัง crash reporter แล้ว ก็ไม่จำเป็นต้องรวมไว้ในแอป production
    • แค่ลบ binary symbols ก็ลดขนาดรวมได้ ประมาณ 60MB หรือ 15%
  • อีกปัจจัยที่ทำให้ขนาดบวมคือ การใส่ซ้ำ
    • Colgate ใส่แอสเซ็ตและไฟล์ localization ขนาด 60MB ซ้ำใน main bundle และ widget extension
    • โหนดสีแดงแสดงรายการที่ซ้ำกัน
  • ในแอป Colgate คำนวณได้ว่ามีอย่างน้อย 120MB ที่เป็นขนาดซึ่งไม่ได้ให้คุณค่าเชิงฟังก์ชันใด ๆ แก่ผู้ใช้
  • บทความที่เกี่ยวข้อง:

1 ความคิดเห็น

 
GN⁺ 2024-08-29
ความคิดเห็นบน Hacker News
  • ไม่เข้าใจเลยว่าแอป Oral-B กับแอป Colgate มีอยู่ทำไมตั้งแต่แรก

    • ก็เพื่อเก็บข้อมูลไว้ทำ การตลาดและโฆษณา กับลูกค้า
    • แอปสามารถบอกได้ว่าคุณแปรงฟันซี่ไหนได้ดีพอ กล่าวคือใช้เวลาพอหรือไม่ และซี่ไหนที่ข้ามไปหรือผ่านเร็วเกินไป
      ส่วนตัวลองใช้ครั้งหนึ่งแล้วลบทิ้ง แต่สำหรับคนที่อยากตรวจว่าการแปรงฟันมีประสิทธิภาพไหม ก็อาจมีประโยชน์อยู่ ยังไงมันก็เป็นทางเลือกทั้งหมด จะเมินการมีอยู่ของแอปแล้วใช้แค่แปรงสีฟันก็ได้
    • นี่เป็นเหตุผลเดียวกับที่ตอนนี้ถึงขั้นมี แปรงสีฟันติดตั้ง AI ออกมาแล้ว คือแข่งกันประดิษฐ์แปรงสีฟันใหม่ทุกปี เพื่อสร้างจุดต่างใหม่ มุมการตลาดใหม่ และยอดขายที่สูงขึ้น
    • คล้ายโฆษณาโค้กหรือ McDonald’s ไม่ได้ให้ข้อมูลใหม่ แต่เอาโลโก้ แบรนด์ และชื่อย้ำเข้าไปในหัวผู้ชมหรือผู้ใช้เรื่อย ๆ
      จากนั้นก็จะรู้สึกคุ้นเคยมากกว่าแบรนด์อื่นที่ “ไม่รู้จัก” และมีโอกาสซื้อแบรนด์นั้นมากขึ้น แอปก็เหมือนกัน ทุกครั้งที่ใช้ก็เอาโลโก้กับแบรนด์มาอยู่ตรงหน้า สรุปคือ ไม่จำเป็นต้องขายข้อมูลด้วยซ้ำ
    • น่าแปลกที่บริษัทประกันสุขภาพยังไม่เริ่มให้ส่วนลดสำหรับ “คนแปรงฟันดี” ทั้งที่บริษัทประกันรถยนต์ให้ ส่วนลดขับขี่ปลอดภัย เมื่อใช้เครื่องบันทึกข้อมูลหรือแอป
  • ความจริงอันน่าเศร้าคือถ้าลองรีเฟรชใน App Store > Your Account จะเห็นว่า แอปที่ต่ำกว่า 100MB นับได้แทบไม่กี่แอป ในกรณีของผม แอปส่วนใหญ่ 300MB และนี่พูดถึงแค่ตัวอัปเดตเท่านั้น
    ลองเทียบกับ Android แล้ว แอปฝั่งนั้นเบากว่ามาก แอป Objective-C รุ่นเก่าเคยผอมเพรียวกว่านี้มาก แต่แอป Swift แม้หลังจากมี ABI แล้วก็ยังมีขนาดใหญ่และหนักอยู่ ส่วนหนึ่งเป็นเพราะนักพัฒนาขี้เกียจ และอีกส่วนหนึ่งเพราะเครื่องมือของ Apple ไม่ค่อยดี ไม่มี tree shaking หรือการลบ dead code ใน CocoaPods หรือแพ็กเกจ Swift ที่คอมไพล์แล้ว Apple ก็ไม่ได้ใส่ใจนัก และคงยินดีเสียด้วยซ้ำที่จะขายอุปกรณ์ใหม่ที่มีพื้นที่เก็บข้อมูลมากขึ้นหรือขายสมัครสมาชิก iCloud

    • ผมเคยทำงานเรื่องนี้ที่ Google รูปแบบ การแจกจ่ายแอป Android สมัยใหม่ถูกออกแบบมาอย่างเต็มที่เพื่อแบ่งแอปออกเป็นชิ้นย่อย ๆ ให้ผู้ใช้ดาวน์โหลดและติดตั้งเฉพาะส่วนขั้นต่ำที่จำเป็นในแต่ละช่วงเวลา
      ทรัพยากร สถาปัตยกรรม และภาษา จะถูกดาวน์โหลดเมื่อจำเป็นเท่านั้น และยังลงรายละเอียดไปถึงองค์ประกอบเฉพาะด้านอย่างรูปแบบการบีบอัดเท็กซ์เจอร์ของ asset เกมด้วย ดังนั้นอุปกรณ์จะรับเฉพาะเท็กซ์เจอร์ที่ต้องใช้ และนักพัฒนาสามารถแจกจ่ายหลายรูปแบบเพื่อให้ผู้ใช้ได้ตัวเลือกที่ดีที่สุดที่อุปกรณ์ของตนรองรับ ยังสามารถดาวน์โหลดและติดตั้งโมดูลโค้ดแบบ on-demand ได้ด้วย เช่น แยกขั้นตอนสมัครสมาชิกเป็นโมดูลต่างหาก ติดตั้งตอนเริ่มต้น แล้วหลังผู้ใช้สมัครแล้วก็เอาออกเพื่อลดขนาดติดตั้งได้ นักพัฒนาบางรายไม่ดาวน์โหลดหรือติดตั้งโมดูล VOIP ขนาดไม่กี่ MB สำหรับฝ่ายสนับสนุนลูกค้าจริง ๆ จนกว่าผู้ใช้จะเปิดหน้าสนับสนุน ทำให้ผู้ใช้ส่วนใหญ่ไม่ต้องติดตั้งมันเลย
      [0]: https://developer.android.com/guide/playcore/asset-delivery/...
    • Apple ก็มีเครื่องมือแบบนั้นเหมือนกัน และได้เพิ่มเครื่องมือใหม่ที่ใช้กับ ไลบรารีแบบไดนามิก ได้ด้วย
  • https://xcancel.com/emergetools/status/1828490449881047401

    • เป็นพร็อกซี Twitter ที่แย่ที่สุดเท่าที่เคยเห็นมา มีหน้าจอโง่ ๆ บอกว่า “รอ x วินาทีเพื่อดูหน้านี้” แล้วถัดมาก็บอกให้ “โหลดหน้าใหม่”
      เหมือนหน้าคั่นสแปมที่เจอตอนจะดูสตรีมเถื่อน เป็น เครื่องมือที่ห่วยแตก จนแทบไม่อยากเชื่อว่าคนที่ไม่เกี่ยวกับที่นั่นเป็นคนโพสต์ลิงก์นี้
  • น่าหงุดหงิดที่การเก็บข้อมูลผู้ใช้ให้ data broker กลายเป็นธุรกิจที่มีมูลค่ามากเหลือเกิน ยอมดีใจไปกับตัวเลขที่บริษัทใหญ่ ๆ เพิ่มขึ้นเรื่อย ๆ จากการสร้างแอปดูดข้อมูลแทนที่จะทำผลิตภัณฑ์ดี ๆ ไม่ได้เลย
    ดูเหมือนผมจะเข้าสู่วัยกลางคนอย่างเป็นทางการแล้วที่เริ่มบ่นว่า “เมื่อก่อนดีกว่า” แต่ตู้เย็น เครื่องล้างจาน แปรงสีฟันมีแอปเนี่ยนะ ถ้าวันที่เครื่องล้างจาน เอาจานเข้าเครื่องเอง มาถึง เมื่อถึงตอนนั้นผมค่อยยอมรับการปรับราคาตามคุณภาพเชิงอรรถประโยชน์ก็ได้

    • ถ้า คุณภาพโฆษณา ดีขึ้นตามประสิทธิภาพในการดูดข้อมูลก็คงดี ผมไม่มีแม้แต่ใบขับขี่และก็กำลังคบคนอยู่ แต่โฆษณาแบบปรับตามบุคคลในอุปกรณ์ของผมจำนวนมากเป็นเว็บหาคู่กับตัวแทนจำหน่ายรถยนต์
  • สุดท้ายแล้วก็แค่เอารูปรุ่นต่าง ๆ ใส่เป็น PDF ขนาดใหญ่แบบโง่ ๆ เท่านั้นเหรอ? ไม่เหมือนที่คาดไว้ นึกว่าจะเป็นแบบแอป Colgate ที่พูดถึงตอนท้าย

    • ไร้สาระมาก แบบนั้นต้อง ดึงมาเมื่อจำเป็น 100%
    • สงสัยว่าทำ PDF ด้วยฟังก์ชัน “พิมพ์เป็น PDF” ของเว็บเบราว์เซอร์หรือเปล่า PDF ที่ Chrome สร้างมีขนาดใหญ่มาก
    • นึกว่าใช้ Unreal Engine เสียอีก ครั้งสุดท้ายที่เช็ก แอปขั้นต่ำสุดก็เกิน 200MB แล้ว
  • แอป Oral-B เมื่อไม่กี่ปีก่อนค่อนข้างเบา แสดงฟีดข่าวโลกล่าสุด บันทึกข้อมูลลง Apple Health และกระตุ้นให้แปรงฟันต่อเนื่อง เลยสนุกดี
    แต่พอเขียนแอปใหม่ทั้งตัว ก็เสียฟีเจอร์ไปแทบทั้งหมด และหลังเปิดครั้งแรกหลังอัปเกรด ผมก็ไม่เคยเปิดอีกเลย อยากให้ iOS App Store มีแบบที่ติดตั้งเวอร์ชันเก่าได้เหมือน TestFlight น่าเสียดายที่ TestFlight ก็ได้สูงสุดแค่ 90 วัน ตอนนี้อาจถึงเวลาหยิบ BLE sniffer ออกมาแล้ว แต่การขอ สิทธิ์ HealthKit ให้แอปชั่วคราวที่ไม่ได้รับอนุญาตแบบใช้ครั้งเดียวคงเป็นไปไม่ได้

    • “ฟีดข่าวโลกล่าสุด” อะไรนะ? Oral-B? ฟีดข่าวโลก?
    • โปรโตคอลถูกทำ reverse engineering แล้ว ผมใช้ Home Assistant กับ Bluetooth อยู่ แล้วจับ แปรงสีฟัน Oral-B ของเพื่อนบ้านได้อันหนึ่ง
    • ผมเคยมีส่วนร่วมกับงานเวอร์ชันนั้น ขอเงียบไว้ในการถกเถียงต่อจากนี้
  • สิ่งที่น่าอายยิ่งกว่าขนาดของมันเองคือ การจะเปลี่ยนโหมดของแปรงสีฟันต้องใช้แอป ผมคิดจริง ๆ ว่าไม่ควรอนุญาตให้เป็นแบบนี้ แต่ก็ไม่แน่ใจว่าควรบังคับอย่างไร

    • คงขึ้นอยู่กับว่าคุณใช้รุ่นไหนและอยากเปลี่ยนโหมดอะไร แต่ใน Oral-B Pro 5000 ผมสามารถเปลี่ยน โหมดทำความสะอาด อย่าง “Daily Clean”, “Sensitive” และสี LED ตรงปลายได้โดยไม่ต้องใช้แอป
      หน้าจอจะแสดงตัวจับเวลาแปรงฟัน และการติดตามที่จำเป็นจากแปรงสีฟันก็มีแค่นั้นก็พอแล้ว อาจมีโหมดอื่นที่เข้าถึงด้วยปุ่มไม่ได้ แต่เท่าที่ผมรู้ไม่มี
    • ภารกิจแรกคือการมีหน่วยงานคุ้มครองผู้บริโภคที่มีอำนาจตามกฎหมายในการนำ ผลิตภัณฑ์ที่มีข้อบกพร่องโดยการออกแบบ ออกจากตลาด
      ภารกิจที่สองคือการนิยามให้ชัดเจนว่าอะไรควรอนุญาตและอะไรควรห้าม แต่เพราะมีเรื่องโง่ ๆ มากมายที่บริษัทจินตนาการขึ้นมาได้เพื่อกวนใจลูกค้า ผมจึงคิดว่าสามารถให้อำนาจใช้ดุลยพินิจค่อนข้างกว้างแก่หน่วยงานแบบนั้นได้ หากประเมินและตัดสินจากหลักการแกนกลางที่ดี เช่น หลักการว่า “ฟีเจอร์ที่ทำได้โดยไม่ต้องมีแอปร่วม ไม่ควรถูกบังคับให้ใช้แอปร่วม”
    • ทำไมเรื่องแบบนี้ถึงต้องออกกฎหมายด้วย? ก็แค่ไม่ต้องซื้อแปรงสีฟันนั้น แล้วปล่อยให้ผลิตภัณฑ์ตายไปเองตามธรรมชาติก็พอ
    • ใน IO ของผมสามารถเปลี่ยนโหมดจากตัวแปรงได้ แต่การเลือกรายการโหมดที่จะให้เปลี่ยนทำในแอป อย่างไรก็ดี ค่าเริ่มต้นดูเหมือนจะเป็น “ทั้งหมด” ดังนั้นแม้ไม่เคยเปิดแอปเลยก็ยังใช้งานได้
  • คำถามจริง ๆ คือ ตั้งแต่แรกทำไม แปรงสีฟันถึงต้องมีแอป

    • ก็เพื่อรวบรวมข้อมูลลูกค้าให้ได้มากที่สุดเท่าที่ทำได้ หวังว่าจะทำให้ไม่ระบุตัวตนแล้วนำมามัดรวม จากนั้นขายให้ data broker และรีดเงินจากฐานลูกค้าเพิ่มขึ้น
      ทั้งหมดนี้เกิดขึ้นภายใต้ “ความยินยอม” เพราะคุณติดตั้งแอปและมีแนวโน้มว่าจะยอมรับข้อกำหนดการให้บริการหรือประกาศความเป็นส่วนตัวแล้ว แถมยังอ้างว่าเป็นบริการที่นับเวลาหรือความถี่ที่คุณโต้ตอบกับผลิตภัณฑ์ หรือแจ้งเตือนให้ใช้งาน ทั้งที่ถ้าเป็นผู้ใหญ่ที่ใช้ชีวิตปกติ ก็คงทำสิ่งนี้อยู่แล้ว แค่ก่อนหน้านี้มันแม่นยำน้อยกว่าเท่านั้น
    • สมมติเป็นตัวอย่าง บริษัทหมากฝรั่ง “เพื่อทันตกรรม” อาจยอมจ่ายเงินก้อนโตสำหรับข้อมูลที่เอาพฤติกรรมการแปรงฟันของผู้คนไปเทียบกับข้อมูลประชากรศาสตร์และภูมิศาสตร์
      ถ้าข้อมูลแสดงว่าในเมืองหรือเทศมณฑลหนึ่ง ๆ ผู้คนแปรงฟันน้อยกว่าประชากรทั่วไป 25–50% การเพิ่มงบโฆษณาในพื้นที่นั้นก็ดูสมเหตุสมผลทีเดียว เพราะอาจมองได้ว่าคนที่ไม่ค่อยแปรงฟันมีแนวโน้มจะซื้อหมากฝรั่งเพื่อทันตกรรมเพื่อชดเชยความเสียหายมากกว่า
    • มันแสดงให้เห็นว่าคุณใช้เวลากับด้านหน้า ด้านบน และด้านหลังของฟันแต่ละซี่เพียงพอหรือไม่ แปรงสีฟันไฟฟ้า ใช้ต่างจากแปรงสีฟันธรรมดา และไม่ใช่วิธีขยับไปมาหน้า-หลัง
    • พูดตรง ๆ ผมก็คิดแบบเดียวกัน คงเป็นสถิติการแปรงฟันหรือเวลาต่อฟันแต่ละซี่อะไรทำนองนั้น
    • เหตุผลหนึ่งที่ผมเคยใช้แอปคือเรื่องลูก ๆ ระหว่างแปรงฟันมันเปิด แอนิเมชัน ให้ดู เก็บสถิติ และให้เลือกรางวัลอย่างสีอวาตาร์ได้
  • เวอร์ชันที่คลี่ออก: https://unrollnow.com/status/1828490449881047401

    • สำหรับผมใช้ไม่ได้

      Connection failed: User 'u327838624_unroll' has exceeded the 'max_connections_per_hour' resource (current value: 500)

    • ดูเหมือนโดนทราฟฟิกจาก HN ถล่มจนตาย

      Connection failed: User 'uxxxxxxx_unroll' has exceeded the 'max_connections_per_hour' resource (current value: 500)
      นี่เป็น ข้อผิดพลาด MySQL หรือเปล่า?

  • คนสติปกติจะดาวน์โหลด แอปแปรงสีฟัน ไปทำไมกัน?

    • แล้วจะอัปเดตเฟิร์มแวร์แปรงสีฟันอย่างไรล่ะ? หวังว่าจะเป็นมุกนะ แต่ดูเหมือน Phillips จะออก อัปเดตเฟิร์มแวร์ สำหรับ Sonicare ปีละหลายครั้ง