Unpacking the Data Structure of Manus Session

The data comes from these cases: Comprehensive Tesla Stock Analysis and Investment Insights Comparative Analysis of Travel Insurance Policies Interview Schedule Creation for April 13-15 SEO Audit and Optimization Report for Karpathy’s Website Customer Form for B2B Gen AI Consulting Firms The history data of a session is provided by the API https://api.manus.im/api/chat/getSession?sessionId=xxx. Data 1 2 3 4 5 6 7 8 9 10 11 12 { "id": "xFgpHb15vKqfRPWIs3JJPJ", "title": "Comprehensive Tesla Stock Analysis and Investment Insights", "iconInfo": { "$typeName": "session.v1.IconInfo", "url": "https://files.manuscdn.com/assets/icon/session/apple-stocks-data.svg", "bgColorLight": "#E43573", "bgColorDark": "#3F3F3F" }, "agentTaskMode": 1, "events": [] } Q: how many kinds of agentTaskMode? Events chat sender: “user”, “assistant” content: Markdown format text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "id": "vG1n3GhvODVIjGoJ12J2GS", "type": "chat", "timestamp": 1741060890011, "sender": "user", "messageType": "text", "content": "I'd like a thorough analysis of Tesla stock, including:\n\nSummary: Company overview, key metrics, performance data and investment recommendations\nFinancial Data: Revenue trends, profit margins, balance sheet and cash flow analysis\nMarket Sentiment: Analyst ratings, sentiment indicators and news impact\nTechnical Analysis: Price trends, technical indicators and support/resistance levels\nCompare Assets: Market share and financial metrics vs. key competitors\nValue Investor: Intrinsic value, growth potential and risk factors\nInvestment Thesis: SWOT analysis and recommendations for different investor types", "attachments": [] } { "type": "chat", "messageType": "text", "attachments": [], "content": "I'll help you create a comprehensive analysis of Tesla stock. I'll gather the latest financial data, market sentiment, technical analysis, competitive comparisons, and develop investment recommendations. This will take some time to research thoroughly, but I'll work on it right away and provide you with a detailed report.", "id": "4hJnLZZjels3kckkeY8WFQ", "sender": "assistant", "timestamp": 1741060892861 } With attachments created before. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 { "id": "JhkoA2vSJq7PUdIAVBpFzM", "type": "chat", "timestamp": 1740979547968, "sender": "user", "messageType": "text", "content": "Here is the survey for available interview times from April 13 to April 15. Please create an interview schedule for me with two interview sessions each day (one in the morning and one in the afternoon). The number of candidates in each session should be as evenly distributed as possible, and the schedule should accommodate each student's available time. Please provide the most reasonable interview schedule.", "attachments": [ { "id": "Oe6qO9ScdztzivCMXvdstA", "url": "https://private-us-east-1.manuscdn.com/users/309511696588767621/uploads/Oe6qO9ScdztzivCMXvdstA_na1fn_aW50ZXJ2aWV3X3N1cnZleV9maW5hbA.xlsx?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vdXNlcnMvMzA5NTExNjk2NTg4NzY3NjIxL3VwbG9hZHMvT2U2cU85U2NkenR6aXZDTVh2ZHN0QV9uYTFmbl9hVzUwWlhKMmFXVjNYM04xY25abGVWOW1hVzVoYkEueGxzeCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MTU4MzM0OH19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=cnywaO-NMF9UdLF36czp5PW63BPGpOJvJvyrFCiLsgzw6H3wI1yoRQ8l4giGhDltF45BA1I9QCXHac3RdBTBOHRqd3Pm8lz1SU3CVxcYnkrRwVqjpIjrN0u7J69y-cSlclrh5IQs0UnnEXcaBMFgcqG9uG4yQvPHdMi-UXTkYmTSmx-q0VqfuM4gGxWTMC~p4WXGLcJf0wvSDcE4QNkrDbtNTnmGC-Dnoy5U3ett5eX8ySx27PLwJ8~aKBvQMRK28Wkgc52mvBroUWBSm9yMz~QtviRy77DL2qf6G9dG-Qar~Bv6iCRATYYRc7iGnFTizlEVrTA1Lnm-nn-HWGJ4YA__", "type": "file", "filename": "interview_survey_final.xlsx", "contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "contentLength": 11353 } ] } { "id": "KX9zvuTApeB3f9cYpVcKEl", "type": "chat", "timestamp": 1740986701272, "sender": "user", "messageType": "text", "content": "Please analyze these travel policies and provide a comparative table with key dimensions to clearly highlight the differences between them.", "attachments": [ { "id": "oUO7cTCVFHVvQVOkXF0i5q", "url": "https://private-us-east-1.manuscdn.com/users/309511696588767621/uploads/oUO7cTCVFHVvQVOkXF0i5q_na1fn_dHJhdmVsLXBvbGljeS1kb2N1bWVudA.pdf?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vdXNlcnMvMzA5NTExNjk2NTg4NzY3NjIxL3VwbG9hZHMvb1VPN2NUQ1ZGSFZ2UVZPa1hGMGk1cV9uYTFmbl9kSEpoZG1Wc0xYQnZiR2xqZVMxa2IyTjFiV1Z1ZEEucGRmIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzQxNTkwNTAxfX19XX0_&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=FQaTrhK0ZTzHWF8QW4Vneobb26Tuzv6CDgFmVUfU2dL375FrH2TaJXIzI68wgHx0NYYMRSiqaALsOdnI0r7Hmam4QBV-7IIrsMlFuIAkRsN7pAlR-POZ6kHBN55L5fVrzV00tyQSymwXW75vRyHGgxpPxcu8HsAJHZBYh9pnelxRKe6eKZcL5fjU2M8qDDKOP7a1CpckPioDwzHAIgQ5y8a67HJmkqw7enTf16J7b6cOoqJW0Ba3eiz~7A83J1QjKDuMj15teiKqjtWMR5XP-V8z~r3iXILCGKWC0kJDxH8QP6Gds~TopIU3MtRC7lT39e2D308gl5Aygi8NE1ypNw__", "type": "file", "filename": "travel-policy-document.pdf", "contentType": "application/pdf", "contentLength": 779625 } ] } { "type": "chat", "messageType": "text", "attachments": [ { "url": "https://private-us-east-1.manuscdn.com/sessionFile/xFgpHb15vKqfRPWIs3JJPJ/sandbox/CZjwux2HibnKjGKnS2xC3V_1741061983802_na1fn_L2hvbWUvdWJ1bnR1L3Rlc2xhX2FuYWx5c2lzL2NoYXJ0cy90ZXNsYV9oaXN0b3JpY2FsX3ByaWNl.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUveEZncEhiMTV2S3FmUlBXSXMzSkpQSi9zYW5kYm94L0Naand1eDJIaWJuS2pHS25TMnhDM1ZfMTc0MTA2MTk4MzgwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSbGMyeGhYMkZ1WVd4NWMybHpMMk5vWVhKMGN5OTBaWE5zWVY5b2FYTjBiM0pwWTJGc1gzQnlhV05sLnBuZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzEyODIwOH19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=QObuZr3pgEcIYMAdT1xhHBF0wvusk73og2YC8YHEOnnyYsWxMLVCk0I2byrMJrzekDUVmnmsfxoUX8Wei0srzeaoi9hlb~bgbGTiZjyDCV3t~8Fsoz5z8rbIr6L8STQsib3kRlLQB2dC44nibbfWTGbzrnXX~cPsoayQyVq0jHK851brNQywIp2sHx8d~1DgzFxXi3iKuLdyFad9ZQbutjMxoX1Mii-XdHJ9229yP0FSkQYO0XzrFeFtR0bGmdZSMkvwPJXR-qn~XWpSgEeiSxOZ2N~ZtaH1gHMq~z~at7f0WzJkPlkm3ULCz6oD74MnhVwHZxBFtdb6zDcBDZeOOA__", "path": "/home/ubuntu/tesla_analysis/charts/tesla_historical_price.png", "type": "image", "filename": "tesla_historical_price.png", "timestamp": 1741061983802, "contentType": "image/png", "contentLength": 47609 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/xFgpHb15vKqfRPWIs3JJPJ/sandbox/CZjwux2HibnKjGKnS2xC3V_1741061983802_na1fn_L2hvbWUvdWJ1bnR1L3Rlc2xhX2FuYWx5c2lzL2NoYXJ0cy90ZXNsYV9jYXBpdGFsX3N0cnVjdHVyZQ.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUveEZncEhiMTV2S3FmUlBXSXMzSkpQSi9zYW5kYm94L0Naand1eDJIaWJuS2pHS25TMnhDM1ZfMTc0MTA2MTk4MzgwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSbGMyeGhYMkZ1WVd4NWMybHpMMk5vWVhKMGN5OTBaWE5zWVY5allYQnBkR0ZzWDNOMGNuVmpkSFZ5WlEucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzQzMTI4MjA4fX19XX0_&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=rOY3ZIfUl3nxTME0-OmihUdCCh~syAj3USviGwc1sPEF40XTwFIXpd-~oa1UBgfoNPB3pR6T-e6diYUdX96KlShuEOjAloeLALOgWkErX2J4mlW8dOtBOFNo0~YTk0R~GeLHDtwT7OwbhrqvW1OMHZIk7foUjLDoDitGY8sIlf4Fpt7uDk3auN0WlVxer3aE5FvgIhrZbSSbYHeh5OCAvDXQ4cxgvYxzzkg3HH0bBmUF3sdogn6ZW4gPv-sWy15tgjcjYKCakUUMZUTP4todL6HgLH~ZCKJ2DKJjNJDiRiN6ns8LuUed8HO60Ao7LrlRhsdyZtK3dXZxhgKBwiY2Ng__", "path": "/home/ubuntu/tesla_analysis/charts/tesla_capital_structure.png", "type": "image", "filename": "tesla_capital_structure.png", "timestamp": 1741061983802, "contentType": "image/png", "contentLength": 30300 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/xFgpHb15vKqfRPWIs3JJPJ/sandbox/CZjwux2HibnKjGKnS2xC3V_1741061983802_na1fn_L2hvbWUvdWJ1bnR1L3Rlc2xhX2FuYWx5c2lzL2NoYXJ0cy90ZXNsYV9yZXZlbnVlX2dyb3d0aA.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUveEZncEhiMTV2S3FmUlBXSXMzSkpQSi9zYW5kYm94L0Naand1eDJIaWJuS2pHS25TMnhDM1ZfMTc0MTA2MTk4MzgwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSbGMyeGhYMkZ1WVd4NWMybHpMMk5vWVhKMGN5OTBaWE5zWVY5eVpYWmxiblZsWDJkeWIzZDBhQS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NDMxMjgyMDh9fX1dfQ__&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=TOhZSNCFinyvfUW3pT1RxOHa9v5KMyMbZ0Tjcy6OzzIoW8JTUa7S0KNZskgUtuoBnqimVaEyqAVVida9-ZBSGpbwTocJH8IygaUZSkpRhtKDtrlUPGUHV~bZyYkURRkc7zo57C1HO9u3g3gfc55jjBJLZzfU4m2ht92Hfe0vwAoPLMoyjXSR7wgs1vGjQ4SR97N6pOFh-CA3q4BRPEPyk5BiX0F6EJjoXeAD5gF0lNBhhtMwXSar0u6kEAMPcgxdGfKGIe5B-4YGYi2DEhe4v7o26fNW-2oeJpL8kLpbLYY-0qYGpex8JyQCpDNbxwujkC-mMd3qizXjUqTkahyb2g__", "path": "/home/ubuntu/tesla_analysis/charts/tesla_revenue_growth.png", "type": "image", "filename": "tesla_revenue_growth.png", "timestamp": 1741061983802, "contentType": "image/png", "contentLength": 32821 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/xFgpHb15vKqfRPWIs3JJPJ/sandbox/CZjwux2HibnKjGKnS2xC3V_1741061983802_na1fn_L2hvbWUvdWJ1bnR1L3Rlc2xhX2FuYWx5c2lzL2NoYXJ0cy90ZXNsYV9wcm9maXRhYmlsaXR5X21hcmdpbnM.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUveEZncEhiMTV2S3FmUlBXSXMzSkpQSi9zYW5kYm94L0Naand1eDJIaWJuS2pHS25TMnhDM1ZfMTc0MTA2MTk4MzgwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSbGMyeGhYMkZ1WVd4NWMybHpMMk5vWVhKMGN5OTBaWE5zWVY5d2NtOW1hWFJoWW1sc2FYUjVYMjFoY21kcGJuTS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NDMxMjgyMDh9fX1dfQ__&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=R4ECYV9kqx2Ktfx-lxMTyd7mpF-6EWqY~rjd1nu7g417pHP2XiAlANwDhCXHowizuu276LWMY5sv79w4qqxYkIZMcH~awKcEov~HD8jirSDvjAX7hD4Q3uiDw-gsoTF4705Ic3liw655GSGb35XDUOEDN6ml15szhqi9xP4XaqFVeMfdqXelYHldYrLQyB0h~2TggYHpeEdOHFGX7ea96N9CdbV3X3tT37gD5iLUkAJjnnx~ny0oF26Eflj1L0YdzwSK~tpC-VZYZl9js1vTd4J2FGbyz9yp3CZyTvz0inUt-WnmcrVCS1M7KFGYrtf5U3S75p7sdf6dpncZWgrGzw__", "path": "/home/ubuntu/tesla_analysis/charts/tesla_profitability_margins.png", "type": "image", "filename": "tesla_profitability_margins.png", "timestamp": 1741061983802, "contentType": "image/png", "contentLength": 61140 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/xFgpHb15vKqfRPWIs3JJPJ/sandbox/CZjwux2HibnKjGKnS2xC3V_1741061983802_na1fn_L2hvbWUvdWJ1bnR1L3Rlc2xhX2FuYWx5c2lzL2NoYXJ0cy90ZXNsYV9jYXNoX2Zsb3dfYW5hbHlzaXM.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUveEZncEhiMTV2S3FmUlBXSXMzSkpQSi9zYW5kYm94L0Naand1eDJIaWJuS2pHS25TMnhDM1ZfMTc0MTA2MTk4MzgwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSbGMyeGhYMkZ1WVd4NWMybHpMMk5vWVhKMGN5OTBaWE5zWVY5allYTm9YMlpzYjNkZllXNWhiSGx6YVhNLnBuZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzEyODIwOH19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=P0GyMLi38cIp0ssnWkQYaG1g1wuSfFOv1yg8jIrse7HGQlMaWFUi2pQKA9IDrZv-UXDqitqy-S1-lSfRECFdUXI0sxqfSg8rlMfl9afGySE~5lYlue4Ym9ZGJeyZ3eqVhDP2sy-P9iY~QWmE5qSdBbcCMnIhK6fv4xQVXNXMW9-swcaM0yYaUyfYuYXNUe8taMIUjBnYJZu~rJ57zAfh8VgAoKrcVl-W3xdBP~Qk-2zZUk6jmcf8uZArUjnZ1L45KjQhmzh15D7B9b8zXIlIXX0s4ygnMHdQ6twYjVG-ITHOO1XqSjD8fEVt0ufEAV6UxgyM3lZkf4A~Ce9ol6BPRg__", "path": "/home/ubuntu/tesla_analysis/charts/tesla_cash_flow_analysis.png", "type": "image", "filename": "tesla_cash_flow_analysis.png", "timestamp": 1741061983802, "contentType": "image/png", "contentLength": 44464 } ], "content": "I've completed the financial data collection and analysis for Tesla. Here's what I've gathered:\n\n1. Historical Stock Data: I've retrieved Tesla's stock price history from Yahoo Finance, including key metrics like the current price ($284.65), 52-week high ($488.54), and 52-week low ($138.80). I've created visualizations of the price trends and calculated volatility metrics.\n\n2. Revenue Analysis: Tesla has shown remarkable growth, with revenue increasing from $24.6 billion in 2019 to $96.8 billion in 2023, representing a strong compound annual growth rate.\n\n3. Profitability Metrics: I've analyzed Tesla's gross margins, operating margins, and net margins over the past five years, showing their progression from negative operating income in 2019 to substantial profitability in recent years.\n\n4. Balance Sheet Strength: Tesla has significantly improved its financial position, reducing debt while building cash reserves to over $29 billion by 2023.\n\n5. Cash Flow Analysis: The company has demonstrated strong cash generation capabilities with positive and growing free cash flow despite significant capital expenditures.\n\n6. R&D and Capital Investments: Tesla continues to invest heavily in research and development and production capacity expansion.\n\nI'm now moving on to analyze market sentiment for Tesla, including analyst ratings, price targets, and news impact on the stock. This will give us insight into how the market perceives Tesla's future prospects.", "id": "CZjwux2HibnKjGKnS2xC3V", "sender": "assistant", "timestamp": 1741061983997 } Ask for approval by requestDeployActionId. 1 2 3 4 5 6 7 8 9 10 { "type": "chat", "messageType": "text", "attachments": [], "requestDeployActionId": "toolu_01Xea7dTETZUtxWThJB9Ggsi", "content": "Manus 正在尝试将位于 `/home/ubuntu/tesla_analysis/dashboard` 的服务部署到公网上。请通过点击按钮确认您是否同意。", "id": "YCrGxLFvxLLJlGHKSfx8zg", "sender": "assistant", "timestamp": 1741065199191 } Text output result. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 { "type": "chat", "messageType": "text", "attachments": [ { "url": "https://private-us-east-1.manuscdn.com/sessionFile/1ICnnOiC9L3HMK07vG0iDn/sandbox/17M5PpfEyRmhkYuQKEN1rD_1740987315310_na1fn_L2hvbWUvdWJ1bnR1L3RyYXZlbF9wb2xpY3lfYW5hbHlzaXMvdHJhdmVsX2luc3VyYW5jZV9jb21wYXJpc29uX2FuYWx5c2lz.md?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvMUlDbm5PaUM5TDNITUswN3ZHMGlEbi9zYW5kYm94LzE3TTVQcGZFeVJtaGtZdVFLRU4xckRfMTc0MDk4NzMxNTMxMF9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSeVlYWmxiRjl3YjJ4cFkzbGZZVzVoYkhsemFYTXZkSEpoZG1Wc1gybHVjM1Z5WVc1alpWOWpiMjF3WVhKcGMyOXVYMkZ1WVd4NWMybHoubWQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NDM0OTMwMDV9fX1dfQ__&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=S6sY4GEiJ7Ewfuqs0guIKF~Zz8fn~0FJbrO5fFLB6eFs~s9HxhGbL12~waVslQr17phRTyMNE80r1Ygn4pG9NUYYccTIZFDCgbicCs3Yz0o2CjnnYoRJYuqDfwtwG7B5NmX8A2ClkwJe6QnDVGOuHWM0z~GgBRpHKJHU11dTCw2dOltuRzoiWKIrKrBoXW3Q60mesiI3Fszv9tjhtlT6g52YKVGLlrR6pWXSHrd219mUfp73P~Pa4DkmaTf5~46hNgbWw06jomVvd7K2TgrsIFlwx9DJ812ZCNZwy~4mJz7JYPTBi4P0CLLfv1izeTHewytWeY8SMIPtYhsnlZSd7Q__", "path": "/home/ubuntu/travel_policy_analysis/travel_insurance_comparison_analysis.md", "type": "file", "filename": "travel_insurance_comparison_analysis.md", "timestamp": 1740987315310, "contentType": "text/markdown", "contentLength": 10605 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/1ICnnOiC9L3HMK07vG0iDn/sandbox/17M5PpfEyRmhkYuQKEN1rD_1740987315310_na1fn_L2hvbWUvdWJ1bnR1L3RyYXZlbF9wb2xpY3lfYW5hbHlzaXMvdHJhdmVsX2luc3VyYW5jZV9jb21wYXJpc29uX3RhYmxl.md?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvMUlDbm5PaUM5TDNITUswN3ZHMGlEbi9zYW5kYm94LzE3TTVQcGZFeVJtaGtZdVFLRU4xckRfMTc0MDk4NzMxNTMxMF9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNSeVlYWmxiRjl3YjJ4cFkzbGZZVzVoYkhsemFYTXZkSEpoZG1Wc1gybHVjM1Z5WVc1alpWOWpiMjF3WVhKcGMyOXVYM1JoWW14bC5tZCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5MzAwNX19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=n4xbqL2MlOZaIArjsBB8Jjsrh3cEhvhV1Iiv0KRFVOc1gPPNeRUV6IeZDuoE2zogIvlp8Q41p3TMljG-h5~~QMTulSzgM5iV5b~GT7mn23o9oG0mlwQa9yTblV4rZ4BaFgqM0OFBlUs7LfABjQZnRoRxcd0m4xm18dGFdbeTkPvskQh3DQwmS0GKx~wfB9OBpTeAJOqaeuJJXC-1i7ekC~nH1v5dupBMZbk0~gBL6VgDCN785W05zB8AaOgS80RzUuMXowqkKYzsVo6FP7wZgtkGnWnG5~aJVhqkEAZ7k87YI12TOVGnCc-gqosHqoiDCnmAYKj1qEQoyNCVzZZW2w__", "path": "/home/ubuntu/travel_policy_analysis/travel_insurance_comparison_table.md", "type": "file", "filename": "travel_insurance_comparison_table.md", "timestamp": 1740987315310, "contentType": "text/markdown", "contentLength": 4098 } ], "content": "I've completed the comparative analysis of the four travel insurance policies you provided. The analysis includes a comprehensive breakdown of key dimensions such as medical coverage, trip protection, baggage coverage, personal accident and liability, special benefits, plan structure, and additional features.\n\nI've created a detailed report that highlights the strengths and unique offerings of each policy, along with key insights for each dimension and specific recommendations based on different traveler needs.\n\nHere's the full comparative analysis document and the supporting comparison table.", "id": "17M5PpfEyRmhkYuQKEN1rD", "sender": "assistant", "timestamp": 1740987315791 } { "type": "chat", "messageType": "text", "attachments": [ { "url": "https://private-us-east-1.manuscdn.com/sessionFile/AN3pVVcq4qHnWbC55XhAYB/sandbox/myZ92j2wqYkDtJWabMe6pl_1740979879402_na1fn_L2hvbWUvdWJ1bnR1L3NjaGVkdWxlX3ZhbGlkYXRpb24.txt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQU4zcFZWY3E0cUhuV2JDNTVYaEFZQi9zYW5kYm94L215WjkyajJ3cVlrRHRKV2FiTWU2cGxfMTc0MDk3OTg3OTQwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDNOamFHVmtkV3hsWDNaaGJHbGtZWFJwYjI0LnR4dCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5MzMwMn19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=iRnP0nf6jevr5v84yS5X8~aeWPpdh7zBxzKsFApy7sVVoCCpUU4c0y6g0p2ZLWb-LBVE0rsbcVwhniwP9EGX15xwy9APsd1JxcrCFxL1IekKIkrjZnB3uJbFokn3yVNLra7G7VF6YFAyPnMjSBwQafGNUmU0S~HhxM-a~M-OjJDQnXGMnU7YIeP74Cyk2x-3zHVYAb4txv1YmrTo~BN9GFUTIXQtu5yZirPy6D-ghXdB32O64Z-WYdx28O2QB2dRf7DAgAeBj1aXWnf9TsjhsuLRCD~455t6deFYmc4rFfJJFh6uFtFHLRNqIlGCgPMnPGyrBKtjP4h-CnRDXC8GMg__", "path": "/home/ubuntu/schedule_validation.txt", "type": "file", "filename": "schedule_validation.txt", "timestamp": 1740979879402, "contentType": "text/plain", "contentLength": 461 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/AN3pVVcq4qHnWbC55XhAYB/sandbox/myZ92j2wqYkDtJWabMe6pl_1740979879402_na1fn_L2hvbWUvdWJ1bnR1L2ZpbmFsX2ludGVydmlld19zY2hlZHVsZQ.html?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQU4zcFZWY3E0cUhuV2JDNTVYaEFZQi9zYW5kYm94L215WjkyajJ3cVlrRHRKV2FiTWU2cGxfMTc0MDk3OTg3OTQwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDJacGJtRnNYMmx1ZEdWeWRtbGxkMTl6WTJobFpIVnNaUS5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzQzNDkzMzAyfX19XX0_&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=Jbu7otQtMTx8B2ZuDxWVOxswA-MCH-u4XaiSxpr7NfbwHgOsMewq3FArJYPTiiPREnKBtpclGhBM9IK6NtKLmonjjxMYX45QyZV5646QGmVEJRsLE2xAs9~0JZ3v8i6kazZhkVQl2OCvQq0CC~nBw03gX3pPafYVbNplYP7iwjVaL9LPWBkI~W~tc7hdxMKYs40hUkVq2loJgsA6hILGFimeeUDUdEBZT8Xl9RI0jMsyTihrYsDNAhWigSbiOkc5AeS9UEChLTvzhPfVHLTld9RmhcMyPla4F4DsR4fEG2BSvLnOTG7qFwnn~qv879bpUrLaVZZSEy9fH3aHF6AjZg__", "path": "/home/ubuntu/final_interview_schedule.html", "type": "file", "filename": "final_interview_schedule.html", "timestamp": 1740979879402, "contentType": "text/html", "contentLength": 5892 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/AN3pVVcq4qHnWbC55XhAYB/sandbox/myZ92j2wqYkDtJWabMe6pl_1740979879402_na1fn_L2hvbWUvdWJ1bnR1L2ZpbmFsX2ludGVydmlld19zY2hlZHVsZQ.md?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQU4zcFZWY3E0cUhuV2JDNTVYaEFZQi9zYW5kYm94L215WjkyajJ3cVlrRHRKV2FiTWU2cGxfMTc0MDk3OTg3OTQwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDJacGJtRnNYMmx1ZEdWeWRtbGxkMTl6WTJobFpIVnNaUS5tZCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5MzMwMn19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=m2e5536kp1d3IHj9kES0U9ON~EcGn65VGejuVHtZb~D9QUVi7eFqhfgD45MQuGpDb5yZEAT4HFrVTlhSPjwFaCJjYs9vO6Ke8Ysu7qoyVNYASU0LrIupfPg2MjCQpGsMI61bHTUIAfqJbh~5DBg1pfEkGXPnb9Z2vR6KHTepIOTtFZWyf-LcFSYd2789kGUos-i4fYdWfDN8RfzK1dslNs8F8b8FItT3n4UdqFYOgxNikUjc253uWFWsVBwHAnvYp90Zj1SwyutD4VdqhPD-zy1SI~ZWXuDHd4csshG3dxp6g7YB2SHpKd7ygzHxMcsL1cof4A7Du6lLXZAsSlpWAQ__", "path": "/home/ubuntu/final_interview_schedule.md", "type": "file", "filename": "final_interview_schedule.md", "timestamp": 1740979879402, "contentType": "text/markdown", "contentLength": 1566 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/AN3pVVcq4qHnWbC55XhAYB/sandbox/myZ92j2wqYkDtJWabMe6pl_1740979879402_na1fn_L2hvbWUvdWJ1bnR1L2ludGVydmlld19zY2hlZHVsZV92aXN1YWw.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQU4zcFZWY3E0cUhuV2JDNTVYaEFZQi9zYW5kYm94L215WjkyajJ3cVlrRHRKV2FiTWU2cGxfMTc0MDk3OTg3OTQwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDJsdWRHVnlkbWxsZDE5elkyaGxaSFZzWlY5MmFYTjFZV3cucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzQzNDkzMzAyfX19XX0_&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=sL97hTV77CAh9IDkZy6RNBWXd-a3JBqSIoucaElZoQWdK-gCiNXRVpUaUIGRReYiAdwvyVRtvIrUx4VcUdgiyrOa76EZv2hVSYNmLH1cu9qaxivtDvwfY~8d8C8iR30ojQGfwgbABR0bBfK7K4jvjA3KH04Od5bk2mTU17SuegX4das6D6SZO0Zyty7WYJy1KOoxTgw61nWByaaGQu4OzCvJDhdZGb5XxVrCIoKvqlbtRVw9l6qZTQGjiawe-fHzmRDbn3bglsBN8PvGBrDhHKl1TdGoNij9voFKfixgMs~YO5G~cSM4n5OfhzEGphca89LgiPpvIz7hkCcjf~ISlg__", "path": "/home/ubuntu/interview_schedule_visual.png", "type": "image", "filename": "interview_schedule_visual.png", "timestamp": 1740979879402, "contentType": "image/png", "contentLength": 373745 }, { "url": "https://private-us-east-1.manuscdn.com/sessionFile/AN3pVVcq4qHnWbC55XhAYB/sandbox/myZ92j2wqYkDtJWabMe6pl_1740979879402_na1fn_L2hvbWUvdWJ1bnR1L2ludGVydmlld19zY2hlZHVsZQ.txt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQU4zcFZWY3E0cUhuV2JDNTVYaEFZQi9zYW5kYm94L215WjkyajJ3cVlrRHRKV2FiTWU2cGxfMTc0MDk3OTg3OTQwMl9uYTFmbl9MMmh2YldVdmRXSjFiblIxTDJsdWRHVnlkbWxsZDE5elkyaGxaSFZzWlEudHh0IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzQzNDkzMzAyfX19XX0_&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=QOl4zvhkq~bx7CWVWuTR3aWNMZ-cFp7paT7Xa54ARx3X5D0KCGpkAzdEmJWIpPVEf25soICrGMtBkRMKazzUXZ3~7g2NcyKI5CsKZZD~Le45LZje1qYDlLgTmC201LiqAefkLKZ3xviUPAdPwWUYrYA05HwqJyNb3zYnGpFyIC0Zrh~HOiUvD52v~CMKmfAAuJKWq-39dDIEYG9XLuTVOPQtE9QmQi6Pcw5hU208uY7mU6h2jRCraROTMZeOSMcF8hv2bfIM1jH6KPEXgTDKP-5ihe6xrihh8yOYnZifGQgEvRqCYjk0~9WsekWHNSLhtDzQlLDKIhhQkpJGl9jmiA__", "path": "/home/ubuntu/interview_schedule.txt", "type": "file", "filename": "interview_schedule.txt", "timestamp": 1740979879402, "contentType": "text/plain", "contentLength": 1179 } ], "content": "I've completed creating the interview schedule based on the survey data. Here's what I've prepared:\n\n1. I've created a balanced interview schedule with two sessions per day (morning and afternoon) from April 13-15.\n2. All 45 candidates have been assigned to sessions according to their availability.\n3. The distribution is well-balanced with 8, 7, 6, 8, 7, and 7 candidates per session.\n4. The schedule has been validated to ensure all candidates are assigned to times they're available.\n\nI'm attaching the schedule in multiple formats:\n- A text version with the basic schedule\n- A markdown version with more detailed formatting\n- An HTML version with enhanced visual presentation\n- A visual representation showing the schedule graphically\n\nThe schedule successfully accommodates all candidates' availability constraints while maintaining an even distribution across all six sessions.", "id": "myZ92j2wqYkDtJWabMe6pl", "sender": "assistant", "timestamp": 1740979879558 } liveStatus Always show the latest one at the bottom before the job is finished. 1 2 3 4 5 6 { "id": "k7QnLyNeOeCtPCzteTREAz", "type": "liveStatus", "timestamp": 1741060890082, "text": "初始化沙箱" } sandboxUpdate 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "id": "Kgfk50K5yUzFGh8kBmD25y", "type": "sandboxUpdate", "timestamp": 1741060891120, "sandboxId": "****", "status": "running", "codeServerUrl": "****", "vncUrl": "****" } { "id": "DPtpw7TlfGM0F3JBFOe5Vf", "type": "sandboxUpdate", "timestamp": 1741066408097, "sandboxId": "****", "status": "stopped", "codeServerUrl": "****", "vncUrl": "****" } resourceAccessed A read-only list showed on web page. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 { "id": "FTSYIESAA0lX1IKWQEMDcx", "type": "resourceAccessed", "timestamp": 1741060897834, "brief": "已连接到数据源", "resourceType": "data_api", "resources": [ { "id": "api_19", "title": "Get stock chart", "kind": "builtin" }, { "id": "api_20", "title": "Get stock holders", "kind": "builtin" }, { "id": "api_21", "title": "Get stock insights", "kind": "builtin" }, { "id": "api_16", "title": "Get stock profile", "kind": "builtin" }, { "id": "api_22", "title": "Get stock SEC filing", "kind": "builtin" }, { "id": "api_23", "title": "Get what analysts are saying of a stock", "kind": "builtin" } ] } statusUpdate Note that planStepId will be generated before stepId. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 { "id": "l5ckmcJ92qsBeEcPWdd517", "type": "statusUpdate", "timestamp": 1741060902886, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Creating a plan for Tesla stock analysis", "noRender": false, "planStepId": "E7Q4GDL3FsNrzRuv3Cb5Xa" } { "id": "JjrDxkPfwe54YWM2akBGEp", "type": "statusUpdate", "timestamp": 1741065081706, "agentStatus": "running", "brief": "Manus 正在运行", "description": "Manus 正在处理您的请求", "noRender": true, "planStepId": "jxqdGJWP8ipvTYx6Y4fCEZ" } { "id": "WLYbSvWSWXO94sQHJzLNlf", "type": "statusUpdate", "timestamp": 1741065742563, "agentStatus": "stopped", "brief": "Manus 已完成工作", "description": "Manus 已完成当前任务,并准备好接收新请求或修改。", "noRender": false, "planStepId": "qUIIRtCmzKhU9rXxeGIfpb" } toolUsed tool: “terminal”, “text_editor”, “search”, “browser” detail data should be used to show runtime outputs in “Manus’ computer” card terminal 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 { "id": "lxD5h6ztASqqdXXvJMoKcq", "type": "toolUsed", "timestamp": 1741060905794, "actionId": "toolu_014zqVgHFTWGj543mEUAmYnx", "tool": "terminal", "status": "success", "brief": "Manus 正在使用终端", "description": "已执行命令 `mkdir -p tesla_analysis && cd tesla_analysis && touch todo.md`", "message": { "action": "正在执行命令", "param": "mkdir -p tesla_analysis && cd tesla_analysis && touch todo.md" }, "detail": { "terminal": { "action": "execute", "finished": true, "shellId": "shell1", "command": "mkdir -p tesla_analysis && cd tesla_analysis && touch todo.md", "outputType": "append", "output": [ "\u001b[32mubuntu@sandbox:~ $\u001b[0m cd /home/ubuntu && mkdir -p tesla_analysis && cd tesla_analysis && touch todo.md\n\n\u001b[32mubuntu@sandbox:~/tesla_analysis $\u001b[0m" ] } }, "planStepId": "E7Q4GDL3FsNrzRuv3Cb5Xa" } text_editor 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 { "id": "g5UfojfdB2VhWIxwcvs6Uj", "type": "toolUsed", "timestamp": 1741060924172, "actionId": "toolu_01HjcgTGFBtBfZpRCKZRzZ32", "tool": "text_editor", "status": "success", "planStepId": "E7Q4GDL3FsNrzRuv3Cb5Xa", "brief": "Manus 正在使用文本编辑器", "description": "正在创建文件 `tesla_analysis/todo.md`", "message": { "action": "正在创建文件", "param": "tesla_analysis/todo.md" }, "detail": { "textEditor": { "action": "write", "path": "/home/ubuntu/tesla_analysis/todo.md", "content": "# Tesla Stock Analysis Todo List\n\n## 1. Create Todo List\n- [x] Create project directory structure\n- [x] Create todo.md file\n- [x] Outline all required analysis components\n\n## 2. Gather Tesla Company Overview\n- [ ] Collect basic company information (ticker, exchange, etc.)\n- [ ] Get company profile and business summary\n- [ ] Identify key executives and leadership team\n- [ ] Document company history and major milestones\n- [ ] Analyze business model and revenue streams\n\n## 3. Collect Tesla Financial Data\n- [ ] Retrieve historical stock price data\n- [ ] Analyze revenue trends over past 5 years\n- [ ] Calculate profit margins and profitability metrics\n- [ ] Examine balance sheet strength and liabilities\n- [ ] Analyze cash flow statements and free cash flow\n- [ ] Review capital expenditures and R&D investments\n\n## 4. Analyze Market Sentiment for Tesla\n- [ ] Gather recent analyst ratings and price targets\n- [ ] Collect analyst commentary and research reports\n- [ ] Analyze recent news impact on stock price\n- [ ] Review insider trading activity\n- [ ] Examine institutional ownership changes\n- [ ] Assess social media and retail investor sentiment\n\n## 5. Perform Technical Analysis on Tesla Stock\n- [ ] Create price charts for different time periods\n- [ ] Identify key support and resistance levels\n- [ ] Calculate and analyze moving averages\n- [ ] Evaluate momentum indicators (RSI, MACD, etc.)\n- [ ] Identify chart patterns and potential breakout points\n- [ ] Assess volume trends and distribution\n\n## 6. Compare Tesla with Competitors\n- [ ] Identify key competitors in EV and automotive space\n- [ ] Compare market share and growth rates\n- [ ] Analyze financial metrics relative to peers\n- [ ] Compare valuation multiples (P/E, P/S, EV/EBITDA)\n- [ ] Assess technological advantages and disadvantages\n- [ ] Evaluate manufacturing capacity and efficiency\n\n## 7. Calculate Intrinsic Value of Tesla\n- [ ] Apply discounted cash flow (DCF) model\n- [ ] Estimate future growth rates and margins\n- [ ] Calculate weighted average cost of capital (WACC)\n- [ ] Perform sensitivity analysis on key assumptions\n- [ ] Compare intrinsic value to current market price\n- [ ] Assess margin of safety for potential investors\n\n## 8. Develop Investment Thesis for Tesla\n- [ ] Conduct SWOT analysis (Strengths, Weaknesses, Opportunities, Threats)\n- [ ] Identify key growth drivers and catalysts\n- [ ] Assess major risk factors and potential headwinds\n- [ ] Develop bull case scenario and price target\n- [ ] Develop bear case scenario and price target\n- [ ] Create recommendations for different investor types\n\n## 9. Compile Comprehensive Tesla Stock Report\n- [ ] Write executive summary with key findings\n- [ ] Organize all analysis sections into cohesive report\n- [ ] Create visualizations for key metrics and trends\n- [ ] Format report with proper sections and references\n- [ ] Review and proofread final document\n\n## 10. Deliver Report to User\n- [ ] Finalize all report components\n- [ ] Ensure all analyses are complete and accurate\n- [ ] Package report with all supporting files\n- [ ] Deliver final report to user\n", "oldContent": "" } } } search 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 { "id": "ojMR1Nj4QG7x8YWJRZ3h97", "type": "toolUsed", "timestamp": 1741008399077, "actionId": "toolu_01DS3VkDNRcRRg77a3MmW8Qs", "tool": "search", "status": "success", "brief": "Manus 正在搜索网络", "description": "正在搜索 `pre-Series B American B2B AI companies startups`", "message": { "action": "正在搜索", "param": "pre-Series B American B2B AI companies startups" }, "detail": { "search": { "queries": [ "pre-Series B American B2B AI companies startups" ], "results": [ { "favicon": "TODO", "link": "https://explodingtopics.com/blog/ai-startups", "snippet": "Here are our picks for some of the most promising AI startups with a broad range of use cases across different industries.", "title": "60 Growing AI Companies & Startups (2025) - Exploding Topics" }, { "favicon": "TODO", "link": "https://topstartups.io/?industries=Artificial%20Intelligence", "snippet": "Top AI startups and new AI companies hiring now. Sort by valuation and recent funding. Funded by Sequoia, YC, A16Z, Benchmark - the very best.", "title": "Top 147 AI Startups 2025 | Funded by Sequoia, YC, A16Z" }, { "favicon": "TODO", "link": "https://www.ycombinator.com/companies/industry/ai", "snippet": "Browse 100 of the top AI startups funded by Y Combinator. We also have a Startup Directory where you can search through over 5,000 companies.", "title": "AI (Artificial Intelligence) Startups funded by Y Combinator (YC) 2025" }, { "favicon": "TODO", "link": "https://aimresearch.co/generative-ai/b2b-ai-startup-ceos-to-watch-in-the-u-s-in-2024", "snippet": "According to forecasts, around $87 billion in opportunities are projected to emerge in the AI sector for B2B companies this year, with ...", "title": "B2B AI Startup CEOs to Watch in the U.S. in 2024 - AIM Research" }, { "favicon": "TODO", "link": "https://growthlist.co/pre-seed-startups/", "snippet": "We compile startup data every week and have thousands of pre-seed funded startups in our database that we update every week.", "title": "List of Funded Pre-Seed Startups For 2025 - Growth List" }, { "favicon": "TODO", "link": "https://www.ycombinator.com/companies/industry/b2b", "snippet": "Browse 100 of the top B2B Software and Services startups funded by Y Combinator.", "title": "B2B Software and Services Startups funded by Y Combinator (YC ..." }, { "favicon": "TODO", "link": "https://startupsavant.com/startups-to-watch/ai", "snippet": "Take a look at the top AI startups entering the market today and learn about the investors, funding amounts, and founders who are changing the world.", "title": "43 Top AI Startups to Watch in 2025 | TRUiC" }, { "favicon": "TODO", "link": "https://www.pymnts.com/artificial-intelligence-2/2025/snowflake-plans-ai-hub-and-200-million-in-startup-investments/", "snippet": "Data cloud company Snowflake says it is opening a new Silicon Valley “AI hub” designed to support artificial intelligence startups.", "title": "Snowflake Plans 'AI Hub' and $200 Million in Startup Investments" }, { "favicon": "TODO", "link": "https://www.whoraised.io/saas-startups/artificial-intelligence-saas-startups", "snippet": "Here is a list of 152 SaaS Startups in the Artificial Intelligence Industry. We explore each business including funding, investors and company profile.", "title": "152 SaaS Startups in the Artificial Intelligence Industry | who raised?" }, { "favicon": "TODO", "link": "https://www.seedtable.com/best-ai-startups", "snippet": "Discover Fast-growing Global startups ... Seedtable uses technology and people to track over 71,000 companies to help you find the right ones to partner with.", "title": "69 Best Ai Startups to Watch in 2025 - Seedtable" }, { "favicon": "TODO", "link": "https://www.netguru.com/blog/generative-ai-startups", "snippet": "We've curated this list of 31 promising generative AI startups from different categories and markets.", "title": "30 Remarkable Generative AI Startups You Simply Can't Ignore" }, { "favicon": "TODO", "link": "https://news.crunchbase.com/ai/startup-billion-dollar-fundraisers-openai-anthropic/", "snippet": "There were at least 23 private, AI-focused startups funded in the past couple years that have raised over $1 billion in equity financing to date.", "title": "These Are The AI Startups That Raised Over $1B - Crunchbase News" }, { "favicon": "TODO", "link": "https://aventis-advisors.com/ai-valuation-multiples/", "snippet": "We reviewed all the funding rounds by AI companies across the globe in the period between 2010 and September 2024.", "title": "AI Valuation Multiples 2024 - Aventis Advisors" }, { "favicon": "TODO", "link": "https://www.startupblink.com/blog/ai-accelerators-incubators-and-startup-programs/", "snippet": "Explore our list of AI accelerators, incubators, and startup programs offering funding, mentorship, and resources to help AI startups grow ...", "title": "Top 20 AI Accelerators, Incubators & Startup Programs - StartupBlink" }, { "favicon": "TODO", "link": "https://www.digitalocean.com/resources/articles/startup-funding-series-a-b-c", "snippet": "In fact, the median Series B startup has a pre-money valuation of $40 million. Series B funding is mostly used for scale — not development.", "title": "Startup funding explained: Series A, Series B, Series C | DigitalOcean" }, { "favicon": "TODO", "link": "https://growthrocks.com/blog/ai-startups/", "snippet": "The Top 15 AI Startups to Keep Eye on in 2024 · 1. ElevenLabs [AI voice generator] · 2. Krutrim [AI computing] · 3. DataSnipper [intelligent ...", "title": "The Top 15 AI Startups to Keep Eye on in 2024 - GrowthRocks" }, { "favicon": "TODO", "link": "https://topstartups.io/?funding_round=Series%20A", "snippet": "Top Series A startups hiring now. Sort by valuation and recent funding. Research Series A startup salary and equity.", "title": "Top Series A Startups 2025 — Sequoia, YC, A16Z, Benchmark" }, { "favicon": "TODO", "link": "https://www.datamation.com/artificial-intelligence/ai-companies/", "snippet": "The top AI companies are leading the way in developing and deploying cutting-edge artificial intelligence applications across nearly every sector.", "title": "100 Top AI Companies Trendsetting In 2024 - Datamation" }, { "favicon": "TODO", "link": "https://visible.vc/blog/startup-funding-stages/", "snippet": "How to Acquire Pre-Seed Funding? Raising a pre-seed round mirrors a traditional B2B sales process. You will be talking and adding investors ...", "title": "The Ultimate Guide to Startup Funding Stages - Visible.vc" }, { "favicon": "TODO", "link": "https://en.wikipedia.org/wiki/List_of_unicorn_startup_companies", "snippet": "This is a list of unicorn startup companies. In finance, a unicorn is a privately held startup company with a current valuation of US$1 billion or more.", "title": "List of unicorn startup companies - Wikipedia" }, { "favicon": "TODO", "link": "https://www.digitalocean.com/resources/articles/startup-funding-series-a-b-c", "snippet": "What is Series B? Most Series A funding is expected to last 12 to 18 months. If a company still needs funds after this period to dominate its market, it can go through Series B funding. By the point a startup gets to Series B funding, it's already successful. However, this success isn't necessarily measured in profits.", "title": "Startup funding explained: Series A, Series B, Series C | DigitalOcean" }, { "favicon": "TODO", "link": "https://explodingtopics.com/blog/ai-startups", "snippet": "HERE ARE OUR PICKS FOR SOME OF THE MOST PROMISING AI STARTUPS WITH A BROAD RANGE OF USE CASES ACROSS DIFFERENT INDUSTRIES.\n1\nDeepL. 5-year search growth: 258% ...\n2\nFrame AI. 5-year search growth: 1,900% ...\n3\nUizard. 5-year search growth: 3,233% ...\n4\nMoveworks. 5-year search growth: 296% ...\n5\nDatabricks. ...\n6\nSynthesia. ...\n7\nCodeium. ...\n8\nCohere.", "title": "60 Growing AI Companies & Startups (2025) - Exploding Topics" }, { "favicon": "TODO", "link": "https://ascendixtech.com/how-many-ai-companies-are-there/", "snippet": "How Many AI Startups Are There? According to Stanford's 2024 AI Index Report, there are approximately 10,095 AI startups across the top ten countries leading in artificial intelligence innovation. The United States dominates the field with 5,509 AI startups, accounting for more than half of this total.", "title": "How Many AI Companies Are There in the World? [2024] - Ascendix Tech" } ] } }, "planStepId": "5JipVHomfozTx0oN3E9tdH" } browser 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 { "id": "CXm1fugpdRdl6JKocCWnRR", "type": "toolUsed", "timestamp": 1740980974476, "actionId": "toolu_01P9z6gShaD7Y6jUZD8LXfzL", "tool": "browser", "status": "success", "brief": "Manus 正在使用浏览器", "description": "正在浏览 `https://karpathy.ai/`", "message": { "action": "正在浏览", "param": "https://karpathy.ai/" }, "detail": { "browser": { "url": "https://karpathy.ai/", "screenshot": "https://private-us-east-1.manuscdn.com/sessionFile/AWssWxITcsrl70js5L8LgU/browserScreenshots/5iFPa0Xhs9IAzHuKf7ByKD_1740980970271_na1fn_Y2xlYW4.webp?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQVdzc1d4SVRjc3JsNzBqczVMOExnVS9icm93c2VyU2NyZWVuc2hvdHMvNWlGUGEwWGhzOUlBekh1S2Y3QnlLRF8xNzQwOTgwOTcwMjcxX25hMWZuX1kyeGxZVzQud2VicCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5Mzg4MX19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=wHW~YsIRLSrIuv~Pi8AdnL9bm2M9~rKqH0iT9cE9QY-pmK-MVSIIxm1ohvb8nMo0TYbilkMSVL-00Pf40IGZr4rlpKxd2mG3RqrZ7UwmuCp97jN999EBSBr-Ep1dqbKIDPKyVD0rdMsGgqWwfWv~ukGgTFU0~mlnRLkaRVxmJctEoNqdMiKEO7gnuUCzaiG-9n0cFZ1HZlSOGUVt4jKjVQyvulp~5Y-UH8NmKIL~qeP-v0VkyXnpsp~QF1v1LkOVm66xCnE99kwWlKKB5RBcXFUA5dsQruJ2AJOX4pEAEg7wKWeU59cbMWlgRKjrM2P6cbFaKO4dRBCJAik7Uk7OYw__" } }, "planStepId": "3mPWD1nYK6JeimtDwK4N6e" } { "id": "3olVNF5YnNYm7oK5hsTeQy", "type": "toolUsed", "timestamp": 1740981189108, "actionId": "toolu_01HMaehhr62BUTN5dqhHyaGy", "tool": "browser", "status": "success", "brief": "Manus 正在使用浏览器", "description": "运行 JavaScript: `// Check for canonical tags\nconst canonicalLink = document.querySelector('link[rel=\"canonical\"]');\nconst canonicalUrl = canonicalLink ? canonicalLink.href : 'No canonical URL found';\n\n// Check for schema markup\nconst schemaScripts = document.querySelectorAll('script[type=\"application/ld+json\"]');\nconst schemaData = Array.from(schemaScripts).map(script => script.textContent);\n\n// Check for SSL implementation\nconst isSSL = window.location.protocol === 'https:';\n\n// Analyze internal linking structure\nconst internalLinks = Array.from(document.getElementsByTagName('a'))\n .filter(a => a.href.includes('karpathy.ai'))\n .map(a => ({\n text: a.textContent.trim(),\n href: a.href\n }));\n\n// Check for duplicate content\nconst h1Tags = document.getElementsByTagName('h1');\nconst h1Count = h1Tags.length;\n\n// Check for hreflang tags\nconst hreflangTags = document.querySelectorAll('link[rel=\"alternate\"][hreflang]');\nconst hreflangData = Array.from(hreflangTags).map(tag => ({\n hreflang: tag.getAttribute('hreflang'),\n href: tag.getAttribute('href')\n}));\n\n// Return all collected data\nJSON.stringify({\n canonicalUrl,\n schemaData,\n isSSL,\n internalLinks,\n h1Count,\n hreflangData\n}, null, 2);`", "message": { "action": "正在运行 JavaScript", "param": "// Check for canonical tags\nconst canonicalLink = document.querySelector('link[rel=\"canonical\"]');\nc..." }, "detail": { "browser": { "url": "https://karpathy.ai/sitemap.xml", "screenshot": "https://private-us-east-1.manuscdn.com/sessionFile/AWssWxITcsrl70js5L8LgU/browserScreenshots/8ok3S2fztznd3xXXAckWuU_1740981186961_na1fn_Y2xlYW4.webp?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQVdzc1d4SVRjc3JsNzBqczVMOExnVS9icm93c2VyU2NyZWVuc2hvdHMvOG9rM1MyZnp0em5kM3hYWEFja1d1VV8xNzQwOTgxMTg2OTYxX25hMWZuX1kyeGxZVzQud2VicCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5Mzg4MX19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=a5f63042KYtlkK0EBZ~6wchQhFIyF3UPznX5BwyRhOTkBKqIxpccQKwfA61Mjoh7G3olaAEnMoKY8V33yppQqh~XtqhDH4Zi9WhhvPjvsT1x3kEUi~TsNAPWAyquTsevwp8AnN3FNvji6W5LejYf3FPqYrwDxQ3CovabG66gTymBPuDH6xRPpTMZJ3e5V6dJpUeFvfme2P83lMfOocPanb6oVUjuI5NbFtPlfrBCdZ1viRbW7nsJ17cva8xnLMhdGvSDiZgpjR3cR8JQgWIduGS6~OGYDEWJjWbSLzruXCSfMKgISIRKu8p3I-r1V92FdPnf3ibZEFO0DWvc5t-cEg__" } }, "planStepId": "zIMD9AzOodmLihMIWvrfau" } { "id": "HWODKdCH1qsyTRRqfBr9Rv", "type": "toolUsed", "timestamp": 1740981300966, "actionId": "toolu_01JbRvGTd1ZZqro7x9cG7fyp", "tool": "browser", "status": "success", "brief": "Manus 正在使用浏览器", "description": "向下滚动", "message": { "action": "向下滚动" }, "detail": { "browser": { "url": "https://karpathy.ai/sitemap.xml", "screenshot": "https://private-us-east-1.manuscdn.com/sessionFile/AWssWxITcsrl70js5L8LgU/browserScreenshots/NtlzbhabiafX6YzkUV4IPW_1740981297970_na1fn_Y2xlYW4.webp?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvQVdzc1d4SVRjc3JsNzBqczVMOExnVS9icm93c2VyU2NyZWVuc2hvdHMvTnRsemJoYWJpYWZYNll6a1VWNElQV18xNzQwOTgxMjk3OTcwX25hMWZuX1kyeGxZVzQud2VicCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5Mzg4MX19fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=vp3ct3QZMgwNEexJpMuxZ-PHgPnBjrwhD2jG6A10X11vOy7bfEbvF8eVJW~6diSn1hqnOFKVeOP0-dtbA81KCYQoWnEJlKzPXjQOF3JSoNKSfByCtCtmGOaeFony-4RFvgLhIXFo5YRlXK3yqOjLPHJ61ZjDtv8ubH8nKXiQR7EpgFCkEdY~UYCy6G5mpOBRO8SRF2PDvkjbnHaMLhKsR1ktX-A1KHfrnCipV7u4sxz-~8wtNlVpI195iFT0P1zxoG8SYoFUMdPojuqM3HZm2vRhPK8WoDYGfT9UslFNOrzVLMEu0oT0~ngIyS3LdoMstGATwB4jg4b9WJMkD7yYOw__" } }, "planStepId": "aEN75n7TG4G4jQIa3Wcq6w" } { "id": "TQdH6uiDxug1mvfuax1wev", "type": "toolUsed", "timestamp": 1741008567997, "actionId": "toolu_01KMrkUjZRaNwYtYszogRu3S", "tool": "browser", "status": "success", "brief": "Manus 正在使用浏览器", "description": "点击索引为 `17` 的元素", "message": { "action": "正在点击元素" }, "detail": { "browser": { "url": "https://topstartups.io/?industries=Artificial%20Intelligence", "screenshot": "https://private-us-east-1.manuscdn.com/sessionFile/YIRZaLUfghVxGCN7dE6hbI/browserScreenshots/4krQb4zV8cVF2C2ZBHqGd5_1741008563479_na1fn_Y2xlYW4.webp?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9wcml2YXRlLXVzLWVhc3QtMS5tYW51c2Nkbi5jb20vc2Vzc2lvbkZpbGUvWUlSWmFMVWZnaFZ4R0NON2RFNmhiSS9icm93c2VyU2NyZWVuc2hvdHMvNGtyUWI0elY4Y1ZGMkMyWkJIcUdkNV8xNzQxMDA4NTYzNDc5X25hMWZuX1kyeGxZVzQud2VicCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc0MzQ5NDM4M319fV19&Key-Pair-Id=K2HSFNDJXOU9YS&Signature=fGPk7NotNLYyve10v9CMq~3k~B-QXeWQ8m17S9276KOpqNcv5cFnhVPHn2F08j-EQVWWJPyNqnVoHgmZ22p5YdmG1DC1wGKmRwzwMZ41-mFGW-W2kdSYRi9I3Ha9uPP23ZpgR1HPLDu-wOAKQzhPZCX1Mx0F8y-2qrJVmLqeAyaELm6Pvlk7cZzSGF~W5hJptHx7xdfARXLWV-gtKU~XtCu5ZdIZfutyjryGPiV8xIknpTyFvPfR~MCypNWMAXY2tR3MAmV1x3r~F7CWj5JV44kpYZrTPI-maPUtnkoxXnt7oLXFNUAHFYamBq86uo8C5ZNjTa9Q5D25nlbSicp8uw__" } }, "planStepId": "crQ9ZsB23l5MN7IYhwOnSx" } { "id": "AUsLw5l0nxo5Qwa4jZhZQM", "type": "toolUsed", "timestamp": 1741009272646, "actionId": "toolu_014ymijbAfUVMC9RFfPht8oA", "tool": "browser", "status": "error", "brief": "Manus 正在使用浏览器", "description": "browser:Error executing action browser_navigate: Page.goto: net::ERR_EMPTY_RESPONSE at http://8000-i5hfldcpydtx82vqb7cu1-226a4af3.manus.computer/\nCall log:\n - navigating to \"http://8000-i5hfldcpydtx82vqb7cu1-226a4af3.manus.computer/\", waiting until \"commit\"\n", "message": { "action": "正在处理浏览器错误" }, "planStepId": "iSOY2zdYOeyP0kAWNHrDLF" } planUpdate status: “doing”, “todo”, “done” endAt for “done” status task It seems that this event will be emitted after a toolUsed or newPlanStep event. tasks list in planUpdate event will be appended after user asked a new question. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 { "id": "XrXQO9oRo34MYtstDRLZwE", "type": "planUpdate", "timestamp": 1741060908470, "tasks": [ { "id": "step_001", "title": "Create comprehensive Tesla stock analysis task list", "status": "doing", "startedAt": 1741060908465 }, { "id": "step_002", "title": "Gather Tesla company overview and key information", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_003", "title": "Collect and analyze Tesla's financial data", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_004", "title": "Evaluate market sentiment for Tesla", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_005", "title": "Perform technical analysis on Tesla stock", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_006", "title": "Compare Tesla with key industry competitors", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_007", "title": "Calculate intrinsic value of Tesla stock", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_008", "title": "Develop comprehensive investment thesis", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_009", "title": "Compile detailed Tesla stock analysis report", "status": "todo", "startedAt": 1741060908465 }, { "id": "step_010", "title": "Deliver comprehensive stock analysis to user", "status": "todo", "startedAt": 1741060908465 } ] } newPlanStep stepId instead of planStepId in data, which will wrap the steps like this: newPlanStep seems to be the flag to indicate next step is beginning. (Guess the step status is also controlled by this.) 1 2 3 4 5 6 7 { "id": "4UHAXLMlsuovhOWGm6WBzB", "type": "newPlanStep", "timestamp": 1741060902693, "title": "Create comprehensive Tesla stock analysis task list", "stepId": "E7Q4GDL3FsNrzRuv3Cb5Xa" } knowledgeSuggested 1 2 3 4 5 6 7 8 9 10 11 { "id": "Gg74U4LDSvOC4x1wGDW1IL", "type": "knowledgeSuggested", "timestamp": 1741064324520, "brief": "建议的新知识", "resources": [ { "title": "Tesla stock analysis dashboard creation" } ] } A steps collection of plan statusUpdate and toolUsed events searched by a same planStepId . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 [ { "id": "wQ0tsoHiqVskSwU9Ud93sA", "type": "statusUpdate", "timestamp": 1741061972527, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Moving to analyze market sentiment for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "XYu58JLESxdSecDmgKLeJi", "type": "newPlanStep", "timestamp": 1741061972511, "title": "Evaluate market sentiment for Tesla", "stepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "ooZqdunPTMjCQY1WZe75mY", "type": "statusUpdate", "timestamp": 1741061994707, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Analyzing market sentiment for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "dH95W9Qz9mwR9Xd9Vh029D", "type": "toolUsed", "timestamp": 1741062198875, "actionId": "toolu_01PbZbqkKu517na1HvYTWsZu", "tool": "terminal", "status": "success", "brief": "Manus 正在使用终端", "description": "已执行命令 `cd /home/ubuntu/tesla_analysis/data && touch tesla_market_sentiment.py`", "message": { "action": "正在执行命令", "param": "cd /home/ubuntu/tesla_analysis/data && touch tesla_market_sentiment.py" }, "detail": { "terminal": { "action": "execute", "finished": true, "shellId": "shell2", "command": "cd /home/ubuntu/tesla_analysis/data && touch tesla_market_sentiment.py", "outputType": "append", "output": [ "\u001b[32mubuntu@sandbox:~/tesla_analysis/data $\u001b[0m cd /home/ubuntu/tesla_analysis/data && cd /home/ubuntu/tesla_analysis/data && touch tesla_market_sentiment.py\n\n\u001b[32mubuntu@sandbox:~/tesla_analysis/data $\u001b[0m" ] } }, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "kp9yBKsz4TVgQn8oNtp8wD", "type": "statusUpdate", "timestamp": 1741062306008, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Analyzing market sentiment for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "5sP3g1brITVABMTqR6WwgC", "type": "toolUsed", "timestamp": 1741062396685, "actionId": "toolu_01BRfXbq4SLzWftS4fjUBLCM", "tool": "text_editor", "status": "success", "planStepId": "7galTGLGCzryoM1tSeM1YR", "brief": "Manus 正在使用文本编辑器", "description": "正在创建文件 `tesla_analysis/data/tesla_market_sentiment.py`", "message": { "action": "正在创建文件", "param": "tesla_analysis/data/tesla_market_sentiment.py" }, "detail": { "textEditor": { "action": "write", "path": "/home/ubuntu/tesla_analysis/data/tesla_market_sentiment.py", "content": "import sys\nsys.path.append('/opt/.manus/.sandbox-runtime')\nfrom data_api import ApiClient\nimport json\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom datetime import datetime\nimport os\nimport re\nfrom collections import Counter\n\n# Initialize API client\n<response clipped><NOTE>To save on context only part of this file has been shown to you. You should retry this tool after you have searched inside the file with `grep -n` in order to find the line numbers of what you are looking for.</NOTE>", "oldContent": "" } } }, { "id": "Rsk8LFoezHv2npHjVCwlRo", "type": "statusUpdate", "timestamp": 1741062403749, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Analyzing market sentiment for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "IoPrLfFwxxO3VuwnBLogJO", "type": "toolUsed", "timestamp": 1741062438389, "actionId": "toolu_0115Z943k9mQYDZgPT2vp46Q", "tool": "terminal", "planStepId": "7galTGLGCzryoM1tSeM1YR", "status": "success", "brief": "Manus 正在使用终端", "message": { "action": "正在执行命令", "param": "cd /home/ubuntu/tesla_analysis/data && python3 tesla_market_sentiment.py" }, "description": "执行命令 `cd /home/ubuntu/tesla_analysis/data && python3 tesla_market_sentiment.py` 并等待了 `30` 秒", "detail": { "terminal": { "action": "execute", "finished": false, "shellId": "shell2", "command": "cd /home/ubuntu/tesla_analysis/data && python3 tesla_market_sentiment.py", "outputType": "append", "output": ["(No output from terminal)"] } } }, { "id": "dg1mAnR7Mpxs7R2oVY4czy", "type": "statusUpdate", "timestamp": 1741062544145, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Analyzing market sentiment for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "aRArJ9xWzOlLzzUUh4cmFM", "type": "toolUsed", "timestamp": 1741062548731, "actionId": "toolu_01Q8eFq4SuY8icHma6NNc9B4", "tool": "terminal", "status": "success", "brief": "Manus 正在使用终端", "description": "已执行命令 `cd /home/ubuntu/tesla_analysis/data && ls -la`", "message": { "action": "正在执行命令", "param": "cd /home/ubuntu/tesla_analysis/data && ls -la" }, "detail": { "terminal": { "action": "execute", "finished": true, "shellId": "shell3", "command": "cd /home/ubuntu/tesla_analysis/data && ls -la", "outputType": "append", "output": [ "\u001b[32mubuntu@sandbox:~ $\u001b[0m cd /home/ubuntu/tesla_analysis/data && cd /home/ubuntu/tesla_analysis/data && ls -la\ntotal 660\ndrwxrwxr-x 2 ubuntu ubuntu 4096 Mar 3 14:38 \u001b[0m\u001b[01;34m.\u001b[0m\ndrwxrwxr-x 4 ubuntu ubuntu 4096 Mar 3 14:25 \u001b[01;34m..\u001b[0m\n-rw-rw-r-- 1 ubuntu ubuntu 174 Mar 3 14:38 tesla_analyst_reports_raw.json\n-rw-rw-r-- 1 ubuntu ubuntu 1675 Mar 3 14:20 tesla_business_model.json\n-rw-rw-r-- 1 ubuntu ubuntu 1166 Mar 3 14:20 tesla_business_model.txt\n-rw-rw-r-- 1 ubuntu ubuntu 2404 Mar 3 14:18 tesla_company_profile.py\n-rw-rw-r-- 1 ubuntu ubuntu 1848 Mar 3 14:18 tesla_company_profile.txt\n-rw-rw-r-- 1 ubuntu ubuntu 12466 Mar 3 14:29 tesla_financial_analysis.py\n-rw-rw-r-- 1 ubuntu ubuntu 3744 Mar 3 14:30 tesla_financial_analysis.txt\n-rw-rw-r-- 1 ubuntu ubuntu 232 Mar 3 14:25 tesla_financial_metrics.json\n-rw-rw-r-- 1 ubuntu ubuntu 1548 Mar 3 14:29 tesla_financial_metrics_detailed.json\n-rw-rw-r-- 1 ubuntu ubuntu 287 Mar 3 14:25 tesla_financial_summary.txt\n-rw-rw-r-- 1 ubuntu ubuntu 21753 Mar 3 14:25 tesla_historical_prices.csv\n-rw-rw-r-- 1 ubuntu ubuntu 1741 Mar 3 14:20 tesla_history.json\n-rw-rw-r-- 1 ubuntu ubuntu 945 Mar 3 14:20 tesla_history.txt\n-rw-rw-r-- 1 ubuntu ubuntu 8602 Mar 3 14:38 tesla_holders_raw.json\n-rw-rw-r-- 1 ubuntu ubuntu 216917 Mar 3 14:38 tesla_insights_raw.json\n-rw-rw-r-- 1 ubuntu ubuntu 891 Mar 3 14:20 tesla_leadership.json\n-rw-rw-r-- 1 ubuntu ubuntu 8480 Mar 3 14:20 tesla_leadership.py\n-rw-rw-r-- 1 ubuntu ubuntu 443 Mar 3 14:20 tesla_leadership.txt\n-rw-rw-r-- 1 ubuntu ubuntu 21364 Mar 3 14:38 tesla_market_sentiment.py\n-rw-rw-r-- 1 ubuntu ubuntu 3150 Mar 3 14:38 tesla_market_sentiment.txt\n-rw-rw-r-- 1 ubuntu ubuntu 2579 Mar 3 14:18 tesla_profile_raw.json\n-rw-rw-r-- 1 ubuntu ubuntu 126156 Mar 3 14:38 tesla_sec_filings_raw.json\n-rw-rw-r-- 1 ubuntu ubuntu 6083 Mar 3 14:38 tesla_sentiment_data.json\n-rw-rw-r-- 1 ubuntu ubuntu 6926 Mar 3 14:23 tesla_stock_data.py\n-rw-rw-r-- 1 ubuntu ubuntu 9321 Mar 3 14:25 tesla_stock_data_raw_1mo.json\n-rw-rw-r-- 1 ubuntu ubuntu 20505 Mar 3 14:25 tesla_stock_data_raw_1y.json\n-rw-rw-r-- 1 ubuntu ubuntu 60 Mar 3 14:25 tesla_stock_data_raw_5y.json\n-rw-rw-r-- 1 ubuntu ubuntu 43112 Mar 3 14:25 tesla_stock_data_raw_6mo.json\n-rw-rw-r-- 1 ubuntu ubuntu 62875 Mar 3 14:25 tesla_stock_data_raw_max.json\n-rw-rw-r-- 1 ubuntu ubuntu 182 Mar 3 14:38 tesla_twitter_raw.json\n\u001b[32mubuntu@sandbox:~/tesla_analysis/data $\u001b[0m" ] } }, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "FWT7evw7q3d78b0ordJp58", "type": "statusUpdate", "timestamp": 1741062614593, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Completing market sentiment analysis for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "oU4CahZLkVztLlRx78Mho6", "type": "toolUsed", "timestamp": 1741062614950, "actionId": "toolu_01QsGKEkNeUoZFWoyiFaiUX1", "tool": "terminal", "status": "success", "brief": "Manus 正在使用终端", "description": "已执行命令 `cd /home/ubuntu/tesla_analysis/charts && ls -la`", "message": { "action": "正在执行命令", "param": "cd /home/ubuntu/tesla_analysis/charts && ls -la" }, "detail": { "terminal": { "action": "execute", "finished": true, "shellId": "shell3", "command": "cd /home/ubuntu/tesla_analysis/charts && ls -la", "outputType": "append", "output": [ "\u001b[32mubuntu@sandbox:~/tesla_analysis/data $\u001b[0m cd /home/ubuntu/tesla_analysis && cd /home/ubuntu/tesla_analysis/charts && ls -la\ntotal 252\ndrwxrwxr-x 2 ubuntu ubuntu 4096 Mar 3 14:38 \u001b[0m\u001b[01;34m.\u001b[0m\ndrwxrwxr-x 4 ubuntu ubuntu 4096 Mar 3 14:25 \u001b[01;34m..\u001b[0m\n-rw-rw-r-- 1 ubuntu ubuntu 30300 Mar 3 14:30 tesla_capital_structure.png\n-rw-rw-r-- 1 ubuntu ubuntu 44464 Mar 3 14:30 tesla_cash_flow_analysis.png\n-rw-rw-r-- 1 ubuntu ubuntu 47609 Mar 3 14:25 tesla_historical_price.png\n-rw-rw-r-- 1 ubuntu ubuntu 61140 Mar 3 14:30 tesla_profitability_margins.png\n-rw-rw-r-- 1 ubuntu ubuntu 32821 Mar 3 14:30 tesla_revenue_growth.png\n-rw-rw-r-- 1 ubuntu ubuntu 23416 Mar 3 14:38 tesla_technical_outlook.png\n\u001b[32mubuntu@sandbox:~/tesla_analysis/charts $\u001b[0m" ] } }, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "sPndWS5ngDLS0XuGHYep6N", "type": "statusUpdate", "timestamp": 1741062620453, "agentStatus": "running", "brief": "Manus 正在工作", "description": "Completing market sentiment analysis for Tesla", "noRender": false, "planStepId": "7galTGLGCzryoM1tSeM1YR" }, { "id": "FpA1ynrLVk70PPIjM3RGKA", "type": "toolUsed", "timestamp": 1741062626134, "actionId": "toolu_01F7XnUyYY9SXZYnLS4xmMPV", "tool": "text_editor", "status": "success", "planStepId": "7galTGLGCzryoM1tSeM1YR", "brief": "Manus 正在使用文本编辑器", "description": "编辑文件 `tesla_analysis/todo.md`", "message": { "action": "正在编辑文件", "param": "tesla_analysis/todo.md" }, "detail": { "textEditor": { "action": "update", "path": "/home/ubuntu/tesla_analysis/todo.md", "content": "# Tesla Stock Analysis Todo List\n\n## 1. Create Todo List\n- [x] Create project directory structure\n- [x] Create todo.md file\n- [x] Outline all required analysis components\n\n## 2. Gather Tesla Company Overview\n- [x] Collect basic company information (ticker, exchange, etc.)\n- [x] Get company profile and business summary\n- [x] Identify key executives and leadership team\n- [x] Document company history and major milestones\n- [x] Analyze business model and revenue streams\n\n## 3. Collect Tesla Financial Data\n- [x] Retrieve historical stock price data\n- [x] Analyze revenue trends over past 5 years\n- [x] Calculate profit margins and profitability metrics\n- [x] Examine balance sheet strength and liabilities\n- [x] Analyze cash flow statements and free cash flow\n- [x] Review capital expenditures and R&D investments\n\n## 4. Analyze Market Sentiment for Tesla\n- [x] Gather recent analyst ratings and price targets\n- [x] Collect analyst commentary and research reports\n- [x] Analyze recent news impact on stock price\n- [x] Review insider trading activity\n- [x] Examine institutional ownership changes\n- [x] Assess social media and retail investor sentiment\n\n## 5. Perform Technical Analysis on Tesla Stock\n- [ ] Create price charts for different time periods\n- [ ] Identify key support and resistance levels\n- [ ] Calculate and analyze moving averages\n- [ ] Evaluate momentum indicators (RSI, MACD, etc.)\n- [ ] Identify chart patterns and potential breakout points\n- [ ] Assess volume trends and distribution\n\n## 6. Compare Tesla with Competitors\n- [ ] Identify key competitors in EV and automotive space\n- [ ] Compare market share and growth rates\n- [ ] Analyze financial metrics relative to peers\n- [ ] Compare valuation multiples (P/E, P/S, EV/EBITDA)\n- [ ] Assess technological advantages and disadvantages\n- [ ] Evaluate manufacturing capacity and efficiency\n\n## 7. Calculate Intrinsic Value of Tesla\n- [ ] Apply discounted cash flow (DCF) model\n- [ ] Estimate future growth rates and margins\n- [ ] Calculate weighted average cost of capital (WACC)\n- [ ] Perform sensitivity analysis on key assumptions\n- [ ] Compare intrinsic value to current market price\n- [ ] Assess margin of safety for potential investors\n\n## 8. Develop Investment Thesis for Tesla\n- [ ] Conduct SWOT analysis (Strengths, Weaknesses, Opportunities, Threats)\n- [ ] Identify key growth drivers and catalysts\n- [ ] Assess major risk factors and potential headwinds\n- [ ] Develop bull case scenario and price target\n- [ ] Develop bear case scenario and price target\n- [ ] Create recommendations for different investor types\n\n## 9. Compile Comprehensive Tesla Stock Report\n- [ ] Write executive summary with key findings\n- [ ] Organize all analysis sections into cohesive report\n- [ ] Create visualizations for key metrics and trends\n- [ ] Format report with proper sections and references\n- [ ] Review and proofread final document\n\n## 10. Deliver Report to User\n- [ ] Finalize all report components\n- [ ] Ensure all analyses are complete and accurate\n- [ ] Package report with all supporting files\n- [ ] Deliver final report to user\n", "oldContent": "# Tesla Stock Analysis Todo List\n\n## 1. Create Todo List\n- [x] Create project directory structure\n- [x] Create todo.md file\n- [x] Outline all required analysis components\n\n## 2. Gather Tesla Company Overview\n- [x] Collect basic company information (ticker, exchange, etc.)\n- [x] Get company profile and business summary\n- [x] Identify key executives and leadership team\n- [x] Document company history and major milestones\n- [x] Analyze business model and revenue streams\n\n## 3. Collect Tesla Financial Data\n- [x] Retrieve historical stock price data\n- [x] Analyze revenue trends over past 5 years\n- [x] Calculate profit margins and profitability metrics\n- [x] Examine balance sheet strength and liabilities\n- [x] Analyze cash flow statements and free cash flow\n- [x] Review capital expenditures and R&D investments\n\n## 4. Analyze Market Sentiment for Tesla\n- [ ] Gather recent analyst ratings and price targets\n- [ ] Collect analyst commentary and research reports\n- [ ] Analyze recent news impact on stock price\n- [ ] Review insider trading activity\n- [ ] Examine institutional ownership changes\n- [ ] Assess social media and retail investor sentiment\n\n## 5. Perform Technical Analysis on Tesla Stock\n- [ ] Create price charts for different time periods\n- [ ] Identify key support and resistance levels\n- [ ] Calculate and analyze moving averages\n- [ ] Evaluate momentum indicators (RSI, MACD, etc.)\n- [ ] Identify chart patterns and potential breakout points\n- [ ] Assess volume trends and distribution\n\n## 6. Compare Tesla with Competitors\n- [ ] Identify key competitors in EV and automotive space\n- [ ] Compare market share and growth rates\n- [ ] Analyze financial metrics relative to peers\n- [ ] Compare valuation multiples (P/E, P/S, EV/EBITDA)\n- [ ] Assess technological advantages and disadvantages\n- [ ] Evaluate manufacturing capacity and efficiency\n\n## 7. Calculate Intrinsic Value of Tesla\n- [ ] Apply discounted cash flow (DCF) model\n- [ ] Estimate future growth rates and margins\n- [ ] Calculate weighted average cost of capital (WACC)\n- [ ] Perform sensitivity analysis on key assumptions\n- [ ] Compare intrinsic value to current market price\n- [ ] Assess margin of safety for potential investors\n\n## 8. Develop Investment Thesis for Tesla\n- [ ] Conduct SWOT analysis (Strengths, Weaknesses, Opportunities, Threats)\n- [ ] Identify key growth drivers and catalysts\n- [ ] Assess major risk factors and potential headwinds\n- [ ] Develop bull case scenario and price target\n- [ ] Develop bear case scenario and price target\n- [ ] Create recommendations for different investor types\n\n## 9. Compile Comprehensive Tesla Stock Report\n- [ ] Write executive summary with key findings\n- [ ] Organize all analysis sections into cohesive report\n- [ ] Create visualizations for key metrics and trends\n- [ ] Format report with proper sections and references\n- [ ] Review and proofread final document\n\n## 10. Deliver Report to User\n- [ ] Finalize all report components\n- [ ] Ensure all analyses are complete and accurate\n- [ ] Package report with all supporting files\n- [ ] Deliver final report to user\n" } } } ]

