@oryadaniely נוצר ע"י?

לאצי
-
להורדה | סימניה להורדת קבצי הקוד מ Base44 -
עזרה | AI STUDIO מוצג כטקסט במקום מרקדאוןהקטנתי את גודל הטקסט והמרווח בין השורות כך שידמה יותר למקור, לגבי שאר הבאגים, אין באפשרותי לטפל בכך כעת, כי עכשיו האתר כן מוצג לי כתקנו וממילא הסקריפט לא נמצא בפעולה כעת.
-
עזרה | AI STUDIO מוצג כטקסט במקום מרקדאון@י.-פל. כתב בעזרה | AI STUDIO מוצג כטקסט במקום מרקדאון:
שפר זאת
לאחר יו"כ בעז"ה. מקווה שתסלח לי על כך ביו"כ...
@י.-פל. כתב בעזרה | AI STUDIO מוצג כטקסט במקום מרקדאון:
[אפשר להכניס לסקריפט שלי?]
בשמחה! רק קודם צריך לפתור את הבאגים שיש לו, וכמדומני שהוא עושה גם כמה בעיות עם הסרגל שלך אאל"ט. לא בדקתי זאת באופן מעמיק, אבל כמדומני שכך.
אשמח גם אם תעדכן את הסקריפט שלך עם השיפורים שכתבתי בפרטי בשעתו.
-
עזרה | AI STUDIO מוצג כטקסט במקום מרקדאוןבעז"ה יצרתי בעזרת AI STUDIO סקריפט לטמפרמונקי שמיישם עיצוב מרקדאון מלא כשהאתר לא מציג זאת טוב.
// ==UserScript== // @name AI Studio Markdown Fallback Renderer v10 (Final with Code Utils) // @namespace http://tampermonkey.net/ // @version 1.0 // @description Adds copy/download buttons and language titles to code blocks after fixing rendering issues. // @author Your Name & AI // @match https://aistudio.google.com/prompts/* // @require https://cdn.jsdelivr.net/npm/marked/marked.min.js // @grant GM_addStyle // @run-at document-start // ==/UserScript== (function() { 'use strict'; // -- שלב 0: הזרקת CSS עם שליטה על העיצוב -- // כאן תוכל לשנות את הערכים כדי להתאים את העיצוב לטעמך GM_addStyle(` /* ------------------------------------------- */ /* --- אזור שליטה על עיצוב --- */ /* ------------------------------------------- */ :root { /* --- הגדרות לטקסט רגיל --- */ --fallback-text-font-size: 5px /* גודל גופן לטקסט רגיל */ --fallback-text-line-height: 0.1; /* רווח בין שורות לטקסט רגיל */ /* --- הגדרות לבלוק קוד --- */ --fallback-code-font-size: 14px; /* גודל גופן לקוד */ --fallback-code-line-height: 1.45; /* רווח בין שורות לקוד */ } /* ------------------------------------------- */ /* --- סוף אזור שליטה --- */ /* ------------------------------------------- */ .fallback-rendered p, .fallback-rendered ul, .fallback-rendered ol, .fallback-rendered li { font-family: 'Google Sans Text', Inter, sans-serif !important; font-size: var(--fallback-text-font-size) !important; line-height: var(--fallback-text-line-height) !important; color: var(--color-v3-text); margin-block-start: 0 !important; margin-block-end: 1em !important; } .fallback-rendered h1, .fallback-rendered h2, .fallback-rendered h3 { font-family: 'Google Sans', Roboto, Arial, sans-serif !important; margin-top: 1.2em !important; margin-bottom: 0.4em !important; } .fallback-rendered pre { position: relative; background-color: var(--color-v3-surface-container-high, #f1f3f4); border: 1px solid var(--color-v3-outline-var, #e0e0e0); border-radius: 8px; margin: 1em 0 !important; padding: 16px; padding-top: 48px; overflow-x: auto; } .code-block-header { position: absolute; top: 0; left: 0; right: 0; display: flex; justify-content: space-between; align-items: center; background-color: rgba(0,0,0,0.05); padding: 5px 12px; border-bottom: 1px solid var(--color-v3-outline-var, #e0e0e0); border-top-left-radius: 8px; border-top-right-radius: 8px; } .code-language { font-family: 'Google Sans Mono', monospace; font-size: 13px; font-weight: 500; color: var(--color-v3-text-var); text-transform: capitalize; } .code-util-buttons { display: flex; gap: 8px; } .code-util-btn { background-color: rgba(0,0,0,0.08); color: var(--color-v3-text); border: none; cursor: pointer; padding: 4px 10px; border-radius: 5px; font-size: 12px; font-family: 'Google Sans Text', sans-serif; transition: background-color 0.2s ease; } .code-util-btn:hover { background-color: rgba(0,0,0,0.15); } .code-util-btn.copied { background-color: #28a745; color: white; } .fallback-rendered code { font-family: 'Google Sans Mono', monospace !important; font-size: var(--fallback-code-font-size) !important; line-height: var(--fallback-code-line-height) !important; white-space: pre-wrap; word-wrap: break-word; } .fallback-rendered pre > code { background-color: transparent !important; padding: 0 !important; } .fallback-rendered :not(pre) > code { background-color: var(--color-v3-surface-container, #e8eaed); padding: 2px 6px; border-radius: 4px; font-size: 0.9em; } /* Dark Theme Adjustments */ [data-theme="dark"] .fallback-rendered pre, [data-theme="dark"] .code-block-header { background-color: #202124; border-color: #3c4043; } [data-theme="dark"] .code-util-btn { background-color: rgba(255,255,255,0.1); } [data-theme="dark"] .code-util-btn:hover { background-color: rgba(255,255,255,0.2); } [data-theme="dark"] .fallback-rendered :not(pre) > code { background-color: #3c4043; } `); // -- שלב 1: הגדרת marked.js עם סניטציה -- marked.setOptions({ sanitize: true, gfm: true // Enable GitHub Flavored Markdown for better tables and code blocks }); // -- שלב 2: יצירת מדיניות אבטחה (Trusted Types) -- let fallbackPolicy; try { if (window.trustedTypes && window.trustedTypes.createPolicy) { fallbackPolicy = window.trustedTypes.createPolicy('markdown-fallback-renderer-v10', { createHTML: (htmlString) => htmlString }); } } catch (e) { /* Policy might already exist, which is fine. */ } function setSanitizedHTML(element, html) { try { if (fallbackPolicy) { element.innerHTML = fallbackPolicy.createHTML(html); } else { element.innerHTML = html; } } catch (e) { console.error("AI Studio Fallback: Error setting innerHTML.", e); } } // -- שלב 3: זיהוי התקלה -- const setErrorFlag = (event) => { const errorMessage = (event.reason && event.reason.message) ? event.reason.message : event.message; if (errorMessage && errorMessage.includes('WebAssembly.instantiate')) { if (!window.nativeMarkdownFailed) { console.log('AI Studio Fallback: Native Wasm renderer failed. Activating fallback.'); } window.nativeMarkdownFailed = true; } }; window.addEventListener('error', setErrorFlag); window.addEventListener('unhandledrejection', setErrorFlag); // -- שלב 4: פונקציה להוספת כלי עזר לבלוק קוד -- function enhanceCodeBlock(preElement) { if (!preElement || preElement.hasAttribute('data-buttons-added')) return; const codeElement = preElement.querySelector('code'); if (!codeElement) return; const header = document.createElement('div'); header.className = 'code-block-header'; const langMatch = codeElement.className.match(/language-(\S+)/); const lang = langMatch ? langMatch[1] : 'text'; const langSpan = document.createElement('span'); langSpan.className = 'code-language'; langSpan.textContent = lang; const buttonWrapper = document.createElement('div'); buttonWrapper.className = 'code-util-buttons'; const copyBtn = document.createElement('button'); copyBtn.className = 'code-util-btn'; copyBtn.textContent = 'העתק'; const downloadBtn = document.createElement('button'); downloadBtn.className = 'code-util-btn'; downloadBtn.textContent = 'הורד'; buttonWrapper.append(copyBtn, downloadBtn); header.append(langSpan, buttonWrapper); preElement.prepend(header); preElement.setAttribute('data-buttons-added', 'true'); copyBtn.addEventListener('click', () => { navigator.clipboard.writeText(codeElement.innerText).then(() => { copyBtn.textContent = 'הועתק!'; copyBtn.classList.add('copied'); setTimeout(() => { copyBtn.textContent = 'העתק'; copyBtn.classList.remove('copied'); }, 2000); }); }); downloadBtn.addEventListener('click', () => { const fileExtension = { javascript: 'js', html: 'html', css: 'css', json: 'json', python: 'py', shell: 'sh', text: 'txt' }[lang] || 'txt'; const filename = `code-snippet.${fileExtension}`; const blob = new Blob([codeElement.innerText], { type: 'text/plain;charset=utf-8' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); }); } // -- שלב 5: מנגנון התיקון הראשי -- const runFallbackRenderer = () => { if (!window.nativeMarkdownFailed) return; // שלב א: עיבוד המרקדאון document.querySelectorAll('ms-text-chunk > div').forEach(el => { if (el.hasAttribute('data-fallback-rendered') || el.closest('button, input, mat-icon, ms-thought-chunk')) { return; } if (el.childNodes.length === 1 && el.firstChild.nodeType === Node.TEXT_NODE) { const text = el.innerText; if (text.includes('```')) { const renderedHtml = marked.parse(text); setSanitizedHTML(el, renderedHtml); el.setAttribute('data-fallback-rendered', 'true'); el.classList.add('fallback-rendered'); } } }); // שלב ב: שדרוג בלוקי הקוד document.querySelectorAll('.fallback-rendered pre:not([data-buttons-added="true"])').forEach(enhanceCodeBlock); }; // -- שלב 6: הפעלה -- window.addEventListener('load', function() { console.log('AI Studio Fallback: Page loaded. Starting renderer interval.'); setInterval(runFallbackRenderer, 1500); }); })();
העיצוב עדיין טעון שיפור, כמו"כ יש באג שבכל כתיבת תשובה של המודל יש לרענן את הדף מכיוון שהתשובה מוצגת חלקית.
-
המלצה | האפליקציה שתעזור לכם להיות מצליחנים@זונדל וואו! רק חבל שאין לי התקנות וכ"ש גוגל פליי...
אשמח מאוד אם תעשה את זה גם בתור אתר אונליין/תוכנה למחשב. (נראה לי שבתור אתר זה יצא יותר יפה ומושך מבחינה עיצובית.)או שפשוט תעלה לפה את קבצי הקודים, ואתן לידידי מר AI ליצור ממנו את הנדרש.
-
שיתוף | דף בית לגוגל, עם מלא אפשרויות כולל התאמה אישית@DHOC979 כתב בהצעת ייעול | פיתחתי לעצמי דף בית לגוגל!!:
@מישהו12 אתה פיתחת את האתר הזה?? (דף-בית.קום)
-
להורדה | סימניה להורדת קבצי הקוד מ Base44@מתכנת-חובב אין אפשרות להמיר את קודי הריאקט לקבצי קוד רגילים?
-
להורדה | סימניה להורדת קבצי הקוד מ Base44לאחר זמן רב בו אני מתפלא מדוע אפשרות הורדת הקודים ב Base44 מתאפשרת רק לבעלי מנוי...
בעז"ה יצרתי בעזרת AI סימניית דפדפן שבלחיצה עליה יורדים כל קבצי הקוד של הפרויקט שלכם למחשב.
כמובן שלשם כך אתם אמורים להיות בדאשבורד של האפליקציה על קטעי הקודים. (התיקיות לא חייבות להיות פתוחות - הסימנייה פותחת את כולן אוטומטית כדי שהקודים יהיו גלויים)
תרגום הדפדפן בדף - צריך להיות כבוי. אם הוא דלוק הסימנייה תציג לכם אזהרה ולא תוריד את הקודים.javascript:(async function(){if(document.documentElement.classList.contains("translated-ltr")||document.documentElement.classList.contains("translated-rtl")||document.querySelector("title")&&document.querySelector("title").hasAttribute("_msthash"))return void alert("⚠%EF%B8%8F תרגום הדפדפן זוהה כפועל בדף זה. זה עלול לגרום לקוד שגוי.\n\nאנא בטל את התרגום באופן ידני (בדרך כלל דרך אייקון בשורת הכתובת) והפעל את הסימנייה מחדש.");const e=e=>new Promise(t=>setTimeout(t,e)),t=(t,n)=>{const o=document.createElement("a"),r=new Blob([n],{type:"text/plain"});o.href=URL.createObjectURL(r),o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(o.href)};console.log("שלב 1: פותח תיקיות באופן רקורסיבי...");let n=0;for(;n<10;){const o=Array.from(document.querySelectorAll('nav button[data-state="closed"]')).filter((e=>e.querySelector(".lucide-folder")));if(0===o.length)break;for(const t of o)t.click(),await e(50);await e(400),n++}await e(500),console.log("שלב 2: איסוף והורדת כל הקבצים...");const o=document.querySelectorAll("nav button"),r=[];if(o.forEach((e=>{const t=e.querySelector("svg"),n=e.querySelector(".lucide-folder"),o=e.querySelector("span.truncate");if(t&&!n&&o){let t=o.innerText.trim();t.includes(".")||(t+=".js"),r.push({button:e,filename:t})}})),0===r.length)return void alert("לא נמצאו קבצים להורדה בתפריט.");for(const n of r){console.log(`מעבד את הקובץ: ${n.filename}...`),n.button.click(),await e(750);const r=document.querySelector(".monaco-editor .view-lines");if(r){const o=Array.from(r.querySelectorAll(".view-line")).map((e=>e.innerText)).join("\n");t(n.filename,o),await e(200)}else console.error(`לא נמצא עורך קוד עבור הקובץ ${n.filename}`)}alert(`ההורדה הושלמה! 👍 (הורדו ${r.length} קבצים בס"ד)`)})();
שימו רק לב כי הקודים של Base44 לא בנויים כאתר סטטי עם html, css, js, אלא כולם קבצי js/jsx בהם נמצאים גם הפונקציונליות וגם העיצוב של האפליקציה עם ספריית React. (כך ע"פ AI Studio)
אם בכל זאת תרצו את ה html של האפליקציה, יהיה עליכם לשמור אותם מהאתר המוכן עצמו (ctrl+s) -
בעיה | הצלת אנשי קשר ממכשיר MTK+. דחוף!!!@א.מ.ד. קודם כל -ברגוע
חשוב בהיגיון - האם הגיבוי האוטומטי פעיל? אם כן הרי טוב, אם לא, ייתכן שהוא עשה אי פעם גיבוי לכרטיס זיכרון כלשהו.
אלו דברים פשוטים אך לפעמים שוכחים אותם מרוב לחץ...
זה המקסימום שיכולתי לעזור... -
בקשה | הצעת פיתוח | API ציבורי של נטפריטוב חברים, אז אחרי שהשרשור הזה התארך, התחמם, ונגע כמעט בכל נושא אפשרי, רציתי לעשות קצת סדר ולסגור את הסיפור.
לאחר דין ודברים ארוך ומעמיק, שבו הועלו צדדים רבים ומגוונים – החל מההיבט הטכני, דרך שאלות עקרוניות של קניין רוחני וגזל, כמו ש @A0533057932, @צדיק-וטוב-לו-0 ו @mefateach העלו, ובצדק, את הבעייתיות ההלכתית והמוסרית – האם זה לא גזל להשתמש במשאבים של נטפרי בלי רשותם המפורשת? גם אם זה עולה להם "פחות משווה פרוטה" על כל בדיקה.
במקביל, @צדיק-תמים הזכיר לנו את העמדה העקרונית של נטפרי, כפי שנאמרה על ידי @magicode בעבר – הם לא רוצים שיקחו את מאגר המידע שלהם וישתמשו בו לסינונים אחרים, פחות טובים.אז בקיצור כדי לחתוך את כל הדיונים והספקולציות, פניתי ישירות ל-@magicode כדי לשמוע את דעתו בנושא.
הצגתי לו את הרעיון ואת הדיון שהיה פה, והתשובה שלו הייתה ברורה וחד משמעית: נטפרי לא מאשרת מהלך כזה.
הסיבות לכך אינן רק אידיאולוגיות, אלא גם מעשיות וכלכליות. הוא הבהיר לי כי פעולת הסינון, ובפרט סינון תמונות, כרוכה בעלויות ממשיות. הרעיון להקים שירות (אף אם הוא לזיכוי הרבים) שמתבסס על המשאבים של נטפרי ויוצר עבורה עלויות, אינו נכון ואינו מקובל על ידם. כפי ש-@magicode הסביר לי, התפיסה הנכונה היא שכמו שמשלמים על בשר כשר, כך יש ערך וחשיבות לשלם על סינון אינטרנט איכותי.
וגם אם נניח שמבחינת קנין רוחני זה לא בעיה, 'דעלך סאני לחברך לא תעביד'. ובפרט בעשי"ת...לכן, לאור כל האמור לעיל – הן הבעיות הרבות שהעלו חברי הפורום והן התשובה הברורה שקיבלתי – החלטתי לרדת מהרעיון ולגנוז אותו עד ביאת גואל צדק (שאז כבר לא נצטרך את כל הסינונים למיניהם... "להעביר גילולים מן הארץ...").
אני חושב שהיה חשוב וטוב שהנושא עלה ונדון לעומק, לשם בירור העניין עד תומו. כעת, כל מי שיעלה בדעתו רעיון דומה בעתיד, יוכל לקרוא את השרשור הזה ולהבין את מורכבות העניין והבעייתיות שבו.
תודה רבה לכל המשתתפים, המגיבים, המעירים וכל מי שסייע להגיע לבירור הסוגיה.
@צוות-פיקוח, כמדומני שניתן לנעול את הנושא.
-
בירור | רעיונות להקלטה טובה דרך הטלפון -
בעיה | קבלת קוד אימות מאפליקציית מאמת החשבונות.@EM308 תנסה אולי את אחד הפתרונות שמוצעים מהפוסט הזה והלאה:
https://mitmachim.top/post/1007658
(לא שאני מכיר את הפתרונות ויודע בכלל איך הם עובדים, אבל אולי יש שם משהו מתאים.) -
בעיה | קבלת קוד אימות מאפליקציית מאמת החשבונות.@EM308 תנסה את זה
https://mitmachim.top/post/791456 -
בקשה | הצעת פיתוח | API ציבורי של נטפרי@צדיק-תמים כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
שהמניעים שלו זה כסף
זה כבר קצת מוזר לי...
כמו"כ כמה כסף כבר אפשר לעשות מ15 ש"ח בחודש?
מילא היית אומר לי כי הוא לא פיתח API בגלל שיקולים כספיים לא הייתי גורם להפסד כספי אחר, אבל ברגע שהוא מצהיר בעצמו כי אין לו שום כוונת רווח מכל הסיפור הזה, וכי API לא קיים משיקולים שונים, זכותי המלאה ליצור API כזה מהשיקולים שלי. לא כן? -
בקשה | הצעת פיתוח | API ציבורי של נטפרי@aiib כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
מה שברור שזה לא יוכרע כאן בפורום כמה שהמילים יהיו חריפות...
בדיבורים - לא, במעשים - כן.
התועלת העצומה בזה רב על ההפסד. -
בקשה | הצעת פיתוח | API ציבורי של נטפרי@es0583292679 כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
לא חייבים שני שרתים,
מי דיבר על שני שרתים? ולמה שני שרתים?
ניתן להחיל פרוקסי על השרת המקורי, או אולי VPN,
אשמח להסבר 'פשוט' יותר איך זה בדיוק יעבוד.
@צדיק-תמים כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
בגלל התנגדות עקרונית שזה יאפשר לתת את הדברים הטובים של נטפרי עם סינון פחות טוב
אז לכן הוא לא עשה את זה...
לדעתי בכל אופן זה יועיל להמון מפתחים. -
בקשה | הצעת פיתוח | API ציבורי של נטפרי@מייבין-במקצת כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
ניסית לדבר איתם?
את האמת - לא.
אם הם פיתחו API פנימי ולא ציבורי, כנראה יש להם סיבה טובה לעשות זאת. ייתכן שאין להם אינטרס להפיץ כזה דבר או שאולי קשה להם לתחזק את זה... לוידע.@מייבין-במקצת כתב בבקשה | הצעת פיתוח | API ציבורי של נטפרי:
הוא צריך להיות דלוק כל הזמן?
שאלה טובה. אני לא מבין בזה עד כדי כך, פשוט רעיון שחשבתי עליו. אשמח לתשובה מהמומחים.
-
שיתוף | אתר חדש להחזרת והורדת קישורי ערוץ יוטיוב שלם, ועוד הפתעה...@es0583292679 כתב בשיתוף | אתר חדש להחזרת והורדת קישורי ערוץ יוטיוב שלם, ועוד הפתעה...:
הנה משהו שהעלו כאן, אשמח לביאור נרחב יותר, ואיך לבדוק בצד השרת:
-
בקשה | הצעת פיתוח | API ציבורי של נטפרישלום רב!
כידוע, כיום אין API ציבורי לנטפרי לכלל המשתמשים, מה שמקשה על מפתחים שרוצים ליצור אתרים/יישומים ע"פ סינון נטפרי. יש אמנם את הAPI הזה:@meir-lamdan כתב בלהורדה | תוסף לבדיקת קישורים בנטפרי:
@מוטי-מהיר
במקום לשלוח את כל הבקשה רק כדי לראות אם זה חסום או לא
תוכל לבדוק את זה דרך נטפרי
כך גם תוכל לדעת אם זה נחסם או רק לא נבדק וכו'fetch( `https://www.google.com/~netfree/test-url?u=${encodeURIComponent( request.url )}`)
הנה דוגמה למשהו שכתבתי לעצמי לניפוי התשובות שלהם
const status = {
unknown: '',
'unknown-video': '',
custom: '',
deny: '',
indev: '',
}אבל הבעיה היא שהוא פעיל רק למשתמשי נטפרי ולא לכלל המשתמשים, כך שלא ניתן להשתמש עם API חיצוני ציבורי.
אז חשבתי כי ניתן ליצור API כזה שיעבוד כך:
נצטרך להקים שרת ייעודי שיהיה זמין לכלל האינטרנט.
שרת זה יהיה מחובר לאינטרנט דרך חיבור נטפרי פעיל.
כאן יש לנו שני אפשרויות;- כאשר השרת יקבל בקשה מהמשתמש הוא ינסה בעצמו לגשת לכתובת ויראה מה התוצאה.
- כאשר השרת יקבל בקשה מהמשתמש (למשל: api.netfree.link/check?url=SOME_URL), הוא יבצע מאחורי הקלעים קריאה ל-API הפנימי של נטפרי (google.com/~netfree/test-url).
השאלה היא אלו מבין שני הדרכים יעבוד טוב יותר. (בAPI הפנימי אם הכתובת פתוחה הוא לא שולח OPEN אלא קוד מוצפן כלשהו שכנראה מפוענח ע"י שרתי נטפרי. אבל לנו זה מספיק כי אם הוא לא שולח אחד מהתגובות הנ"ל - unknown / unknown-video / custom / deny / indev אז הוא לכאו' פתוח)
אז לסיכום מה שאנחנו צריכים זה שרת שמחובר דרך סינון נטפרי.
א. אולי ניתן לעשות זאת ע"י שרת באחסון חינמי כלשהוא?
ב. ניתן פשוט ליצור שרת כזה על מחשב שמחובר לאינטרנט 24/6 ללא הגבלה עם סינון נטפרי. לשם כך צריך מתנדב שיסכים להושיט את היד והלב...בקיצור, אשמח לשמוע את דעתכם. מה אתם אומרים?
-
שיתוף | תוכנה פורצת דרך לעדכוני טלפונים כשרים מבית אסקולס!!@ישראל1212 לכאו' כן. אמנם לא היה לי אף פעם את 3, אבל כעת ב 4 הוא לא איטי באופן משמעותי.