Gemini CLI umožňuje používání AI Gemini přímo v terminálu. Vydána byla verze 0.10.0.
Konference OpenAlt 2025 proběhne již příští víkend 1. a 2. listopadu v Brně. Nabídne přibližně 80 přednášek a workshopů rozdělených do 7 tematických tracků. Program se může ještě mírně měnit až do samotné konference, a to s ohledem na opožděné úpravy abstraktů i případné podzimní virózy. Díky partnerům je vstup na konferenci zdarma. Registrace není nutná. Vyplnění formuláře však pomůže s lepším plánováním dalších ročníků konference.
Samsung představil headset Galaxy XR se 4K Micro-OLED displeji, procesorem Snapdragon XR2+ Gen 2, 16 GB RAM, 256 GB úložištěm, operačním systémem Android XR a Gemini AI.
Před konferencí Next.js Conf 2025 bylo oznámeno vydání nové verze 16 open source frameworku Next.js (Wikipedie) pro psaní webových aplikací v Reactu. Přehled novinek v příspěvku na blogu.
Sovereign Tech Fund oznámil finanční podporu následujících open source projektů: Scala, SDCC, Let's Encrypt, Servo, chatmail, Drupal, Fedify, openprinting, PHP, Apache Arrow, OpenSSL, R Project, Open Web Docs, conda, systemd a phpseclib.
Bylo vydáno OpenBSD 7.8. S předběžnou podporou Raspberry Pi 5. Opět bez písničky.
Valkey (Wikipedie) byl vydán v nové major verzi 9.0. Valkey je fork Redisu.
Byly publikovány informace o kritické zranitelnosti v knihovně pro Rust async-tar a jejích forcích tokio-tar, krata-tokio-tar a astral-tokio-tar. Jedná se o zranitelnost CVE-2025-62518 s CVSS 8.1. Nálezci je pojmenovali TARmageddon.
AlmaLinux přinese s verzí 10.1 podporu btrfs. XFS bude stále jako výchozí filesystém, ale instalátor nabídne i btrfs. Více informací naleznete v oficiálním oznámení.
Společnost OpenAI představila svůj vlastní webový prohlížeč ChatGPT Atlas. Zatím je k dispozici pouze na macOS.
-mill
Ručně jsem vytvořil nějaký příklad jak by měl vypadat výstup z programu. Soubory TAP.
Ve zdrojovém frézovacím excellon souboru *.rou jsou kódy M15, M16 které reprezentují pohyb vřetene v ose Z dolu a nahoru.
M15 pro pohyb dolu, by mohlo by mohlo být analogicky jako -zdrill
pro vrtání určováno volbou -zmill
. V příkladu je -2. Toto musí být v rámci normálního frézování G01 s určenou pojezdovou rychlostí.
M16 vřeteno nahoru zase nastavitelné nějakou volbou -zup
. V příkladu je 5. Toto může být už v rámci rychloposuvu.
Nevím nakolik je to proveditelné v tom programu vzhledem k tomu jak je postavený (já to bohužel neumím ani přečíst, špatně jsem se učil).
Pokud by se tu našel někdo kdo umí a zároveň se aspoň trochu vyzná v G kódech, je to uplně nejlepší možná varianta. Já jsem rád za to, že jsem vůbec sesmolil tenhle dotaz.
Odkaz na zdroják programu https://sourceforge.net/p/ncdr2cnc/code/HEAD/tree/
je tam i zkompilovaný exáč.
Přikládám příklady vstupů a výstupů v zipu.
Řešení dotazu:
with open(args.drlfile[0]) as fp: line = fp.readline() while line: ....Nasypou se nastroje(tnum):
if line.startswith("T") and "C" in line: ....Vybere se nastroj(tsel): ....
elif line.startswith("T"): ....Prevod vrtani:
elif line.startswith("X") and tsel != "0":Zapis:
for t in tools: ....
You can open Gerber, Excellon or G-code, edit it or create from scatch, and output G-Code.Tohle bude pro tebe idealni a bez programovani. Bezi to na Linuxu, ale to asi chapes. Na widlich WSL.
* Routing commands are similar to Gerber polygons
elif line.startswith("X") and tsel != "0": newl1 = "".join(["G1 F", str(args.z_move_speed), " Z", str(args.safe_height)]) newl2 = "".join(["G1 F", str(args.xy_move_speed), " ", line.split("Y")[0], " Y", line.split("Y")[1].strip("\r\n")])Jak mám Pythonu říct, aby bral na vstupu i řádky začínající nejen X, ale i G01? Prostě potřebuji aby je opsal, v tomto stavu jen vypíše chybu
Traceback (most recent call last): File "C:\Users\cerny\Documents\Elektro Modus\frezovani\CAMOutputs\vylezlo z fabu\drl2gcode.py", line 61, in module newl2 = "".join(["G1 F", str(args.xy_move_speed), " ", line.split("Y")[0], " Y", line.split("Y")[1].strip("\r\n")]) ~~~~~~~~~~~~~~~^^^ IndexError: list index out of range
G00X-1Y11.9007 <- Prepnuti na routing a vychozi pozice. G40 M15 G01Y0 <- linearni pohyb M16 G40 G00X19.3493Y-1 <- Routing koncova pozice.Pseudoodem:
if 'G00' in line:# ROUTING ZACATEK while line: line = f.readline() ..... <- zpracovani pohybu if 'G00' in line: ROUTING KONEC .... breakSnad jsem to pochopil dobre.
with open("Layer_5.rou") as f: line = f.readline() while line: line = f.readline() if 'G00' in line:# ROUTING ZACATEK print(line) if 'G00' in line: #ROUTING KONEC break f.close()ovšem to vypíše jen první řádku kde se vyskytuje G00 a tam to taky skončí. Potřebuji aby jel do dalšího G00. Může tam být další ROUTING ZACATEK po rychloposuvu a další práce vřetene. Učit se toto v 39 je tedy brutus :D
#!/usr/bin/python3 with open('frezovani.rou') as f: for line in f: if 'G00' in line: print("[*] Routing start") print(line.strip()) for line in f: print(line.strip()) if 'G00' in line: print("[*] Routing end\n") break
# definice promennych otacky = 25000 feedrate = "F300" #milldepth = "Z-2" safeZ = "40" moveZ = "Z5" hlavicka = """; Generovano v routexc2gcode.py ; Absolutni koordinaty G90 ; Metricke G21 ; Spust vreteno M3 S"""+str(otacky)+""" """ paticka = """ ; zastav vreteno M5 ; vyjeti vretene a konec frezovani G00 Z"""+str(safeZ)+""" ; konec programu M2 """ # zapis hlavicky print(hlavicka) # pohyb vretene with open('Layer_5.rou') as f: line = f.readline() while line: line = f.readline() if line.startswith("G00"): print(line.strip()) if line.startswith("G01"): print(line.strip(), milldepth, feedrate) if line.startswith(("X","Y")): print(line.strip()) if line.startswith("M15"): #print(milldepth, "; Vreteno dolu") milldepth = "Z-2" if line.startswith("M16"): print(moveZ, "; Vreteno nahoru") #if line.startswith("G40"): # print(line.strip()) if line.startswith("M30"): break # zapis paticky print(paticka)Potřebuji aby řádky začínající G00 vypsal a současně zkopíroval s těmi stejnými souřadnicemi na nový řádek jako G01 následujíc proměnné milldepth a feedrate. Řádky začínající G01 normálně vypsat, ale už bez těch milldepth a feedrate. Vpodstatě na těch kopiích by to G01 už ani nemuselo být, protože už je definovaná.
Příklad vstupu: G00X10Y10 M15 G01X20Y20 Příklad výstupu: G00X10Y10 G01X10Y10 Z-2 F300 X20Y20
with open('frezovani.rou') as f: line = f.readline() while line: line = f.readline().strip() if line.startswith("G00"): print(line) print(line.replace('G00','G01'), milldepth, feedrate) if line.startswith("G01"): print(line) if line.startswith(("X","Y")): print(line) #if line.startswith("M15"): print(milldepth) if line.startswith("M16"): print(moveZ) if line.startswith("G40"): print(line) if line.startswith("M30"): break
if
ů
Co kdybych chtěl místo printování zapisovat do souboru? Zkoušel jsem třeba v tom prvním ifu pro G00 udělat proměnnou
rychloposuvy = line.strip() ... with open("soubor.nc", "w") as uloz: uloz.write(rychloposuvy)ale samozřemně to tu proměnnou mění řádek po řádku a v soubor.nc je pak jenom poslední řádek s G00. Jdu na to blbě, to je jasný, ale já nevím co mám dělat :D Jinak vyprintovaný výstup do konsole je teď uplně OK.
out = open('vystup.gcode','w')v prubehu smycky do nej budes postupne zapisovat:
while ... if ... out.write(line)a nakonec ho korektne uzavres.
out.close()Druha moznost, je vystpu nekam docasne odkladat(treba do slovniku, jako v puvodnim kodu) a pak to slepit a ulozit.
Tiskni
Sdílej: