Django community: Community blog posts RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Django and IPython Notebook
Django and IPython Notebook -
Creating a re-usable Django app - Part 1
Hi everyone and welcome back for this next tutorial of the Babbler series. This tutorial will cover 2 ways of creating a re-usable Django app. The first and simplest one is apps for flexible and personal re-use. The second one is a somewhat less simple way of doing it but which allows re-distribution of your application and that can be a very good thing too! For the first part of this tutorial we will be using the custom user model, built during the previous tutorial, as a starting point. The second part will be using the theme application built during the Using your own flavour of bootstrap with django tutorial. -
Django Templating Language - Part I
Hey guys! I know I haven't posted anything in a very long time. Exigent circumstances. Anyway, now I'm back with what may well be the most important skill in your entire Django toolkit. The templating language that Django ships makes writing pages that display multiple results mundanely easy.In this part I'll only introduce you to templates. We'll see how to render them in the next one.Variables:We all know what variables are and how important they are for programming. This is how variables are represented in Django:{{ variable_name }}It can also be written as {{variable_name}} but the former is more readable. Let's see how to 'declare' a variable in an HTML script:<h1>{{ heading }}</h1><form action = "/foo/" method = "post"> <input type = "text" name = "bar" placeholder = "{{ placeholder }}"></form>Notice the difference? {{ heading }} is without quotes and {{ placeholder }} is with. The basic concept is you write the name of the variable exactly as you would write normal text. While writing normal text, you would not put quotes between the <h1>...</h1> tags but would in the <input> tag.Right now if you just write this much code it'll print all raw data. There is no use ... -
Chaussette and Circus as a new way to deploy your Django applications
Many Python web applications run on production with the help of gunicorn or uwsgi. There are however other solutions that may turn out to be even better than the currently popular solutions. One of alternatives is chaussette and circus. Chaussette is a WSGI server that can serve WSGI applications like your Django project. Circus is an application to control and monitor processes and sockets. It can manage chaussette, celery or other sockets and processes making it a manager of all project services. -
What's New With WhisperGifts
It's been a busy few months for WhisperGifts, my bridal gift registry service built with Django. This post rounds up a few recent additions and changes, including technical details for those who want to do something similar. Highlights include weather forecasting, REST APIs, and JavaScript bookmarklets. -
What's New With WhisperGifts
It's been a busy few months for WhisperGifts, my bridal gift registry service built with Django. This post rounds up a few recent additions and changes, including technical details for those who want to do something similar. Highlights include weather forecasting, REST APIs, and JavaScript bookmarklets. -
IP Street is hiring! Senior Developer (Python, Django)
Overview Founded in 2010, IP Street has built the world’s preeminent Intellectual Property(IP) analytics and visualization engine, in conjunction with a nationally recognized IP law firm. Our SaaS product helps corporations and financial analysts quickly and efficiently analyze IP information. We make IP data easy to get, use, and understand! As with any organization, we’ve continued to evaluate new ways to provide value to our clients. We’re evolving into a “SaaS+” model, which pairs our service with expert consultation to assist our clients in assessment and evaluation. Our focus remains on the financial and technology markets. Our technology stack is almost all open-source, with some nifty esoteric search technologies. Most of your work will be in Python and Django, in a Mac-based development environment, deploying to Linux. Other technologies include Postgres, Redis, and Solr. Our client-side code relies on Highcharts and Backbone. This is a “small b” big data firm. But since we’re a scrappy start-up, we don’t have a big firm’s resources. We compensate by hiring senior people who are self-directed, appreciate real-world development trade-offs, and have a can-do attitude. It’s OK to not know something if you’re eager and willing to learn it. We know that bad code ... -
Django Extensions 1.3.11
We are happy to release: Django-Extensions Version 1.3.11 This brings the usual tons of fixes and improvements Get it at: https://pypi.python.org/pypi/django-extensions/1.3.11 Changes: Improvement: sqldiff, show differences for not managed tables Improvement: show_urls -f aligned, 3 spaces between columns Improvement: reset_db, support mysql options files in reset_db Fix: sqldiff, Fixed bug with --output_text option and notnull-differ text Fix: reset_db, Fix for PostgreSQL databases with dashes, dots, etc in the name Fix: dumpscript, AttributeError for datefields that are None Docs: Adding RUNSERVERPLUS_SERVER_ADDRESS_PORT to docs -
Related ManyToManyField in Django admin site
Hello everyone. There is something quite common people are trying to do in Django which is accessing a ManyToMany relationship from both ends in Django admin. Since this is something I am going to have to explain to someone tomorow, I thought I'd take the opportunity to write a short tutorial about it. -
Updated repository for the Babbler series
Hi everyone. This is just a short post to let you know that we have updated the repository for the Babbler tutorial series. Instead of using a different repository for each tutorial, we will now be using a single repository accessible from here. Each tutorial has its own branch and tags mark the start and end of each tutorial part. We have also uploaded the code for the last tutorial (Creating a custom user model in Django 1.6) since it was missing. Some time next week we will publish the next tutorial in the series: Creating re-useable apps. In the mean time: happy coding everyone -
My Talk "Django at scale" at Django London Meetup
On Tuesday I gave a talk on Django at the London Django Meetup Group, titled "Django at Scale." Here are my slides: Here are a few brief summaries of topics I covered, which I hope to cover in more depth with a blog post on each in the future: 1. Wrap Django's Classes For Your Project Sub-classing django's base classes, e.g. the Admin classes as in for, allows you to make whole codebase changes easily. It's not that much effort to implement and allows you to solve many problems easily. It's also an argument for class-based views. I've give a complete example of doing this in my post on extending querysets and the admin to return approximate counts. 2. Background-fill Your Cache The most common cache pattern for django is to test if the item is in the cache, and if it's not there, to run the slow function to generate it. Often this is a user dependent variable, e.g. the count of all the comments they've made. When you expand to a certain scale though, you're sure to see a user for whom this slow function takes just way too long no matter what. You can notice this by ... -
My Talk "Django at scale" at Django London Meetup
On Tuesday I gave a talk on Django at the London Django Meetup Group, titled "Django at Scale." Here are my slides: Here are a few brief summaries of topics I covered, which I hope to cover in more depth with a blog post on each in the future: 1. Wrap Django's Classes For Your Project Sub-classing django's base classes, e.g. the Admin classes as in for, allows you to make whole codebase changes easily. It's not that much effort to implement and allows you to solve many problems easily. It's also an argument for class-based views. I've give a complete example of doing this in my post on extending querysets and the admin to return approximate counts. 2. Background-fill Your Cache The most common cache pattern for django is to test if the item is in the cache, and if it's not there, to run the slow function to generate it. Often this is a user dependent variable, e.g. the count of all the comments they've made. When you expand to a certain scale though, you're sure to see a user for whom this slow function takes just way too long no matter what. You can notice this by ... -
My Talk "Django at scale" at Django London Meetup
On Tuesday I gave a talk on Django at the London Django Meetup Group, titled “Django at Scale.” Here are my slides: Here are a few brief summaries of topics I covered, which I hope to cover in more depth with a blog post on each in the future: 1. Wrap Django’s Classes For Your Project Sub-classing django’s base classes, e.g. the Admin classes as in for, allows you to make whole codebase changes easily. It’s not that much effort to implement and allows you to solve many problems easily. It’s also an argument for class-based views. I’ve give a complete example of doing this in my post on extending querysets and the admin to return approximate counts. 2. Background-fill Your Cache The most common cache pattern for django is to test if the item is in the cache, and if it’s not there, to run the slow function to generate it. Often this is a user dependent variable, e.g. the count of all the comments they’ve made. When you expand to a certain scale though, you’re sure to see a user for whom this slow function takes just way too long no matter what. You can notice this by ... -
DjangoCon 2014 Ticket Giveaway
Caktus is giving away a DjangoCon ticket valued at $850. DjangoCon is the main US Django conference and it’s returning to Portland this year, August 30 - September 4th. Meet fellow Django developers, learn what others are doing, and have a good time! To enter the giveaway, (1) follow us @caktusgroupand and (2) retweet our message by clicking the button below: Tweet The giveaway will end Wednesday, August 20th at 9AM PDT. We’ll randomly select a name and alert the winner by 5PM PDT. Please note that only one entry per individual is allowed and winning tickets are non-transferable. We hope to see you at DjangoCon this year! -
Hola, Argentina!
I'll be arriving in Argentina on August 14th. I'll be speaking at PyDay Mendoza on August 15th, and sprinting on August 16th on something Audrey and I named the "new library sprint" (more details to come). On August 22nd, I'll be speaking at the combined Buenos Aires Python, Django, and PyLadies Argentina meetup. Between the events I'll be working from the Eventbrite/Eventioz Argentina office. I'm extremely excited. I've wanted to go to Argentina for years. It's a beautiful country filled with magnificent culture, lovely architecture, great food, superb wine, and wonderful people. Speaking of which, I can't wait to finally put faces to people I've gotten to know over the internet. Hasta pronto! -
Hola, Argentina!
I'll be arriving in Argentina on August 14th. I'll be speaking at PyDay Mendoza on August 15th, and sprinting on August 16th on something Audrey and I named the "new library sprint" (more details to come). On August 22nd, I'll be speaking at the combined Buenos Aires Python, Django, and PyLadies Argentina meetup. Between the events I'll be working from the _Eventbrite / _Eventioz Argentina office. I'm extremely excited. I've wanted to go to Argentina for years. It's a beautiful country filled with magnificent culture, lovely architecture, great food, superb wine, and wonderful people. Speaking of which, I can't wait to finally put faces to people I've gotten to know over the internet. Hasta pronto! -
Starting with django-allauth
There are a lot of ways to do authentication in django. You can do social authentication and/or django.contrib.auth authentication. Generally they are separate, but with django-allauth you can combine them both into one package. It even gives you a great jumping off place with plenty of other features. In this video learn how to start using django-allauth.Watch Now... -
Don't touch autocommit in Django
Great Sentry We have a sentry service running on our server. It’s built on the Django framework and helps us to monitor the logging messages. It works just like a charm. Disk out of usage However, after three months the service went online, suddenly our IT monitor system alerts that the disk is running out due to mysql, and the mysql is for sentry. 60G /var/lib/mysql/ibdata1 The ibdata1 continuously grows without purge. It contains huge MVCC data like UNDO_LOG, We have to dump/load the whole databases and set innodb_file_per_table to replace the big ibdata1 file. find the exception The dump is very slow, so I take a look at the data. I suprisely find the table sentry_message have 500M rows! most of them is like this - MySQLdb.connections in defaulterrorhandler DatabaseError: (1305, 'SAVEPOINT s47569297779632_x1 does not exist') episode And it’s for an invisible project - Sentry (Internal). What, invisible? Yes, because the our setup didn’t create a default superuser. Thanks mwaterfall, I use the following command to fix it. sentry --config=~/etc/sentry/sentry.conf.py repair --owner=mwaterfall show queries So back to the topic, where is the exception coming from? I open general log for mysql, and see the following 140806 11:01:32 2 Connect ... -
Dance my puppets
In many traditional multiplayer text engines for MUD/MUSH/MU*, the player connects to the game with an account name that also becomes their character's in-game name. When they log into the game they immediately "become" that character. If they want to play with another character, they need to create a new account.A single-login system is easy to implement but many code bases try to expand with some sort of "account system" where a single login "account" will allow you to manage one or more game characters. Matthew “Chaos” Sheahan beautifully argues for the benefits of an account system in the April issue of Imaginary Realities; you can read his article here.Evennia and account systemsFirst a brief show of how Evennia handles this. We use the following separation:Session(s) <-> Player <-> Objects/Characters(s)The Session object represents individual client connections to Evennia. The Player is our "account" object. It holds the password hash and your login name but has no in-game existence. Finally we have Objects, the most common being a subclass of Object we call Character. Objects exist in the game. They are "puppeted" by Sessions via the Player account. From this separation an account system follows naturally. Evennia also offers fully flexible ... -
OSCON 2014 & REST API Client Best Practices
Mark Lavin, Caktus Technical Director and author of the forthcoming Django LightWeight was recently at OSCON 2014 in Portland where he gave a talk on improving the relationship between server and client for REST APIs. OSCON, with over 3000 attendees, is one of the largest open source conferences around. I sat down with him to ask him about his time there. Welcome back! This was your second year speaking at OSCON. How did you enjoy it this year? I enjoyed it. There’s a variety of topics at OSCON. It’s cool to see what people do with open source—there’s such a large number of companies, technologies, and approaches to solutions. There were great conversations and presentations. I especially liked Ignite OSCON where people gave really well-prepared 5 minute talks. I participated in the OSCON 5k [Mark received 5th place] too. There were a lot of people out. We went over bridges and went up and down this spiral bridge twice. That race was pretty late for me but fun [began at 9pm PST, which is 12AM EST]. Why did you choose REST API client best practices as a talk topic? It was something that came out of working on Django LightWeight. ... -
Django Extensions 1.3.9
We are happy to release: Django-Extensions Version 1.3.9 This brings the usual tons of fixes and improvements Get it at: https://pypi.python.org/pypi/django-extensions/1.3.9 Changes: Feature: shell_plus, add --kernel option to start as standalone IPython kernel Feature: reset_db, Programatically determine PostGIS template Feature: sqldiff, add support for PointField and MultiPolygonField Test: renamed test app Fix: runserver_plus, --print-sql for Django 1.7 Fix: shell_plus, --print-sql for Django 1.7 Fix: show_urls, add support for functions that use functools.partial Fix: show_urls, add formatter for aligned output (will most likely become future default) Fix: shell_plus / notebook, support for Django 1.7 Docs: various fixes and improvements Cleanup: Remove work arounds for Django 0.96 and earlier -
如何利用 Powershell 同步本機磁碟與 Amazon S3 的檔案
转自: http://blog.miniasp.com/post/2014/07/21/Sync-folders-using-S3-Explorer-PowerShell-Snap-in.aspx 最近在協助客戶將 Amazon S3 上面的檔案遷移到 Windows Azure Storage,若要遷移這些存在 S3 上面的檔案,勢必要先把檔案下載回來,所以我今天打算分享一個不用錢的解決方案,讓你可以快速的同步本機與雲端上的檔案,你可以把本機磁碟中的檔案同步到 Amazon S3,也可以從 Amazon S3 同步檔案到本機磁碟中,已經同步過的檔案還會自動跳過,所以除了第一次同步外,日後每次同步檔案的速度都將非常快。 安裝 CloudBerry Explorer for Amazon S3 或 CloudBerry Explorer for Amazon S3 PRO 由於安裝了 CloudBerry Explorer for Amazon S3 之後,會連帶自動安裝 Powershell 的 CloudBerryLab.Explorer.PSSnapIn 管理單元,在這個管理單元中包含了一組可管理 Amazon S3 的 cmdlet 命令。 不過,有點要特別注意,CloudBerryLab.Explorer.PSSnapIn 僅支援 64 位元架構下,請記得要啟動 64-bit 的 Powershell 視窗,否則會無法在執行環境中加入這個 CloudBerryLab.Explorer.PSSnapIn 管理單元。我光是這點問題,卡了我好些時間,原因就在於我的電腦有安裝 Windows Azure PowerShell 套件,所以通常我如果要透過 PowerShell 管理 Windows Azure 資源的時候,都會透過這個捷徑啟動程式: 誰知道,原來這個捷徑指向的是 32-bit 的 PowerShell 環境! 請看看這個捷徑的內容,你會看到 SysWOW64 字樣,這就代表 PowerShell 是執行在 32-bit 環境下的。 如上圖目標的內容如下: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\ServiceManagement\Azure\Services\ShortcutStartup.ps1" 我做了些小調整,把 powershell.exe 的路徑改一下而已,如下指令碼: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\ServiceManagement\Azure\Services\ShortcutStartup.ps1" 使用 CloudBerryLab.Explorer.PSSnapIn 管理單元提供的命令 大致上的使用情境如下: 1. 加入 CloudBerryLab.Explorer.PSSnapIn 到當前的 PowerShell 執行環境中 (必要動作) Add-PSSnapin CloudBerryLab.Explorer.PSSnapIn 2. 列出所有 CloudBerryLab.Explorer.PSSnapIn 支援的命令 Get-Command | Where-Object {$_.PSSnapin.Name -eq "CloudBerryLab.Explorer.PSSnapIn"} 3. 先取得 S3 連線物件 $key = "YOUR_KEY" $secret = "YOUR_SECRET" $s3 = Get-CloudS3Connection -Key $key -Secret $secret -UseSSL 4. 設定要同步兩端檔案的來源與目的物件 設定來源物件 (假設我要從本機磁碟把某個目錄同步到 S3,可以用以下語法指定一個本機磁碟機) $src = Get-CloudFilesystemConnection | Select-CloudFolder "G:\TEMP" 設定目的物件 (假設我要從本機磁碟把某個目錄同步到 S3,可以用以下語法指定一個 Bucket 路徑) $dest = $s3 | Select-CloudFolder -path "your_bucket_name/vPath" 5. 將來源複製到目的 ( 這是直接從 $src 複製所有檔案到 $dest 喔,預設 Storage Class 為 STANDARD ) $src | Copy-CloudItem $dest -filter * 如果要指定複製上去的檔案預設的 Storage Class 為 RRS 的話,可以改用以下指令: $src | Copy-CloudItem $dest -filter * -StorageClass rrs 注意:使用 Copy-CloudItem 來複製檔案,並不會檢查檔案是否上傳過,所以僅適合用在第一次上傳或下載檔案的時候。 6. ... -
如何利用 AzCopy 同步本機磁碟與 Azure Blob Storage 檔案
转自: http://blog.miniasp.com/post/2014/07/23/AzCopy-sync-local-disk-and-azure-blob-storage-files.aspx 最近在協助客戶將 Amazon S3 上面的檔案遷移到 Windows Azure Storage (Blob),在我的前一篇文章已經提到如何便利的從 Amazon S3 同步到本機磁碟,今天我將分享如何透過微軟提供的免費工具 AzCopy 幫我們快速達成上傳、下載、同步等工作,也是一套兼具方便性與效能的檔案同步工具,同步檔案時,他一樣不會傳輸那些已經同步過且無異動的檔案,讓我們一起來看看如何使用吧! 當你安裝過 Windows Azure SDK 或命令列工具支援,就可以在程式集中找到 Windows Azure Storage command line 捷徑,透過這個捷徑可以開啟一個能讓你執行 AzCopy 指令的命令提示字元視窗。 你可以利用 where azcopy 命令找到該執行檔所在實際位置,執行 azcopy /? 可以看到完整使用說明: 找到 AzCopy 執行檔之後,使用方式真的是簡單到不能再簡單,一個最基本的用法,就是直接指定來源與目的即可自動完成檔案同步工作。以下幾個使用情境與相對應的指令供各位參考: 1. 將本地資料夾所有檔案(含子目錄)全部上傳到Azure Blob Storage,而且會判斷不要同步比 Azure Blob Storage 來舊的檔案,也就是如果 Azure Blob Storage 檔案有更新過時,不會複製檔案上去。 AzCopy G:\TEMP https://YOUR_URL/CONTAINER/vPath /DestKey:KEY /S /XO /Z 上述指令,藍字部份都是你要修改的,而 /DestKey 代表的是你目的端的 Storage Account 的存取金鑰。 /S 代表複製所有指定目錄與其所有子目錄的所有檔案 /XO 代表當你從來源複製到目的時,排除那些比目的端舊的檔案 ( Exclude Older ) /Z 讓你本次的同步工作進入所謂 Restartable mode,他會記錄同步檔案的過程,並寫入一個 AzCopy.log 暫存檔案中,當你同步過程發生網路問題,下次執行相同的指令會自動在上次執行到一半的地方開始同步檔案! 2. 將 Azure Blob Stroage 上面的檔案全部下載回來 以下指令跟上述指令的差別,僅把來源與目的交換,然後把 /DestKey 換成 /SourceKey 而已。 AzCopy https://YOUR_URL/CONTAINER/vPath G:\TEMP /SourceKey:KEY /S /XO /Z 3. 利用 AzCopy 在兩個不同的 Storage 儲存帳戶搬移檔案 這部分基本上還算簡單,就是你的來源與目的都是 BLOB_URL 而已,但有些額外的參數可以了解,詳細資訊可參考 AzCopy – Using Cross Account Copy Blob 這篇文章。 -
在 Raspberry Pi 上安裝 mongodb
編繹安装的話,要很久,所以找到了一個 binary zip 來安裝。解開 zip 後,要用 root 執行下面這些指令,然後,就可以用了。 adduser --firstuid 100 --ingroup nogroup --shell /etc/false --disabled-password --gecos "" --no-create-home mongodb cp -R mongodb-rpi/mongo /opt chmod +x /opt/mongo/bin/* mkdir /var/log/mongodb chown mongodb:nogroup /var/log/mongodb mkdir /var/lib/mongodb chown mongodb:nogroup /var/lib/mongodb cp mongodb-rpi/debian/init.d /etc/init.d/mongod cp mongodb-rpi/debian/mongodb.conf /etc/ ln -s /opt/mongo/bin/mongod /usr/bin/mongod chmod u+x /etc/init.d/mongod update-rc.d mongod defaults /etc/init.d/mongod start -
移动应用被苹果官方推荐的秘密
转自: http://www.williamlong.info/archives/3927.html 对于中小应用开发团队来说,技术已经不是再是瓶颈,最困难的部分是如何让大家知道自己。如果应用能被苹果官方推荐,那么就会产生巨大的收益,瞬间积累几十万用户不在话下,可以说是最具效果和性价比的推广方式。作为一个仅有一年多app开发经验的团队,我们两款产品均被苹果推荐,在业界很少见,很多朋友问我如何做到的,被问得多了,我觉得有责任和义务写一篇文章,来分享下我所知道的如何获得苹果推荐。 首先说一下我们两款产品被推荐的过程(非常平淡,慎入) 2012年在我们提交第一个产品后,收到了一封来自@apple.com的邮件,邮件的内容是苹果觉得我们的产品很有意思,想要进行推荐,需要我们提供一系列的宣传素材(主要是页首海报)和产品计划表。作为刚开始做app还在跑线下宣传的屌丝,根本不知道被推荐的意义,所以虽然认真准备并提交了,但并没有抱很大期望。没想到后来真的推荐了! 然后服务器真的爆了!我们这才明白这个推荐的价值,而且一旦被推荐后会进入一个推荐候选的名单,苹果会持续的进行推荐。在这个过程中,我们与当初联系我们的联络人一直保持着联系,update我们的进展,且对遇到的问题进行反馈,邮件发了好几个月,但一直没有见面,(要见一面非常非常难)后来,几经波折,终于见到了传说中的帅哥@apple.com.本来想好要拉拉关系,扯扯家常,后来发现对方真的是非常认真的人,见了面一直在谈工作和对我们产品的建议,解释问题。再后来到第二个产品的时候,我们也主动发我们的产品资料给他,并根据他的反馈进行了一些改进,最终获得了推荐,由于之前的经验,这次服务器没有爆。:) 苹果团队的工作人员一直非常nice,整个过程也顺利得让我们想感谢老天爷。事后我们对苹果推荐产品的标准做了一些总结,要知道帅哥联络人的表情很和蔼,内心要求可是很高的,以下就是我们总结的苹果的六个“秘密”心理: 秘密一,别想拿钱套近乎。有人听到我们的应用上榜了,第一反应是问我们花了多少钱?面对这种问题,我们只能感叹要是能花钱我们肯定也花不起这个钱,当初到处去贴小广告就是因为没有预算做更好的推广啊!后来我们才知道,苹果商店的编辑团队是真正的高富帅,根本不差土豪产品的那些钱,他们要找真正优秀的产品,所以千万别指望用钱套近乎。为了实现公平公正的原则,苹果商店创建了非常合理的组织结构。全球分为几十个商店,每个商店都有自己的编辑团队,而编辑团队类似一个黑盒子,一般是接触不到的,有点像黑衣人的感觉,苹果给了这些编辑绝对的自由可以选择自己喜欢的应用。但是我们可以通过一层关系找到这些编辑,就是之前提到的联络人,官方职位叫开发者关系,他们像是连接编辑和开发者的桥梁。 秘密二,不是最新的我不要。既然说到优秀的产品,就不得不提这优秀的第一个标准,那就是概念一定要新鲜。这个其实没什么好说的,二十一世纪最贵的就是创意,不管是商业模式还是产品本身的创意可能都能起到决定性的作用。我们第一款产品上榜的时候,市场上并没有类似的应用;这款应用上线的时候,模式已经不新鲜了,但是我们可以自信地说产品里漂亮的界面、清新的画风和大量的素材还是独一无二的。 秘密三,你能为手机用户带来什么?苹果在商店首页做推荐,千万不要幼稚地以为是发善心帮你推广产品,人家的首要任务是为了推广自己的商店,所以你的产品要能给用户带来好的体验,能够实实在在地帮苹果商店留住用户,获得好评。我每周都关注苹果商店推荐,发现工具、效率和运动类的应用每期都会获得推荐,且上榜量远远大于游戏,我想这就是苹果的理念在起作用,他们推荐的应用,其目标是为了让人们的生活更丰富多彩、更高效、更健康,总的来说就是让人们生活的更美好。被推荐的都是为了让人们更好的去创造,这是非常重要的一点。 秘密四,请体现苹果的气质。如果前面大家觉得我说的都在扯淡,那可以从这里开始请认真看,我要开始认真的说了。关于设计,其重要性应该已经形成共识,但是,既然我们在谈如何被苹果推荐,那么这里说的设计风格主要指的是苹果的风格。尤其重要的是,苹果非常喜欢能够跟得上他们的系统迭代的产品。记得IOS7刚出来的时候,他们专门推了一个IOS7风格应用的推荐主题,这是最明显的引导。从Icon设计到内部界面都应该认真对待,试想如果没有达到苹果的水平或者风格差异过大,应用放在App Store上是有损苹果的形象的。 秘密五,最喜欢surprise了。这一点实际是高质量的延伸,高大上的团队一般也喜欢高大上的应用。针对如何让应用显得高大上这个问题,我能给出的建议就是在细节处给用户或者编辑惊喜。一个漂亮的提示,精彩的跳转动画,搞笑的小动画和充满创意的loading都会让你的应用显得与众不同,甚至可以说是区别高质量应用和低质量应用的关键区别。 秘密六,世界的才是最好的。我们当时为产品做了一个英文版本,没想到正中苹果下怀。苹果倾向有多语言版本的应用,因为开发者关系在看到一个感兴趣的应用时,会向多个市场进行推荐,因此有多语言版本的应用,有更大机会获得推荐,这一条的操作请自觉配合前面五条,因为只有在做到前面五点的前提下,多语言版本才显得有意义,算一个加分项。 总的来说,做应用还是要做自己爱的应用,并且将自己的灵魂融入其中,这样才可能做出令人印象深刻的产品,也能让app脱颖而出。面对几百万的开发者,如何脱颖而出,已经不仅仅是一项技术活,而是专注、热情、韧性、天赋和运气的综合比拼。苹果商店是一个公平的舞台,这里只是分享下我的经历和小技巧,文章写的有点乱,最开始以为在写推广,后来发现在写产品。好吧,我承认这是有意而为(才怪),我认为最好的推广是把产品做好,所有资源就自动地会向你靠拢,如果为了迎合渠道而去做产品,可能会忘了初心,迷失方向,你说呢?