רק מעדכן
ב״ה הצלחתי ליצור את האפליקציה באופן מלא בעיקר בזכות @צדיק-תמים שעזר לי רבות
לכל המעוניין ניתן להוריד את האפליקציה מכאן (נשלח לבדיקה בנטפרי) אשמח לשמוע רעיונות לשיפור
הקוד המלא נמצא בגיטהאב שלי
אשמח לשמוע הערות לשיפור (וגם הערות בכללי
️)
רק מעדכן
ב״ה הצלחתי ליצור את האפליקציה באופן מלא בעיקר בזכות @צדיק-תמים שעזר לי רבות
לכל המעוניין ניתן להוריד את האפליקציה מכאן (נשלח לבדיקה בנטפרי) אשמח לשמוע רעיונות לשיפור
הקוד המלא נמצא בגיטהאב שלי
אשמח לשמוע הערות לשיפור (וגם הערות בכללי
️)
@צדיק-תמים
שכוייח
הנושא העיקרי הוא שבניתי הכל עם GPT והוא לא מצא שום שגיאה
בנוגע לפיתרון השני זה רעיון ממש נחמד שלא חשבתי אפי׳ לנסות אותו
ב״ה מה שעשיתי בסוף זה הזרקה של הסקריפט הפעיל מקובץ חיצוני
האפליקציה תתפרסם מחר בעז״ה נשאר לי עוד כמה שינויים קלים
@יעקב-מ-פינס
רק משתף,
באמצעות Gemini נוצר הקוד הזה
set pagesFilePath to POSIX path of (choose file with prompt "בחר קובץ Pages להמרה:")
set saveFolderPath to POSIX path of (choose folder with prompt "בחר תיקיית יעד לשמירת קובץ ה-DOCX:")
try
set srcFile to POSIX file pagesFilePath as alias
-- יצירת שם קובץ היעד
set fileName to name of (info for srcFile)
if fileName ends with ".pages" then
set docName to text 1 thru -7 of fileName
else
set docName to fileName
end if
set dstPathString to saveFolderPath & docName & ".docx"
-- אין צורך להפוך את זה לאובייקט POSIX file כאן אם נשתמש רק במחרוזת ב-shell
-- set dstFile to POSIX file dstPathString
-- וודא שהקובץ לא קיים כבר בנתיב היעד כדי למנוע בלבול
-- נשתמש בפקודת shell לבדיקת קיום ומחיקה (עמידה מאוד)
-- Check if file exists using 'test -f'
set fileExists to (do shell script "test -f " & quoted form of dstPathString & " && echo true || echo false") as boolean
if fileExists then
do shell script "rm " & quoted form of dstPathString -- מחיקת הקובץ
delay 0.1 -- המתן מעט שהמחיקה תתבצע
end if
-- הפעל את Pages וודא שהוא רץ
tell application "Pages"
activate
-- המתן בסבלנות ש-Pages יהיה "מוכן"
repeat 10 times -- נסה 10 פעמים עם השהייה של שנייה אחת
delay 1
try
-- נסה פקודה פשוטה כדי לבדוק תגובתיות
set appVersion to version of it
exit repeat
on error
-- עדיין לא מגיב, נמשיך לחכות
end try
end repeat
if not (it is running) then
error "Pages application could not be launched or is not responding."
end if
-- פתיחת המסמך
set theDoc to open srcFile
-- המתן עד שהמסמך ייפתח ויהיה פעיל
repeat 20 times -- נסה 20 פעמים עם השהייה של 0.25 שניה (סה"כ 5 שניות)
delay 0.25
try
if exists theDoc then exit repeat
on error
-- המסמך עדיין לא נטען, אולי חלון לא מול
end try
end repeat
if not (exists theDoc) then
error "Failed to open Pages document within expected time."
end if
-- ייצוא המסמך (כאן עדיין נשתמש ב-POSIX file אובייקט כי Pages מצפה לו)
export theDoc to (POSIX file dstPathString) as Microsoft Word
-- סגור את המסמך המקורי
close theDoc saving no
end tell
-- בדיקה סופית: וודא שהקובץ נוצר באמצעות פקודת shell
set fileExists to (do shell script "test -f " & quoted form of dstPathString & " && echo true || echo false") as boolean
if fileExists then
display dialog "הקובץ נשמר בהצלחה כ-DOCX בנתיב: " & dstPathString with title "המרת Pages ל-DOCX" buttons {"אישור"} default button "אישור"
return "OK"
else
error "ההמרה הסתיימה ללא שגיאה, אך קובץ ה-DOCX לא נמצא בנתיב: " & dstPathString
end if
on error errMsg number errNum
display dialog "שגיאה: " & errMsg & " (קוד שגיאה: " & errNum & ")" with title "שגיאת המרה" buttons {"אישור"} default button "אישור"
return "Error: " & errMsg
end try
שנבדק ב Script Editor ועבד בהצלחה
@צדיק-תמים
בהרצה של הקוד ב Script Editor (נראה לי לא הכנסתי אותו טוב)

בקונסול ב Xcode

אני חושב שזה משהו שקשור בהרשאות גישה אבל לא הצלחתי להבין בכלל איך אני גורם לאפליקציה לבקש את האישור הזה
@dovid @צדיק-תמים
הוא אפי׳ לא פותח את pages (שזה דבר ראשון שהוא אמור לעשות)
אני מקבל את השגיאה AppleScript-out: Pages got an error: Application isn’t running. | status: 0 בכל פעם שאני מריץ את הקוד
נ.ב. זה מה שקורה ב Script Editor

נ.ב.ב. השגיאה הראשונה מופיעה גם כש pages רץ
יצרתי יחד עם GPT אפליקציה קטנה ונחמדה למקבוק שכל מטרתה היא לחסוך למשתמש זמן בהמרת קבצי pages לdocx (וורד)
הבניה ב״ה עברה בהצלחה והאפליקציה רצה בלי שגיאות ונראית יפה
אבל הקוד שאחראי על ההמרה משום מה לא עובד
private func exportPagesToDocx(_ src: URL, to dir: URL) -> Bool {
func esc(_ s: String) -> String { // בריחת מרכאות
s.replacingOccurrences(of: "\"", with: "\\\"")
}
let dst = dir.appendingPathComponent(
src.deletingPathExtension().lastPathComponent)
.appendingPathExtension("docx")
let script = """
try
set srcFile to POSIX file "\(esc(src.path))" as alias
set dstFile to POSIX file "\(esc(dst.path))"
tell application "Pages"
if not running then
launch
repeat until running
delay 0.1
end repeat
end if
activate
set theDoc to open srcFile
repeat until exists front document
delay 0.05
end repeat
export theDoc to dstFile as Microsoft Word
close theDoc saving no
end tell
return "OK"
on error errMsg
return errMsg
end try
"""
let task = Process()
task.launchPath = "/usr/bin/osascript"
task.arguments = ["-e", script]
let pipe = Pipe()
task.standardOutput = pipe
task.standardError = pipe
task.launch(); task.waitUntilExit()
let output = String(data: pipe.fileHandleForReading.readDataToEndOfFile(),
encoding: .utf8) ?? ""
print("AppleScript-out:",
output.trimmingCharacters(in: .whitespacesAndNewlines),
"| status:", task.terminationStatus)
return output.contains("OK") &&
FileManager.default.fileExists(atPath: dst.path)
}
// MARK:- פתיחת Share-Sheet
private func openShareSheet(files: [URL], from view: NSView) {
let picker = NSSharingServicePicker(items: files)
picker.show(relativeTo: .zero, of: view, preferredEdge: .minY)
}
זהו הקוד שאחרי על הסקשן של ההמרה
מטרתו היא לפתוח את pages ברקע ולעשות ייצוא של הקובץ הנבחר לdocx
אשמח אם אי מי ממשתמשי הפורום שמכיר את הנושא יעזור לי (מכיוון שאני עושה את זה בתור לימוד הפלטפורמה מן המובן שאני גם לא אוכל לשלם..)
בתודה מראש
אין כ"כ מה להוסיף על דברי קודמי
אבל אני רוצה בכל זאת להצטרף ל@one1010 בדבריו
לפני כשנה פחדתי (באמת) מכל שפת תכנות עם סטרינגים ופקדים (הסכמתי לעבוד רק עם ווב ורק צד לקוח...) עד שקפצתי למים (בעיקר בגלל הדחיפה ש@dovid נתן לי) וביקשתי מה(ג)בינה שתדריך אותי צעד אחר צעד איך אני כותב תוכנה בC# כיום אני אמנם עדיין לא יודע איך לכתוב תוכנה מ0 אבל אני כבר יודע איך מתחילים לבנות בסיס של תוכנה ואיך 'הקוד' עובד
העצה שאני נותן היא לעקוב אחרי הדברים שהAI נותן לך ולא סתם לעשות Copy paste, ככה שאתה ממילא לומד מה תפקידה של כל שורה ואיך אתה תשתמש בזה בעתיד
בהצלחה
שלום וברכה שבוע טוב
בסייעתא דשמיא התחדשתי עם מחשב מקבוק אייר M4 ואני מחפש תוכנת סינון בשבילו
אני צריך תוכנה שתסנן כל חיבור אינטרנט למחשב (הרשת העיקרית שלי היא נטפרי)
תוכנה בתשלום לא מפחיד אותי (אבל אם יש חינם אני מעדיף)
אשמח לשמוע הצעות
@מד
נגיד שלא מסתדר לי...
אשמח לשמוע ממי שמכיר תוכנה ללינוקס אובונטו שמגבילה את הרשת בתוכנות בכללי לרשימה לבנה
@מד
אני אכן מודע לכך, תודה על הדאגה 
אתה מכיר תוכנה כלשהיא?
נ.ב. בחזרה לנושא המקורי (הגיוני מאוד שאני אשתמש עם הרעיון של VPN על הרשת הביתית אבל בנטפרי חסום לי כמה דברים שהייתי רוצה פתוחים)
יש תוכנת בקרת גלישה ע"י רשימה לבנה?
@צדיק-תמים
כיצד אני מגדיר במחשב במקרה שאין לי בראוטר?
(הפניית פורטים אני יודע איך עושים
)
@ivrtikshoret
בבית יש לי אינטרנט קווי נטפרי
עם המחשב הנייד אני מסתובב ומתחבר לרשתות ציבוריות
יש לי אופציה לנעול את הגלישה רק דרך הVPN?
@ivrtikshoret כתב בתוכנת סינון ללינוקס אובונטו קיים?:
למה אם זה נייד אי אפשר שהסינון יהיה בספק?
כי אין לי סים עליו אלא וייפי
@ivrtikshoret כתב בתוכנת סינון ללינוקס אובונטו קיים?:
מה הכוונה כל הרשת באותו מחשב או במחשב אחר?
באותו מחשב
@ivrtikshoret כתב בתוכנת סינון ללינוקס אובונטו קיים?:
מה הכוונה למה אתה צריך להשתמש עם vpn משלך?
במקום לשלם על השרת VPN
@מד
דרך הספק אין לי אפשרות כי המחשב הוא נייד (ולכן אני רוצה תוכנה שכל חיבור יסונן דרכה)
דרך VPN יש אפשרות לגרום שכל הרשת תעבור רק דרכו?
בנוסף אם יש לי IP פרטי על קו האינטרנט הביתי אני יכול להשתמש בו כשרת VPN?
שלום לחברי הפורום היקרים
מכיוון שהמחשב העיקרי שלי מופעל ע"י אובונטו אני מעוניין להתקין עליו תוכנת סינון
שתסנן תוכן בלתי הולם
קיים כזה דבר?
@חגי
כמה השימוש בדיסק?
אם אני זוכר טוב המעבד משתמש גם בזכרון הקשיח כשאין לו מספיק ראם
@mekev
https://kollel.co.il/ נראה לי יעזור לך
משתמשים בזה במקום העבודה שלי