ืคึผืจืขืืืกืืึธืจื
ืขืก ืืื ืึทืืื ืืขืฉืขื ืึทื ืืขืจ ืกืขืจืืืขืจ ืืื ืึทืืึทืงืืจื ืืขืืืืจื ืืืจื ืึท ืจืึทื ืกืึธืืืืึทืจืข ืืืืจืืก, ืืืึธืก, ืืืจื ืึท "ืืึทืืืืืง ืฆืืคืึทื," ืืืื ืืื ืงืก ืื .ืืื ืืขืงืขืก (ืจืื ืืึทืื ืืขืงืขืก ืคืื ืื ืึธืื ืืืฉื) ืึทื ืืึทืืฉื, ืึธืืขืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื ืืึธืจ ืื ืงืจืืคึผืืื ืื .fpm ืืขืงืขืก ( ืกืืจืืงืืืจ ืืขืงืขืก). ืืื ืืขื ืคืึทื, .idb ืงืขื ืืืื ืฆืขืืืืื ืืื:
- ืืื ืืขืจืืขื ืืง ืฆื ืจืขืกืืขืจืืืฉืึทื ืืืจื ื ืึธืจืืึทื ืืืฉืืจืื ืืื ืคืืจืขืจ. ืคึฟืึทืจ ืึทืืึท ืงืึทืกืขืก, ืขืก ืืื ืึท ืืืกืืขืฆืืืื ื
ืืืขืจื ; - ืืืื ืื ืงืจืืคึผืืื ืืืฉื. ืืขืจืกืื ืก ืืึธืก ืืขื ืขื ืืจืืืก ืืืฉื, ืคึฟืึทืจ ืืืึธืก (ืืื ืืื ืคึฟืึทืจืฉืืืื) ืื ืึทืืึทืงืขืจื ืืึธืื ื ืืฉื ืืขื ืื ืืึทืจืึทื ืคึฟืึทืจ ืคืื ืขื ืงืจืืคึผืฉืึทื;
- ื ื, ืืึธืจ ืื ืงืจืืคึผืืื ืืืฉื ืืืึธืก ืงืขื ืขื ื ืื ืืืื ืืขืืื ื.
ืขืก ืืื ืืขืืืขื ืฆื ืืึทืฉืืืกื ืืืึธืก ืึธืคึผืฆืืข ืื ืืืฉื ืืขืืขืจื ืฆื ืืืจื ืคืฉืื ืขืคื ืขืก ืืื ืงืืื ืืขืงืกื ืจืขืืึทืงืืึธืจ ืืื ืืขืจ ืืขืจ ืืขืืืืื ืงืึธืืืจืื ื (ืืื ืืืื ืคืึทื ืขืก ืืื UTF8) ืืื ืคืฉืื ืืขื ืื ืืขืงืข ืคึฟืึทืจ ืื ืืืึทืืืึทื ืคืื ืืขืงืกื ืคืขืืืขืจ, ืืืฉื:
ืืืื, ืืื ืื ืึธื ืืืื ืคืื ืืขืจ ืืขืงืข ืืืจ ืงืขื ืขื ืึธืืกืขืจืืืืจื ืึท ืืจืืืก ื ืืืขืจ ืคืื 0 ืืืืขืก, ืืื ืืืืจืืกืขืก ืืืึธืก ื ืืฆื ืื ืืืึธืง ืขื ืงืจืืคึผืฉืึทื ืึทืืืขืจืืืึทื (ืื ืืขืจืกื ืคึผืจืึธืกื) ืืืืฉืึทืืืึทืื ืืืืจืงื ืืื ืืืื.
ืืื ืืืื ืคืึทื, ืื ืึทืืึทืงืขืจื ืืื ืงืก ืึท 4-ืืืืข ืฉืืจืืงื (1, 0, 0, 0) ืืื ืื ืกืืฃ ืคืื ืืขืืขืจ ืื ืงืจืืคึผืืื ืืขืงืข, ืืืึธืก ืกืืืคึผืืึทืคืืื ืื ืึทืจืืขื. ืฆื ืืืื ืคึฟืึทืจ ืึทื ืื ืคืขืงืืึทื ืืขืงืขืก, ืื ืฉืจืืคื ืืื ืืขื ืื:
def opened(path):
files = os.listdir(path)
for f in files:
if os.path.isfile(path + f):
yield path + f
for full_path in opened("C:somepath"):
file = open(full_path, "rb")
last_string = ""
for line in file:
last_string = line
file.close()
if (last_string[len(last_string) -4:len(last_string)]) != (1, 0, 0, 0):
print(full_path)
ืืืื, ืขืก ืคืืจืงืขืจื ืืืืก ืฆื ืืขืคึฟืื ืขื ืืขืงืขืก ืืืืึธื ืืื ื ืฆื ืืขืจ ืขืจืฉืืขืจ ืืืคึผ. ืื ืจืืข ืื ืืืึทืืืื ืึท ืคึผืืึทืฅ ืคืื ืืึทื ืืึทื ืึทืจืืขื, ืึธืืขืจ ืืืึธืก ืืื ืืขืคืื ืขื ืืื ืฉืืื ืืขื ืื. ืึทืืฅ ืืืึธืื ืืืื ืืื, ืึธืืขืจ ืืืจ ืืึทืจืคึฟื ืฆื ืืืืกื ืืขืืึทืืจืข ืืขื ืื ืกืืจืืงืืืจ ืืื (ืคืึทืจืฉืืืื ืืื) ืึท ืคืึทื ืืื ืืืืคืืขืฉืืื ืขื ืึทื ืืื ืืขืืื ืฆื ืึทืจืืขืื ืืื ืึท ืึธืคื ืืฉืึทื ืืื ื ืืืฉ. ืงืืื ืขืจ ืืึธื ื ืืฉื ืืขืืขื ืงื ืฆื ืืขืจ ืคืขืื ืืืคึผ ืืื ืืขืืืื ืึธืืขืจ ืึท ื ืืึทืข ืืืึทื ืืื ืฆืืืขืืขืื.
ืืืืืืก ืกืืื ืืื ืืืืืขืจ ื ืืฉื ืืขืงืขื ื ืืขืืคื ืืื ืืื ืคืื, ืืขืจืคืืจ ืืืขืจื ืืขืฉืจืืื ืืขืจ ืืจืืืงื.
ืืึทืงืืืขื ืฆื ืืขื ืคืื ื
ืขืก ืืื ืึท ืกืืจืืงืืืจ ืคืื ืึท ืืืฉ ืคืื 3 ืืืฉืื ืฆืืจืืง ืืืึธืก ืืื ื ืืฉื ืฆืื ืืืคืคืึทืื ืืื ืื ืงืจืึทื ื (ืขืคืฉืขืจ ืืืื ืคืขืื, ืืื ืขืคืฉืขืจ ืืขืจ). ืืืฉ ืกืืจืืงืืืจ:
CREATE TABLE `table_1` (
`id` INT (11),
`date` DATETIME ,
`description` TEXT ,
`id_point` INT (11),
`id_user` INT (11),
`date_start` DATETIME ,
`date_finish` DATETIME ,
`photo` INT (1),
`id_client` INT (11),
`status` INT (1),
`lead__time` TIME ,
`sendstatus` TINYINT (4)
);
ืืื ืืขื ืคืึทื, ืืืจ ืืึทืจืคึฟื ืฆื ืขืงืกืืจืึทืงื:
id_point
ืื ื (11);id_user
ืื ื (11);date_start
DATETIME;date_finish
DATETIME.
ืคึฟืึทืจ ืึธืคึผืืื, ืึท ืืืืข-ืืื-ืืืืข ืึทื ืึทืืืกืืก ืคืื ืื .ืืื ืืขืงืข ืืื ืืขื ืืฆื, ื ืืืืขืืื ืืขื ืืืจื ืงืึทื ืืืขืจืืื ื ืืื ืืื ืึท ืืขืจ ืืืื ืขืืืืืง ืคืึธืจืขื. ืืื ื ืฆื ืืขืคึฟืื ืขื ืืืึธืก ืืืจ ืืึทืจืคึฟื, ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืึทื ืึทืืืื ืืึทืื ืืืืคึผืก ืึทืืึท ืืื int ืืื datatime, ืืขืจ ืึทืจืืืงื ืืืขื ืืึทืฉืจืืึทืื ืืืืื ืืื, ืึธืืขืจ ืืื ืืืจ ืืืขืื ืืืื ืึธืคึผืฉืืงื ืฆื ืื ืืขืจืข ืืึทืื ืืืืคึผืก, ืืืึธืก ืงืขื ืขื ืืขืืคึฟื ืืื ืื ืืขืจืข ืขื ืืขื ืื ืกืึทืืึทื ืฅ.
ืคึผืจืึธืืืขื 1: ืคืขืืืขืจ ืืื ืืืืคึผืก DATETIME ืืื TEXT ืืึธืื NULL ืืืึทืืืขืก, ืืื ืืื ืืขื ืขื ืคืฉืื ืกืงืืคึผื ืืื ืืขืจ ืืขืงืข, ืืืืึทื ืคืื ืืขื, ืขืก ืืื ื ืื ืืขืืืขื ืฆื ืืึทืฉืืืกื ืื ืกืืจืืงืืืจ ืฆื ืืืงืขืจื ืืื ืืืื ืคืึทื. ืืื ืื ื ืืึทืข ืฉืคืืืื, ืื ืคืขืืืงืืึทื ืืืขืจื ืืื ื ืึทื, ืืื ืืืื ืคืื ืื ืืจืึทื ืกืึทืงืืืึธื ืงืขื ืืืื ืคืึทืจืคืึทืื ืจืขืื ืฆื ืืขืจ ืืึทืฉืืขืืืงื innodb_flush_log_at_trx_commit = 0, ืึทืืื ื ืึธื ืฆืืื ืืืึธืื ืืืื ืคืืจืืจืืื ืฆื ืืึทืฉืืืกื ืื ืกืืจืืงืืืจ.
ืคึผืจืึธืืืขื 2: ืขืก ืืึธื ืืืื ืืขื ืืืขื ืืื ืืฉืืื ืึทื ืจืึธืื ืืืืกืืขืืขืงื ืืืจื DELETE ืืืขื ืึทืืข ืืืื ืืื ืื ibd ืืขืงืข, ืึธืืขืจ ืืื ALTER TABLE ืืืืขืจ ืกืืจืืงืืืจ ืืืขื ื ืืฉื ืืืื ืืขืจืืืึทื ืืืงื. ืืื ืึท ืจืขืืืืืึทื, ืื ืืึทืื ืกืืจืืงืืืจ ืงืขื ืขื ืืืึทืื ืคืื ืื ืึธื ืืืื ืคืื ืื ืืขืงืข ืฆื ืื ืกืืฃ. ืืืื ืืืจ ืึธืคื ื ืืฆื ืึธืคึผืืืืืืข ืืืฉ, ืขืก ืืื ืึทื ืืืืงืื ืฆื ืืจืขืคื ืึทืืึท ืึท ืคึผืจืึธืืืขื.
ืฆืืงืืงื ืืื, ืื DBMS ืืืขืจืกืืข ืึทืคืขืงืฅ ืื ืืืขื ืืึทืื ืืขื ืขื ืกืืึธืจื, ืืื ืืขื ืืืึทืฉืคึผืื ืงืขื ื ืืฉื ืึทืจืืขืื ืคึฟืึทืจ ืื ืืขืจืข ืืืืคึผื ืืืขืจืกืืขืก. ืืื ืืืื ืคืึทื, ืื Windows ืืืขืจืกืืข ืคืื โโโโmariadb 10.1.24 ืืื ืืขื ืืฆื. ืืืื, ืืึธืืฉ ืืื mariadb ืืืจ ืึทืจืืขื ืืื InnoDB ืืืฉื, ืืื ืคืึทืงื ืืื ืืขื ืขื
ืืขืงืข ืึทื ืึทืืืกืืก
ืืื ืคึผืืืืึธื, ืืึทืื ืืืคึผ
ื ืึธื ืงืืงื ืืืจื ืขืืืขืืข ibd ืืขืงืขืก, ืืืจ ืงืขื ืขื ืืขืคึฟืื ืขื ืื ืคืืืืขื ืืข:
ืืขืจืฆื, ืืืื ืืืจ ืืืืื ืื ืืขืงืข ืืืจื ืื ืืขืจืืื ืขื, ืืืจ ืืืขื ืืึทืงืืืขื ืืขืจืกืื ืก ืืคืืื ืืืึทืงืก ืคืื ืืึทืื. ืืืจ ืืืขืื ื ืืฆื ืื ืคืืืื ืืื ืึท ืืืืืืืขืจ.
table = table.split("infimum".encode())
ืึท ืืฉืืงืึทืืืข ืึธืืกืขืจืืืึทืฆืืข: ืคึฟืึทืจ ืืืฉื ืืื ืึท ืงืืืื ืกืืืข ืคืื โโืืึทืื, ืฆืืืืฉื ืื ืคืืืึท ืืื ืืขืืกื ืขืก ืืื ืึท ืืืึทืื ืฆื ืื ื ืืืขืจ ืคืื ืจืึธืื ืืื ืื ืืืึธืง.
- ืคึผืจืืืืจื ืืืฉ ืืื 1 ืจืืืขืจื
- ืคึผืจืืืืจื ืืืฉ ืืื 2 ืจืึธืื
ืื ืจืืืขืจื ืืขื ืืข ืืืฉ [0] ืงืขื ืขื ืืืื ืกืงืืคึผื. ื ืึธื ืืืจืืงืืงื, ืืื ืืื ื ืึธื ื ืื ืืขืงืขื ื ืฆื ืืขืคึฟืื ืขื ืื ืจืื ืืืฉ ืืึทืื. ืจืืึฟ ืืกืชึผืื, ืืขื ืืืึธืง ืืื ืืขื ืืฆื ืฆื ืงืจืึธื ืื ืืขืงืกืื ืืื ืฉืืืกืืขื.
ืกืืึทืจืืื ื ืืื ืืืฉ [1] ืืื ืืืืขืจืืขืฆื ืขืก ืืื ืึท ื ืืืขืจืืง ืืขื ืืข, ืืืจ ืงืขื ืขื ืฉืืื ืืึทืืขืจืงื ืขืืืขืืข ืคึผืึทืืขืจื ื, ื ืืืืื:
ืืึธืก ืืขื ืขื ืื ื ืืืึทืืืขืก ืกืืึธืจื ืืื ืึท ืฉืืจืืงื. ืืขืจ ืขืจืฉืืขืจ ืืืื ืื ืืืงืืืฅ ืฆื ืื ื ืืืขืจ ืืื positive ืึธืืขืจ ื ืขืืึทืืืื. ืืื ืืืื ืคืึทื, ืึทืืข ื ืืืขืจื ืืขื ืขื positive. ืคืื ืื ืจืืขื 3 ืืืืขืก, ืืืจ ืงืขื ืขื ืืึทืฉืืืืขื ืื ื ืืืขืจ ืืื ืื ืคืืืืขื ืืข ืคืื ืงืฆืืข. ืฉืจืืคื:
def find_int(val: str): # example '128, 1, 2, 3'
val = [int(v) for v in val.split(", ")]
result_int = val[1]*256**2 + val[2]*256*1 + val[3]
return result_int
ืคึฟืึทืจ ืืืึทืฉืคึผืื, 128, 0, 0, 1 = 1ืึธืืขืจ 128, 0, 75, 108 = 19308.
ืืขืจ ืืืฉ ืืื ืึท ืขืจืฉืืืง ืฉืืืกื ืืื ืึทืืืึธ ืื ืงืจืึทืืึทื ื, ืืื ืขืก ืงืขื ืขื ืืืื ืืืื ืืขืคึฟืื ืขื ืืึธ
ื ืึธื ืงืึทืืคึผืขืจื ืื ืืึทืื ืคืื ืื ืคึผืจืึธืืข ืืืฉื, ืขืก ืืื ืืขืืืขื ืืืืื ืึทื ืื DATETIME ืืืืคืขืฅ ืืืฉืืืื ืคืื 5 ืืืืขืก ืืื ืื ืืขืืืืื ืืื 153 (ืจืืึฟ ืืกืชึผืื ืื ืืึทืงืืืืื ื ืืขืจืืขื ืื ืืขืจืืืึทืื). ืืื ื ืื DATTIME ืงืืื ืืื '1000-01-01' ืฆื '9999-12-31', ืืื ืืจืึทืืื ืื ื ืืืขืจ ืคืื ืืืืขืก ืงืขื ืืืึทืื, ืึธืืขืจ ืืื ืืืื ืคืึทื, ืื ืืึทืื ืคืึทืื ืืื ืื ืฆืืื ืคืื 2016 ืฆื 2019, ืึทืืื ืืืจ ืืืขืื ืืืขืจื ืขืืขื ืึทื 5 ืืืืขืก ืืขื ืื.
ืฆื ืืึทืฉืืืืขื ืื ืฆืืื ืึธื ืกืขืงืื ืืขืก, ืื ืคืืืืขื ืืข ืคืึทื ืืงืฉืึทื ื ืืขื ืขื ืืขืฉืจืืื. ืฉืจืืคื:
day_ = lambda x: x % 64 // 2 # {x,x,X,x,x }
def hour_(x1, x2): # {x,x,X1,X2,x}
if x1 % 2 == 0:
return x2 // 16
elif x1 % 2 == 1:
return x2 // 16 + 16
else:
raise ValueError
min_ = lambda x1, x2: (x1 % 16) * 4 + (x2 // 64) # {x,x,x,X1,X2}
ืขืก ืืื ื ืื ืืขืืืขื ืฆื ืฉืจืืึทืื ืึท ืคืึทื ืืงืฉืึทื ืึทื ืคืื ืงืฆืืข ืคึฟืึทืจ ืื ืืึธืจ ืืื ืืืืฉ, ืึทืืื ืืื ืืื ืฆื ืืึทืง ืขืก. ืฉืจืืคื:
ym_list = {'2016, 1': '153, 152, 64', '2016, 2': '153, 152, 128',
'2016, 3': '153, 152, 192', '2016, 4': '153, 153, 0',
'2016, 5': '153, 153, 64', '2016, 6': '153, 153, 128',
'2016, 7': '153, 153, 192', '2016, 8': '153, 154, 0',
'2016, 9': '153, 154, 64', '2016, 10': '153, 154, 128',
'2016, 11': '153, 154, 192', '2016, 12': '153, 155, 0',
'2017, 1': '153, 155, 128', '2017, 2': '153, 155, 192',
'2017, 3': '153, 156, 0', '2017, 4': '153, 156, 64',
'2017, 5': '153, 156, 128', '2017, 6': '153, 156, 192',
'2017, 7': '153, 157, 0', '2017, 8': '153, 157, 64',
'2017, 9': '153, 157, 128', '2017, 10': '153, 157, 192',
'2017, 11': '153, 158, 0', '2017, 12': '153, 158, 64',
'2018, 1': '153, 158, 192', '2018, 2': '153, 159, 0',
'2018, 3': '153, 159, 64', '2018, 4': '153, 159, 128',
'2018, 5': '153, 159, 192', '2018, 6': '153, 160, 0',
'2018, 7': '153, 160, 64', '2018, 8': '153, 160, 128',
'2018, 9': '153, 160, 192', '2018, 10': '153, 161, 0',
'2018, 11': '153, 161, 64', '2018, 12': '153, 161, 128',
'2019, 1': '153, 162, 0', '2019, 2': '153, 162, 64',
'2019, 3': '153, 162, 128', '2019, 4': '153, 162, 192',
'2019, 5': '153, 163, 0', '2019, 6': '153, 163, 64',
'2019, 7': '153, 163, 128', '2019, 8': '153, 163, 192',
'2019, 9': '153, 164, 0', '2019, 10': '153, 164, 64',
'2019, 11': '153, 164, 128', '2019, 12': '153, 164, 192',
'2020, 1': '153, 165, 64', '2020, 2': '153, 165, 128',
'2020, 3': '153, 165, 192','2020, 4': '153, 166, 0',
'2020, 5': '153, 166, 64', '2020, 6': '153, 1, 128',
'2020, 7': '153, 166, 192', '2020, 8': '153, 167, 0',
'2020, 9': '153, 167, 64','2020, 10': '153, 167, 128',
'2020, 11': '153, 167, 192', '2020, 12': '153, 168, 0'}
def year_month(x1, x2): # {x,X,X,x,x }
for key, value in ym_list.items():
key = [int(k) for k in key.replace("'", "").split(", ")]
value = [int(v) for v in value.split(", ")]
if x1 == value[1] and x2 // 64 == value[2] // 64:
return key
return 0, 0
ืืื ืืื ืืืืขืจ ืึทื ืืืื ืืืจ ืคืึทืจืืจืขื ืืขื ืึท ืกืืืข ืคืื โโโโืฆืืื, ืืขื ืืืกืึทื ืืขืจืกืืึทื ืืื ื ืงืขื ืขื ืืืื ืงืขืจืขืงืืึทื.
ืืืืึทืืขืจ, ืึท ืคึฟืื ืงืฆืืข ืืืึธืก ืงืขืจื ืึท ืืึทืืขืืืืข ืืืืคืขืฅ ืคึฟืื ืึท ืฉืืจืืงื. ืฉืจืืคื:
def find_data_time(val:str):
val = [int(v) for v in val.split(", ")]
day = day_(val[2])
hour = hour_(val[2], val[3])
minutes = min_(val[3], val[4])
year, month = year_month(val[1], val[2])
return datetime(year, month, day, hour, minutes)
ืืขืจืืื ืฆื ืืขืืขืงื ืึธืคื ืจืืคึผืืืื ืืืึทืืืขืก ืคืื int, int, datetime, datetime , ืขืก ืงืืงื ืืื ืืึธืก ืืื ืืืึธืก ืืืจ ืืึทืจืคึฟื. ืืขืจืฆื, ืึทืืึท ืึท ืกืืงืืืึทื ืก ืืื ื ืืฉื ืจืืคึผืืืื ืฆืืืื ืืึธื ืคึผืขืจ ืฉืืจื.
ื ืืฆื ืึท ืจืขืืืืขืจ ืืืืกืืจืืง, ืืืจ ืืขืคึฟืื ืขื ืื ื ืืืืืง ืืึทืื:
fined = re.findall(r'128, d*, d*, d*, 128, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*', int_array)
ืืืืข ืืึธื ืึทื ืืืขื ืืืจ ืืืื ืืื ืืขื ืืืืกืืจืืง, ืขืก ืืืขื ื ืื ืืืื ืืขืืืขื ืฆื ืืึทืฉืืืืขื NULL ืืืึทืืืขืก ืืื ืื ืคืืจืืื ืื ืคืขืืืขืจ, ืึธืืขืจ ืืื ืืืื ืคืึทื ืืึธืก ืืื ื ืืฉื ืงืจืืืืฉ. ืืขืจื ืึธื ืืืจ ืืืื ืืืจื ืืืึธืก ืืืจ ืืขืคึฟืื ืขื ืืื ืึท ืฉืืืืฃ. ืฉืจืืคื:
result = []
for val in fined:
pre_result = []
bd_int = re.findall(r"128, d*, d*, d*", val)
bd_date= re.findall(r"(153, 1[6,5,4,3]d, d*, d*, d*)", val)
for it in bd_int:
pre_result.append(find_int(bd_int[it]))
for bd in bd_date:
pre_result.append(find_data_time(bd))
result.append(pre_result)
ืึทืงืืืึทืืื, ืืึธืก ืืื ืึทืืข, ืื ืืึทืื ืคึฟืื ืืขืจ ืจืขืืืืืึทื ืืขื ืืข ืืขื ืขื ืื ืืึทืื ืืืึธืก ืืืจ ืืึทืจืคึฟื. ###ืคึผืก.###
ืืื ืคึฟืึทืจืฉืืืื ืึทื ืืขืจ ืืืคึฟื ืืื ื ืืฉื ืคึผืึทืกืืง ืคึฟืึทืจ ืึทืืขืืขื, ืึธืืขืจ ืืขืจ ืืืืคึผื ืฆืื ืคืื ืืขื ืึทืจืืืงื ืืื ืฆื ืคึผืื ืืืขื ืงืึทืืฃ ืืื ืืื ืกืึธืืืืข ืึทืืข ืืืื ืคึผืจืึธืืืขืืก. ืืื ืืจืึทืืื ืื ืืขืจืกื ืจืืืืืง ืืืืืื ื ืืืึธืื ืืืื ืฆื ืึธื ืืืืื ืืขืจื ืขื ืื ืืงืืจ ืงืึธื ืืื
ืืื ืขืืืขืืข ืงืึทืกืขืก, ื ืึธื ืึทื ืึทืืืืืื ื ืื ืืขืงืข, ืืืจ ืืืขื ืงืขื ืขื ืฆื ืืึทืฉืืืกื ืื ืืขืจื ืขื ืืขืจื ืกืืจืืงืืืจ ืืื ืืืงืขืจื ืขืก ืืื ืืืื ืขืจ ืคืื ืื ื ืึธืจืืึทื ืืขืืืึธืืก ืคืื ืื ืืื ืงืก ืืืืื. ืืึธืก ืืืขื ืืืื ืคืื ืืขืจ ืจืืืืืง ืืื ืคืึทืจืฉืึทืคื ืืืืื ืืงืขืจืข ืคืจืืืืขืืขื.
ืืงืืจ: www.habr.com