הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
תסריט פיתון להחלפת namespace של Boost.
הכנתי תסריט קטן שמאפשר שינוי גורף של Namespace עץ הקוד של Boost ל־Namespace חילופי כדי למנוע התנגשות בין גרסאות Boost שונות: http://art-blog.no-ip.info/files/rename.py.
הרצה: ./rename.py /path/to/boost/tree new_namespace_name
עכשיו כל ה־defineים וכל הסימבולים יימצא ב־namespace אחר ואפשר יהיה לבנות רכיבים ללא תלות בגרסת Boost.
הערות:
- השימוש על אחריותכם, גם אם זה יאכל לכם את החתול או יהרוס את כל הקוד במחשב שלכם.
- הוא עדיין די ראשוני, אבל הצלחתי לקמפל רוב הספריות החשובות ולהריץ כמה regression tests.
את התסריט כתבתי לפתרון אפשרי לבעיה שהצגתי במאמר הקודם
תגובות
מספר הערות מקריאה ראשונית, נקווה שתהיה ביקורת בונה:
אין צורך בשימוש ב במשהו בסגנון: line=self.input.readline() while line: .... line=self.input.readline()
מאחר והקובץ הוא כבר איטרטור. במקום מספיק:
זה כבר כולל גם את ה-\n האחרון בשורה בתור צ'ופר (לדעתי ניתן להשתמש בו כאן).
אפשר להשתמש ב-raw string, כך ה-esacapes לא יפורשו, מה שמונע את הצורך בחזרה עליהם.
בטוח שה-markdown חרבש לי את העסק, מתנצל מראש.
תודה רבה, באמת, חיכיתי לזה :)
השאלה האם אני יכול לקרוא עוד פעם readline באמצע לולאה: קרי
כלומר, האם אפשר לקרוא לאיטרטור באמצע לולאת for כדי לקדם אותו? אם כן, כיצד?
נכון, אבל כשהתחלתי לכתוב היו שני סיומות בלבד, אז גיליתי שיש הרבה יותר. בכל אופן, זה לא צוואר הבקבוק בתסריט, את הריצה על התיקיה הוא מצבע תוך מספר שניות, וה־rename עצמו לוקח איזה 5 דקות.
פשוט, רציתי API אחיד, כי אולי אני ארצה להשתמש ב־rename ולשמור ישר לקובץ אחר. StringIO נותן לי אבסטרקציה של ערוץ פלט כלשהו אם זה buffer בזיכרון או אם זה file. אולי אני חושב יותר מידי C++־י (בו הייתי משתמש ב־std::ostringstream).
כן, אני יודע, פשוט ב־vim כרציתי לכתוב r'\' הוא התבלבל בתחביר. כך שהחלטתי לשמור על '\', אבל כן, אני מכיר את האופציה.
אם כך, המצב שלי בפיתון לא רע ;)
לא נורא, סידרתי, חוץ מזה, בדיוק בשביל זה יש "תצוגה מקדימה"
האם יש דרך להגיד ל־VIM שאם הוא עורך קובץ python אז שיהפוך את ה־tab ל־4 רווחים? כל בכל שאר המקרים אני תמיד משתמש ב־tab=8 וב־tab אמתי, כך שאני לא הייתי רוצה להשנות את כל ההגדרות רק עבור Python.
התכוונת שהשימוש על "אחריותכם" ולא על "אחראיותכם", לתשומת לבך. זו טעות מאוד מעצבנת.
תודה! תיקנתי.
ברור שאפשר, אתה מוזמן להסתכל ב vimrc שלי http://ik.homelinux.org/projects/files/vimrc :)
(ד"א אני שונא markdown, תמיד יש משהו שאני לא מצליח ליישם בו, הפעם קישורים)
עידו, יש לך קישור ל־Syntax יש לך קישור לתצוגה מקדימה. אגב, פשוט שמים קישור בין סימנים "<" ו־">".
היתרון הגדול של Markdown הוא נייטרלי לכיווניות ודטרמיניסטי, בניגוד של WYSIWYG
תודה על הקישור.
אגב, אחרי שיניתי ל־tab=4 הבנתי למה אני אוהב tab=8... כי זה פשוט הרבה יותר קריא
אל תכנס לשם, מלחמות עולם התחילו על פחות מזה. לגבי קביעת הגדרות העורך: ניתן גם להשתמש ב-modelines של vim ולהטמיע בקובץ את ההגדרות. כך גם מי שיערוך את העסק ישתמש בהגדרות הנכונות (בהנחה שזה מופעל אצלו). עורכים נוספים תומכים ב-modelines של vim. לדרכים השונים: http://wiki.python.org/moin/ViImproved%20(Vim)
לגבי raw strings, צביעת התחביר אצלי ב-vim עובדת כראוי.
לגבי הלולאה, זה לא רק עסק של יעילות, אלא גם בהירות הקוד. כאשר קוראים את הקוד זה ברור הרבה יותר מה מבקשים שם. כמו כן עדיף מאוד להשתמש ב-
os.path.splitext
, ואז זה בכלל ברור יותר.אתה חושב יותר מדי C++. במקרה כזה (תנועה קדימה/אחורה בתוכן הקובץ), ומאחר והרי לא מדובר בקבצים ענקיים (סה"כ קבצי קוד), מדוע לא לקרוא את הקובץ לתוך רשימת מחרוזות, להעביר את הרשימה לפונקציה אשר תשנה אותה ולאחר מכן תוכל לעשות בה ככל העולה על רוחך, כולל כתיבתה לקובץ ? את הפוקנצינליות של העבודה מול הקבצים תוכל לבצע בפונקציה הקוראת לה. כך ה-api שלך מחולק יפה, ויש לך פונקציה שיודעת לעבוד על רשימת מחרוזות, ועוד אחת שיודעת לטפל בקבצים.
כמו כן, אין לך בעיה לקבל את הערך הבא מהאיטרטור ע"ׁי שימוש ב-
next
: In [11]: f = open('/etc/fstab')נ.ב. לגבי ה-markdown, כמובן שהשתמשתי ב-preview, אך לא משנה מה עשיתי, מה שהיה שם זה המיטב שהגעתי אליו, תודה על העריכה. בדוק את wmd, יכול להיות תוספת יפה למערכת (בהנחה שלא החלטת עדיין על שם חדש עבורה): http://wmd-editor.com/
אני יודע... אבל זה עדיין מגעיל.
אולי אני הייתי אומר, אני חושב יותר מידי כמו Finite State Machine. אני מחקה בפענוח הטקסט את התנהגות ה־FSM.
זאת הנקודה, יש תנועה רק קדימה
אין לי כל־כך משמעות לרשימת מחרוזות "כשורות", כי איך הולך הקוד שלי: הוא מושך tockenים אחד אחד, שכל tocken יכול להיות:
has_boost_foo
.אני צריך לעבד את כל אחד מהם בצורה שונה, כך למשל, אסור לי לשנות הערות, כי יש שם רישיון של Boost שחייב להישאר הרישיון המקורי.
למעשה, מה שאני עושה זה:
כך שהלוגיקה של הקוד היא דווקא מאוד מתאימה לעבודה של כלי פענוח טקסט סטנדרטיים. שוב, ככה אני רגיל לכתוב דברים כאלה...
תודה רבה, פשוט לא ידעתי...
תודה, זה בטח משהו חדש? כי בפעם האחרונה שבדקתי, לא ראיתי פתרון markdown ב־JavaScript שהוא תחת רישיון חופשי.
אז מה הבעיה, זה אפילו קל יותר, העבר את כל הקובץ בתור מחרוזת אחת (read יעשה זאת עבורך). בכל מקרה בשתי הצורות אתה מרוויח תנועה.
לגבי wmd, זה לא כל כך חדש. שים לב שהוא עדיין לא תחת רישיון חופשי, לפי האתר הגרסה הבאה אמורה להיות תחת MIT.
או קיי... אז זה באמת אחד שאני זוכר, בגלל זה לא לקחתי אותו
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.