2025/3/21
articleCard.readMore

Qwen2.5 vs. GPT-4o - Unlocking Coding Potential with Cline

Key Takeaways: The locally deployed open-source model Qwen2.5-72B outperforms GPT-4o with Cline. A more general instruction-tuned model is preferable over coding/math-specific versions when using Cline. Improvements in model performance could enhance other tools, such as OpenHands, which I plan to try next. Exploring the Coding Agent Landscape Recently, one of the hottest topics has been coding agents. Our team explored the Cursor and Windsurf editors (both forks of VS Code) and found them to be amazing! Their capabilities, including code quality, response speed, automation, and less human feedback, are superior to the GitHub Copilot extension on VS Code. It’s not surprising that Cursor and Windsurf can easily outperform GitHub Copilot (and Cline + GPT-4o which I’ll introduce soon), as these products have comprehensive optimizations, including post-trained models, customized prompts, RAG, etc. However, they also come with privacy and security risks. To adopt a coding assistant while meeting compliance requirements, the Cline extension with the GPT-4o service provided by Azure AI is an excellent option. We are grateful for the leadership team’s encouragement and support in utilizing this tool. My Short Journey with Cline + AOAI GPT-4o I started using Cline + AOAI GPT-4o to replace Cursor right after the callout email. However, like my teammates, I found its performance below expectations. The setup process was complicated with unclear configurations and TPM rate limits, and its capabilities were far inferior to Cursor/Windsurf. It also suffered from stability issues, including extended hangups (over 5 minutes) and code 500 request errors. The downgraded experience was disappointing for an aspiring engineer. GPT-4o should be the best model we can use so far, we can only choose AOAI models from the base model list. Although o1-preview is also on the list, applications are required, and there is a lengthy wait for approval. While creating the GPT-4o deployment on Azure AI Foundry, I noticed that fine-tuned models were “available”. This made me wonder if other models on Azure AI might be both compliant and superior to GPT-4o. Public leaderboards could answer the performance question, though verification would take effort. Azure AI only offers fine-tuning tool, which isn’t ideal for our case. Azure AI Foundry’s Model catalog presents another opportunity with its many popular models, but I lacked both quota and budget to experiment. Faced with either using a mediocre tool or leaving an idea unverified, I decided to locally deploy the open-source Qwen2.5 model. Deployment and Testing I deployed the official Qwen2.5-72B-Instruct-AWQ model using vLLM, and the process went smoothly. Even configuring Cline proved easier than with AOAI. For smaller tasks, the model performs on par with GPT-4o. For project-level challenges like “write a Tetris game for the web using TypeScript”, its planning and reasoning capabilities surpass GPT-4o. I tested both models a few times for this task - Qwen2.5 consistently provided similar, rough, and workable versions with few rounds of human feedback, while GPT-4o only succeeded once. Both outputs were buggy and required multiple rounds of instructions to refine. The response speed for both models is about the same, which is acceptable to me. The token usage for Qwen2.5 always shows as 0, which might be a bug, but the log sizes for both models are comparable. While scaling up usage might reveal new challenges, the service and quality of Qwen2.5 currently meet my needs. Initially, I tried Qwen2.5-Coder-32B-Instruct because of its high download ranking and coding purpose, but it occasionally struggled with Cline prompts. There is similar issue discussed on Reddit. I also noticed that Cline supports DeepSeek, which has received glowing feedback from colleagues about its DeepSeek-V3 commercial version. However, its MoE architecture with 685B parameters makes it impractical for typical personal use. Scaling Up for Team Deployment I’m happy with my local server now, but how can I generalize it to the whole team? I guess the solution still lies with Azure AI model service. Interestingly, while Phi-4 is a Microsoft model, we’re unable to use it directly on Azure AI. Perhaps Microsoft is too deeply tied to OpenAI. If it’s possible to reallocate a portion of the AOAI compute quotas to deploy some of these wonderful open-source models, things would be different.

2025/1/17
articleCard.readMore

From Research to Product: Customer Insights on Prompt flow

Time to navigate the frontier In the dynamic landscape of Large Language Models (LLM), our team is once again at the cutting edge, pioneering a new venture called Prompt flow (PF). My role transcends the rapid and high-quality delivery of products. I need to contemplate the features that can deliver real values to our customers and the user experience that resonates with the essence of those features. This new challenge is substantial for a web front-end engineer and has been a focal point of my professional contemplation. As 2023 drew to a close, a fortuitous invitation from a university peer led me to explore the synergy between LLMs and conventional ML models. This exploration transformed me into an amateur researcher, granting me the privilege to scrutinize the research process through our customers’ lens, with the aim of pinpointing their pain points to better inform our product design. Recent academic work I learned from This paper has been accepted by ACL 2024 Findings few days ago, a great encouragement for us. Please read the full paper if you’re interested in details, which will not be interpreted here. Harnessing LLMs as post-hoc correctors A fixed LLM is leveraged to propose corrections to an arbitrary ML model’s predictions without additional training or the need for additional datasets. A high-level overview of LLMCORR Harnessing Large Language Models (LLMs) as post-hoc correctors to refine predictions made by an arbitrary Machine Learning (ML) model. LLMCORR prompt template Multiple contextual knowledge from training and validation datasets can be included by expanding the template. Reflections on Prompt flow I have been deeply involved in PF since the inception of this project. Naturally, I endeavored to integrate it into our research, yet reality diverged from my original intentions. Hence, let’s see these few reflections on PF throughout the research journey. Please note that most of our works were done before early February of 2024, so I don’t mean to be a monday morning quarterback for some points. 1. Support and optimization of local inference experience will gain more customer favor Most researchers and engineers have certain computational resources, and from the perspective of cost control, they are likely to choose open-source large language models (LLMs) for local inference work, which PF does not support. We have similar story that opted for LLMs like Llama at the beginning of the experiment, which meant giving up on PF. 2. Flex mode is crucial for the use of flow Despite transitioning to OpenAI’s GPT3.5/4 models, our repository was already rich with Python utilities and Jupyter notebooks, complemented by a wealth of projects from previous research endeavors. The core competitive edge of PF aside, the availability of flex mode at that juncture would have allowed for an exploratory integration with our established GNN workflow, potentially igniting a synergistic spark. 3. Is Prompt engineering really that important? The value of our work lies in placing LLM to an interesting position with right work in the system to maximize its value. The prompts designed and used are relatively common today: simple structure, essential knowledge and few-shots. Therefore prompt engineering have not played the key role in this work. It is worth mentioning that PF recently launched the Prompty feature, which provides quick access and focuses on the value of tuning prompts. This may be practical in large engineering applications, where the content of a single prompt can range from hundreds to thousands of lines. If the scenario holds, then support complex Jinja Template Designer features and preview the final prompt content will be of great help (just like Overleaf does). 4. What PF did right? When we began to learn and try to implement RAG App, we naturally looked at some LangChain samples first, then… went from beginner to giving up. My teammate chose the OpenAI Playground to use the GPT4 Assistants feature, meanwhile Azure OpenAI had not supported Assistants yet, so I chose to build a RAG flow following the PF sample. In this scenario, there are a few advantages to note: Low-code is always easy to build PoC. Orchestration to do batch run. Tracing (Not implemented yet at that time, but definitely a keeper feature). Of course, there are also points worth discussing, such as whether you still need to write some code that will affect the ease of use assessment if it is not clear in the sample that embeddings are generated using the same model set and stored in the vector database; or the data input and output in the batch run scenario, which also involves a lot of manual work. Another aside, the performance of File retrieval of OpenAI (OAI) Assistants was not satisfactory at that time. I wonder if there has been a significant improvement after it was renamed to File Search now. 5. What should PF focus on if it conducts Experiments? Firstly, there are some old topics, such as experiment status display and refresh, CRUD operations and viewing logs at each step, which are essential features of various products. When the amount of experimental data is huge, limitations on metrics like RPM and TPM will start to trouble users. Thus, how to estimate the number of tokens and requests for experiments under these constraints by services like OAI and Azure OpenAI (AOAI) to achieve automated high-concurrency scheduling, and even support multi-endpoints concurrency, will be a great value to customer. In previous experiments, we implemented very basic token calculation and request interval logic, and I believe we are not the only ones with such needs. Last few words It’s not commonly encouraged for engineers to delve into academic pursuits, since not everyone possesses the passion, foundation, or even time. However, in the era of Generative AI, immersing oneself in scholarly articles is always a wise move! Whether in practical application or academic experimentation, only through in-depth engagement can one truly understand and unearth the pain points of users. I believe this embodies the spirit of our current discussion.

2024/5/27
articleCard.readMore

2023大阪东京走马观花五日流水账(下)

前情提要 《2023大阪东京走马观花五日游(中)》 04.24东京微软办公室长什么样? 一觉睡到九点半对我来说不算什么,但对Eyama而言够晚了,他也是真累了。中午Eyama约了他之前在Bing的一位同事姐姐带我们参观微软品川办公室。办公室就在品川站旁边,地理位置非常便捷。不过我们并没有绕一圈去品川站,还是沿着昨晚回来的路线,R线转临海线到天王洲岛站下车。考虑到剩余路程不长,并且地图上看这一带由好几个小岛连接而成,景色应该不错,因此我们直接步行到微软办公室。 沿途环境很优美,并且周一工作时间人不多。 约莫二十分钟走到微软大楼。 电梯上来就是一个透明玻璃屋的纪念品店,我们离开前逛了一下,有意思的礼品不多。 我背着小包出门,把工牌忘在酒店的书包里了,只能登记访客进入。而Eyama被前台小姐姐赋予了永久进入品川办公室的权限= =+ Eyama的前同事Tomoko小姐姐是我厂的一名产品经理,人很亲切。接到我们之后正好是饭点,先带我们简单吃个工作餐。 东京办公室的设计主题有点像是热带丛林,办公室的整体环境和国内差不多。 餐厅应该都比苏州分公司的强(吧)。 Tomoko把我们带到Eyama前团队所在的区域和老同事打招呼后就因为工作先离开了,我们相约苏州办公室再见。三四年过去了,Eyama的同事还有好几位在原来的团队,大家随意叙旧聊了好一会。隔壁居然有个做机器人的小哥在用我们组的机器学习产品,和他简单交流后表示有问题随时Teams上ping我😎。 离开前再拍一张,整体来说这边是很传统外企风的办公室。 04.24中古琴行初体验 离开微软后我们到品川站坐地铁前往涩谷,去那边的Ikebe琴行寻找在大阪没看到的中古琴。一路都在想带把合适的琴回去,把这次日本行的费用给挣回来。Ikebe的涩谷分店距离车站很近,一栋商业楼里有一层全是中古琴,店的面积也不算小,有点意思。 居然还能见到Warmoth的拼琴。 我一眼就发现了之前在网上相中的吉他,向店员提出了试琴的请求。店员二话不说拿下琴接好音箱,调音之后递给我就接着忙去了。体验非常棒! 琴的音色没什么好说的,经典335之声。正面品相尚可,但其他地方有一些明显的磕碰。咨询价格才知道网上的标价似乎是店里的进货价,实际售价要比标价高出不少,一下子就没比国内便宜多少了。好吧,看来回去还得多做做功课,这次看看就好。 04.24自助核酸,银座采购 离开琴行后有件非常重要的事情,那就是做核酸。说来也不太走运,五月开始回国就不需要核酸证明,我们恰好处在四月的尾巴,还得花钱找一次麻烦。中午吃饭时Tomoko帮我们查询到了涩谷站附近的核酸点,并协助我们完成了线上预约。走去核酸检测站的路上,觉得这个上坡很有澳门街道的味道。 日本做核酸可不便宜,跟国内20年到21年时医院的价格差不多。里面的工作人员态度不是很好,是这次旅途中罕见的不太友善的日本人。当然我们也有点紧张,这边的核酸是自己操作检测,万一由于操作不当被认定为无效检测进而影响回程航班,那将是一场灾难。好在第二天下午返回大阪的路上,我们各自收到了阴性结果的检测报告。 在网上了解日本核酸的过程中,我还发现了一个短暂的灰色产业:闲鱼上居然有人帮忙伪造核酸检测报告!核酸检测报告上只有基本信息和检测结果,这意味着仿造的成本极低;而登机前航司只会查看报告,并不会去网上查验真伪,约等于走个过场。只能说有些人胆子真的大! 做完核酸三点不到,而Eric的演唱会六点才入场,时间充裕我们先路过银座给Eyama女友以及他老板代购。 也不记得从多早以前起便知道银座这个名字,到了后的直接观感就是购物中心,满街的奢侈品店。不少店还配有会中文的店员,简单了解才知道原本就是中国人。另外这里的店员绝对是我们在日本遇到英文最好的那批人,果然为了赚钱还得多学几门语言🤣。我们回地铁站的路上还遇到了看起来像精神不正常的流浪汉,边走边咒骂,时不时扇自己巴掌,好在对路人没什么攻击性。 乡巴佬头一次听说MIKIMOTO这个品牌,据说创始人是世界上第一个成功培育珍珠的人,因此这家珠宝店因珍珠闻名。我们来这儿是帮Eyama老板代购,跟导购小哥聊得过程中,Eyama开玩笑说帮老板买东西是为了升职,同为东亚人的日本小哥秒懂,后面自如使用“for promotion~”这个梗,只能说大家都深受传统东亚职场文化荼毒已久XD 04.24吉他之神的演唱会! 买完东西已经五点出头,中间花了不少时间在微信沟通上。等我们到武道馆时已经五点半,看起来是没时间吃正餐了,便利店饭团解决吧。吃饭团前腹中感到不适,立马冲去路边的公共厕所大号。结果这个厕所着实让我震惊,非常干净,没什么异味。要是偏远地段或者高级商场里的厕所就算了,这就是一个普通的路边厕所,并且靠近九段下地铁站,人流和使用量非常大,下午五点半居然能保持这么好?!当下在微信上跟对象说,虽然听起来像国内公知说的话,但这个厕所甚至比我们家的还干净… 出来后还发现马路对面居然是靖国神社,那正好把这泡屎送给供奉在里面的战犯们~ 六点差几分,武道馆场外已经排起了长队,我们也抓紧时间入场,不过等坐进去才发现里面大多数座位还空着呢,再晚半小时都完全来得及。 听说日本的音乐人都以能在武道馆开个人演唱会为荣,其地位类似香港的红馆。 “ERIC CLAPTON LIVE AT BUDOKAN 2023”,我们今晚是此次老克东京演出的最后一场。 入座后发现超过一半以上的座位还空着。武道馆不大,座位还是老式的塑料板凳,更多是一种象征吧。 年初手机从S21U升级到S23U,号称演唱会神器,客观说10倍光学变焦也只是看得到,距离看得清还有一段差距。但确实比大部分手机强不少,整体差强人意吧。 一眼望过去老年粉丝还真不少,Eric跟随Cream乐队在上世纪六十年代就闻名全球,有这么多老年粉丝也正常。 六点五十,工作人员上台进行最后的调音检查工作。 七点准时开演,一个半小时的听觉盛宴。我们当晚发现举起手机的观众很少,后来才知道日本的很多演出不允许拍摄。不过这一场没有看到禁止告示,姑且认为没有问题吧。下面浅放一些演出照片,YouTube上可以搜到其他场次的全场录像。 在几首电吉他曲目后换木吉他表演,中间还说了几句话感谢歌迷一直以来的支持。 等演到《Tears in Heaven》时,全场观众自发打开手机闪光灯跟随节奏摇摆起来,场面很温情。 我并非Eric的铁粉,之前也只听过他的一些广为流传的作品,更别说他的巡演乐队。但是当下就能感觉到乐手们非常厉害,各个卧虎藏龙,尤其是最左边的键盘手,solo的旋律和节奏都一顶一。演出结束后上网搜寻才知道这居然是一支“老龄乐队”:最年轻的吉他手Doyle Bramhall II都已54岁,键盘手Chris Stainton更是79岁高龄,有着赫赫履历的一群大师!总觉得光头佬很眼熟,看到名字直拍大腿,原来是Nathan East——音乐史上参与录音最多的贝斯手之一。之前总是在网上的各种演出视频中见到,没想到他也是Eric的老伙伴。这场演出绝对物超所值! 演出一个半小时就结束了,意犹未尽,完全听不够。在大家的安可声中Eric和乐队只返场了一次,他与另一位键盘手Paul Carrack各唱一首歌便彻底谢幕。原本以为作为东京演唱会的最后一场老克会有更多表演回馈粉丝,不过了解他们的年龄后表示理解,这个岁数还能在舞台上近乎完美地表演一个半小时,很难要求更多。 这是我第一次出国看演唱会,也是第一次现场看全球顶级巨星、吉他英雄的演出,今生难忘!当时在朋友圈感叹道: 圆梦2023之老克演唱会,顶级的老克、顶级的乐队、顶级的观众,几乎完美的观看体验!不是老克的粉丝,但传奇的魅力无法阻挡!今晚最佳个人投《I shot the sheriff》,但用《Wonderful tonight》给日本之行画下句号再合适不过。 震撼,精彩! 大家有序退场后,我们与Eyama的朋友一起吃了顿印度菜,顺便了解了一点日本大学生毕业后的工作生活状况。听上去名校毕业生在国际大公司工作光鲜亮丽,实际在东京这样的大都市甚至会入不敷出。赚得多花得也多,和北上深挺像的。 依稀记得这是永田町站的换乘电梯。 今天完成来日本最重要的行程,一整个大满足。洗完澡放松地坐在床上跟Eyama再干一杯,把剩下的零食消灭掉,明天就要回国啰。 04.25东京Google办公室长什么样? 东京的最后一个行程也尤为精彩,那便是参观谷歌在涩谷的办公室。来之前我们本想在涩谷站取返回大阪的新干线高铁票,但不知为何Visa卡付款一直有问题,远程求助LQ君无果,她直接杀下楼帮我们重买两张票。再一看行李寄存柜的价格,算了还是托管在办公室的前台吧。 和贵软的中年企业风相比,谷歌办公室的风格更加年轻时尚,符合我们对互联网大厂的期待。 音乐室空间不小,设备偏入门等级。 走廊靠墙的谷歌日语键盘展示区域很有趣,用大大小小几个键盘模仿摆出一台架子鼓,桌下还有两个踏板。 落地窗外的风景,甚至能看到东京铁塔,简直是电视剧里才会出现的场景。本IT民工羡慕哭了😭😭😭。 Google的食堂毫无疑问秒杀贵软,无论是东京还是国内的几个办公室。并且食堂有好几个,包含西餐和日式餐点。 用餐景色也这么顶。 日式拉面食堂门口有一台售票机,实际不要钱~ 所有食堂免费不说,种类丰富,碳水和蛋白质管够。水果有也好几种,吃完主食后才去拿。 娱乐室倒没什么特别的,就是这个攀岩墙应该是给小朋友玩得吧。 直到我们走后几个月,LQ才搞明白跳舞机和打碟机该怎么玩。 贵软唯一能与之一战得可能只有pantry了… 感谢LQ大佬这几天在东京的照顾,大感恩~ 04.25返程 最后剩下返程之旅。我们先坐地铁到品川,接着乘坐新干线返回大阪。不得不说当初拒绝Eyama乘坐夜间大巴往返是多么明智的决定,虽然新干线不便宜,但舒适度比夜间大巴高出无数个档次,何况参观谷歌办公室的体验更是难得。 新干线列车和国内的高铁感觉差不多。 到达新大阪站后转机场快线,还看到一辆Hello Kitty主题的列车。 我们原本要坐到关西空港的特急列车,不知怎么又上错车,到大阪后停了十多分钟开始返程新大阪才发现不对劲,赶忙查到下一班特急并成功赶上。也幸亏最初订新干线时多预留了一个半小时的时间。 抵达关西机场后发现网上介绍的美食区域基本都在装修,只剩寥寥个位数的门店还在营业。这家拉面店的炸物好吃。 值机前Eyama去免税药妆店按照他对象给出的清单采购物品,其中有一部分是买给他自己用的,结果他一律省略只买他对象所需,真是节俭到有点离谱了… 我则是“来都来了”,问好免税门槛之后凭直觉买了点平时可能会用到的药,比如大正口腔溃疡贴。只是好像没比国内便宜多少,应该是我没做好功课。 值机时还遇到一点小麻烦,航司要求所有乘客出示纸质版的核酸检测报告,Eyama有点走不动了,只好让他看着行李我去找便利店打印。结果航站楼内的便利店没有打印机,店员告诉我要去对面楼的全家才有。火急火燎跑过去之后,前面有个国人小姐姐正在操作,但她的苹果手机连不上打印机,而我的三星没问题但身上没有硬币现金。她主动帮我投了币,我也义不容辞帮她打印了证明。 我俩风尘仆仆赶回值机柜台时,原本排着的长队已经走光,我们随后也顺利办完手续登机。落地上海已是夜里十一点半,等到停车场的接驳车把我们接回停车场差不多十二点。来时是Eyama开得车,回程就由我来一路狂飙了。因为是Eyama的车,开回苏州他家小区门口之后,我还需要再打车花费约半小时才能到家。苏州没有机场真得太伤,一口气赶十二小时的路太伤。 无论如何,第一次日本之行到此圆满告一段落,除了没有背一把吉他回来外其余目标全都达成。增长了很多见识,对日本IT业职场也有了一丁点浅薄的认知。感慨对于有钱人来说,在日本当一个外国人(不融入当地文化)生活很爽,既有发达国家的基建、产业优势,同时又兼具安全、好服务等一些欧美国家被诟病缺乏的东西。 五年多次签证不能白办,以后还会常来看看~

2023/12/10
articleCard.readMore

2023大阪东京走马观花五日流水账(中)

前情提要 《2023大阪东京走马观花五日游(上)》 04.22徒步往返大阪城 今天是未曾设想的超级特种兵的一天,且听我慢慢道来。 早上八点五十,赶在酒店早餐收摊之前浅尝了一下,只能说很有地方特色 :) 吃完我们便出发前往今日唯一景点——大阪城。需要说明从心斋桥往返大阪城我们几乎全程步行,因为Eyama对Hello Cycling的电动自行车有莫名的执念,沿路查看每个停车点有无车辆。结果所有网点都没有超过一辆可以正常使用的自行车,导致我们走了绝大多数路程。随后由于距离近、走街串巷,依然徒步在心斋桥附近逛琴行、逛商店街以及找吃的。最终手机上破纪录地显示今天走了18.78公里… 祸不单行,到了晚上我开始感到脸烫头晕,一开始还以为过度疲劳导致发烧,后面几天才意识到,我居然晒伤了!还是太年轻,完全没想到大阪的紫外线如此强烈… 而Eyama,他戴了帽子😂。 那么开始今天的city walk吧。 这个红绿灯旁边有个按钮,如需过马路要提前按一下,不然一直是红灯。我们就这样傻傻等了好一会才意识到不对劲😂。 还有中文解释,说明咱国人游客不少。 感觉大阪不算拥挤,街道宽敞,还能偶遇这样的小公园。 这里原本要触发一个支线任务,那就是Eyama计划在去大阪城的沿途探寻一家Tabelog评分很高的店,就在这个小公园旁边。我们到店时间11点不到,想着这么早到应该不用排队,结果店家告诉我们需要预约… 支线任务失败 :( 这不仅需要Eyama当下再从Tabelog找一家附近的店,同时也无意中加大了当日行走量以及为晒伤埋下伏笔。在公园阴凉处稍息片刻,Eyama决定午餐吃一家步行十几分钟距离的大阪烧,既然选择权交给他我自然同意。 到店差点破防,今日店内不接客。好在店家还做外卖,我们可以买了带去附近的7-11吃。 两份炒面的味道其实差不多,就是加料带来区别。和昨晚的炒面类似,闻着很香,但吃起来特别咸。我俩都狂喝水,最后也没全吃完。只能说关西风味不太适合我们。 我们顶着中午十二点的大太阳继续前往大阪城。途中路过大阪历史博物馆,下次一定。 大阪警察本部就在大阪城对面。 隔着护城河远眺大阪城。 城门外就能看到大阪城中央的天守阁。 银民水井户,据说是给老百姓用的水井,水特别清凉。 四月春天,郁郁葱葱。 天守阁下不少游客拍照,我跟Eyama都没什么兴趣上去一探究竟,同时开始感到些许劳累,远远观望拍照就算来过了。 天守阁边上有一栋小楼,包含纪念品商店、展览厅等设施。我们在里面休息片刻,便返程前往心斋桥的Ikebe琴行,中途当然免不了找自行车直至放弃🙃。 04.22日本逛琴行初体验 逛琴行自然是我的提议,这次旅行我们接连考察了大阪和东京的Ikebe分店。在网上看了许久的逛琴行节目,并且经常能在闲鱼上刷到职业卖家在日本收得中古琴,我自然也想体验一把捡漏。于是乎提前在网上查到这家日本较大的连锁琴行,并在其官网看好几把电吉他等着线下验证。 IKebe心斋桥的分店略显拥挤。一楼是各种配件以及单块效果器,感觉价格并没有比国内便宜。最大的收获是见到一块售价三万多人民币(698000JPY)的金马Klon,拍完才发现标价牌上写着 “No Picture”(抱歉!),就不放出来了。 二楼是电木吉他区,都是一些比较亲民的型号,因此直接摆在外面。印象中还有一个被透明玻璃墙隔出来的小房间,里面则全是相对高端的电吉他,都是大牌,倒没什么罕见的款式。可能也是因为现在国内资讯发达,同时有钱人一多各种奇珍异宝都能出现在闲鱼上,我们这些玩家不知不觉跟着涨了许多见识。 询问店员才知道官网页面上有信息说明某一把吉他在哪家分店,而我想看的几把都在东京,加上当下已经累了,第一次逛琴行就这样草草结束啦。 04.22从高分咖啡店到高分荞麦面店 我们早上离开酒店前已经办理了退房,行李则寄存在酒店,毕竟临近地铁晚上去大阪车站方便。回酒店之前我跟Eyama分开行动,他想吃点东西补充能量,而我想买杯咖啡休息一下。在Google Map上看到附近有家评分非常高的Mel Coffee,单程步行十分钟,此时已经不太走得动,犹豫片刻本着“来都来了”的指导思想还是冲了。 这家店门面不大,到的时候已经有几个人在排队,店员拿着菜单挨个询问客人点单。比较有趣的是菜单分日文和英文两种,店员看到我时一句话没问直接递给我英文版,犀利预判我不是日本人😆。 我们在大阪遇到的绝大多数服务业者都几乎不懂英文,这家咖啡店也不例外。沟通不太顺利的情况下,我盲选了一手价格居中、名字最长(之一)的Guatamala El Platanillo Geisha。然而我不太能喝出咖啡的好坏,欣赏水平还停留在香醇微甜的“初级阶段”,因此很难评价这杯咖啡到底如何,印象中属于不难喝但也不好喝的那种。随咖啡还有一张卡片,介绍了这款咖啡的来头,就当喝个文化吧。最搞笑的是店员不懂英文但会几句汉语,可能没少接待中国游客哈哈。 由于店里没有座位,我端着热腾腾的咖啡回到酒店,此时临近四点,Eyama早已饱食一顿回来。在酒店大厅休息到五点,我们拖着行李出发大阪车站,准确说是先去吃一家Tabelog高评分的荞麦面店后再去车站。 这家名为蕎斬的店在新地商业街的地下一层,门口只有一盏灯笼作为招牌,加上到得太早还没营业亮灯,我们丝毫没有发现店铺就在眼前 😅。同时这一层有好几家店的门上都贴着由“大阪府风俗环境净化协会”出具的未成年不得入内警示,我们一度怀疑找错了地方(这是什么日本电影的场景?!)。 回到一层后我们又询问了路过的工作人员,确认地址没错,正巧碰上荞麦面店员出来,我们才反应过来!店员也是顺便点亮招牌。 这家荞麦面店非常小,只有L字形两排座椅。但味道真的没话说,我俩点了三种口味的面分享,都没有踩雷。另外看到老板给隔壁桌客人倒乌龙茶,询问才知道是收费的,一杯居然要六百日元!“来都来了”,我也要了一杯,不得不说确实好喝。当下劝Eyama也来一杯,既然来消费就一次到位,结果他还是没舍得😂。 味道实在太棒,也因为中午的大阪烧没吃饱,我们又加点一碗面。 美食真的有治愈能力,如同前一晚,我们吃得很满足,也跟老板、隔壁桌大叔聊得很开心(主要靠Eyama蹩脚的日文和他们勉强能听懂一点英文LOL)。下次一定还来,还点乌龙茶 XDD 04.22夜间大巴=梦魇 荞麦面店离大阪车站非常近,只花一刻钟我们就拖着行李箱来到大阪车站的候车厅。 这里就要介绍我们去东京搭乘的交通工具——夜间大巴。毫无疑问这是Eyama同学的提议,他看完网上的介绍后非常心动:一方面是新奇的体验,另一方面睡到东京可以省去一晚酒店钱。最初规划行程时,他在YouTube上找到旅行博主拍下的体验视频,看上去静谧舒适,我承认我也动心了。但考虑到大巴座椅无法完全放倒,以及在台湾多次乘坐长途大巴的经验,总感觉实际不会像视频里表现得那么舒服。我坚持去东京时体验一次即可,回程必须新干线。事实证明我的担忧是正确的,视频里看起来的舒适都是假象,除了拥挤的座椅很难翻身外,最致命的是大巴隔音非常差,吵得人难以入睡。 之前有提到,今天本就异常疲惫,加之被晒伤,上车前我已经开始头晕,还以为是发烧。原本计划在候车厅再喝点小酒吃个宵夜,我也毫无胃口只能喝点热饮。这一夜简直折磨,以致于到东京站我选择直接打车去酒店,希望能早点休息。但是并没能如愿,这是后话。 我们到大阪站候车厅时才七点,Eyama决定先去附近的商场为他女朋友看下Cocah包,我直接蔫了吧唧地待在候车厅玩手机。等他回来后我们去车站隔壁的便利店买了点宵夜,我顺便买了支牙刷,一会上车前刷牙、用漱口水。这只牙膏回国时因为忘了托运,还被安检人员收走了🙂。 十点五十左右,候车厅广播和电视屏幕开始通知上车。上车前把行李箱交给工作人员后会给你一张凭证,下车时需要凭这张票领行李箱,很靠谱的小细节。我们的车票是在网上提前预订的,上车时直接向工作人员出示电子票据即可。 这就是我今晚的“床铺”,毛毯、眼罩等细节其实很不错,但大巴发动之后的噪音实在是太恼人。另外座位本身也不大,我都觉得略窄,何况身材更高大的Eyama。并且当你前面的人放倒座椅后,会占用你腿部上方的空间,也就是说前面人的躺下后你也得跟着躺下,不然会被挤得动弹不得。 没有办法,就算预料到今夜无眠,也只能选择坐下。伴随着头痛和浑身酸疼,我想这可能是人生中最后一次乘坐夜间大巴。 04.23品川豪宅小憩 早上七点夜间大巴准时抵达东京站,此时的东京站已是人来人往。我在大巴上大概只睡了三四个小时,下车的那一刻整个人都是飘的,脸也依然很烫。Eyama本想坐地铁去酒店,我实在是扛不住,直接说去打车算我的。我们在东京的两天都住在丰洲市场附近的日航旗下酒店Hotel JAL City Tokyo Toyosu,主要原因是Eyama想一大早冲去丰洲市场逛吃海产,这家酒店步行十分即可。此外从地图上看酒店到品川区的直线距离不远,去拜访微软和谷歌的办公室应该还算方便。 日本的出租车都开得很快,大约一刻钟便到酒店。只可惜酒店前台告知无法提前入住,看起来生意确实很好,大堂过往的住客非常多。或许受疫情和签证的影响,在大量国人暂时无法前往日本旅游的当下,我们观察到最多的外国游客是韩国人,无论在大阪的道顿掘、大阪城还是江东区的这家酒店以及附近的地铁站。酒店大堂旁就是餐厅,一大早自然吵闹得很,坐在大堂的椅子上想睡也睡不着。萎靡地坐到八点多,我让Eyama先出去玩,我看着行李等入住,反正以现在的身体状况今天肯定是废掉了。不过Eyama也是在大厅找了个角落玩手机,除了关心我之外,虽然嘴上说夜间大巴睡得还行,其实同样累得够呛,从他后面两天不太能走很久就看得出😉。 大概到了十点,救星LQ大佬登场! LQ是我们组北京的前同事,当年因为交接DRI工作逐渐熟络起来。后来她离职去了Google Tokyo,又因疫情滞留在上海办公一段时间,来苏州面基吃饭赏湖景,大家结下深厚友谊。去年上海放开之后她终于办理好手续登陆东京,这次来前也约好请她带我们参观谷歌的办公室。 在微信上跟她说明情况之后,她表示可以去她家休息,她去公寓的自习室学习(准备日语考试)。这对我来说无疑是救命稻草,立马出发,Eyama也跟我一起坐公交去市区吃东西。这里还有个小插曲,到大阪的第一天取完现金后我要分给Eyama,他表示没带小包不方便装钱,况且绝大多数时间都是一起行动没必要。结果他中午在一家人气小店排了很长的队伍后发现店家只收现金,欲哭无泪。 LQ住在五反田附近,公交车坐到中央区后再转地铁。高轮台地铁站,看起来有些年头。 从五反田地铁出来后还要走小十分钟,环境不错,据LQ说这一带是日本old money的居住区。嗯,所以她也是old money XD 高档公寓,我的最爱。 LQ戴着口罩从大楼侧门出现,一时间竟没认出来。简单介绍完屋内设施之后她就光速撤离,值得一提的是她提前换了一套新的床单被套,简直不要太贴心!大佬的豪宅也令人印象深刻,简约但不简单,尤其是超大阳台,直接全体起立。租金每月大概一万人民币,并且有政府和公司的政策支持可以计入减税,只能说太值了。可能是我要求低,觉得屋子看起来没有问题,但LQ表示很乱,按照她的要求浅浅码一下地上的物品(桌下那个豆沙包太可爱所以放过它)。 家人们,肥仔的快乐,谁懂啊。 马桶上的洗手池设计非常巧妙,冲完马桶后洗手水直接加入水箱,这很环保。 昨天走了那么久,又在车上睡了一夜,自然洗个澡再睡觉。拿衣服时发现书包里还装着昨晚因为不舒服没喝的酒精饮料,悄咪咪放进了LQ家的冰箱👻。 眼睛一闭一睁已经快两点,其实只睡了两个多小时,但感觉活了过来。睡前就定好闹钟,因为晚上跟Eyama的东京朋友们约了网红烤肉店,午饭也不能太晚吃。LQ带我去附近的商场吃了烤牛舌套餐,味道不错,不过聊天才是重点。年初做新项目一直加班,跟她同步了组里的近况,也听她分享了一些现在团队的见闻。吃饭时还有个打扮精致的日本小姐姐似乎在面试,难道是来应聘服务员? 04.23台湾烤肉YYDS 东京这两天有点降温,吃完饭想说去旁边的优衣库看看外套,结果一进门就看到穿着西装的模特,不愧是日本啊哪里都在卖工作服。在咖啡店坐到四点一刻,Eyama说他们已经到烤肉店门口排队,我们可以出发过去。即使排得那么早,我们也等到六点才上桌,真的非常夸张! 烤肉店在足立区,略偏远,我们地铁转出租车一小时才到。 Tabelog评分高达4.25的Sutaminaen烤肉店,老板娘是台湾人,所以菜品里还有卤肉饭。久违的台湾烤肉😭! 菜还没上,那么先干杯吧🍻~ Eyama的几位朋友都是中国人,来自天南地北,职业背景也各不相同。据说他们在一位旅居日本的美食博主的微信群里结识,那位美食博主给这家店打过广告,几位朋友中也有认识老板娘的常客,因此送了我们不少菜品。感恩~ 这一顿吃肉根本停不下来,开玩笑跟Eyama的朋友“控诉”,前两天他都只带我吃碳水,想吃肉想哭了哈哈。 酒足饭饱走出烤肉店,想起台湾中秋节吃烤肉的习俗,抬头看了看今晚的月亮。 04.23终于入住酒店 饭后Eyama跟朋友们去KTV唱歌,我送LQ回家顺便拿包,再搭地铁回酒店办理入住。在五反田坐车时体会到了东京地铁的复杂,也可能是累傻了,先是想到大崎转乘临海线不知怎么坐到了户越银座,折返回去坐临海线又等了好久一班才发车。折腾了快两小时才到酒店。 临海线到国际展示场后,还得出站步行五分钟转乘R线(Rinkai Line)再坐三站。不过第一次搭乘熟悉之后,我们第二天再去品川便轻车熟路。 我们住得是日航酒店的标间,设施很新,也很整洁,就是不出意料的面积不大,好在我们也只是回来睡个觉。 吃完烤肉一身味道,正好酒店房间内有备除臭喷雾,试了下效果非常好,可谓是解决了我的“痒点”。 哦对了,约LQ和Eyama的朋友们一起聚餐还有一个原因,那就是要找她拿之前在日本网络平台购买得Eric Clapton的演唱会门票。 走前LQ还顺手送我一份伴手礼,说是她出去旅游时买的,看着很像农副产品,回国后才知道是类似徐福记的煎饼,很香的小零嘴。 受特种兵行程拖累的一天总算要结束,见到老朋友以及烤肉吃到饱都十分开心。后面的节奏终于回归正常,明天将参观微软东京办公室、逛琴行并观看吉他之神老克的演唱会。 下一集 《2023大阪东京走马观花五日流水账(下)》

2023/12/6
articleCard.readMore

2023大阪东京走马观花五日流水账(上)

身为拖延症重症患者,这篇四月底出行的旅行笔记不出意外地拖到了年底。前几天本想抢到John Mayer在东京Blue Note的跨年演出票再去东京玩一趟,可惜BN座位太少又缺乏其线上抢票经验,今年应该只有四月这一次日本行。只能补上这篇流水账,温习一下短短几天的日本时光。尽管有没计划好的行程把人折腾得不行,但整体来说瑕不掩瑜,是一次美好的旅行。 写这篇文章花了十几个小时,挑选了近两百张照片,说实话是一件费时费力的事。想必正在阅读本文的你也得花上一点时间才能看完三篇文章的所有内容。也想过以后是不是直接录视频、剪辑成Vlog上传到B站、YouTube,如果要做到精益求精工作量只会更大吧。并且年更型选手不需要流量更不需要变现(也不敢想),写给自己的回忆,图文记录应该足够。一年还能写上一篇笔记,对我来说已经是一个不小的目标~ 最后要说明得是文中时间均使用当地时间,在国内是国内时间,在日本则是日本时间,两者有一小时时差。 04.20出发前的失眠夜 此次和公司同事Eyama约好一同出行,我们提前订好了往返机票、酒店以及演唱会的门票,并且制定了大致的行程。由于去程航班中午出发,早上十点就得值机,在Eyama的邀请下我前一天晚上直接睡他家客房,第二天一早七点出发自驾前往上海浦东机场附近的停车场。之所以选择开车去是因为返程航班晚上十一点才到达,公共交通基本都收班了,还是自己开车回苏州靠得住。20号晚餐吃得很爽,Eyama师傅作为拿到中级厨师证的资深爱好者,做得一手好饭,我们经常来他家聚餐。 不过这一晚我几乎没睡着:可能是不习惯早睡,也可能因为床板太硬;不知为何房门不能完全关紧,从厕所窗外传来的大街上飘荡的回响听得一清二楚;他家的两只猫猫时不时钻进房间视察一下。总之就这样熬到了第二天清早… 04.21出发 楼下简单吃了个早饭,便利店买几罐咖啡,我们即刻出发。今天是周五,之前担心会遇到早高峰堵车,不过运气不错一路畅通。Eyama开车,我虽然困得不行还是陪他聊了一路音乐。 浦东机场卫生间外的数据大屏。现在只要上云,都要冠以“智慧” “AI” “大数据”这些噱头。 值机后时间绰绰有余,我们来到贵宾厅小憩一下,吃点东西补充能量。出关时国内海关的工作人员在我说完去日本旅游、四五天就回后,莫名其妙来了一句“不去美国玩啊?”,我整个人懵了一下。虽然护照里有十年美签,但这是什么奇怪的联想。配合上他那似笑非笑的表情,属实让人不舒服。“不去!”。 日本时间下午三点抵达大阪关西国际机场,入关的人不多,不过后来看网上说这几天有些时段也是要排长队。我办得是五年多次往返旅游签证,单次入境最多可以待90天。 按照当地政策,如果已经在国内接种了三针疫苗,则不用再做核酸。直接在微信小程序“防疫健康码国际版”上获取《国际旅行健康证明》,出机场时出示给工作人员看即可。此外还有一个环节需要在机场的大屏设备上登记一些东西,这才过半年已经忘了是干什么的 @_@ 在搭电车去大阪市中心前,我们原本准备取点日元备用,看完机场机器上的汇率后立马劝退。Eyama已经换上提前在淘宝买的流量卡,问了下日本当地的朋友说市区便利店的汇率不错,于是我俩都只在Apple Pay上给Suica充了点钱,先坐电车到市区再说。 04.21初识大阪,入住心斋桥 关西机场建在一个岛上,去市区的第一步就是过海。 日本的酒店都是我订的(Eyama负责选餐厅),我们今晚住在心斋桥边上的东横INN酒店。电车到达难波站后,看距离不是很远我们决定步行过去。这几天Eyama都只提了一个内置保温层的大袋子,里面非常离谱地装了一位深圳朋友做得糕点,要带去东京给一群他们共同的朋友。我非常无语这群东京的人好意思让Eyama从深圳-苏州-大阪-东京这么带一路,同时这也苦了我的行李箱。因为大多时候他都把袋子放行李箱上,然后主动提出拖着箱子走。尽管路上跟他说过几次,但是一旦走得久点,Eyama就会在过马路时下意识通过拉杆直接提起箱子通过台阶,这样的后果就是回苏州时拉杆已经摇摇晃晃、命不久矣。后半段还是我自己管好箱子吧。 初到大阪的第一个深刻印象就是出租车打蜡保养得非常新。 室外22°气候凉爽,风稍微有点大。去酒店的路基本就沿着左侧这座高架桥一路向北。 沿路看到的Livehouse,演出类型主要是爵士、放克和布鲁斯。 日本特色之K car,没想到还有越野版。 豪车在心斋桥附近还挺常见。 这座高架是阪神高速道路。 电话亭和停车计费器。 东横INN酒店楼下就是一个停车场,这里也有随处可见的自动贩售机。 这就是我们今天过夜的东横INN酒店,前同事推荐,是日本的一家连锁品牌。出门就是地铁,价格不贵还包含早餐,性价比很高。 很复古的电梯。 房间面积虽然不大但干净整洁。 卫生间面积很小,基本上只能一个人落脚,但是存在很多巧思设计提升空间利用率。这就是日本吧~ 04.21道顿掘逛吃 放好东西,我们再次出发走去道顿掘逛逛,吃点当地特色小吃。 路边这个宠物医院还挺洋气。另外大阪街头骑自行车的人非常多。 路过一家7-11顺便取了四万日元,并拍照留念🤣。 药妆店也是随处可见。普锐斯倒是国内越来越稀少的车型。 这是什么建筑你知道吗? 逐渐靠近道顿掘商圈。 河道两旁很安静。 这里面也有不少酒店。 河上的一座桥。 走到另一段又见一个牌子。 远处这个梯形大楼令人瞩目,此外这条大道上有不少奢侈品店。 这种招牌还挺可爱的。 哪里都有兰州牛肉面! 过了刚才能看到尖角大厦的主干道,东边的商业街人山人海、异常热闹。 逛了好一会,也该出手了。我们决定试试这家排队人超多的章鱼烧店。 没想到小小章鱼烧也有定制款售票机。 最终成品如下,味道不错,口感较嫩。 后面Eyama提议再来点串,而我想留点肚子吃正餐。 傍晚的河道,夕阳余晖,而大楼陆续亮起灯光。 牛郎的广告,销售额破亿的“亿男”,有点搞笑。 来到道顿掘,自然要打卡Glico跑男。桥上拍照的、跟广告牌合影的人超级多!我们打完卡赶紧离开。 这家招聘画得实在可爱! 我们原本准备吃一家烤肉店,但排队人数众多,一眼瞥到隔壁这家365酒场,网上评价也不错,那就这家吧。事实证明味道和氛围都不错,我们相当满意! 这家店看上去不大,实际还有地下一整层,有不少日本上班族在此畅饮畅谈。Eyama给我科普,日本人在这种场合喝酒为主,只会点少量菜下酒,而我们这种桌上除了两杯酒外全是菜的,一看就是外国人😅。 墙上的海报同样有特色。 扫码点餐,顺便附上WIFI账密。 啤酒很清爽,食物的整体口味也不错,基本没怎么踩雷。 意犹未尽,再来一杯乌龙茶啤酒。 这个炒面是正宗大阪口味,非常咸,我不太行。 走前去了个厕所,又是日本特色的迷你洗手池和电动马桶圈。 前面Eyama说过日本人在居酒屋以喝酒为主,然而他们并不是不饿,而是会在散场之后再站在拉面店门口嗦碗面😅。 吃饱走回酒店,沿路夜景很好,满满的都会感。 睡前看了下酒店房间的电视有什么节目,果不其然有成人分类,并且需要付费观看。前一晚一直没睡好,今天赶了大半天路,明晚还要坐夜间巴士(并且还有未知的特种兵行程),睡了睡了。 下一集 《2023大阪东京走马观花五日流水账(中)》

2023/11/28
articleCard.readMore

2022年我想练的歌单

虽然2022年已经过去俩月半,但“想练”意味着不一定能啃下来,先把目标都列下来再看看到年底具体能有哪些斩获吧😅。清单数量限定在十首左右,因此选择的都是我个人非常喜欢同时也具备一定技术难度、需要花时间去琢磨的曲目。每一首都在我工作或深夜单曲循环过无数遍,一定好听且耐听。这个清单也符合我一直以来的“杂食”风格,流行歌、爵士以及一些现代融合的风格都有,曲目按首字母排序,偏好无先后顺序。 爱我还是他 - 李荣浩 原曲:YouTube 碎碎念:手指机能是目前的最大瓶颈之一,目标能原速演奏。此外能接上唱更好… 老大的歌百听不厌。 参考资料: 李荣浩那段技惊四座《爱我还是他》的吉他SOLO 从李荣浩《爱我还是他》🎸电吉他 solo 中学到的十件事 Autumn leaves - Eric Clapton 原曲:YouTube、Bilibili 碎碎念:吉他solo包含木吉他和电吉他两段,难度不是很大,可以自己扒下来,要注意音色和演奏情感。Chet Baker那一版也是单曲循环无数次,想起去年上课好像学了很多,又好像什么都忘了… 欸,明年清单再列上吧。 参考资料: 【吉他教学】弹琴没细节?手把手教你保证细节拉满!Autumn Leaves Covered in rain - John Mayer 原曲:YouTube、Bilibili 碎碎念:可以说是从小听到大的歌曲,脑海中基本可以“全文背诵”。通过这首歌,第一次感受到电吉他solo堆砌起来的充沛叙事感和情感。毫无疑问JM是我心中的吉他英雄,因为他喜欢上吉他。我并不反感市场化或商业化,作品如果全是技巧没有感情,或全是感情没有旋律性,都不是我的菜。我觉得JM就是把这几件事结合得出类拔萃的天才,至于一些商业化带来的八卦以及他的”stupid mouth”,我不关心。 参考资料:应该非常多,暂未搜寻。 Europa - Carlos Santana 原曲:YouTube、Bilibili 碎碎念:又一支从小听到大的曲子,“全文背诵”什么的后面就不提了。除了这首曲子外,像《Game of love》、《Smooth》等歌也是往后想扒和练得目标。 参考资料:应该非常多,暂未搜寻。 Gravity - John Mayer 原曲:YouTube、Bilibili 碎碎念:这首曲子没什么好说的了吧,从技巧到音色,有朝一日必须拿下。 参考资料:应该非常多,暂未搜寻。 How insensitive - Wes Montgomery 原曲:YouTube、Bilibili 碎碎念:对于爵士乐我比较喜欢标准曲和bossa nova风格,说白了也都是流行歌过来的,只不过有更多丰富的语言词汇去表达情感。这首曲子也算从小听到大,除了非常好听之外,也是标准曲中为数不多用吉他演奏的最广为流传的版本,必须冲一发。 参考资料:应该非常多,暂未搜寻。 Kyoto - Tomo Fujita 原曲:YouTube、Bilibili 碎碎念:去年偶然在油管上听到的曲子,旋律很抓耳朵,情感细腻,同时Tomo在他自己的频道上也放了多个不同风味的版本。感觉不是很难,适合现阶段学习和练习。 参考资料: Tomo Fujita - KYOTO Tomo Fujita - KYOTO JAM - 1967 Gibson ES-335 Little Wing - Stevie Ray Vaughan 原曲:YouTube 碎碎念:在这首歌和JM的《Bold as love》之间犹豫了一会,不过两首都是Jimi Hendrix的歌,练会哪首另一首应该也能很快能掌握。说实话我对Jimi的作品到目前为止没多少感觉,但SRV和JM演绎的版本立马能抓住我的耳朵,也听了很多年,该好好研究一下。 参考资料:应该非常多,暂未搜寻。 Plastic love - Mariya Takeuchi 原曲:YouTube、Bilibili 碎碎念:非常喜欢city pop风格,旋律和编曲百听不厌,这种纸醉金迷的都会氛围感,令人沉迷… 这首歌用来练习funk吉他正好,此外应该也有一些表演机会,毕竟是更有市场的音乐。 参考资料:应该非常多,暂未搜寻。 South of the river - Tom Misch 原曲:YouTube、Bilibili 碎碎念:Tom Misch是我20年的最大发现,基本上每首歌都很好听,融合了funk和爵士的元素兼具音乐性和技术性,网上也有人称他为英国JM… 🤣。这首歌的节奏吉他和键盘solo都想扒一下,弹出那种音乐带给人最简单的快乐(如果看过MV就会秒懂)。 参考资料: 用吉他弹键盘solo是什么效果?South of the River(Cover) There will never be another you - Arturo Sandoval 原曲:YouTube、Bilibili 碎碎念:很犹豫是否要放一首真正意义上的爵士标准曲,《How insensitive》可以看做练一首有“标准答案的指弹曲目”,而到了爵士标准曲,除了扒大师的谱外,即兴是必不可少的一部分。这就没有了标准答案,于是变成很难花费一年半载便能达到大师们那种好听水平的一件事。完美主义多少害了我,对于特别喜欢的作品,不太敢迈出第一步(JM的歌我也一首没练过)。但这首歌对我有太多的回忆,该逼自己成长了。 参考资料: 《新不了情+There will never be another you》成大爵士乐社

2022/3/18
articleCard.readMore

蔡剑爵士吉他课程二年级笔记

Here are the notes from the Cai Jian (蔡剑, a well-known jazz guitarist and composer in China, the teacher of Jazz Guitar at the Xinghai Conservatory of Music) jazz guitar school in 2nd grade. The mind map notes are made by teaching assistant Zhichao (@Jazz_Chao). Lesson 1 - Harmony of Black Orpheus Lesson 2 - Transcription of Black Orpheus Lesson 3 - Bird blues Lesson 4 - Transcription of Blues for Alice Lesson 5 - Harmony of All the things you are Lesson 6 - Improvisation practices of All the things you are Lesson 7 - Transcription of All the things you are Lesson 8 - A613 Blues Afro 12/8 Lesson 9 - Transcription of A613 Blues Lesson 10 - Harmony of Softly as a morning sunrise Lesson 11 - Transcription of Softly as a morning sunrise & Mr. P.C. Lesson 12 - Songs recommendation and review

2022/1/16
articleCard.readMore

2020云南游记(下)

上一集 《2020云南游记(中)》 09.29丽江古城与木府 尽管前几日的行程负荷不算太大,但我一路兼顾车夫和游客的双重身份,仍有些疲惫,所以最后两天我们选择让节奏再慢一点。当然早餐还是不能落下,闹钟定在九点半,醒来拉开窗帘,让阳光照进古香古色的房间。 不知是谁把门打开了,九月底的天气已经有点凉,来一碗热腾腾的牛肉面正是心头所好。 吃饱当然要转一圈消消食,从对面看餐厅。 回笼觉睡到两点,磨蹭一下出门吃午饭。我们选择了网上口碑很好甚至有同事推荐的云雪丽餐厅,皇冠分店就在酒店隔壁,步行三分钟可达。不过我们参考大众点评的热门榜单点了三个菜,只有炸豆腐合我们的口味(推荐!),另外两个菜嘛… 吃不惯,算难得的翻车经历吧,并且这顿是我们云南之行吃得最贵的一餐😂。 鱼是甜口的,小火煮到后面越吃越甜😢。 菌菇中规中矩,吃到后面有点凉了就不太行。 人生充满了无数次试错,这次的失败原因只不过是口味不合,并不影响我们的心情。实际上为了不浪费粮食(以及钱),我们还是吃了很多,后面逛丽江古城时都没买什么小吃。从店里出来向古城中心走,路的右边是饭店、民宿等商家,左边便是我们住的酒店。 人少,幽静,处处有河道。 不一会便走到了木府,它是我们今天参观得唯一一个正儿八经的景点,代表了一段民族文化融合的历史。 门票包含导游解说服务,由于游客不多,都是聚集一批游客才开始导览。我们木府门后的广场等待时,还见识了旅游景点的赚钱套路。有工作人员主动安排我们合影留恋,等参观完回到广场时他们便拿着洗好的照片和挂牌问我们买不买。老一辈或传统观念的人还是很吃这套,想着来都来了留个纪念或者担心打好的照片被用作其他用途,便掏出手机扫码付款、被强行消费了一把。只可惜工作人员今天遇上我们,一口回绝不要,主动跟我们讨价还价还是不要,当代年轻人谁要在你这大殿门口拍到此一游照😂。 从大门的“忠义”到议事厅的“心诚报国”,也算是一次爱国教育机会吧哈哈。 木府是纳西族木氏土司的衙门,当时的土司审时度势主动归顺明王朝,积极学习汉文化,因此木府里的不少建筑元素对我们国内游客而言极其熟悉。 读万卷书,行万里路。几百年前的少数民族积极学习先进文化知识是一件令人欣慰的事情。 在木府内看古城的街道。 乔木世家。 半兽人? 最后登上这个半山腰的道教三清殿俯瞰木府,有点在景山公园眺望故宫的意思。 出了木府才五点,晚上九点这边还有灯光秀,我们便打算在古城里逛逛再决定晚餐吃什么。这边的店铺和其他古城、古镇类似,都很商业化。不过也能看到一些当地的民俗特色,例如纳西语的象形文字。 蓝是中国蓝。 晚餐选择了大众点评上的另一家热门餐厅——滇厨餐厅小锅巴,人气很旺,七点取号居然排了四十分钟的队,这是云南之行头一次也是唯一一次排队。好在等待是值得的,味道很不错,我们也等饿了,只随手拍了两张。 这个野山菌铜锅饭贼香,有菌菇有火腿,米饭带着油和锅巴,无敌! 吃完我们直奔木府看灯光秀,通过将影片投影在木府的大门上呈现木府的历史与风采,视觉效果比较立体。上一次看到类似的表演应该还是清华大学百年校庆时的主楼投影,也是当时的热搜话题之一。 最后一项活动是回酒店泡澡玩手游😆,顺带一提云南的网络延迟在玩游戏时特别明显,打PVP游戏只配玩玩娱乐模式。 洲际酒店的后门,有点欧式建筑的感觉,还挺好看的。 09.30返程 今天睡到十点多,卡在极限来吃最后的早午餐。 吃完就回去收拾行李准备回家啰。 下午六点多的航班不着急,作为吃货的我们寄存好行李后,又去酒店附近一家广受好评的牛肉米线嗦了碗粉,顺便再搞杯奶茶喝喝。 做出口碑的苍蝇小馆必然是物美价廉。 从酒店打车到三义机场的终点直接设在贵宾楼,招行CIP点数赶紧消耗一下,疫情日子都要用不完了。 不远处硕大的招牌写着“重拳出击,扫黑除恶”,今年的《扫黑风暴》你看了吗? 是时候说再见了,我们下篇游记再见吧👋🏻。

2021/12/18
articleCard.readMore

2020云南游记(中)

上一集 《2020云南游记(上)》 09.28玉龙雪山 对于夜猫族来说,假期的上午九点多起床、十点出门已经够早,我们需要赶在最后一刻去吃自助早餐。洲际和府酒店的房间坐落在一群古香古色的二层楼房里,如果有较重的行李或距离大堂较远可以提前预约电瓶车接送。 餐厅在大堂一楼的一侧,味道中规中矩,关键还是装修风格和视野别有风情。 吃饱站在外面的天台,找个合适的角度能看到雪山。 当然酒店内视野最好的观景点,同时也是酒店著名的打卡点之一,便是大堂中央的酒廊。犹抱琵琶半遮面的雪山远景如同一幅壁画镶嵌在巨大的落地窗上。 条条大路通雪山😁。 半小时出头,我们便到了雪山景区入口。除了套餐里包含的玉龙雪山门票,需要额外付一笔主景区门票费,网上也称为进山费,80块一个人。 进入景区大门之后,实际还有一段路程才到停车场,沿路已经开始有人停车拍照。 从停车场往游客中心走去,环境不错,像走在一个生态公园中。 本次云南之行的一个重要目的,就是考察景区智慧厕所的建设情况(大误)。 在游客接待大厅兑票、检票过后,坐上了旅游大巴,把我们送去雪山脚下的索道站。沿途这蜿蜒的盘山公路,配上四周高耸林立的树木,和之前又是完全不同的景色。 索道口的海拔高度是3356米,对常人来说已不算低。其实从停车场下车走了两步,我就隐约感觉脚下有点飘。事实证明越往上走,随着供氧不足,高原反应会越来越严重。而我们一开始在网上做功课的结论是不买氧气罐,那么实际情况会如何呢? 坐上缆车,没想到某人怕得要命,抓紧了我的裤子😂。 不过害怕这事因人而异,我们隔壁的一对情侣是男生怕得闭上了眼睛,反倒是他对象一直喊他睁眼看看。索道的后半段已经云雾缭绕,窗外什么都看不清,直到接近光秃秃的雪山。 前一天了解到九月底的雪山还没有雪,温度也不是很低,我便只穿了短袖T恤套一件厚绒外套上去。事实证明静止不动时还是有一点冷,爬山则刚刚好。出了索道出口这边的游客中心,就到了登山的大平台,海拔4506米。望向玉龙雪山允许游客攀爬的终点觉得并不远,等到实际爬起来才发现并不容易,每一步上升的海拔高度都仿佛在对渺小的人类说“到此为止吧”。有些年纪大的老人确实没上去,就在平台上拍拍照、转悠一下。 往下看很壮观,有平原、山峦、索道还有栈道。 居然还有商家运了只羊驼上来搞创收,有点离谱。然而大爷大妈们似乎对它很感兴趣。 我们在4506米平台上晃了一圈,吃掉昨天在大理买的鲜花饼和自助早餐薅的酸奶后,做了一个明智的决定——买瓶氧气罐再上栈道。最终这瓶氧气罐支撑着某位朋友上到终点,按照她的理论,身体好的人高反会更加严重,而我这种身体差加上长期过度疲劳的人,受到的影响会小很多🙄。 那么,开始爬向终点吧。 走一段台阶就休息一下,顺便拍拍照、欣赏下风景。 一眨眼就爬了65米,比想象中轻松呢。 往另一边看,一点绿色都没有。 人少,走走停停还是比较舒服。 又上升了20米,距离终点4680还有228米。另外无人机禁飞,赞! 距离4506米平台的垂直高度,这么看根本不像有85米。 救命的“大宝贝”,景点商铺卖60块一瓶,对某位朋友发出“真香”⚠️。一路上有不少跟团来的游客,除了自己买的氧气罐外,旅行团也发了,压根用不完。他们直接原地叫卖,我们半价30又收了一瓶😂。 来,摆个自黑的pose,哈哈哈哈。 有点雪山那意思了。 另一侧还是这种黑灰色沙土面。 终于,来到了终点! 4680米!一对东北的母女游客给她们可爱的玩偶拍打卡站,超有爱。 回头看看来时走过的路,174米的高度。 冰川分段景观,这时候没什么好看的。 下山前来根全国各大旅游景点的知名美食——台湾烤肠补充体力。 下山的路上已经可以看到我们的下一个目标蓝月湖。 返回4506米平台,最后在缆车中看一眼美丽山川。 09.28 蓝月谷 走完玉龙雪山,下一站是同样大名鼎鼎的蓝月湖。看到第一眼就被折服,好美! 雪山脚下的壮丽。 我很中意这一处景,很有感觉。 除了拍婚纱的新人外,似乎还有奇怪的主播入镜? 不同角度看湖水颜色还不完全一样。 实际上湖水非常清澈。 走到第三个湖,脚酸的不行,湖景也看够了,打道回府吧。 上大巴前看到三位老太太齐坐一排吸氧😂。 回到停车场,走前再去马路对面拍几张,远处也有人在拍婚纱照。 下山的路,没什么车,开起来超级惬意。 回到酒店,电话车行来停车场取车。三天跑了五百公里,回本咯。 傍晚的酒店,也还蛮好看的。 今天整理房间的服务员小姐姐给折了一只小象,有点丑萌哈哈。 晚餐来吃大众点评热门的阿婆腊排骨,从酒店步行十分钟就到了。店不大,生意很好。 团购的情侣套餐才109块,这满满一锅肉,味道可以。连续两天晚餐都物美价廉,大大的好评! 走完溜达回去,看到了酒店的招聘广告,有需要的朋友直接电话联系,就说是我介绍的👌。 抬头还能看到几颗星星,真好,晚安。 下一集 《2020云南游记(下)》

2021/12/12
articleCard.readMore

2020云南游记(上)

2020上半年疫情较为严重的那段时期,旅游业为了生存推出各种机酒预售套餐,三月底在阿里旅行群里看到嬉游的菜菜推荐丽江和府洲际/英迪格酒店,3晚含双早和玉龙雪山门票只要¥1846,花呗囤货、不约可退,有效期至2020年底。要知道疫情前后一晚酒店加下午茶和索道就要接近两千,这谁顶得住呀,果断下手。 经历漫长拖延期后,我们在八月预约了九月底入住酒店。由于把去程机票买在丽江后才决定顺道去大理走走,租车自驾游便成为能把整个行程串联起来的上佳选择。租车也不贵,携程上选了一个高分车行,起亚K2 (实际是同等级车型,最终给了我们一辆奔腾X40,这个后面再吐槽)租3天,异地还车,考虑要开山路加选无忧尊享服务费(无需承担含玻璃、轮胎在内的全部车辆损失)才五百多,再使用中行卡支付立减¥55,总共¥481。至于大理的酒店就随意选了一间民宿,两百多一晚含双早。 09.25出发 可怜的在苏务工人员只能打车去无锡硕放机场,特意选了下午四点飞的航班,两张票加机建费一共一千四出头。出行前还收到了航司的促销短信,加百来块把座位调到第一排,好处是腿部空间宽敞许多。 疫情在家待了好久,再次上天看到成片的云朵内心有点小激动。 晚上八点准时抵达丽江三义国际机场,车行距离机场还有一定距离,工作人员开车接我们过去后,办好手续,就马不停蹄前往大理的民宿!拿到车照例拍一张初始里程数~ 山路有几段还是有点蜿蜒曲折,一路上黑黢黢也没什么灯光,甚至连前后也没有来车,漆黑又寂静。这辆低价位SUV只配了卤素灯,开灯给人的感觉就是“开了,但没全开”… 基于没什么来车的情况,安全起见,我默默打开了远光灯赶路。 经过两个小时的跋涉,我们进入大理,看到了洱海的星星点点。 奔腾这辆车动力极其之弱,开去玉龙雪山时油门踩到底也只能跑一百。更可怕的是在第二天还出现过突然熄火的状况,还好当时不是在高速上… 也不知道为啥还是个河北的车牌。 民宿在洱海传奇小区里,一个半山腰上的度假别墅群,靠近大理市区,环境不错。 更爽的是晚上十点多还可以点外卖,抚慰了饥肠辘辘的赶路人。干饭当然要配上张大仙的视频🤣。 09.26喜洲与大理古城 我们订的是所谓的“海景房”,考虑到其价位,远观个大概倒也尚可。 楼顶还有观景平台,地板上铺了镜面玻璃,方便客人们拍那些网红打卡风格的游客照哈哈。 对面便是苍山洱海。 喜洲镇 我们今天计划环洱海顺时针开到喜洲古镇,中午玩完古镇后去海舌生态公园,最后回到大理古城吃吃逛逛。出发时候已经十一点多,二十分钟后到洱海公园还下来看了看湖景。 米10Pro广角拍摄的自动白平衡有问题,21年果断换回S21Ultra。 公园就在路边,对面是停车场,不过没啥好看的。 一路上车不多,十二点半就到了喜洲古镇,停好车发现对面有所古香古色却挂着电子跑马灯的中学。 居然还是华师的附属中学… 还有一架正在行驶的马车花车。 喜洲镇外的马路边有不少这样的花车,算旅游景区的特色服务项目吧 -。- 马路对面就是喜洲镇的一个入口。 走进去左手边又是一座古香古色的小学。 古镇的游客少到令人惊喜。我们猜测是因为疫情的关系,有店家解释还没到人流高峰期。可以看到古镇已经经过了现代化改造,不少房子也重新装修过。 一路上见到过好几家的连锁(或加盟)鲜花饼店,刚出炉的鲜花饼味道确实不错。另外还有全国知名的清真兰州拉面,长得都一样,就不放图了。 我们十点多才吃过早饭,因此在喜洲镇随便吃点当地小吃当作午餐了。除了鲜花饼外,自然要尝尝点评上好评的喜洲粑粑。在这么冷清的镇上,这家店生意算相当不错。 至于味道嘛… 个人觉得一般。 这家店位于喜洲镇的中心广场旁,有一排桌椅供游客们在小店买了吃喝后休息,主要是防晒。严家大院也在广场旁边,不过我们对此都不感兴趣就没进去参观。 稼穑集農耕文化艺术馆 不到一个小时我们逛完了喜洲镇,坦白讲也没啥可逛的。除了吃以外,这些翻新的建筑也就走马观花看一看。但俗话说得好,来都来了,换条小路继续逛逛吧,意外地发现了这座農耕文化艺术馆,很是惊喜。 这稻田是真的好看。 从喜洲镇出来,虽然地图上显示海舌生态公园停止营业,但来都来了,这么近的距离还是开车过去看看。公园确实还在维修建设中,尘土飞扬,还有很重的柴油味。路边看洱海水质一般,却有老哥在湖边钓鱼,也不知道收获如何。 大理古城 返程前在车上小憩一会,开回大理古城已过五点。天色渐暗,还飘起了毛毛细雨。 大理古城人依旧不多,没有太阳后非常凉爽,逛起来很舒服。 晚餐是点评上搜的特色菌菇锅,菌菇的种类非常丰富,还有火腿肉,味道不错,物美价廉。 大理古城商业化成熟,麦当劳、星巴克、屈臣氏等连锁店一应俱全。小店和国内的其他古城、古镇也都差不多,没啥意思。 九点回到民宿,再次登上楼顶欣赏洱海夜色,结束这一天。 09.27环海东路、双廊古镇与丽江和府洲际酒店 早餐,人生的一半。民宿的米粉好吃。 回屋喝杯茶,收拾好行李,准备出发游玩洱海的东半部分。今天计划沿环海东路一路边开边欣赏湖景、拍照,时间有限跳过挖色镇,在双廊古镇吃午餐,最后回丽江的酒店歇脚。 环海东路 后视镜里的世界,越来越远的道别。 蓝天白云,车少,开起来非常爽。有些路段有绿道可供游客跑步、骑行,旁边靠湖的草坪有几组人在拍婚纱照。我们也在附近停车,下来走走拍拍。 走,过去看人拍婚纱! 这个天气、景色以及人流来拍婚纱还是蛮不错的。 右前方应该是金梭岛。 天境阁景区这有一个下坡大拐角路段,特意规划停车位供游客驻足赏景。 沿路能看到不少租敞篷甲壳虫或小跑车的店,也确实有人租(顶着这么强的紫外线也是够拼😅)。 给这辆小破车也来一张,虽然是租来的车。 抬头可见罗荃塔。 看起来下方有些布景可供游客拍照。 铁门把山旁有一段路还在维护,两边都有工人指挥,双向单车道。 双廊古镇 两点半出头,我们来到了双廊古镇。 从主干道往巷子里看通向洱海。 走到靠湖的尽头,跨过这座桥,来吃点评推荐的石板烧。 二楼的风景也是不错,能看到桥的另一侧。 和平时吃的烤肉味道差不多,此时已是下午三点,开吃! 凉拌木耳酸辣清爽。 当地特色饵丝,吃不惯。 饭店厕所门前的景色竟然也不错。 吃饱再散步消消食。这里景色说不上有多美,但给人感觉安逸闲适。杨丽萍的违章建筑太阳宫就在隔壁,不过需要喝下午茶才让进,略过。 随便找条大点的巷子走进去看看。 有台阶走下去,湖水还算清澈。 另一侧民宿的风格很网红哈哈。 返回停车场的路上还跟一位老奶奶买了几个石榴,甜。 没想到腾讯云已经把“魔手”伸向了云南一个旅游古镇的公厕! 出发回丽江。 六点四十抵达三义收费站,夕阳很美。 和府洲际酒店 提前订房时已经被告知没有英迪格的房源,IHG对比之下少个小院子,算是小小的遗憾。不过IHG也蛮棒的。 提前搜好附近好评的铁锅鱼,套餐才六十多块,店的环境也不错,性价比无敌。 土豆片居然带着淡紫色,第一次见。 快十点回到酒店,去礼宾部取上明天雪山的门票,一切就绪只待出发。 下一集 《2020云南游记(中)》

2021/10/4
articleCard.readMore

Jazz guitar foundations

Note of preparatory courses of Cai Jian (蔡剑) jazz guitar lessons by Qihao Chen (陈启豪). Course 1 Four stages of practice: Learn the thing from unknown to known Get familiar with it on the instrument Apply it to your playing like melodic sequence Internalization The first step of learning jazz guitar Know every note of strings and frets on the standard tuning guitar. CAGED system Think about the positions on fretboard corresponding to the note invervals Playing a scale can reflect the sequence of intervals 3NPS (3 Notes Per String) Chord Two important factors: Root note Type of chord Think of the C major chord by harmonizing C note in C major scale, so the other notes in the scale with third intervals are E and G. Same thing to the other notes or scales, we have these common chords: Triads: major (1, 3, 5), minor (1, b3, 5), augmented (1, 3, #5), diminished (1, b3, b5) 7th chords: major (1, 3, 5, 7), dominant (1, 3, 5, b7), minor (1, b3, 5, b7), half diminished (1, b3, b5, b7), diminished (1, b3, b5, bb7), minor major (1, b3, 5, 7), augmented major (1, 3, #5, 7) Figure out the root position of chords Know the members of chord due to its type Find the root notes on 4th to 6th strings Find the position of other notes due to the intervals In this way we can infer 5 common patterns (R, 5, 7, 3 and R, 7, 3, 5) by CAGED system of each type of chords. Chord-scale system The chord is equal to the scale and vice versa. Think that a heptatonic scale (like diatonic scale) is consist of 4 notes of the 7th chord which the root note is harmonized with other 3 extensions. In the other hand, 4 notes determine the type of chord, and 3 extensions determine the type of scale. Like playing a maj7 could be Ionion or Lydian mode scales, plus a #4 extension makes it a Lydian. Rhythm Beat: the unit of time for music, BPM (Beats Per Minute) Metre: the regularly recurring patterns and accents such as bars and beats Rhythm: the combination of beat and metre over time Homeworks C major scale on CAGED system: Cover all notes of 5 positions Start and end from other notes instead of the root note Various scale patterns Find the note position due to interval Imagine you have two pairs of cards, one pair are ascending and descending order cards, another one are interval cards like minor 2nd, major 2nd, minor 3rd, …, etc Pick the root note and each one card from two pairs like F on 6th string, ascending and perfect 5th Find the the ascending perfect 5th note of F on 6th string Tips Try to think faster before playing. Inversion of interval of two notes, 9 = perfect 4th and perfect 5th = major 3rd and minor 6th Maybe you can try this mini app Fingerboard mate Course 2 Modes Older than natural major/minor scales. Tonic relative to major scaleNameInterval sequenceTonic 7th chord INatural major scale, Ionian mode1, 2, 3, 4, 5, 6, 7△7 IIDorian mode1, 2, b3, 4, 5, 6, b7-7 IIIPhrygian mode1, b2, b3, 4, 5, b6, b7-7 IVLydian mode1, 2, 3, #4, 5, 6, 7△7 VMixolydian mode1, 2, 3, 4, 5, 6, b7dom7 VINatural minor scale, Aeolian mode1, 2, b3, 4, 5, b6, b7-7 VIILocrian mode1, b2, b3, 4, b5, b6, b7-7b5 C major scale we practiced before has same notes to the D dorian, E phrygian, F lydian, G mixolydian, A aeolian and B locrian. Practice hints with fifth circle Start from dorian and mixolydian modes which are ofren used for minor and dominant chords Change root note and practice with corresponding interval sequence on C major scale on CAGED system Modulation: play each key along with fifth circle on one position area of CAGED system Write down the notes of major scale, modes name and corresponding tonic chords to help remembering Play tonic chord before and after scale/mode Practice root position for one kind of chords along with fifth circle on one position area of CAGED system, like play major chords in 12 keys on C position then go to other positions, then change to minor chords, dominant chords… Subdivision Dividing the beat into smaller units. Swing 8th are perfoming by one 1/3 triplets and another 2/3 triplets, counting triplets beats in mind. Comping Providing background like chords, timing, etc to make improvised solo or meldoy lines a complete work. It also has lots of possibilities as same as solo to create or renew the song. Recommend the guitarist Freddie Green to know more. Homeworks Know well about the name and interval sequence of 7 modes Random root note with random mode to practice Play swing 8th Proficient in playing major II-V-I chords in each key Random root note Play swing 4th (mute the third beat in triplets) Course 3 Minor II-V-I In the natural minor scale (1, 2, b3, 4, 5, b6, b7), the tension can’t be resolved due to both V and I are minor chords. Thus leverage the harmonic minor scale (1, 2, b3, 4, 5, b6, 7) to make V to be dominant chord, but also keep the II and I chords in natural minor scale to construct the minor II-V-I. Comparing to the V in major scale (1, 2, 3, 4, 5, 6, b7), the V in harmonic minor scale (1, b2, 3, 4, 5, b6, 7) has b9 and b13 notes which is called altered. Typically, a dominant seventh chord is considered altered if either or both the 5th or 9th are chromatically raised or lowered (#9 or b9 and #11 or b13). In result, the minor II-V-I is m7b5-dom7alt-min7. You can also change the I to minMaj7 if you prefer harmonic minor scale. Phrygian dominant mode There are also 7 modes based on harmonic minor scale, the most common one is the 5th mode phrygian dominant. When you see a G13 chord, it must comes from a major scale. And when you see a dom7b9, you can infer that it comes from the V in minor scale, then you can play phrygian dominant. Moreover, the basic patterns to play minor II-V-I are locrian for minor II, phrygian dominant for minor V and aeolian or dorian for minor I. Avoid note Avoid note will change the functionality of chords. For major and dominant chords, the avoid note is 4th diatonic scale step (11), the available extensions are 9, #11, 13. For minors chords, the avoid note is 6th scale step (13), the available extensions are 9, 11. There is an exception, it can work if the minor chord acts as dominant function. For instance, replace V dominant by IV minor and the progression turns to be IV major, IV minor and I major, sounds great. Avoid notes for modes of the C major scale: Scale degreeChordModeAvoid noteAvailable tensions 1Cmaj7IonianFourth scale step, F9, 13 2Dm7DorianSixth scale step, B9, 11 3Em7PhrygianSecond and sixth scale steps, F and C11 4Fmaj7LydianNo avoid note9, ♯11, 13 5G7MixolydianFourth scale step, C9, 13 6Am7AeolianSixth scale step, F9, 11 7Bø7LocrianSecond scale step, C11, ♭13 Steps to learn a standard Listen multiple versions of the song with lead sheet, figure out the form of the song. Practice the melody and chords of the song. Practice scales and arpeggios through the chords. Improvisation. This a really comprehensive topic, try to find the 3rd notes of every chords at first. Homeworks Harmonic minor scales on CAGED system with 5th dominant 7th chord, for example A harmonic minor scale with E7 on 5 positions. II-V-I progression of relative keys. For C major and A minor keys, the progression is Dm7-G7-C-Bm7b5-E7Alt-Am7. Try chord progression in other keys as well as arpeggios. Course 4 Melodic minor scale The ascending melodic minor scale, aka jazz minor scale: 1, 2, ♭3, 4, 5, 6, 7 The descending melodic minor scale: 1, 2, ♭3, 4, 5, ♭6, ♭7 Modes of the ascending melodic minor scale: ModeNameAssociated chords IAscending melodic minorC minor major 7 (9, 11, 13) or C minor 6 chords (functions as i minor) IIPhrygian ♮6, Dorian ♭2, Assyrian, or PhrygidorianD7sus (♭9, ♯9, 13) chord, with ♭2 as a non-chord tone producing a minor ninth IIILydian augmented or Lydian ♯5E♭ major 7♯5 (9, #11) chord (functions as a III+) IVLydian dominant, Lydian ♭7, Acoustic scale, Mixolydian ♯4, Overtone, or LydomyxianF7 (9, ♯11, 13) chord (functions as a dominant, secondary, or substitute dominant) VMixolydian ♭6, Melodic major, fifth mode of Melodic minor, Hindu, or MyxaeolianG7 (9, ♭13) chord (functions as a dominant with ♭13 as a non-chord tone or the fifth avoided in the chord voicing as they produce a minor ninth) VILocrian ♮2, Half-diminished, or AeolocrianA minor 7♭5 (9, 11, ♭13) (functions as a ii chord in the fifth mode of melodic minor) VIISuper Locrian, Altered dominant scale, or altered scaleB7 (♯ or ♭9, ♯11, ♭13) chord (functions as a dominant with the fifth of the chord replaced by ♯11 or ♭13, may also be used to harmonize a vii7♭5 chord in melodic minor) Tritone substitution If two chords share the same 3rd and 7th notes, they will have similar sound thus can replace each other. For example, we can play IIm7-bII7-I△7 instead of IIm7-V7-I△7 to make bassline changing smoothly. Lydian dominant is the most important mode of melodic scale, the only difference with mixolydian mode is #4 note. One common scenario to apply this mode is with tritone substitution, an approach to help finding the positions on fretboard quickly. If you want to play the V dominant altered scale on V7 chord, it’s exactly the bII lydian dominant scale on bII7. Homework Melodic minor scales on CAGED system with related tonic chords. References Mode Avoid note Jazz scale

2021/8/22
articleCard.readMore

吉他保养简记

电吉他指板与漆面 品丝 品丝如果有锈迹可使用 MusicNomad MN104 品丝抛光剂打磨,注意使用品丝护理片或在打磨前贴上胶带以保护指板。如果观察品丝缝隙有较多污渍,可用小勾刀轻轻刮掉。 指板 玫瑰木:使用 Dunlop 6524 指板清洁剂和 Dunlop 6532 深层护理,预算有限也可使用 Dunlop 6554 柠檬油。 枫木: 上过油漆,用布擦拭。 无漆,用沾水的布擦拭,不要使用任何护理品。 石墨、碳纤维:用布擦拭即可。 TBD:烤枫木、乌木。 琴体 聚酯漆:如墨芬和日芬,用沾水的布擦拭即可。 聚氨酯漆:现代琴居多,使用 Dunlop 654 上光清洁剂和 Dunlop 6574 抛光巴西棕榈乳液。抛光先将乳液抹匀,然后使用电磨机配抛光棉抛光。 硝基漆:复古琴居多,用布擦干后使用 Prefox AC201 蜂蜡抛光。 哑光漆:如 James Tyler,使用 Zippo 油擦拭。 电吉他状态调节 检查琴颈 方法一:变调夹夹住第一品,手指按住六弦最后一格,看 8 品的弦距是否在 0.25mm 左右,大于该数值说明琴颈过弯需调直,小于则说明过直需放松。 方法二:使用琴颈尺观察。 调节琴颈 以复古琴为例,松琴弦后用变调夹夹住 1 品,拧螺丝拆下琴颈。使用一字螺丝刀调节琴颈内的钢筋,若需调直则顺时针方向旋转,一次不要超过 30°。上螺丝时对角顺序安装。 调节琴桥 根据指板弧度选择对应的弧度尺。先调节琴码使六弦 12 品弦距 2mm、1弦 12 品弦距 1.6mm,将弧度尺放至琴弦下,挨个调节其他琴码使所有琴弦贴合弧度尺,可以拨动琴弦看是否会被弧度尺闷住。若琴码有两颗螺丝,则要注意将琴码调平。 对于 Gibson 类型的一体琴桥,由于其弧度是固定的,只需使用扳手调节一弦和六弦的高度即可。拉弦板为了获得最大的张力可调至最低,注意不要角度过大使琴弦碰到琴桥。还可以将琴弦反向穿过拉弦板再压上琴桥。 调节拾音器的高度 如果不知道要怎么调可以参考这篇文档的数据,具体还是以琴的实际听感为准。此外更换品牌拾音器通常可以参考官方提供的数值,以Lace拾音器为例: 按住高音E弦的21品,琴弦到拾音器的高度为:琴颈 1.5mm,中间 2.0mm,琴桥 1.0mm; 按住低音E弦的21品,琴弦到拾音器的高度为:琴颈 2.5mm,中间 3.5mm,琴桥 2.0mm; 如果一把琴的两个或三个拾音器的功率不同,将它们调至同一高度后,需对功率较小的拾音器再次调节,使其音量与其他拾音器音量保持一致。如果同时有单拾音器和双拾音器,可以不追求音量平衡,发挥各自拾音器的特色。 冬季木吉他保养 湿度控制是关键(40%-55%) 加湿器:冷蒸发式 > 超声波式 吉他恒湿柜 音孔加湿器 塑封袋一面打几个小孔,里面放一块干净湿润的毛巾,将塑封袋放入木吉他音孔中 保养tips 一段时间不弹的琴放琴盒,琴弦松一个全音 擦指板 均匀喷洒 Dunlop 6524 指板清洁剂后,如果特别脏可先用毛刷轻刷,然后折叠纸巾(使用琴布略微有点浪费)擦拭 使用纸巾按压吸收 Dunlop 6532 的护理油,再用纸巾轻轻擦拭指板 擦琴体 选一块好的琴布:表面无较硬颗粒、有一定的韧性、化纤含量少擦拭久了发热量小 对折琴布到可以握住,擦拭的面积为长条型,检查擦拭区域不脏、无杂质 将 Dunlop 654 清洁剂喷在琴布擦拭区域,轻擦琴体(有污渍的地方),擦拭时朝一个方向 参考与推荐视频 【光头说】自己给吉他Setup:Nut和Relief【Trebor_TTTTT】 【光头说】自己给吉他Setup2:Saddle【Trebor_TTTTT】 【光头说】自己给吉他Setup3:八度音准【Trebor_TTTTT】 【光头说】自己给吉他Setup4:拾音器高度【Trebor_TTTTT】 【光头说】自己给吉他做Setup:木吉他篇【Trebor_TTTTT】 【Tubes&Tone】我如何调节拾音器Pole Piece? Pickup Height Specs 冬季吉他保养基础攻略 夏式吉他保养调整一条龙服务初探 电吉他的调节与保养流程,曲度、弦距、八度、琴桥等所有都在里面了 怎样绕线不打结? 【天线吉他实验室】简单实用调琴指南,教你如何调节出满意舒适的吉他手感 电吉他为什么爱打品?极度硬核讲解&品丝找平修复过程 吉他保养之【如何擦琴】小白科普向 吉他要天天擦吗?你会擦琴吗?如何判断漆面和清洁液是否匹配 【小白扫盲】雅马哈技师如何手感调试 Lace Sensor Gold - Single Coil Pickup

2021/8/11
articleCard.readMore

音乐基础速查笔记

和弦 七和弦 和弦英文名音程关系标记(以C和弦为例) 大七和弦Major seventh chord1、3、5、7Cmajor7、Cmaj7、Cma7、C△7 增大七和弦Augmented major seventh chord1、3、#5、7Cmaj7#5、C△7#5 小七和弦Minor seventh chord1、b3、5、b7Cminor7、Cmin7、Cmi7、Cm7、C-7 属七和弦Dominant seventh chord1、3、5、b7Cdominat7、Cdom7、C7 半减七和弦Half-diminished seventh chord1、b3、b5、b7Cm7b5、C-7b5、Cφ7 减七和弦Diminished seventh chord1、b3、b5、bb7Cdimish7、Cdim7、Co7 小大七和弦Minor major seventh chord1、b3、5、7CminMaj7、CmMaj7、CmM7 变化属七和弦Alt chord包含变化延伸音的属七和弦 斜线与转位和弦 斜线和弦(Slash chord):将和弦原有的根音换成其他音,如 Dm/G 表示将 Dm 和弦的根音换成 G 转位和弦(Chord Inversions):当和弦最低音为根音时称为原位和弦,最低音为其他构成音时称为转位和弦 密集与开放排列 密集排列和弦(Close position chord):和弦音的排列从最低音到最高音不超过一个八度 开放排列和弦(Open position chord):和弦音的排列从最低音到最高音超过一个八度 Drop和弦 Drop2 chord:将密集排列七和弦第二高音降低一个八度 Drop3 chord:将密集排列七和弦第三高音降低一个八度 Drop2&3 chord:将密集排列七和弦第二、三高音降低一个八度 Drop2&4 chord:将密集排列七和弦第二、四高音降低一个八度 251进行 大调 251 进行:大调顺阶和弦的二级、五级和一级的和弦进行,如 C 大调的 251 进行为 Dm7、G7、Cmaj7 小调 251 进行:爵士乐小调 251 即兴中,5 级和弦选择属和弦而非顺阶的小和弦,如 C 小调的 251 进行为 Dm7b5、G7、Cm7 重属和弦与三全音替代 重(次)属和弦(Secondary dominant chord):解决到主和弦以外的其他调内和弦(半减七、减七和弦除外)的属和弦 三全音替代(Tritone substitution):使用距离原本属和弦根音三全音位置的属和弦替代 和弦琶音、延伸音 和弦琶音(Arpeggio):由和弦内音组成的一串音,通常用于即兴中构建乐句 和弦延伸音(Tension):非和弦基础部分构成的音,为和弦增添了额外的色彩 音阶 自然大小调 音阶英文名音程关系 自然大调(I级)Natural major scale, Ionian mode1、2、3、4、5、6、7 大调II级调式Dorian mode1、2、b3、4、5、6、b7 大调III级调式Phrygian mode1、b2、b3、4、5、b6、b7 大调IV级调式Lydian mode1、2、3、#4、5、6、7 大调V级调式Mixolydian mode1、2、3、4、5、6、b7 自然小调、自然大调VI级Natural minor scale, Aeolian mode1、2、b3、4、5、b6、b7 大调VII级调式Locrian mode1、b2、b3、4、b5、b6、b7 和声小调 音阶英文名音程关系适用和弦 和声小调(I级)Harmonic minor1、2、b3、4、5、b6、7minMaj7 小调II级调式Locrian 61、b2、b3、4、b5、6、b7min7b5 小调III级调式Ionian augmented/#51、2、3、4、#5、6、7maj7#5 小调IV级调式Dorian #41、2、b3、#4、5、6、b7min7 小调V级调式Phrygian dominant1、b2、3、4、5、b6、b7dom7, susb9 小调VI级调式Lydian #21、#2、3、#4、5、6、7maj7 小调VII级调式Super locrian b71、b2、b3、b4、b5、b6、bb7dim7 旋律小调 TBC… 其他常用音阶 音阶英文名音程关系 大调五声音阶Major pentatonic scale1、2、3、5、6 小调五声音阶Minor pentatonic scale1、b3、4、5、b7 大调布鲁斯音阶Major blues scale1、2、b3、3、5、6 小调布鲁斯音阶Minor blues scale1、b3、4、#4、5、b7 全半减音阶Whole half diminished scale1、2、b3、4、b5、#5、6、7 半全减音阶Half whole diminished scale1、b9、#9、3、#11、5、13、b7 全音阶Whole tone scale1、2、3、#4、#5、#6 增音阶Augmented scale1、b3、3、5、#5、7 Bebop dorian1、2、b3、3、4、5、6、b7 Bebop dominant1、2、3、4、5、6、b7、7 Bebop major1、2、3、4、5、#5、6、7 Bebop melodic minor1、2、b3、4、5、#5、6、7 音程推导

2021/7/18
articleCard.readMore

开车有三宝

开车有三宝: 变道、转向不打灯, 并线或占两车道行驶, 限速 60 开 40,限速 80 开 50,限速 120 开 80。 “奇葩”的违规行为数不胜数,以上三宝只因过于常见可以作为模式归纳。 三宝们配合上横冲直撞的电瓶车“大军”,在马路上构建出一幅幅和谐、美好的画面。 真好,呵呵。

2021/4/26
articleCard.readMore

Getting started with AAD integration in JavaScript

Relationship between OAuth2.0, AAD and MSAL Definitions OAuth 2.0 OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. Azure Authentication Directory One of OAuth 2.0 and OpenID Connect standard-compliant authentication service enabling developers to authenticate work or school accounts. It’s the implementation which supports OAuth 2.0. It’s the component of Microsoft Identity platform. Microsoft Authentication Libraries Open source libraries for several clients to authenticate users using AAD, Microsoft personal accounts (MSA), and social identity providers like Facebook, Google, LinkedIn, Microsoft accounts, etc. Usage scenario Workflow and implementation Authentication flow Two APIs Only two APIs requested from client-side, very simple. Notice that /oauth2/v2.0/authorize is document type. Redirect URI setup For CORS and redirect target from sign-in page usage, should configure it on both Azure Portal and codebase. Configuration on Azure Portal oauth.html Usually we will set two reply URIs, one is probably the homepage as redirect target after signed in, another is used for requesting token silently. The silent token refresh loads an iframe using that empty oauth.html file, and that same oauth.html file needs to receive the response back, so the acquire token silent flow provides the /oauth.html endpoint as the redirect URI. This is different from the user-facing flow because there is no iframe that the middleware loads into the page, redirecting back to oauth.html will not hook into React or MSAL and auth would halt – it must redirect back to your react app in the user-facing flow. Code configuration 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 const config = { auth: { // The application ID of your AAD application clientId: "11111111-1111-1111-111111111111", // The authority URL for your application authority: "https://login.microsoftonline.com/common", // Defaults to application start page redirectUri: "https://localhost:3000", postLogoutRedirectUri: "https://localhost:3000/logout" } } const loginRequest = { scopes: [`${resourceEndpoint}/.default`] } Authority The authority is a URL that indicates a directory that MSAL can request tokens from, for more details check the MSAL Application configuration options. Scopes and permissions Applications that integrate with the Microsoft identity platform follow an authorization model that gives users and administrators control over how data can be accessed. /.default represents OpenID Connect scopes, for more details check the Permissions and consent in the Microsoft identity platform. Sign-in with redirect It’s no need to redirect to sign-in page every time if auth is not expired, just go ahead. You can also sign-in with a pop-up window. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 let username = ""; const msalInstance = new PublicClientApplication(config); function handleResponse(response) { //handle redirect response // In case multiple accounts exist, you can select const currentAccounts = msalInstance.getAllAccounts(); if (currentAccounts === null) { // No accounts detected, need to login msalInstance.loginRedirect(loginRequest); } else if (currentAccounts.length > 1) { // Add choose account code here } else if (currentAccounts.length === 1) { username = currentAccounts[0].username; } } msalInstance.handleRedirectPromise().then(handleResponse); Authorization code After signed in successfully, page will redirect to the redirect URI we set before with the authorization code. MSAL.js library will handle it automatically, we can observe the code on the navigation bar. Then the library will parse the authorization code and send the request to get token back directly, all logics encapsulated. Here is the structure of the decoded code. Acquire a token with a redirect The pattern for acquiring tokens for APIs with MSAL.js is to first attempt a silent token request by using the acquireTokenSilent method. When this method is called, the library first checks the cache in browser storage to see if a valid token exists and returns it. When no valid token is in the cache, it sends a silent token request to AAD from a hidden iframe. The silent token requests to AAD might fail for reasons like an expired Azure AD session or a password change. In that case, we need to redirect or using a pop-up window to acquire tokens. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 const accessTokenRequest: AuthenticationParameters = { scopes: [`${resourceEndpoint}/.default`], authority: this.authority, redirectUri: "https://localhost:3000/oauth.html", account: this.account } msalInstance.acquireTokenSilent(accessTokenRequest).then(function(accessTokenResponse) { // Acquire token silent success // Call API with token let accessToken = accessTokenResponse.accessToken; }).catch(function (error) { //Acquire token silent failure, and send an interactive request console.log(error); if (error.errorMessage.indexOf("interaction_required") !== -1) { msalInstance.acquireTokenRedirect(accessTokenRequest); } }); Why use redirect way? If users have browser constraints or policies where pop-ups windows are disabled, you can use the redirect method. Use the redirect method with the Internet Explorer browser, because there are known issues with pop-up windows on Internet Explorer. Choice of MSAL.js You will find so many packages when you visit MSAL.js repository, APIs used above should be compatible across the packages, then question comes: how to make a choice? Besides node package using in the server-side, I recommend msal-browser (Microsoft Authentication Library for JavaScript v2.x) or other UI framework wrappers based on it, for its implementation of OAuth 2.0 Authorization Code Flow with PCKE as well as it’s OpenID-compliant. These packages are just official engineering implementations, not so well-documented yet, I had to read the source code for debugging before. Anyway as long as you master the workflow of authentication, it would not be too complicated. Migration from AdalJS to MSAL.js AdalJS is the legacy library for AAD authentication used by so many dated products. If you don’t have any idea about this section, the official document explains Why switch to MSAL clearly. Tips You may need to change the reply URL type from Web to SPA as MSAL.js required. AdalJS supports both two types, so this change will not block online client services. Need to specify the accessTokenAcceptedVersion to 2 and signInAudience to AzureADandPersonalMicrosoftAccount in the manifest if you want to support both AAD account and MSA account. These settings will not break online client services as well. You can just import the MSAL.js distribution script to your app then test if the current AAD configurations are satisfying both SDKs. If there is an auth service for the app, you can just do silent login with ssoSlient(). Remember to test all kinds of audiences of the customers and all provided resouce endpoints with access token. Quick login verification on you app page PoC (Proof of concept) or verfication always needs quick moves. For the migration scenario, we have to make sure the AAD configurations are correct as well as compatible to make both AdalJS clients and MSAL.js clients login successfully at first stage. To do the quick login verification, the authentication client class need to be exposed to Window global no matter AdalJS or MSAL.js, then we can do experiment on the console of browser. For MSAL.js Please refer to the document, it’s similar to the codes demonstrated above. For AdalJS The docs for AdalJS are much fewer than MSAL.js probably becasue it has been deprecated. And different versions of AdalJS seems to have few subtle API as well as behavior changes, so you may need to update the code below to make it work. My test code is based on AdalJS v1.0.8. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 var authContext = new AuthenticationContext({ instance: "https://login.microsoftonline.com/", clientId: "Client ID of AAD app", redirectUri: "Reply URL of AAD app", postLogoutRedirectUri: window.location.href, cacheLocation: 'localStorage', endpoints: { graphApiResourceEndpoint: "https://graph.microsoft.com/" }, }) // Implement the pop-up login flow authContext.config.displayCall = function (url) { authContext.config.displayCall = null; var popup = window.open(url, 'auth-popup', 'width=800,height=500'); var intervalId = window.setInterval(function () { try { // Assume your reply URL contains "/signin" if (popup.location.pathname.indexOf('/signin') >= 0) { window.clearInterval(intervalId); // Pass the ID token for AdalJS to parse window.location.hash = popup.location.hash; // But AdalJS will not clean the "#" tag in url, so it will redirect in the handleWindowCallback(). // I'd like to add a breakpoint inside to update the value of "adal.login.request" key to stop redirection. // Just read the source code if you don't know what I mean. authContext.handleWindowCallback(); popup.close(); var user = authContext.getCachedUser(); if (user) { console.log(JSON.stringify(user)) } else { console.error(authContext.getLoginError()); } } } catch (whatever) { if (popup.closed) { console.error(whatever) } } }, 100); }; // Login via a pop-up window authContext.login(); // Inspect the access token after logining authContext.acquireToken("https://graph.microsoft.com/", function() { console.log(arguments); debugger }) Frequently asked issues Debugging and verification approach You can’t verify your change until the production release, also the change for the production environment can’t be verified on other staging environment since they are using different hosts. So the question is how to debug or do verification? Basically you can run a local server to host your application with adding a host record which points the production host to your local IP address like 127.0.0.1 to make it. Remember to enable HTTPS protocol for your local server. And it’s better to verify your change on both common window and incognito window after the release. Difference between access token, ID token, and refresh token We observed that /oauth2/v2.0/token return 3 tokens: access_token, id_token and refresh_token. access_token enables clients to securely call protected web APIs, and are used by web APIs to perform authentication and authorization. For more details please check Microsoft identity platform access tokens. id_token should be used to validate that a user is who they claim to be and get additional useful information about them, it can be sent alongside or instead of an access token. We have not used it. For more details please check Microsoft identity platform ID tokens. access_token and id_token are both JWT which consists of a header, payload, and signature portion, that’s why they look so similiar though these two strings are base64 encoded. We mainly use access token for the application, it contains more information than ID token, and we can get user info like name, E-mail from it. Because access tokens are valid for only a short period of time, authorization servers will sometimes issue a refresh token at the same time the access token is issued. MSAL.js will exchange the refresh_token while request token silently for a new access token when needed. How to change token expiration time? Please check this answer from StackOverflow. InteractionRequiredAuthError: AADSTS50058: A silent sign-in request was sent but no user is signed in. This error need interaction sign in, thus catch the error and call acquireTokenRedirect method to sign in. If the error message contains like this “The cookies used to represent the user’s session were not sent in the request to Azure AD. This could happen if the user is using Internet Explorer or Edge, and the web app sending the silent sign-in request is in different IE security zone than the Azure AD endpoint (login.microsoftonline.com).”, upgrade your MSAL.js v1.x to v2.x. Check more details here. The frame attempting navigation of the top-level window is sandboxed, but the flag of ‘allow-top-navigation’ or ‘allow-top-navigation-by-user-activation’ is not set. This error usually occurred while requesting token, mostly it’s caused by wrong reply URL which iframe could not load it to request token silently. So make sure your reply URL pointing to the blank static HTML resource is right. Additional, this error message is somehow confusing cause it does not tell the root cause directly, check more details here. BrowserAuthError: pcke_not_created: The PCKE code challenge and verifier could not be generated. Check the protocol and be sure it’s HTTPS. References Microsoft identity platform and OAuth 2.0 authorization code flow What is the Microsoft identity platform? OAuth 2.0 authentication with Azure Active Directory Single-page application: Sign-in and Sign-out Single-page application: Acquire a token to call an API MSAL Application configuration options Permissions and consent in the Microsoft identity platform Configurable token lifetimes in the Microsoft identity platform Microsoft identity platform ID tokens Microsoft identity platform access tokens Quickstart: Register an application with the Microsoft identity platform

2021/4/14
articleCard.readMore

邂逅爵士乐——记在台湾的一段美好经历

各位新春快乐! 很早就想创建一个音乐分类,不如就在新年伊始开个头,碎碎念几句我是如何喜欢上爵士乐的。 大家可能在咖啡厅、欧美流行音乐中都或多或少听过一点爵士乐,但要说第一次正儿八经接触这种音乐形态,并让我深深爱上它,源自一场在我研究生入学没多久的爵士乐社招新演出。 那是2014年秋,成大爵士乐社在校园社团博览会上的表演。 露天舞台下所有人享受着美妙的音乐和社员分发的小杯鸡尾酒,炎炎夏日感受到无限清凉。 虽然这只是LG G2手持录制的片段,但每次看到这段回忆仍会被深深感动。说起来G2是最早搭载OIS光学防抖的手机,也是当时最窄边框的手机,我从那个时候开始就对手机拍照有较高的要求,淘了这么个韩国水货“洋垃圾”,现在回看当年拍的照片和视频也算能入眼,深感欣慰! 没有任何迟疑,我立即报名参加了爵士乐社,在此期间参加了几次社内的培训活动,了解了爵士乐的一些基本概念,甚至那会就装上了iReal Pro,可惜荒废了这么多年!现在还能回想起,有一次大伙去一个社员家的天台烧烤,酒足饭饱,自然是jam时间,那种氛围真的是超级好。 另一件非常值得分享和回忆的活动,便是在加入爵士乐社后没多久,地处花莲的东华大学音乐学院爵士组举办的第二届爵士研习营。报名费用非常便宜,三天时间人民币800块(新台币4000)包吃住,师资阵容也不错,不得不夸一句台湾的这些活动真的很良心。在收到成大爵士乐社的报名通知并跟研究生导师请好假后,我也毫不犹豫地报了名。不过去了后才知道,几乎没有我这种毫无基础的营员😥,除了少量玩得不错的爱好者外,大多数还是职业乐手和音乐系的学生。 社团成员都是穷书生,大家为了省钱一大早坐六点多的台铁出发前往花莲,抵达花莲站时已经中午十二点多。 一群人抵达东华大学后,立马前往音乐系报道并领取研习营的资料,包含时间表、一些简易的课件等。 当天晚上便开始研习营的课程,每节课后必会有jam,特别的嗨! 东华大学是台湾最美的大学之一,同时是台湾最早开始在音乐系设立爵士主修的学校,其音乐系也是台湾唯一大学部跟硕士班同时有爵士演奏主修的音乐系。 音乐系看起来很朴素,与大自然融为一体。 爵士萨克斯风演奏家张坤德老师上课中,他毕业于伯克利音乐学院。这节课应该是研习营的第一次乐队齐奏课程,当所有声乐一同奏响的那一刻,我感受到了音乐现场的美妙与冲击力,那是在家里听音乐永远都体会不到的乐趣。 那一届爵士研习营请来了美国的爵士电颤琴演奏家Tony Miceli,尽管我当时无法辨别他的技术有多牛,不过仍记得他的演奏音乐性很强,能打动我这么一个小白,简单说就是好听。在他的乐理课程上,他要求我们每个人根据和声弹点东西,轮到我时我说不会,他说不要紧,无论你弹什么,你至少要弹几个音符给我。更囧的是,我当时带的还是一把没拾音器的箱琴,和我的看客身份简直绝配😅。其实我是一个自尊心很强的人,在研习营第一天发现自己与环境格格不入后,就有过想走的念头。已经忘记当时是和哪位老师交流,他劝我先留下来跟着听听再说,真的感谢他的建议,我也做到了! 傍晚黄昏,美到心醉。现在只能惋惜当初只去了两次花莲。 午饭后的jam活动,研习营的一大好处就是为营员创造了大量演出机会,只要想表演就上。说起来虽然东华大学音乐系的爵士组一直没有爵士吉他教师,但研习营还是欢迎吉他手参加,并邀请来了曾给《中国好歌曲》《中国梦之声》、刘若英、蔡健雅、丁当等等节目和歌手巡演做过电吉他手的邱安炜老师,专门给我们上了一节分享课。课上的 Q&A 环节我厚着脸皮问老师,对于我这种零基础的人该怎么学琴,老师非常详细地介绍了他学琴、练琴过程中不断检视自己的几个方面,当下就有不少顿悟。小炜老师当时拿了一把James Tyler的琴,那也是我第一次认识这个品牌。 研习营非常有心,除了演奏家、职业乐手外,还请来了一位业内非常资深的音控师高敏福老师,给大家分享现场演出时的调音知识。 除了常规的教学课程外,爵士研习营的举办人之一、音乐系爵士组的领头人魏广皓教授还与大家探讨了职业发展规划的话题。别说爵士乐这种“没市场的音乐”,就算从事流行大众音乐领域想赚到钱也不容易,未来的路该怎么走值得思考。 短暂而美好的爵士研习营结束后,我便回归课业将重心放在学业和项目,一晃就是五年。 感谢这段难得的经历,让我与爵士结缘。我会一直记得这些日子。

2021/2/22
articleCard.readMore

2021 微软内推,已协助超过十余位候选人拿到 offer

哈喽各位,2020年的时间仿佛被偷走了一样,一晃眼就来到了2021。 从2018年底第一次发帖为微软内推,现在已是第三个年头。在工作和生活之余进行这项活动,至今推成了三十多位候选人,对我来说是一件非常有成就感的事。每一批候选人入职后,请大家一起吃个饭、相互认识一下,偶尔也请HR同事一起顺道为新人们答疑解惑,这样的“网友”线下见面很有意思。公司尤其是苏州这边发展得速度也超乎想象,即将有一大批人搬到隔壁楼办公,而正式的二期大楼也已经开工。公司一直在持续发展、整体环境依然处于不错的水准,是我继续内推的动力。 回想过去大半年,其实我已经很少置顶自己的帖子去打广告,因为体验不好停掉了校招内推,这期间也陆续能看到其他同事的内推帖,甚至包括我内推进来的同事 LOL。不过还是能陆续收到一些咨询、请求内推的邮件,真的非常感谢大家对我的信任。我做内推的想法一直没变,真诚沟通,不骗简历,不歧视简历,尽量换位思考。 这里极简单的分享过去一年中的两个小故事。第一个也许有点老生常谈,一位职场经验不多的优秀候选人,同时拿到了两份大厂offer,很纠结,我从短期三五年职业发展的角度帮助他分析了两小时,给了他一些建议,即便这些建议可能让我拿不到内推奖金。第二个有点曲折,简而言之是候选人成功进来做了同事,工作很努力,但发展远不如预期,他自己过得也不是很开心。我们一年多的时间聊了好几次,我从一开始给一些工作效率、沟通效率的建议,到后面帮忙打听别组的机会,现在他开心地飞起,开始另一段业务挑战。 最后我也只是个普通的打工人,经验不多,个性耿直。不是所有找我内推的朋友我都帮推了,我内推的不少候选人最后也没通过所有面试,这太正常不过了。反正我就继续佛系内推,有缘多交流,最后来不来还是看候选人自身的实力和职业发展选择。 希望大家2021都能顺利,更重要的是,自己和家人身体健康! 至于如何找我内推,附上以往的内推帖,里面会有答案: 微软中国招聘,期待你的加入 分享一下我的内推心得,顺便招人 2020 微软内推,已协助超过十余位候选人拿到 offer

2021/1/18
articleCard.readMore

Hands-on linear regression for machine learning

Goal This is the sharing session for my team, the goal is to quick ramp up the essential knowledges for linear regression case to experience how machine learning works during 1 hour. This sharing will recap basic important concepts, introduce runtime environments, and go through the codes on Notebooks of Azure Machine Learning Studio platform. Recap of basic concepts Do not worry about these theories if you can’t catch up, just take it as an intro. Steps of machine learning Get familiar with dataset, do preprocessing works. Define the model, like linear model or neural network. Define the goodness/cost of model, metrics can be error, cross entropy, etc. Calculate the best function by optimization algorithms. Linear model Let’s start with the simplest linear model , you can also try more complex model if you get trouble in underfitting. Question: How to initialize parameters? Generalization The model’s ability to adapt properly to new, previously unseen data, drawn from the same distribution as the one used to create the model. Underfitting: model is too simple to learn the underlying structure of the data (large bias) Overfitting: model is too complex relative to the amount and noisiness of the training data (large variance) Solutions: References and resources, or Underfitting and Overfitting in machine learning and how to deal with it. Loss/Cost function There is a dataset for training, it looks like: , , …, . The error of should be , we can add all errors of data to define our loss function: Obviously the smaller loss, the better model. So our target function should be: Average value would be better than total sum, then we get the actual function that needs to be computed: Not big deal, just minimize the mean square error of our trivial linear model. Vectorized form You may have heard “feature” before, for each of data , if the number of its features is , then the actual model should be: Kind of verbose right? Let’s use to represent all feature weights to as well as the bias term , which called before. Same way, use to represent all the feature values to with is equal to 1. Then we can transform linear regression model to the vectorized form: Thus our loss function of vectorized form is: Notice that actually is -dimensional matrix. In addition, deep learning depends on matrix calculations especially, it will take advantage of GPU to speed up model training. Closed-form solution As we already know the values of and , it’s easy to calculate the by Normal Equation: Check out this online course video (about 16min) from Andrew Ng to learn more. Yes we’re done. Our introduction is here 🤣🤣🤣 . Question: How to deal with complex models? How about computation burden? Gradient Descent Gradient Descent is a generic optimization algorithm capable of finding optimal solution to a wide range of problems. Gradient descent is a first-order iterative optimization algorithm for finding a local minimum of a differentiable function. Our loss function is differentiable indeed, so we can use it to find the local minimum (also the global minimum in this case). Let’s get it by one chart. So here is the last equation in this post (I promise, typing these LaTeX expressions really wore me out 🥲 ), the gradient of our loss function: Question: disadvantages of gradient descent? Variants optimizers SGD, Stochastic gradient descent Adam Mini-batch gradient descent Adagrad Training tips Probably it’s enough for us to dig into the code, so the recap should be stopped here. At last, giving this tips section for some practical training techniques. Hyperparameters tuning/optimization, like pick a good learning rate L2 (Ridge) regularization Early stopping Feature engineering Feature selection by recursive feature elimination and cross-validation (RFECV) Feature scaling like normalization Data correction for dirty part Defining and removing outliers Update model to make it fits dataset better like add high order term for most important feature, or even you can use a neural network if you want 😏 Leveraging K-fold cross validation to split data and evaluate model performance Runtime environments Local I highly recommend using Conda to run your Python code even on Unix-like OS, and Miniconda is good to get start. Conda as a package manager helps you find and install packages. If you need a package that requires a different version of Python, you do not need to switch to a different environment manager, because conda is also an environment manager. With just a few commands, you can set up a totally separate environment to run that different version of Python, while continuing to run your usual version of Python in your normal environment. Cloud It’s cloud computing era, we can write and save our code on the cloud and run it at anytime with any web client. Two cloud platforms will be introduced here, I suggest you try both of them and enjoy your experiment. More specifically, these two products are all based on Jupyter Notebook, which provides flexible Python runtime and Markdown document feature, it’s easy to run code snippet just like on the local terminal. Notebooks of Azure Machine Learning Studio Here is a brief introduction of Notebooks of AML Studio, the advantages of this product are: IntelliSense and Monaco Editor adopted from Visual Studio Code are great. Rich sample notebooks are provided, and the tab view allows user to open several documents with several file types in one page. An one-stop platform for user to develop their machine learning project, you can take it as cloud IDE (Integrated Development Environment). For example, user can manager their huge datasets by Datasets, and then consume them in Notebooks. Google Colaboratory You can open ipynb file on Google Drive by this product, there are also several advantages: Cleaner and larger workspace. “Code snippets” feature is interesting, but not smart enough (like intelligent recommendation), nor rich code exmaples. It will create compute target or VM (virtual machine) for the user automatically. Download dataset from Google Drive, comment and share are easily. Code snippets You can check sample code on Google Colab here, and codes below will has slight differences. Target To predict the PM2.5 value of first ten hour by other nine hours data. Data preprocessing Original data structure looks like this: 00:0001:00…23:00 Feature 1 of day 1 Feature 2 of day 1 … Feature 17 of day 1 Feature 18 of day 1 Feature 1 of day 2 Feature 2 of day 2 … 24 columns represent 24 hours, 18 features with every first 20 days of month in one year, we have rows. Our target data structure of will be: Feature 1 of 1st hourFeature 1 of 2nd hour…Feature 1 of 9th hourFeature 2 of 1st hour…Feature 18 of 9th hour 10th hour of day 1 11st hour of day 1 … 24th hour of day 1 1st hour of day 2 … Number of columns should be , and rows should be . Preprocessing You may wonder why variable is capital and variable is lower-case, just Google matrix notation. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # Remove first useless columns: ID, Date, Feature name data = data.iloc[:, 3:] # Replace "NR" value by 0 data[data == 'NR'] = 0 raw_data = data.to_numpy() def cook_raw(raw_data): month_data = {} for month in range(12): sample = np.empty([18, 480]) for day in range(20): sample[:, day * 24 : (day + 1) * 24] = raw_data[18 * (20 * month + day) : 18 * (20 * month + day + 1), :] month_data[month] = sample X = np.empty([12 * 471, 18 * 9], dtype = float) y = np.empty([12 * 471, 1], dtype = float) for month in range(12): for day in range(20): for hour in range(24): if day == 19 and hour > 14: continue # Vector dim: 18 * 9 X[month * 471 + day * 24 + hour, :] = month_data[month][:,day * 24 + hour : day * 24 + hour + 9].reshape(1, -1) # Value y[month * 471 + day * 24 + hour, 0] = month_data[month][9, day * 24 + hour + 9] X[X < 0] = 0 return X, y X, y = cook_raw(raw_data=raw_data) Feature engineering by adding quadratice equation 1 2 3 # Polynomial regression: quadratic equation # 10th feature is PM2.5 X = np.concatenate((X, X[:, 9*9 : 10*9] ** 2), axis=1) Normalization 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # Normalization def _normalization(X): # Vectors dim: 18 * 9 mean_x = np.mean(X, axis = 0) std_x = np.std(X, axis = 0) # Length: 471 * 12 for i in range(len(X)): # Length: 18 * 9 for j in range(len(X[0])): if std_x[j] != 0: X[i][j] = (X[i][j] - mean_x[j]) / std_x[j] return X X = _normalization(X) Feature engineering by pruning unimportant features 1 2 3 4 5 6 7 8 9 10 11 12 13 # Delete features to prevent overfitting def prune(X): delete_cols = [] # Remove trivial features: NOx(#7), RAINFALL(#11) remove_idx = [6, 10] for i in remove_idx: delete_cols.extend(range(i * 9 + 1, (i + 1) * 9 + 1)) res = np.delete(X, delete_cols, 1) return res # Initialize bias values with 1 X_pruned = prune(np.concatenate((np.ones([12 * 471, 1]), X), axis = 1).astype(float)) Split training data into training set and validation set 1 2 3 4 X_train_set = X[: math.floor(len(x) * 0.8), :] y_train_set = y[: math.floor(len(y) * 0.8), :] X_validation = X[math.floor(len(x) * 0.8): , :] y_validation = y[math.floor(len(y) * 0.8): , :] Training and prediction Rough training 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # Loss function: RMSE def eval_loss(X, y, w): return np.sqrt(np.sum(np.power(X @ w - y, 2))/X.shape[0]) # Batch gradient descent def train(X, y, w = 0, reg = 1, iter = 8000): dim = X.shape[1] if type(w) == int: w = np.zeros([dim, 1]) learning_rate = 1.6 adagrad = np.zeros([dim, 1]) eps = 0.0000000001 for t in range(iter): loss = eval_loss(X, y, w) if(t%500==0): print('#' + str(t) + ":" + str(loss)) # Ridge regularization gradient = 2 * (X.T @ (X @ w - y)) + 2 * reg * w # Learning schedule by Adagrad adagrad += gradient ** 2 w = w - learning_rate * gradient / np.sqrt(adagrad + eps) return w w = train(X_train_set, y_train_set) Validate training 1 eval_loss(X_validation, y_validation, w) Training again and remove outliers 1 2 3 4 5 6 7 8 9 10 11 12 13 w = train(X = X_pruned, y = y, w = w) outliers = [] for i in range(X_pruned.shape[0]): if np.absolute(X_pruned[i] @ w - y[i]) > 10: outliers.append(i) # Try to eliminate irreducible error X_pruned = np.delete(X_pruned, outliers, 0) y = np.delete(y, outliers, 0) w = train(X = X_pruned, y = y, w = w) print('\nFinal loss on full training dataset: {}'.format(eval_loss(X_pruned, y, w))) Review Compare the Steps of machine learning section with each code snippets below and rethink the whole flow, you may have an overview about machine learning now 👍 . Going further Enjoy the References and resources Try assignments in the referred book and courses References and resources Book: Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (try it free by your Microsoft account) Average rating 9.9 on Douban Book (till 11/24/2020) Errata Courses: Machine Learning 2020, Hung-yi Lee Machine Learning Crash Course, Google Desserts: Two Minute Papers

2020/11/24
articleCard.readMore

三星Note9与米10Pro拍照对比

在正文开始前,请允许我碎碎念一下。 我从小喜欢数码产品,各种拆解、修复,初中开始靠使电烙铁拿奖中考加分… 一直以来身边人购置数码产品或者遇到问题都会咨询我,但我好像越长大越懒得折腾这些东西,热情逐渐被岁月磨灭(?)。难得有兴趣在换手机时做个简短的对比评测,就借此机会多写一点吧。 我的玩机历史 我从高中开始放飞自我,因为囊中羞涩主要倒腾各种二手手机,在此之前只玩过小灵通和MOTO V3(向永恒的Razor系列致敬!)。那会正是诺基亚如日中天的时候,Symbian S40/S60v3平台的手机相对保值,也就蹭同学的手机玩,在二手市场中没有性价比可言。我则从Sony(黑白机)、Sony Ericsson(自研系统和Symbian OS)、MOTO(自研Linux系统和Windows Phone)、三星(自研系统、Symbian OS 和 Windows Phone)、HP(Windows Phone)到多普达以及 HTC 贴各种运营商牌的Windows Phone,各种体验、刷机、维修和转卖,度过了高中三年时光。这些手机便宜,但绝大多数内置强大的操作系统,更具体讲可以安装各种应用软件,在还是GPRS网络和Java小游戏的年代已经具备一定的可玩性。 记得高三那年 iPhone 3GS发布,当时还觉得平平无奇,就是贵。而初次见到HTC Hero G3被鲜艳的大屏和UI震撼到了,开始入坑Android。大学时主要有两台神机令我印象深刻,持有时间最长。 第一部是MOTO Defy,简直是当时的性价比之王,两千元左右的价格配置全面,陪我度过了两年的时光。还记得那时候就开始玩Real Racing 3,没想到这款游戏在近10年后的今天仍然占据着Android热门赛车游戏的一席之地,还被EA收购了。 第二部则是LG G2,这部手机是当时全球最窄边框的智能手机,外观在今天看来仍不过时,非常的“现代化”。除此之外,性能不必多说,还有两大卖点。一是LCD的屏幕出自自家LG Display,是全球最好的LCD屏幕没有之一,iPhone也用的它家屏幕,这和我后来选三星类似。另一卖点则是用上了OIS光学防抖的摄像头,这个配置如今司空见惯,但在当年真是鹤立鸡群的技术,拍照素质自然秒杀其他手机一截。这也是我第一次玩韩版机,到三星时代因为指纹支付问题以及蛋疼的系统已经不再碰它们了。 随后就有点平淡无奇,不爱折腾了,就开始保持品牌忠诚度。我选手机的标准很明确,当下旗舰机保证基本门槛,在此基础上依照拍照、屏幕、 续航、扬声器、是否支持无线充电(从S7E尝到甜头开始)、是否支持IP68防尘防水(依然是从S7E开始提高要求)为顺序做挑选。实际的换机轨迹在G2之后是G Pro 2、G3和G4,直到G4出现大面积主板故障,同时三星的双相位对角、曲面屏开始惊艳市场后,入坑S7E、S8+和Note9。 关于米10 Pro 去年差点入坑1+7 Pro,不过之前玩过二手的1+3T对拍照表现不太满意,以及看过1+7 Pro的各种评测,觉得不少细节还是差点意思(如在2019年仍不支持无线充电),于是放弃。直到今年初,三星的系统“负优化”在玩30帧“王者荣耀”时竟然会偶尔卡顿,续航也开始退化,决定换其他厂牌,考察一圈最终选择米10 Pro。 其实这个选择挺容易做的,MIUI的优化加各种顶配硬件不仅玩游戏体验远胜Note9,屏幕还是三星家的A货,双扬声器在每次B站评测中总能引来《全体起立》(毫不夸张讲是我到目前为止听过最棒的手机外放)的弹幕,以及今天要对比的DXO评分124分的拍照功能,基本上很难找到对手。说起来我对价格不算太敏感,也考虑过S20+甚至S20 Ultra,不过想到那个“慢吞吞”的One UI还是算了吧,S20 Ultra还被一众测评指出固件并不完善。 一开始抱着不好用就再卖掉的心态使了两天米10 Pro,结果它毫无悬念的在绝大多数方面体验完胜Note9,导致后者被我秒出。除了上述的优点外,米10 Pro的背面磨砂玻璃手感很不错,挖孔屏实际带来的干扰也比我想象中要小不少,果然是看习惯就好。而Note9还能胜过米10 Pro的地方有二: 系统更纯净,也就是大家吐槽已久的MIUI广告问题。确实通过各种设置可以关掉绝大多数MIUI上的广告,只是我不太理解把这些“狗屁膏药”贴在自己旗舰上真的能增加更多营收吗,要知道这一点劝退了不少人。而我个人认为这会培养消费者对小米品牌的负面认知,这些“狗皮膏药”始终让小米看起来不像真旗舰机。据说把系统改成英文就没这困扰了,um… 🙄 。 品控不太好。每年网上吐槽小米手机质量的声音不少,例如出名的断流问题。我对这些问题算是比较包容的态度,实际我手上这台也还没遇到断流等“硬伤”问题。不过我遇到了一个玩机这么多年头次见的小问题,屏幕边缘居然有黑胶,这会导致裸机状态下手感大打折扣。而我作为一个轻度强迫症患者,看到这个瑕疵也是不能忍,弄了半天却没法完全弄掉。还好戴套之后眼不见心不烦。 拍照对比总结 回归正题,DXO上米10 Pro的评分比三星Note9高了足足21分,那么实际成片效果是否如此,就用我五一前几天随手拍的一些样张作为对比吧。三星Note9的固件是4月最新的版本,已经用上Android 10,后续的OTA更新基本都是安全补丁,印象中没看到相机方面的优化;而米 10 Pro的固件是MIUI 11.0.16.0稳定版。 先说结论,拍照方面无论是成像素质还是拍摄场景的多面性,米10 Pro都毫无疑问比Note9强得多,照片文件大小前者是后者的一倍左右,而前者的超广角镜头和多倍混合光学变焦也是后者无法企及的。Note9唯一值得说道还是它的调色,暖色调、高饱和度、高对比度,某些场景下拍出的照片第一眼讨喜。此外米10 Pro偶尔会出现白平衡不准的情况,后面会有照片说明。 那么开始看照片吧。默认同一内容的两张照片Note9在前、米10 Pro在后,均使用默认配置项,大概也就是使用主摄像头、开启AI场景识别优化。我会基于过去玩单反(Pentax配三饼干)的经验简单评价照片,并选出我更喜欢的一边。这是一件非常主观的事,不过鄙人拍照的初衷就是记录生活、愉悦自己 :) 样张对比 公寓的走廊,很明显米 10 Pro 的主摄视角比 Note9 广一些。不过这种题材通常也不会有人关注细节,平手。 电梯里,弱光环境下米10 Pro的曝光第一眼更好看,细看文字都能看得清,差距不大,米10 Pro险胜。 工作日的餐厅和午餐。Note9 的调色显得食物更有食欲,但米 10 Pro这种更接近食物原本色彩的调色风格我觉得也不错,平手。 视角更广的米 10 Pro更有优势,同时明亮的调色观感比Note9更好,细节就不对比了没有悬念。米10 Pro胜。 杂乱的工位 😅 。平手。 办公室走廊,两者都支持HDR,不过米 10 Pro的宽容度更高,观感也更好,胜出。值得一提的是右侧边缘的文字Note9更为清晰。 书报架,这种文艺主题显然是Note9的主场,调色更讨喜,胜。 兰州拉面之红烧牛肉面,超好吃。这一次我反而觉得Note9的高饱和、高对比不如米10 Pro的成片看起来更舒服,嗯就是很主观的评价,米10 Pro险胜。 在此期间把 Roland Micro Cube GX音箱给卖了,因为有了这个小箱子——过年前在香港买的Boss Katana Mini。米10 Pro的视角更有优势,同时也把音箱外壳材质的纹理拍得明显更清晰,胜。 最近油价大跌,加油站除了降价外又开始搞加油满¥200送机洗的活动。随手来一张,平局。 到了本文老大哥Note9的高光时刻,完胜米10 Pro的一颗柠檬,色泽完美,而后者的白平衡居然完全跑偏… 看来提前下载Snapseed是个明智的决定。下图只调了白平衡参数,基本就是肉眼所见的柠檬外观,不过还是没有Note9的那张看起来诱人 😂。 切柠檬是为了配干邑,作为一个业余爱好者,我毫不掩饰地承认我都用可乐搭配,自己喜欢最重要!这里Note9的深色调反而没有米10 Pro的看起来可口,后者胜。 和同事去泡汤、写代码、打桌游,这家会所无论地理位置还是装潢水平在苏州都数一数二。Note9的照片涂抹感有点严重,这点也经常被各大数码评测节目提到。很明显米10 Pro拍出来的泳池更为清澈好看,也更接近真实观感,胜出。 米10 Pro的宽容度同时保留了高光和暗部细节,完胜。 Note9的色调更温馨一点,米10 Pro的视角加分,平手。 我更喜欢Note9的调色,更显豪华感,高光的压制也不输小老弟,胜。 又是调色和视角的各有所长,平手。 朋友一直推荐这家的炒牛河好吃,确实不错!我更喜欢米10 Pro的炒蛋颜色,前者有点酱油放多了的感觉… 米10 Pro险胜吧。 Splendor真的超级好玩!之前听朋友们说过几次,这次初次上手就赢了他们,嘿嘿 😝。没人会在意画质吧,平手。 尽管Note9还是有涂抹的痕迹,但成片更显环境高级感,米10 Pro有点偏冷了,前者险胜。 米10 Pro的高光处理更出色,整体色彩也更讨喜,胜。 这张照片里Note9还是会有酱油放多、画面过于浓郁的问题,米10 Pro上那根葱、还有上方冒着热气模糊的感觉更讨喜,后者胜。 虽然米10 Pro的细节更多,但炫光问题令人捉急,Note9胜。 苏州除了是大家传统印象中的旅游城市外,其实更是一座工厂城市,大大小小的工厂散落苏州的各个区、市。这些工厂托起了中国的实体经济,而每年来自全国各地的年轻人被输送到这些厂里做工,每月做六休一、算上各种加班费也只能赚几千块钱,他们才是绝大多数“后浪”。我不喜欢Note9的色彩,仿佛在看“旧照片”,后者胜。 我的爱琴。面向朋友圈拍照肯定是Note9胜,第一眼太讨喜,不过吉他还是值得放大看细节的,这时候米10 Pro就扳回一城。平手。 总的来说米10 Pro拍照能力在Note9之上,符合我的预期,能让我将Note9安心出掉,也算是不负小米想打进高端价位市场的初心。配合一众出色的硬件和成熟的MIUI优化,不愧是今年的“真香机”! 希望小米的股价也能快点涨起来,不要坐实了“年轻人第一支被套牢的股票”之名😂 —— 来自一位在结尾突然想起自己是小米股东的年轻人 Orz

2020/5/4
articleCard.readMore